后台服务的核心就是能够安全、稳定地提供服务,避免出现服务异常导致无法提供服务的问题。
nodejs用途:
- 前端工程化应用
- 后端开发, BFF层
对比:
- PHP是多进程, 损耗服务器资源
- C++需要编译,影响开发效率
nodejs, 异步IO (异步事件驱动),支持高并发特性
**
后端服务的核心:
- 安全、稳定的提供服务
- 性能分析和优化
- 开发需要关注: 数据、数据流转、绘制UML类图或时序图
前端工程化 | 后端服务应用 | |
---|---|---|
运行环境 | 运行本地 | 运行远程服务器 |
受众用户 | 本地开发 | 真实用户 |
问题调试 | 简单调试 | 复杂,需要日志埋点 |
关注点 | 提高开发效率/质量 | 保证安全与稳定 |
- 性能:极致的接口相应
- 应用发布到远程服务器: devops工具
- 保证远程服务额安全与稳定: 进程管理工具PM2
- 监控服务情况: 监控、告警机制
- 运行问题, 远程日志打印、定位分析: 日志打印、跟踪染色
- 内存泄露、句柄泄露、进程异常退出
核心知识点
Node.js 作为后台可以提供哪些服务?
减少或者避免在 Node.js 主线程中被阻塞
可以拓展出一些业务复杂度高、业务迭代快的功能,或者一些通用性服务
(服务分类)架构设计规范:
- RESTful
- RPC
网关,
处理请求转发和一些通用的逻辑,例如我们常见的 Nginx;( Nginx 作为负载均衡转发层,负责负载分发)
业务网关,
处理业务相关的逻辑,比如一些通用的协议转化、通用的鉴权处理,以及其他统一的业务安全处理等;(前三个基于魂村来处理业务逻辑, 且大部分是网络I/O,不涉及CPU密集型逻辑)
- 鉴权
- 接口权限
- 频次控制
-
运营系统,
负责我们日常的运营活动或者运营系统;可以不涉及底层数据库的读写,而更多的是缓存数据的处理;如我们常见的一些投票活动、排行榜活动等
业务系统,
中台服务,
负责一些通用 App 类的服务,比如配置下发、消息系统及用户反馈系统等;
前端配置系统是在服务端根据客户端的版本、设备、地区和语言,下发不同的配置(JSON或者文件包);
- 反馈系统,即用户可以在任何平台,调用反馈接口,并将反馈内容写入队列,并落地到系统中进行综合分析;
- 推送系统用于管理消息的推送、用户红点和消息数的拉取,以及消息列表的管理;
- 系统工具用于处理用户端日志捞取、用户端信息调试上报、性能定位问题分析提取等。
要求服务端语言:
- 通用性必须好;
- 低 CPU 计算;
- 网络 I/O 高或者低都行;
- 并发高或者低都行
各类基础层,
这些就是比较单一的核心后台服务,例如用户模块,这就需要根据不同业务设计不同的核心底层服务;
数据类的服务
-
不适合场景:大内存和CPU 密集
图片处理,
比如图片的裁剪、图片的缩放,这些非常损耗 CPU 计算,应该用其他进程来处理;
大字符串、大数组类处理,
当涉及这些数据时,应该考虑如何通过切割来处理,或者在其他进程异步处理;
大文件读写处理,
有时会使用 Node.js 服务来处理 Excel,但是遇到 Excel 过大时,会导致 Node.js 内存溢出,因为 V8 内存上限是 1.4 G