egg进阶
egg进程
egg进程了解过吗
- egg内置了egg-cluster进程,基于node的cluster模块
- 使用egg-cluster来启动Master进程,Master进程 有足够的稳定性,不再需要使用 pm2 等进程守护模块。
cluster模块
- 在服务器上同时启动多个进程。
- 每个进程可以同时监听一个端口
- cluster提供了master和worker进程
master: 进程管理,进程间消息转发
Agent: 后台运行工作(长连接客户端)
Worker: 执行业务代码
- 当 Worker 进程异常退出时,Master 进程会重启一个 Worker 进程
1、进程守护
Node.js 进程退出可以分为两类: 未捕获异常、(內存不足【OOM(Out of memory)】、系统异常)
egg有了守护进程,需要pm2吗
- egg本身有进程守护,官方也说不需要用pm2,但是egg不限制开发者使用pm2
- pm2的大部分功能是我们用不上的
pm2的好处
- PM2是node进程管理工具,可以利用它来简化很多node应用管理的繁琐任务,如性能监控、自动重启、负载均衡,进程管理
- 负载均衡
Master进程
- Master进程 : 进程管理,进程间消息转发, 稳定先高,不运行任何业务代码
在这个模型下,Master 进程承担了进程管理的工作(类似 pm2),不运行任何业务代码,我们只需要运行起一个 Master 进程它就会帮我们搞定所有的 Worker、Agent 进程的初始化以及重启等工作了。
Master 进程的稳定性是极高的,线上运行时我们只需要通过 egg-scripts 后台运行通过 egg.startCluster 启动的 Master 进程就可以了,不再需要使用 pm2 等进程守护模块
egg-scripts start --daemon
进程间通信
虽然每个 Worker 进程是相对独立的,但是它们之间始终还是需要通讯的,叫进程间通讯(IPC)
- 可以通过master进程进行消息转发
egg中间件使用方式
日志处理
- egg提供了日志的支持,egg-logger模块
主要特性:
- 日志分级
- 统一错误日志,所有 logger 中使用
.error()打印的ERROR级别日志都会打印到统一的错误日志文件中,便于追踪 - 启动日志和运行日志分离
- 自定义日志
- 多进程日志
- 自动切割日志
- 高性能