38、现代DevOps管道的安全、测试与性能指标实践

现代DevOps管道的安全、测试与性能指标实践

1. 代码合并与生产部署

当在GitHub仓库中进行代码操作时,会触发GitHub Actions工作流。GitHub会生成一个拉取请求(Pull Request),将代码合并到生产(prod)分支,同时开发持续部署(Dev CD)工作流会按预期运行。以下是具体操作步骤:
1. 访问 https://github.com/<your_github_user>/mdo-environments/pulls 找到拉取请求。
2. 点击拉取请求,确认其准备好合并后,点击“Merge pull request”,此时更改将反映在prod分支上。
3. 访问 https://github.com/<your_user>/mdo-environments/actions ,会发现生产持续部署(Prod CD)工作流已被触发。该工作流会构建生产环境、部署应用程序并进行测试,且此集群启用了二进制授权。

为确认二进制授权正常工作,可进行如下检查:
1. 使用以下命令建立与生产集群的连接:

$ gcloud container clusters get-credentials \
mdo-cluster-prod --zone us-central1-a --project ${PROJECT_ID}
  1. 尝试使用nginx镜像部署一个Pod:
$ kubectl run nginx --image=nginx

此操作会失败,原因是指定了标签而不是sha256摘要。
3. 获取镜像摘要并设置为变量 DIGEST

$ DIGEST=$(docker pull nginx | grep Digest | awk {'print $2'})
  1. 使用摘要重新部署镜像:
$ kubectl run nginx --image=nginx@$DIGEST

这次部署仍会被拒绝,因为没有找到有效的签名证明,这证实了二进制授权正常工作,可防止部署未经认证的镜像,保障Kubernetes集群的安全。

2. 现代DevOps管道的安全和测试最佳实践
2.1 采用DevSecOps文化

在现代DevOps中,采用DevSecOps方法至关重要。要将安全融入组织文化,需促进开发、运营和安全团队之间的有效沟通与协作。员工应跨技能和提升技能,安全团队要学习编写代码和使用API,开发人员要理解安全并运用自动化。

2.2 建立访问控制

遵循最小权限原则(PoLP),只授予人员完成工作所需的权限。简化访问授予流程,减少不必要的权限申请。

2.3 实施左移策略

在软件开发的早期阶段就嵌入安全,安全专家要与开发人员密切合作,共同开发安全强化的设计和代码。

2.4 一致管理安全风险

接受不可避免的风险,制定标准操作程序(SOP)以应对攻击。在软件开发和基础设施管理的各个方面,如配置管理、访问控制、漏洞测试、代码审查和防火墙等,制定清晰易懂的安全策略和实践。

2.5 实施漏洞扫描

开源软件的使用日益广泛,但存在安全漏洞。漏洞扫描可发现第三方依赖中的漏洞,并在早期发出警报。

2.6 自动化安全

将安全嵌入CI/CD流程,通过代码分析、漏洞扫描、配置管理和基础设施扫描等自动化手段,只允许测试通过且安全的软件部署,降低软件开发和返工成本。

3. 现代测试方法的最佳实践
3.1 CI/CD管道内的测试自动化

全面自动化测试,涵盖单元测试、集成测试、功能测试、安全测试和性能测试等。创建隔离和可重现的测试环境,可使用容器化和虚拟化等方法。

3.2 有效管理测试数据

有效处理测试数据,确保其一致性和数据隐私。可利用数据生成工具创建相关数据集,处理敏感信息时考虑数据匿名化。

3.3 测试应用程序的各个方面
  • 持续集成(CI) :频繁合并代码并自动运行测试,确保代码库的稳定性。测试失败时及时处理。
  • 端到端测试 :使用自动化框架模拟真实用户交互,确保整个应用程序工作流按预期运行。
  • 负载测试 :评估应用程序在不同负载下的性能,了解其健壮性和容量。
  • 可扩展性测试 :确保系统能够处理增长,保障应用程序的长期健康。
3.4 实施混沌工程

通过受控实验引入混乱,评估系统的弹性,发现并解决潜在的系统弱点,使系统更可靠。

3.5 测试时监控和观察应用程序

