选型
语法可难可易,可根据团队的实际情况灵活选择。编码的三个阶段分为面向过程,面向对象,函数式编程
开发大型软件
基础条件包括: 测试,代码质量和规范,构建,代码生成,包管理
开发大型软件,生态包括:具备基础,云计算公司都支持,大厂都有大量的应用,生态完善(调优方面有node-clinic,alinode)
特定场景下的开发
写法上可难可易
可扩展为大型软件
可快可慢
稳定性,可用性
背景:异常如何处理,尤其高并发如何支持
全局捕获:进程的uncaughtException事件 可以避免大多数的问题(类似于前端里的window.onerror)
异常捕获,针对程序的捕获是基本规范,常规情况下,
对于同步的程序我们可以通过try/catch进行捕捉,但这个的成本比较高,因此我们更建议抛出准确的错误;
对于异步的程序,更建议使用promise,以及promise的错误处理方案
风险的预案,进程因为异常退出非常常见,因此重启变成了基本的方案,比较推荐的有forever
全局安装
崩溃时,使用
目前最新的方案是pm2
小集群:单服务器上的多个实例
背景,一般服务器都是多核的,所以可以有cluster模块用来解决多核并发的问题,可以多个机器上创建多个实例
类比,nginx的集群设计是一主多从,主机的端口通过复杂均衡算法把要求转发到slave机器。
pm2,可以创建多个实例,然后检测到崩溃之后自动重启,支持无缝重载,0s切换等,可以实现各种监控,部署等功能
大集群:多台机器
基本上,通过slb来做负载均衡,负载层把请求转发到负载中可用的节点服务器上(建议分发时增加head请求来判断这个节点是否是可用状态的)
单线程会死,是伪命题,大多数问题是因为用法不当导致的,可通过以下方法解决
单实例,增加捕获异常
单实例崩溃之后,使用forever或者pm2自动重启,可以继续服务
单机器多实例,多核集群
多台服务器做集群
服务器都崩溃了和应用无关,问题是运维要集中处理的
小结:nodejs本身应用并无大的问题,不同的只是其处理方式是不同的
一些基本认知
nodejs最初的优势是异步特性带来的性能优势,所以即使不做性能优化,本身也很好,后面各个语言都推进了相关的优化。所以目前node的优势,是性能和生态(大量的开源模块)的结合。
异步的基本选择:async 大于 promise 大于 callback 大于 co
基本的选型:从express到koa到egg ;异步流程控制从promise 到 async ;测试从mocha到ava ;数据库MongoDB
更好的实践
yarn的好处
本地缓存的性能更好
可并行的进行一些操作,加速了新模块的安装
使用了lockfile,使用确定的算法创建一个跨机器的一致文件
出于安全考虑,安装进程里不允许编写包的开发者执行其他代码
