软件工程师SOP
SOP就是标准操作流程,类似的含义是最佳实践。掌握好SOP,可以让事情做的更对,更成熟而且快速。
单元测试改动 SOP
- 先要保证原来的代码以及单元测试是处于通过的状态
如果不这么做就直接写新的代码,新的测试,之后若出现单元测试通不过,会隐藏着一种原因,就是本来的测试就不工作,这样调试起来极其困难。
- 添加新的测试
这是一种测试驱动的原则,测试的代码就是一种需求规格。
默认新写的测试是一定会失败的
-
再做代码改动
-
调试单元测试,使得通过
-
调整所有修改的文件的代码风格,通过代码规范检查标准
-
验证所有的其他测试是否通过
Oncall SOP
Oncall先看责任,如果只是普通的oncall,那么大致SOP如下:
- 保证可以及时接受消息
保证手机通畅,接到电话后,马上打开电脑(要带在身边),第一时间查看。
- 第一时间判断问题的严重性,并回复
10分钟左右,给出自己的第一判断。
首先,查看是否出现过类似的问题。
如果没有,那么这个时候应该有一些文档来参考问题的严重程度。
- 查看系统的性能指标系统,程序运行错误系统
检查问题的严重性,以便进一步的回复
-
如果自己可以分析清楚,那么回复,并给出解决建议
-
如果自己不可以解决,第一时间升级到上一层oncall
做代码的重构
- 先了解哪些地方需要修改
可以使用AI(copilot或者Claude的agent模式)来问。
- 分析这些地方的先后次序
可以问AI。
-
和队友做确认
-
分别做改动
可以在改动后,问AI是否是正确的改动。
- 部署之前先部署到QA和SandBox环境详细测试
Web项目K8S部署结构
三个部分:
- 主程序
负责提供API,Web界面,以及HTTP请求。
其中往往一起部署: Nginx 代理容器 + Unicorn 应用容器。
Nginx 容器:
- 终止 SSL/TLS 连接
- 处理长连接(ELB 健康检查)
- 监听 443 端口
- 将请求转发到 localhost:11000
Unicorn 容器:
- 运行 Rails 应用
- 监听 11000 端口
- 处理实际的业务逻辑
外部请求 → Nginx (443) → Unicorn (11000) → Web应用(例如Rails应用)
Unicorn在整个部署中的核心作用:
- HTTP 服务器:将 HTTP 请求转换为 Rails 应用调用
- 进程管理器:管理多个 worker 进程,提供并发处理能力(注意,同一个请求只会被一个进程处理,worker的数量可设置为CPU核心的数量,因为执行的任务多为CPU密集型,且rails多线程效率低)
- 稳定性保障:进程隔离确保单个请求不会影响整个应用
- 资源优化:COW 内存共享,减少内存使用
- 运维友好:支持零停机重启和优雅关闭
主线程的副本数比其他的多,例如生产环境中部署30个副本。
- 工作线程Workers
不处理http请求,但是做后台的操作,例如读取数据库,处理消息队列等。
workers是默认24小时都在运行的。
- 定时任务CornJob
和Workers类似,但是是定时执行,例如每一天的2点执行。
- 如何选择机器大小
主程序往往是CPU密集型任务,所以,可以多配置CPU核心和内存,例如18核心,10GB的内存,30个副本;
工作线程Workers做数据库处理,所以,也要稍多的CPU核心和较多的内存,例如8核心,32GB的内存,8个副本;
定时任务CornJob做任务之后,机器就关机,所以,不需要太多CPU和内存,例如1核心,4GB内存,1个副本。
Web项目从零开发
- 一定要使用容器技术开发
例如使用docker开发,因为可以屏蔽本地环境的影响,例如在mac上开发,还是windows开发,
RVM的版本,Ruby的版本,Rails的版本可以保持一种隔离的控制。
- 开发环境和生产环境区别开来,整个项目使用一个镜像
开发环境就是把整个项目打包成一个镜像,然后可以修改,运行,测试。
生产环境就是把这个镜像里的一个具体的命令进行部署。整个项目使用一个镜像的好处就是,增加系统的稳定性,减少开发运维的复杂性,
保证所有的代码版本的一致,例如使用rails的某一些具体的gem,而且部署起来,可以缓存这样的镜像从而节省时间。
PS. 如果做的是超大项目,那么当然不使用一个镜像,例如出于安全考虑要有专门的gateway来减少代码的被攻击的面;
出于技术栈不同考虑,例如有些专门处理大数据的;出于资源需求不同考虑等。
工作浏览器使用的收藏文件夹
可以创建如下的文件夹来加强链接的管理
- 日志文件Logs
记录所有相关的日志平台的链接,以及要保存的日志链接。
- 设计文档
记录所有关于项目的设计文档
- 知识文档knowledge
记录所有关于项目的知识性的链接。
- 值班Oncall
(1)oncall的轮班表链接 (2)系统的健康面板链接 (3)oncall遇到的问题的链接
- 公司平台
记录公司的平台链接,自己的工资信息链接(方便交税),各种福利链接, 密码管理链接。
- 数据库DB
记录所有数据库的访问链接,文档链接,以及具体操作链接。
- 将要处理的列表TODO以及完成的列表DONE
两个文件夹,一个负责记录最近处理的所有链接,一个记录已经处理好的所有链接。