设置强大的监控和可观测性工具,收集关键指标、日志和跟踪信息,全面了解应用程序的健康和性能。

3.6 生产环境中的有效测试

采用功能标志和金丝雀发布策略,在生产环境中安全地测试新功能。功能标志可在运行时启用或禁用特定功能,金丝雀发布将新功能逐步推送给小部分用户,同时进行持续监控,出现问题可及时回滚。

3.7 文档和知识共享

记录测试程序、测试用例和最佳实践,为团队成员提供参考,促进知识共享,提高团队的集体专业知识和问题解决能力。

4. 理解生产服务的关键性能指标(KPIs)
4.1 理解可靠性的重要性

软件开发和在生产环境中运行软件存在差异,许多在开发环境中未发现的问题会在生产环境中暴露。以零售银行应用程序为例,软件可靠性的重要性体现在以下几个方面:
| 重要性方面 | 具体描述 |
| ---- | ---- |
| 用户满意度 | 可靠的软件确保积极的用户体验,避免用户因软件故障而感到沮丧和失去信任。 |
| 商业声誉 | 软件故障会损害公司的声誉和品牌形象,导致客户流失。 |
| 财务影响 | 软件故障可能导致销售损失、客户支持费用增加,甚至法律责任。 |
| 竞争优势 | 可靠的软件能提供竞争优势,吸引和留住用户。 |
| 生产力和效率 | 可靠的软件有助于维持组织的生产力,减少资源浪费。 |
| 安全 | 可靠的软件通常更安全,可防止攻击者利用漏洞。 |
| 合规性 | 某些行业对软件可靠性有监管要求,不满足要求可能导致法律和财务处罚。 |
| 客户信任 | 软件可靠性是建立和维护客户信任的关键因素。 |
| 可维护性 | 可靠的软件更容易维护,减少因软件不可靠带来的修复和更新困难。 |
| 扩展和增长 | 随着软件使用量的增长,可靠性变得更加重要。 |

4.2 DevOps和SRE的转变

传统上,软件在生产环境中的运行和管理由运维(Ops)团队负责,开发(Dev)和Ops团队目标和优先级不同,常产生冲突。DevOps的出现改变了这种局面,谷歌提出的站点可靠性工程(SRE)体现了DevOps原则,鼓励共享所有权、使用共同工具和实践,从失败中学习以防止问题复发。理想的SRE团队成员应具备两个关键特征:对手动任务不感兴趣,寻求自动化机会;具备开发软件解决方案的技能,即使面对复杂挑战也能应对。SRE工作由具有强大软件专业知识的工程师承担,可减少对人工劳动的依赖。

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A(代码合并):::process --> B(触发GitHub Actions工作流):::process
    B --> C(生成拉取请求):::process
    C --> D(Dev CD工作流运行):::process
    D --> E(审查并合并代码到prod分支):::process
    E --> F(触发Prod CD工作流):::process
    F --> G(构建生产环境、部署应用、测试):::process
    G --> H(启用二进制授权):::process
    H --> I(确认二进制授权正常工作):::process
5. SLOs、SLAs和SLIs

在生产服务中,SLOs(服务级别目标)、SLAs(服务级别协议)和SLIs(服务级别指标)是衡量和管理服务可靠性的重要概念。
- SLIs :是对服务性能的具体量化指标,例如响应时间、错误率等。比如,一个Web应用的SLI可以是平均响应时间小于1秒。
- SLOs :基于SLIs设定的目标值,是服务提供商承诺要达到的服务水平。例如,规定Web应用的平均响应时间在95%的情况下小于1秒。
- SLAs :是服务提供商与客户之间的正式协议,明确了服务的质量和可靠性标准,以及未达到标准时的赔偿措施。如果服务未达到SLOs,可能触发SLAs中的赔偿条款。

三者的关系可以用以下流程图表示:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A(SLIs):::process --> B(SLOs):::process
    B --> C(SLAs):::process
6. 错误预算

错误预算是指在一定时间内允许的服务故障或未达到SLOs的程度。它是一种平衡创新和可靠性的机制。当错误预算用完时,需要暂停新功能的开发和部署,优先解决可靠性问题。例如,设定一个月内服务的错误率不能超过5%,这5%就是错误预算。如果在半个月内错误率已经达到5%,则需要停止新功能开发,专注于修复问题。

