框架对比
| 名称 | 底层框架 | 优点 | 缺点 |
|---|---|---|---|
| koa2 | express的进化版,async/await 语法,小而美 | 只提供基础的网络请求和中间件功能,其他功能需要搭配插件 | |
| nest | express或fastify | 基于Express.js的全功能框架,TypeScript,良好的类型提示,IoC、依赖注入、AOC,更新快,社区力量强 | 新的概念较多,写起来比较繁琐, 限制也很多 |
| egg.js | koa2 | 生成 web 框架的框架,约定大于配置,多进程启动,开发时的热更新 | 对ts的支持较弱,阿里的重心移交到midway上 |
| midway | egg.js、koa2、express | egg的TypeScript版,文档友好,支持注解,面向切面编程,阿里项目,可使用egg的生态 | 项目较新,社区力量不足 新的概念较多 |
| think.js | koa2 | 类似thinkphp的路由解析方式,TypeScript,360项目 |
开发和发布
| 前端 | 本地开发 | 1. 本地启动应用 2. 使用fiddler代理请求到本地 |
|---|---|---|
| 应用发布 | 1. 前端合并代码到功能分支 2. 通过前端发布系统发布 3. 获取页面 |
|
| 后端 | 本地开发 | 本地启动应用,在localhost进行开发 |
| 应用发布 | 前端页面和后端代码统一在一个代码仓库管理 1. 后端合并代码到功能分支 2. 前端提交页面到功能分支 3. 合并功能分支到主干 4. 将分支发布到测试环境或线上(可选择单独发布或一起发布) 1. 页面发布(后端发布系统) 2. 后端发布(微服务发布系统) 1. 构建docker 2. 发布镜像 |
回滚
- 找出综合提交记录和docker镜像的记录,找出合适的commitId
- 根据commitId来确定回滚的位置
后端的docker镜像和commitId相关联,可以根据commitId来统一前端页面和后端代码回滚的位置
| 前端 | 根据代码提交记录,回滚页面 |
|---|---|
| 后端 | 根据docker镜像的记录回滚 |
| 多机部署,平滑重启 | ||
|---|---|---|
| egg.js和midway提供优雅关闭的功能,会自动回收 worker 等进程,等待请求结束后才结束。 其他框架待调查 |
||
| 方案1 | 方案2 | |
| 概述 | 使用docker进行管理 1. 提供性能监控和日志插件 2. 已有可使用的发布平台 3. 可服务化 |
实现一套切换流量的方案 |
eggjs + docker 最佳实践
启动参数为
"scripts": {"start": "egg-scripts start --workers=1 --title=egg-server-some-server"}
docker-compose.yml大概是这样:
version: '3'services:some-server:image: node:10.16.0ports:- "7001"volumes:- /etc/localtime:/etc/localtime:ro- .:/usr/src/appworking_dir: /usr/src/appcommand: sh -c "npm run tsc && npm start"# 或者# command: npm startlogging:driver: json-fileoptions:max-file: '3'max-size: 10mrestart: always
主要就是不要后台启动就行了,其他没啥了,标准的Node服务。
