本周工作思考
这周排查了AI微课/AI字幕/Chatbot等三个大功能的相关问题,问题各不相同,因为一部分问题的原因还没有最终确定,问题原因先不做复盘总结,不过可以复盘下自己在排查过程中的反思和总结:
在排查过程,我发现自己对服务端很多解决问题的心智模型缺乏足够的理解,也不够丰富,比如在任务调度,微服务架构实践,Devops实操等存在不少知识盲区,所以后续一段时间一定要把这些内容快速补齐。
和AI相关的业务比较复杂,和非AI业务相比,AI业务多了一层AI异步任务及其调用,为了有效的解耦AI服务层和具体的业务层,中间增加了基于Go的Gateway层,AI服务层天然的具有服务自治要求(安全,性能,稳定性,成本构成,第三方服务隔离等等),服务扩展需求高,AI算法服务的独特性,服务部署灵活高等隐性的架构需求;当AI服务需要依赖其他非AI类基础服务时,比如用户,业务权限等,基于Go的Gateway层又是聚合层。用户端侧因为要整合不同的业务接口(包括AI类接口,其实在用户端侧无需区分是AI类接口还是非AI类接口),所以增加了对用户端友好的Nodejs层作为BFF层。BFF是Backend for Frontend,字面意思能够很好说明其在整个架构中的作用,接近前端的后端层,说它接近前端指说它转为前端提供服务,对前端足够友好。这里所说的前端是指Web,APP,微信小程序,钉钉/企微Hybird及小程序、客户服务对接层等,从这些前端的种类就可以得知,这一层的职责主要是适配,整合,路由等。用户端侧目前需要的服务调用方式有两类,1是Restful的http接口调用,2是websocket的长链接类的调用,但Nodejs层目前没有提供websocket类的调用能力,所以部分基于长链接的AI服务时通过Go层直接对外提供的。这里其实有两个重要的关于架构选型的上技术实践讨论,1是AI的gateway层为什么是Go而不是PHP,2是PHP层为什么不直接做BFF层。坦白说,要搞明白这两个架构问题非常之难,显然这些问题没有标准答案,甚至也没有参考答案,实际上我们在摸着石头过河,也就说我们在探索。脱离现实的业务和约束条件谈架构设计都是无意义的,实际上我们很难找到一个即懂AI及工程,又要懂PHP,又要懂GO,还要懂Nodejs,还必须理解我们的业务场景和既有的条件约束,更重要的是还要理解未来产品发展路径。所以当大家讨论这个问题,总是站在一个这样的位置:对某个或者某两个领域非常熟悉,对其他几个了解的基本情况下讨论这些问题,这样就会造成每个决策理由都很充分,但是整合起来的架构又不足以解决所有的需要被关注的关键问题,所以最好的方案是先关注优先级最高的关键问题,在迭代过程中不断丰富知识和总结经验,探索最佳方案,以解决所有的关键问题,这个其实很像寻路算法,在探寻中才能找到下一步,而且不管正确或者错误,必须前进一步。