用Node.js开发后端服务的程序员大部分偏前端的全栈工程师,他们中很多人对如何开发后端服务掌握的并不系统。
通常意义上来说,如果只是单纯的会用Node.js写一些很基础的服务,对原理性的东西一窍不通,这些人并不能称之为全栈工程师。
那我们今天就针对如何用Node.js开发后端服务讲几个要点。
服务框架的选择(推荐Nest.js)
Node.js相关的web服务框架有很多,如Express.js、Koa.js、egg.js、nest.js等,其中Express.js、Koa.js是偏基础的框架,egg.js、nest.js是企业级的开发框架。
当你的业务场景是偏简单型的时候,基础的框架开发起来更快,也更为简单。而当你的业务场景是复杂的企业级应用时,egg.js、nest.js肯定是你的第一选择,因为他们为你提供了各种企业级需要的依赖库和工具。
是否需要微服务架构
这一点很重要,当你用Node.js去开发很庞大的业务场景时,大服务平台一定会考虑拆分成很多微服务,以此来保持更快的持续发布,减少单个服务出现故障对整个系统的影响。
在选择微服务架构的场景下,我们需要充分考虑web框架对微服务架构的支持度。
服务发现与注册(推荐Consul)
在微服务场景下,A服务与B、C服务的调用并不是用IP进行的,而是通过统一的注册中心完成的。
这种情况下,微服务的动态上下线并不会影响其他服务的运行,更利于运维的部署和服务的快速调整,程序的健壮性也更强。
负载均衡
负载均衡顾名思义是对多个服务进行资源合理分配。通常境况下我们会有一层Nginx代理服务,在这一层我们也可以配置多个资源进行负载。
在Consul动态的发现与注册场景下,我们更推荐使用与Fabio进行搭配,实现服务的负载,Fabio可以自动识别Consul的注册服务,资源占用小且高效。
服务日志收集
时刻记录程序运行期间产生的访问、错误、超时等日志信息对我们后期的问题追踪至关重要,这一点一定要做好,因为在某些情况下它可以帮我们补救致命的问题。
日志框架有很多,这里就不推荐了。有条件的情况下,收集的日志最好打到可视化或分析型系统里面,这样更利于查看。
消息队列
如果你的服务是互联网应用,那么恭喜你,你极有可能面临高并发的情况。在这种情况下,开发的初期,我们就需要规划消息队列的削峰问题。
消息队列不是万能的,如果我们想用它解决高并发问题,我们在设计程序的时候需要通过缓存解决写入的滞后问题。
今天就写这么多了,你学到了么?