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