基础设施连续性与数据管理策略
1. 系统复杂性与测试挑战
随着系统变得越来越复杂,我们复制和准确测试代码在生产环境中行为的能力会逐渐减弱。在生产前,我们要清楚哪些可以测试、哪些不能测试,并通过提高对生产系统的可见性来降低风险。
2. 快速恢复实现连续性
2.1 减少变更失败率
- 限制变更的规模。
- 逐步进行变更。
- 在生产前对变更进行测试。
2.2 系统重建与数据连续性
系统由松耦合的组件组成,每个组件都定义为幂等代码。可以通过重新应用代码轻松修复、销毁和重建任何组件实例。但在重建组件时,需要确保其上托管数据的连续性。
2.3 自动重建与手动干预
- 某些情况下,平台或服务可以自动重建失败的基础设施,如基础设施平台或应用程序运行时在组件健康检查失败时进行重建,持续应用代码可自动纠正与代码的偏差,也可手动触发管道阶段重新应用代码到损坏的组件。
- 然而,有些故障场景可能无法自动修复,如计算实例出现故障但仍通过健康检查,或基础设施元素停止正常工作但仍符合代码定义,此时可能需要标记组件让自动化系统处理,或手动销毁组件让系统重建。
2.4 应急操作简化
对于需要人工干预的故障场景,应确保有易于执行的工具、脚本或其他机制,避免人工按顺序执行多个步骤,目标是在紧急情况下无需思考如何正确恢复系统。
3. 云计算发展对基础设施实践的影响
云计算早期,计算实例可靠性较低,如 AWS EC2 实例停止后无法再次启动。这种计算的临时性促使云用户采用新的实践来在不可靠的基础设施上运行可靠的服务,这也是基础设施即代码、混沌工程等云计算时代基础设施实践的起源。
4. 持续灾难恢复
4.1 传统与现代灾难恢复对比
传统的铁器时代基础设施管理方法将灾难恢复视为不寻常的事件,从静态硬件故障中恢复通常需要将工作负载转移到备用硬件上。许多组织很少测试恢复操作,认为团队在需要时能够解决问题。而持续灾难恢复利用与配置和更改基础设施相同的流程和工具,将灾难恢复视为正常操作的延伸,使恢复过程更加可靠。
4.2 云计算时代的可靠性假设
云计算时代的基础设施原则之一是假设系统不可靠,云供应商可能会因维护、安全补丁或升级等原因移动、销毁或替换虚拟机或其主机系统,因此需要随时准备替换服务器。
4.3 持续灾难恢复的优势
将灾难恢复作为日常操作的一部分,团队在进行基础设施代码更改和系统更新时会多次演练恢复过程和工具。如果脚本或其他代码的更改导致配置失败或数据丢失,通常会在管道测试阶段失败,从而可以快速修复。
5. 混沌工程
5.1 起源与概念
Netflix 是持续灾难恢复和云计算时代基础设施管理的先驱,其 Chaos Monkey 和 Simian Army 将持续灾难恢复的概念进一步发展,通过向生产系统注入错误来证明系统连续性机制的有效性,这演变成为混沌工程领域。
5.2 实践目的与方式
混沌工程并非不负责任地导致生产服务中断,而是对系统预期能够处理的特定故障场景进行实验。这些是重要的生产测试,旨在证明检测和恢复机制能够正常工作,当系统的某些更改产生影响这些机制的副作用时,能够快速获得反馈。
6. 故障规划
6.1 故障场景映射
团队可以举办故障场景映射研讨会,集思广益可能出现的故障类型,并规划缓解措施。可以创建每个场景的可能性和影响的映射,列出解决这些场景的行动清单,并将其适当优先排序到团队的工作积压中。
6.2 故障场景分析
对于任何给定的故障场景,需要探索以下几个方面:
|方面|描述|示例|
|----|----|----|
|原因与预防|哪些情况可能导致故障,以及如何降低其可能性|服务器磁盘空间在使用高峰时耗尽,可以通过分析磁盘使用模式并扩展磁盘大小来解决,也可以实施自动化机制来持续分析使用水平并进行预测,还可以在使用增加时自动调整磁盘容量|
|故障模式|故障发生时会发生什么,如何在无需人工干预的情况下减少后果|服务器磁盘空间耗尽时,应用程序可能接受交易但无法记录,可修改应用程序使其在无法记录到磁盘时停止接受交易|
|检测|如何检测故障的发生,如何更快地检测甚至提前检测|可以在应用程序崩溃且客户向 CEO 投诉时检测到磁盘空间耗尽,更好的做法是在应用程序崩溃时收到通知,最好是在磁盘空间不足时提前收到通知|
|纠正|需要采取哪些步骤从故障中恢复|某些场景下系统可能自动纠正,如销毁和重建无响应的应用程序实例;其他情况可能需要多个步骤来修复和重启服务|
6.3 深入分析与持续规划
如果系统自动处理了故障场景,如重启无响应的计算实例,还需要考虑更深层次的故障场景,如实例无响应的根本原因,以及如何检测和纠正潜在问题。故障规划是一个持续的过程,每当系统出现事件时,团队都应考虑是否有新的故障场景需要定义和规划。同时,应实施检查来验证故障场景,例如通过自动化测试或混沌实验来验证服务器磁盘空间耗尽时应用程序的行为。
7. 逐步改进连续性
定义雄心勃勃的恢复措施很容易,但很少有团队有时间和资源来实现其中的一半。在映射故障场景和缓解措施时,可以定义一组可逐步实施的措施,将其分解为单独的实施故事,并根据场景的可能性、潜在损害和实施成本在团队的工作积压中进行优先级排序。例如,虽然自动扩展应用程序磁盘空间是理想的,但在磁盘空间耗尽前收到警报也是有价值的第一步。
8. 系统变更中的数据连续性挑战
云计算时代的许多实践和技术在部署软件和管理基础设施时,对资源的随意销毁和扩展往往只是一笔带过数据问题。但在现实世界中,大多数系统都涉及数据,并且人们对数据非常重视。在逐步更改系统时,数据可能会带来挑战,如运行并行的存储基础设施实例可能会导致数据不一致甚至损坏,许多增量部署变更的方法依赖于能够回滚变更,但数据架构变更可能无法回滚。动态添加、删除和重建托管数据的基础设施资源尤其具有挑战性,但可以根据情况采用以下方法进行管理:
graph LR
A[数据连续性管理方法] --> B[锁定]
A --> C[隔离]
A --> D[复制]
A --> E[重新加载]
8.1 锁定
一些基础设施平台和堆栈管理工具允许锁定特定资源,以防止被可能销毁它们的命令删除。如果为存储元素指定此设置,工具将拒绝应用更改,允许团队成员手动进行更改。但这种方法存在一些问题,例如在某些情况下,对受保护资源应用更改可能会使堆栈处于部分修改状态,导致服务停机。而且保护某些资源免受自动化更改会鼓励手动参与更改,从而增加手动错误的风险,因此最好找到一种自动化的方法来安全地更改基础设施。
8.2 隔离
可以通过将托管数据的资源与系统的其他部分分离来隔离数据,例如创建一个单独的堆栈。这样可以在不影响数据的情况下销毁和重建计算实例。将数据存储在数据库中可以提供更大的灵活性,可能允许添加多个计算实例。但仍然需要为托管数据的堆栈制定数据连续性策略,不过这可以缩小问题的范围。在某些情况下,可以使用托管的数据库即服务(DBaaS)来完全卸载数据连续性的问题。
8.3 复制
根据数据及其管理方式,可以将数据复制到多个基础设施实例中。例如,分布式数据库集群可以在节点之间复制数据。通过正确的复制策略,新重建的节点可以从集群中的其他节点重新加载数据。但如果丢失过多节点,这种策略可能会失败,因此需要其他机制来应对更严重的故障场景。
8.4 重新加载
最常见的数据连续性解决方案是从更可靠的存储基础设施备份和恢复数据。在重建托管数据的基础设施时,首先备份数据,然后在创建新实例后重新加载数据。还可以定期进行备份,以便在恢复场景中重新加载,但可能会丢失备份和恢复之间的数据更改。可以通过将数据更改流式传输到备份(如写入数据库事务日志)来最小化甚至消除这种数据丢失。云平台提供不同级别的存储服务,例如对象存储服务(如 AWS S3)通常比块存储服务(如 AWS EBS)对数据的耐久性有更强的保证,因此可以通过将数据复制或流式传输到对象存储卷来实现备份。应自动化数据备份和恢复过程,例如在对磁盘存储卷应用更改之前自动进行快照。还可以使用磁盘卷快照来优化向数据库集群等系统添加节点的过程,例如将新节点的磁盘附加到另一个节点磁盘的克隆上,这样可以更快地同步并使节点上线。同时,应测试备份恢复过程,可以在管道中或作为混沌实验进行,无论是否在生产环境中。
8.5 综合方法
最佳解决方案通常是隔离、复制和重新加载的组合。隔离数据可以为管理系统的其他部分提供更大的灵活性,复制可以使数据在大多数时间保持可用,而重新加载则是应对更极端情况的后盾。
综上所述,现代云计算时代的基础设施管理需要综合考虑系统的连续性和数据的管理,通过采用快速恢复、持续灾难恢复、混沌工程等方法来提高系统的可靠性,并通过合理的数据管理策略来应对数据连续性的挑战。这样可以在快速变化的环境中持续交付系统的改进,并将故障作为学习和改进的机会。
9. 基础设施管理中的关键概念与技术
9.1 基础设施即代码
基础设施即代码是一种将基础设施的配置和管理以代码形式表示的方法。它具有诸多好处,如提高可重复性、可维护性和可测试性。核心实践包括使用版本控制系统管理代码、进行自动化测试等。在实现基础设施即代码时,需要选择合适的编码语言,如声明式基础设施语言、命令式基础设施语言等。
9.2 模块化设计
模块化设计有助于提高基础设施的可维护性和可扩展性。设计模块化时,需要考虑以下原则:
|原则|描述|
|----|----|
|高内聚|模块内部的元素应紧密相关,具有单一的功能。|
|低耦合|模块之间的依赖关系应尽量减少,避免相互影响。|
|可复用性|模块应具有较高的可复用性,减少重复开发。|
9.3 持续交付与测试
持续交付是指通过自动化流程将代码快速、可靠地部署到生产环境的实践。它包括以下几个关键方面:
-
基础设施交付管道
:定义了从代码提交到生产部署的一系列阶段,如构建、测试、部署等。
-
渐进式测试
:逐步增加测试的范围和复杂度,确保代码在不同环境中的正确性。
-
生产环境测试
:在生产环境中进行测试,以验证系统在真实场景下的性能和稳定性,但需要注意管理相关风险,如数据管理、监控等。
graph LR
A[代码提交] --> B[构建]
B --> C[测试]
C --> D[部署]
D --> E[生产环境]
10. 服务器管理与配置
10.1 服务器创建与配置
服务器的创建和配置是基础设施管理的重要环节。可以通过以下方式创建服务器:
-
使用脚本
:编写脚本来自动化服务器的创建过程,如使用 Shell 脚本、Python 脚本等。
-
使用工具
:利用专业的服务器管理工具,如 Packer、Ansible 等。
在配置服务器时,需要考虑以下因素:
-
操作系统
:选择适合业务需求的操作系统,如 Linux、Windows 等。
-
硬件资源
:根据应用程序的负载和性能要求,分配合适的 CPU、内存、磁盘等资源。
-
安全设置
:进行安全加固,如设置防火墙规则、安装杀毒软件等。
10.2 服务器代码管理
服务器代码的管理包括版本控制、测试和部署等方面。以下是一些关键步骤:
-
版本控制
:使用版本控制系统(如 Git)管理服务器代码,确保代码的可追溯性和协作性。
-
测试
:编写单元测试、集成测试等,验证服务器代码的正确性。
-
部署
:通过自动化部署工具将服务器代码部署到生产环境,确保部署的一致性和可靠性。
10.3 服务器镜像管理
服务器镜像可以提高服务器的创建和部署效率。管理服务器镜像时,需要注意以下几点:
-
构建
:使用合适的工具(如 Packer)构建服务器镜像,确保镜像的完整性和一致性。
-
版本控制
:对服务器镜像进行版本控制,方便回滚和管理。
-
共享
:在团队内部共享服务器镜像,提高开发和部署的效率。
11. 网络与存储资源管理
11.1 网络资源管理
网络资源包括网络地址块、子网、防火墙规则等。管理网络资源时,需要考虑以下方面:
-
网络拓扑
:设计合理的网络拓扑结构,确保网络的可靠性和安全性。
-
网络配置
:使用自动化工具(如 Ansible)进行网络配置,提高配置的准确性和效率。
-
网络监控
:实时监控网络的运行状态,及时发现和解决网络故障。
11.2 存储资源管理
存储资源包括块存储、对象存储、数据库等。不同类型的存储资源具有不同的特点和适用场景:
|存储类型|特点|适用场景|
|----|----|----|
|块存储|提供原始的磁盘块,性能高|虚拟机、数据库等|
|对象存储|以对象形式存储数据,可扩展性强|数据备份、静态文件存储等|
|数据库|提供结构化数据存储和管理功能|业务系统的数据存储|
在管理存储资源时,需要注意数据的备份和恢复,以及数据的安全性和一致性。
12. 团队协作与组织管理
12.1 团队工作流程
团队工作流程对于高效协作至关重要。一个典型的团队工作流程包括以下几个环节:
-
需求分析
:明确项目的需求和目标。
-
设计规划
:进行系统的设计和规划,包括架构设计、模块划分等。
-
开发实现
:根据设计方案进行代码开发。
-
测试验证
:对开发的代码进行测试,确保代码的质量。
-
部署上线
:将经过测试的代码部署到生产环境。
-
运维监控
:对生产环境进行运维和监控,及时发现和解决问题。
12.2 代码组织与管理
合理的代码组织和管理可以提高代码的可维护性和可复用性。可以按照以下方式组织代码:
-
按领域概念
:将代码按照业务领域进行划分,如用户管理、订单管理等。
-
按功能模块
:将代码按照功能模块进行划分,如数据库访问模块、网络通信模块等。
同时,需要使用版本控制系统管理代码,确保代码的版本历史可追溯。
12.3 工具与平台选择
选择合适的工具和平台可以提高团队的工作效率和开发质量。常见的工具和平台包括:
-
持续集成/持续交付工具
:如 Jenkins、GitLab CI/CD 等。
-
配置管理工具
:如 Ansible、Chef、Puppet 等。
-
容器化平台
:如 Docker、Kubernetes 等。
在选择工具和平台时,需要考虑团队的技术栈、项目的需求和规模等因素。
13. 总结与展望
在现代云计算时代,基础设施管理面临着诸多挑战,如系统复杂性增加、数据管理困难等。为了应对这些挑战,需要综合运用各种技术和方法,如快速恢复、持续灾难恢复、混沌工程等,提高系统的可靠性和稳定性。同时,要重视数据的管理,采用合适的数据连续性策略,确保数据的安全性和一致性。
未来,随着技术的不断发展,基础设施管理将朝着更加自动化、智能化的方向发展。例如,人工智能和机器学习技术可能会被应用于故障预测和自动修复,进一步提高系统的可靠性和可用性。此外,随着云计算的普及,多云和混合云环境的管理也将成为一个重要的研究方向。
总之,通过不断学习和实践,采用科学的管理方法和先进的技术手段,我们可以更好地应对基础设施管理中的挑战,实现系统的高效运行和持续改进。
超级会员免费看
5万+

被折叠的 条评论
为什么被折叠?



