# 自动化

## **发布过程**

**发布对网站都是头等大事，许多网站故障出在发布环节，网站工程师经常加班也是因为发布不顺利。**<mark style="color:blue;">**通过减少人为干预，使发布过程自动化可有效减少故障**</mark>。

* <mark style="color:blue;">**自动化代码管理**</mark>，代码版本控制、代码分支创建合并等过程自动化，开发工程师只要提交自己参与开发的产品代号，系统就会自动为其创建开发分支，后期会自动进行代码合并；
* <mark style="color:blue;">**自动化测试**</mark>，代码开发完成，提交测试后，系统自动将代码部署到测试环境，启动自动化测试用例进行测试，向相关人员发送测试报告，向系统反馈测试结果；
* <mark style="color:blue;">**自动化安全检测**</mark>，安全检测工具通过对代码进行静态安全扫描及部署到安全测试环境进行安全攻击测试，评估其安全性；
* 最后进行<mark style="color:blue;">**自动化部署**</mark>，将工程代码自动部署到线上生产环境。

## 运行过程

网站在**运行过程中**可能会遇到各种问题：服务器宕机、程序 Bug、存储空间不足、突然爆发的访问高峰。网站需要对线上生产环境进行<mark style="color:blue;">**自动化监控**</mark>，对服务器进行心跳检测，并监控其各项性能指标和应用程序的关键数据指标。

* 如果发现异常、超出预设的阈值，就进行<mark style="color:blue;">**自动化报警**</mark>，向相关人员发送报警信息，警告故障可能会发生。
* 在检测到故障发生后，系统会进行<mark style="color:blue;">**自动化失效转移**</mark>，**将失效的服务器从集群中隔离出去，不再处理系统中的应用请求。**
* 待故障消除后，系统进行<mark style="color:blue;">**自动化失效恢复**</mark>，重新启动服务，同步数据保证数据的一致性。
* 在网站遇到访问高峰，超出网站最大处理能力时，为了保证整个网站的安全可用，还会进行<mark style="color:blue;">**自动化降级**</mark>，通过拒绝部分请求及关闭部分不重要的服务将系统负载降至一个安全的水平，必要时，还需要<mark style="color:blue;">**自动化分配资源**</mark>，将空闲资源分配给重要的服务，扩大其部署规模。
