设计原则
建立持续改进的团队文化和标准化运维体系
在卓越运营中,团队文化建设至关重要。运营是一门不断改进的艺术。只有不断从已有事故中学习经验,持续学习和改进,才能最终达到卓越运营。故而,团队应该培养持续学习和改进的文化,此外,在事故发生时,应该以对事不对人的态度,思考系统的改进,而不是惩罚或者指责个人。片面指责个人或者直接处罚的做法很容易引起一系列后果,例如后续的运维团队成员由于担心处罚,会隐瞒事故或者隐藏真正的事故原因,导致后续无法切实改进系统的运维能力和流程。一线的工程师也因为担心处罚,不愿意担责,不愿意做任何系统的改变。部门、组织之间由于担心事故影响部门、组织内部成员,导致了消极应对系统中隐藏的问题或者将问题推给了其他组织,部门。最终,这种文化上的高压导致整个组织和运维流程的僵化,以及系统不能持续迭代更新之后的代码、架构腐化,最终导致无法运维的系统。 故而,文化上,惩前毖后,应重在总结经验,明确改进责任主体组织,不责怪个人。
在总结经验上,应该将相关经验进行标准化的沉淀,即将经验总结成自动化工具,流程以及建立相应的组织体系,我们称之为标准化运维体系。非标是大规模运维的头号天敌,主要表现是运维无序,团队成员依靠自身技术各自为战,处于被动响应和疲于应付的工作状态,效率低下,人为失误多,故障处理难度大。标准化运维体系是对有效经验总结后,运维活动例行化的高效管理。通过对运维活动的标准化、流程化和工具化管理,实现从无序向有序演进,达到运维操作团队运作“最佳秩序”,简化运维交付工作,降低技能依赖,提高运维效率,降低运作成本。
通过CI/CD实现高效的频繁可逆的小规模变更
在软件开发过程中,应该尽量使需求分析,设计,开发,测试,部署的开发周期较小,使用频繁的小型迭代进行。一个典型的实践是使用微服务和CI/CD实践,微服务架构是一种更为灵活、可扩展和易于维护的架构风格,已经逐渐成为现代应用开发的主流选择。它通过将应用程序拆分为小的、自治的服务,每个服务都负责执行特定的业务功能,可以使用不同的技术栈,由独立的团队开发,测试,部署和扩展,并通过轻量级通信机制相互交互。而在CI/CD下,同一团队以流水线的方式集成整个微服务的开发,测试和进行不同地域的部署、发布和运维。
对于已经采用DevOps模式的组织,应该更进一步,不仅在软件项目的管理,而是从运维角度来看,小型频发的迭代有助于快速发现问题,一旦发现问题,也易于回滚到软件的上一版本,并降低部署失败时发生大规模问题的风险。
X即代码,尽量自动化所有流程
云上应用和传统应用的一大区别是,您可以将整个云上应用,包含应用程序自身、运行应用的云基础设施、安全策略、以及相应的运维操作视为代码。这意味着整个卓越运营的各种实践,都可以极大地使用代码自动化,例如定义应用的基础设施,部署应用自身,修改应用的配置,设置安全策略,甚至日常的运维操作,故障修复,都可以通过代码实现并执行。
自动化是沉淀运维经验,建立标准运维最重要的一环,通过自动化,可以避免人为错误,标准化流程并提高效率。 即使在部分自动化流程中依然需要人工干预,例如决策点。在决策点前的自动化流程依然可以确认人员权限,向人员提供必要的上下文和信息,以便做出明智的决策,比之纯手工流程,最大程度避免了错误。
通过可观测性进行持续改进
可观测性是指通过观察系统的外部输出,推断其内部状态的能力。一般来说,云上应用的可观测性通常使用三种核心手段,一:指标,指标是系统状态的定量度量,例如 TPS、请求延迟、调用量等。二: 日志:日志是系统事件的人可读记录,例如应用程序的运行信息,运行错误、安全事件等。三:跟踪(Trace),跟踪可以追踪单个请求或事务在系统中的路径,帮助我们了解系统的执行情况。
对于构建在云上的应用,通过可观测性,可以快速发现和解决系统故障,从而提高系统从故障中的恢复速度。进一步地,可以提前发现系统的问题,例如性能,容量瓶颈,提前解决问题。更进一步地,您可以通过联动可观测性带来的告警和上文中的自动化流程,通过主动式响应,包括动态缩扩容,流控,主动切流,节点的迁移等,消灭问题于无形之间。