错误预算的管理步骤如下:
1. 定义SLOs和对应的错误预算。
2. 实时监控SLIs,计算已使用的错误预算。
3. 根据错误预算的使用情况,调整开发和部署计划。

7. 恢复时间目标(RPO)和恢复点目标(RTO)
  • RPO :是指在发生灾难或故障后,允许丢失的数据的最大时间范围。例如,RPO为1小时,表示在故障发生后,最多允许丢失1小时内的数据。
  • RTO :是指从发生灾难或故障到系统恢复正常运行的最大时间。例如,RTO为2小时,表示系统必须在故障发生后的2小时内恢复正常。

RPO和RTO的设定取决于业务对数据丢失和系统停机的容忍度。不同的业务场景可能有不同的RPO和RTO要求,如下表所示:
| 业务场景 | RPO | RTO |
| ---- | ---- | ---- |
| 在线支付系统 | 几分钟 | 几十分钟 |
| 电子邮件服务 | 几小时 | 几小时 |
| 企业内部文档管理系统 | 一天 | 一天 |

8. 运行分布式应用程序在生产环境

分布式应用程序在生产环境中的运行面临着诸多挑战,如网络延迟、节点故障等。为了确保分布式应用程序的可靠性和性能,需要采取以下措施:
- 负载均衡 :将请求均匀地分配到多个节点上,避免单个节点过载。
- 容错机制 :当某个节点出现故障时,能够自动切换到其他正常节点,保证服务的连续性。
- 监控和日志记录 :实时监控应用程序的性能和状态,记录详细的日志信息,以便及时发现和解决问题。
- 自动化部署和扩展 :能够根据负载情况自动部署新的节点或扩展现有节点的资源。

以下是一个简单的分布式应用程序运行架构图:

graph LR
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;

    A(客户端请求):::process --> B(负载均衡器):::process
    B --> C(节点1):::process
    B --> D(节点2):::process
    B --> E(节点3):::process
    C --> F(数据库):::process
    D --> F
    E --> F
    G(监控系统):::process --> C
    G --> D
    G --> E

通过理解和应用这些关键性能指标和策略,可以更好地管理生产环境中的应用程序,提高软件的可靠性和性能,为用户提供更优质的服务。同时,遵循现代DevOps管道的安全和测试最佳实践,能够确保整个开发和部署过程的安全性和高效性。

源码下载地址: https://pan.quark.cn/s/a4b39357ea24 Altium Designer 18是一款功能丰富的电子设计自动化工具,其集成了电路原理图绘制、PCB布局规划、三维视图展示、电路仿真分析以及生产文件生成等多项核心功能,为电子工程师们提供了一个全面的硬件设计解决方案。该软件的官方中文指导材料系统地阐述了从项目初始阶段到最终完成的全过程操作方法。 在“AD18 官方中文指导材料”中,使用者可以掌握以下核心内容要点: 1. **系统配置界面认知**:熟悉Altium Designer 18的工作平台,涵盖菜单选项、工具栏配置、工作区域安排,以及个性化工作界面的设定方法。 2. **项目创建流程**:掌握如何建立新的项目工程,包括工程参数配置、项目模板选取,以及项目文件的添加操作。 3. **电路图绘制技术**:学习电路原理图的绘制流程,包括元件库的维护管理、元件放置技巧、连接线路绘制、属性编辑操作,以及网络表的自动生成方法。 4. **元件库构建管理**:了解如何建立自定义元件库,执行元件的导入导出任务,以及利用Altium Designer自带的元件资源库。 5. **PCB布局设计方法**:掌握PCB设计的基本准则,如元件布局策略、布线技巧、层叠结构调整、布线规则优化,以及冲突检测短路处理技术。 6. **设计规范约束条件**:理解设定设计规范和电气约束条件的关键性,包括间距参数设定、焊盘尺寸规格、过孔尺寸要求等,以及运用规则检查进行设计验证的流程。 7. **三维模型整合应用**:学习如何将三维模型PCB设计内容相结合,以实现更为直观的机械配合验证。 8. **电路性能仿真技术**:掌握使用Altium Des...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值