跳到主要内容

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 等进程守护模块

text
egg-scripts start --daemon

进程间通信​

虽然每个 Worker 进程是相对独立的,但是它们之间始终还是需要通讯的,叫进程间通讯(IPC)

  • 可以通过master进程进行消息转发

egg中间件使用方式​

日志处理​

  • egg提供了日志的支持,egg-logger模块

主要特性:

  • 日志分级
  • 统一错误日志,所有 logger 中使用 .error() 打印的 ERROR 级别日志都会打印到统一的错误日志文件中,便于追踪
  • 启动日志和运行日志分离
  • 自定义日志
  • 多进程日志
  • 自动切割日志
  • 高性能