后台服务的核心就是能够安全、稳定地提供服务,避免出现服务异常导致无法提供服务的问题。

nodejs用途:

  • 前端工程化应用
  • 后端开发, BFF层

对比:

  • PHP是多进程, 损耗服务器资源
  • C++需要编译,影响开发效率

nodejs, 异步IO (异步事件驱动),支持高并发特性
**

后端服务的核心:

  1. 安全、稳定的提供服务
  2. 性能分析和优化
  3. 开发需要关注: 数据、数据流转、绘制UML类图或时序图
前端工程化 后端服务应用
运行环境 运行本地 运行远程服务器
受众用户 本地开发 真实用户
问题调试 简单调试 复杂,需要日志埋点
关注点 提高开发效率/质量 保证安全与稳定
  1. 性能:极致的接口相应
  2. 应用发布到远程服务器: devops工具
  3. 保证远程服务额安全与稳定: 进程管理工具PM2
  4. 监控服务情况: 监控、告警机制
  5. 运行问题, 远程日志打印、定位分析: 日志打印、跟踪染色
    1. 内存泄露、句柄泄露、进程异常退出

核心知识点

Node.js 作为后台可以提供哪些服务?

减少或者避免在 Node.js 主线程中被阻塞
可以拓展出一些业务复杂度高业务迭代快的功能,或者一些通用性服务

(服务分类)架构设计规范:

  • RESTful
  • RPC

image.png
每个模块主要的工作是什么:

网关,

处理请求转发和一些通用的逻辑,例如我们常见的 Nginx;( Nginx 作为负载均衡转发层,负责负载分发)

业务网关,

处理业务相关的逻辑,比如一些通用的协议转化、通用的鉴权处理,以及其他统一的业务安全处理等;(前三个基于魂村来处理业务逻辑, 且大部分是网络I/O,不涉及CPU密集型逻辑)

  • 鉴权
  • 接口权限
  • 频次控制
  • 过载保护

    运营系统,

    负责我们日常的运营活动或者运营系统;可以不涉及底层数据库的读写,而更多的是缓存数据的处理;如我们常见的一些投票活动、排行榜活动等
    image.png

    业务系统,

    负责我们核心的业务功能的系统;

    中台服务,

    负责一些通用 App 类的服务,比如配置下发、消息系统及用户反馈系统等;

  • 前端配置系统是在服务端根据客户端的版本、设备、地区和语言,下发不同的配置(JSON或者文件包);

  • 反馈系统,即用户可以在任何平台,调用反馈接口,并将反馈内容写入队列,并落地到系统中进行综合分析;
  • 推送系统用于管理消息的推送、用户红点和消息数的拉取,以及消息列表的管理;
  • 系统工具用于处理用户端日志捞取、用户端信息调试上报、性能定位问题分析提取等。

image.png
要求服务端语言:

  1. 通用性必须好;
  2. 低 CPU 计算;
  3. 网络 I/O 高或者低都行;
  4. 并发高或者低都行

各类基础层,

  • 这些就是比较单一的核心后台服务,例如用户模块,这就需要根据不同业务设计不同的核心底层服务;

    数据类的服务

  • 左侧的数据缓存和数据存储,则是相应的数据类的服务。

    不适合场景:大内存CPU 密集

    图片处理,

  • 比如图片的裁剪、图片的缩放,这些非常损耗 CPU 计算,应该用其他进程来处理;

    大字符串、大数组类处理,

  • 当涉及这些数据时,应该考虑如何通过切割来处理,或者在其他进程异步处理;

    大文件读写处理,

  • 有时会使用 Node.js 服务来处理 Excel,但是遇到 Excel 过大时,会导致 Node.js 内存溢出,因为 V8 内存上限是 1.4 G

应用分析

实践