近年来,随着nodejs的突飞猛进,node项目数量增长迅猛,node项目完美的阐释了“开箱即用”的理念。小到创业公司,大到阿里这样的巨头,背后均有node的身影。
node项目基于Chrome的V8引擎,使用JavaScript(或者TypeScript)作为开发语言,本身就区别于传统的Java、PHP网站(当然,还有C#等等)。由于JavaScript的单线程、非阻塞等特性(如果不理解JavaScript的线程、进程特性,建议该充充电啦),非常适用于网站的建设(I/O密集型应用),不适用于CPU密集型应用。
那么,问题来啦!使用node启动的服务只能利用单核CPU(网上有大神做了多线程的模块,不在考虑范围),而我们现在大多数的服务器CPU核心数均不止一核,因此,需要我们手动的去做负载均衡。常见的有两种方式,1 手动根据CPU数量来启动子进程,并分配http请求, 2 启动多个node服务并监听同一端口,以竞争的方式来处理http请求。
以上是nodeman项目产生的背景,下面来介绍一下nodeman项目解决的痛点。既然node服务只用一核CPU,那么何不购买只有一核CPU的云服务器?每个服务器上部署一个node服务,集群的稳定性、健壮性以及之后的扩展均表现的非常优秀。此时,痛点来啦,如果我要更新服务器运行的代码版本,那么我就要手动的登录每个服务器,之后停止服务,pull代码,手动重启。更糟糕的是,如果我的服务器很多,在执行了一半的部署之后,发现这个版本有bug,Oh my god,回滚吧。
因此,nodeman出现啦,话不多说,先上图。
从图中可以看到,nodeman提供了以下十大功能:
-
自动嗅探服务器上的node服务,并添加管理
-
实时监测node服务和代理服务的状态(基于socket.io)
-
服务器的启停控制(支持批量操作)
-
Git部署
-
Git定时部署(通常我们升级版本应该在用户量低的时候升级,因此我们提供计划任务部署功能,可自行选择部署时间)
-
查看部署记录,并支持回滚操作
-
证书生成(使用letsencrypt生成免费的ssl证书)
-
证书部署(将生成的证书部署到node服务中,并重启服务)
-
证书每月自动更新并部署(letsencrypt免费证书的有效期限为三个月,因此,我们提供每月自动更新证书功能)
-
邮件发送(国内可选择短信发送,主要用于计划任务执行后的通知,例如证书每月生成结果,Git定时部署结果)
以上十大功能为nodeman主要解决的需求,接下来会逐一介绍各个功能,以及如何实现和实现中踩到的坑。
测试地址:http://nodeman.iricbing.cn:8080
账号:admin@restmesh.com
密码:123qwe