3. 多个层面构建可靠性
云作为基础设施,由于其规模效应积累了大量业务可靠性的经验,并通过产品化方式普惠到每个云上客户。在物理资源层,多地域提供了匀质的资源供给,方便客户根于业务、架构和成本选择最佳资源。
在SaaS层,提供企业级的免运维服务,业务可以按需方便集成到系统中,基本做到开箱即用。可靠性工程涉及部署方式、系统架构、应用拓扑和代码质量等多方面,除了在这些层面不断引入最佳实践进行探索,也需要工程化的方式对整体业务进行观测,并把混沌工程能力常态化引入到日常运行的业务中,做到提前、持续发现隐患,并常态化治理。
1) 构建多地容灾架构
对比于传统的运维,云厂商不仅提供了超大规模的数据中心,同时提供了全球多地域服务,每个地域是完全独立的数据中心,多个地域之间完全独立。而每个地域又有多个可用区,每个可用区之间电力和网络互相独立。云计算有天然的规模化和可靠性优势。
对于可靠性要求较高的应用,通常会做同城多机房部署,避免由于单机房的网络、电力等物理故障导致应用整体不可用。该场景下,在云上,用户可以使用同一个地域的多个可用区来部署,通过多个可用区的互通能力来完成应用间通讯,同时多可用区的物理隔离性极大提升了应用的容灾能力。针对多可用区部署的服务,云服务厂商不仅会在云资源的供给上提供物理隔离的多个可用区,同时也会开放OpenAPI能力来供用户查询并控制各个可用区可用购买的不同类型云资源,用户可用基于OpenAPI服务能力来构建自己的多可用区部署能力。
特大型的重要商业系统,对系统的容灾能力提出了更高的要求,同城多机房解决的是机房维度的单点问题,无法解决某个城市因为天灾人祸导致的城市级的故障。该场景下,在云上可以使用多地域部署,另外,多地域间物理距离适当远一些,避免单地域故障导致服务整体不可用,提升应用的极致高可用。对比于传统的IDC异地容灾方案,云天然的多地域支持会极大简化用户跨地域运营服务的成本。
对于高阶用户,云服务厂商会提供GSLB全球负载均衡以及对应的CDN服务来辅助支撑基础设施的高可用,也会提供自动化运维的Auto Scaling能力,用户可用通过配置Auto Scaling策略来实现自动化的多地域、多可用区自动化部署,保障服务基础设施始终处于高可靠性状态。
2) 数据备份和容灾恢复能力
云服务厂商在数据的高可靠性上具备天然的优势,不仅体现在存储的多副本,数据可靠性极高的SLA保障上,同时以服务化的方式向用户暴露了OpenAPI,用户可利用云厂商提供的快照、镜像等能力,实现数据备份容灾的高可靠性能力建设。
快照能力是云厂商提供的数据备份的核心产品能力,用户可使用快照进行系统盘、数据盘的备份,同时支持增量备份模式,帮助客户节约存储成本。快照支持手动备份与自动备份,推荐使用自动备份方式实现自动快照生成、轮转,对于特定业务场景,可以通过手动方式进行指定快照生成与保留时间,也可以设置为永久保留。当系统出现故障,需要将磁盘(系统盘或者数据盘)数据恢复到历史某一时刻,可以使用快照回滚能力,将指定磁盘回滚,通过快照数据的恢复能力,来提升数据的容灾能力。
同样,用户可用自定义镜像, 将快照的操作系统、数据环境信息完整的包含在镜像中。然后使用自定义镜像创建多台具有相同操作系统和数据环境信息的实例。对于多地容灾架构下,用户实现多地域部署时,可以使用镜像的跨地域复制能力来实现镜像备份的分发,从而实现多地域部署情况下的数据备份。
3) 应用可观测能力
为了帮助用户更快、更直观、更简单的发现系统内部问题,云服务厂商提供了完善的工具与服务化能力,用户基于此来构建不同层次的可观测能力,同时利用云厂商提供的自助服务来快速发现云资源、甚至自身业务服务的问题。
为了支持不同层次的用户需求,云厂商通常会提供以下几大类监控服务能力:云资源监控、应用层APM、业务层监控。
• 云资源监控:应用依赖的底层资源监控,比如资源的CPU、内存、网络等指标的使用率等。通过基础监控,用户可以自助发现云资源发生的异常,这是可观测性最基础的能力。云厂商同时会提供云资源的诊断能力,用户可通过一键发起对云资源的诊断,来自助发现云资源可能存在的问题。更进一步,云厂商会提供运维事件能力,用户基于云提供的EventBridge事件总线,通过自动化编排能力方式感知到云资源的异常事件,并完成自定义的自动化运维动作。
• 应用层APM:基于云资源部署的具体应用场景,包括应用指标性能(Metric)、系统调用链(Tracing)、日志监控(Logging)三个维度,比如应用的JVM指标、线程池监控、RPC服务的成功率、时延、错误率等。
• 业务层监控:应用层监控数据一般通过pull/push方式在数据聚合服务上进行计算,产出业务指标数据。指标数据异常检测也是云上提供的一项基础服务,用户可以选择传统的曲线异动、同比环比异常,甚至高阶的智能基线对比的自动检测能力对业务进行监控。
云资源监控只能发现云资源的问题,对于部署在云上的大规模服务来说,应用层问题的监控和定位能力是更加复杂和困难的。
云上需要有应用维度的监控和定位能力,在应用维度具备标准监控能力,比如服务端应用运行时、线程池、数据库、中间件、接口调用等,在前端应用,具备从页面打开速度(测速)、页面稳定性(JS Error)和外部服务调用成功率(API)等维度监控页面的健康度的能力。从生态角度,这些能力要提供诸如Prometheus、Kubernetes等开源产品形态。
除应用监控外,云上链路追踪Tracing Analysis为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。
云服务厂商会通过产品以服务化的方式来提供日志服务,用户使用日志服务做日志、数据的采集与集成,并基于此做Logging和Metering。用户通过自定义应用系统的内容、格式,并通过日志服务收集,并在日志服务中配置自定义细粒度监控大盘,观测自身业务运行情况,同时配置预警体系,建设用户层问题发现与定位能力。
4) 弹性容错能力
除了在基础设施多地域部署、数据上多副本备份容灾能力外,云服务厂商通常也会提供应用服务的容错能力,帮助用户构建具备弹性、容错能力的分布式系统。
• 弹性容错能力:分布式系统核心的两个弹性容错能力是流控与降级,通过流控来保护应用过载,通过降级来容忍业务部分有损换取整体可靠性。传统的流控方式是人工判断干预,高阶的方式是通过监控体系自动发现热点流量或者异常流量,自动化选择自适应过载保护或者设置自动降级策略并执行。
• 混沌工程与故障演练:混沌工程(Chaos Engineer)是一种提高分布式系统弹性能力的工程实践,通过主动制造故障,测试系统在各种压力下的行为,在生产环境提前识别潜在的故障,避免故障真实发生。
故障演练是遵循混沌工程实验原理的实践之一,其建立了一套标准的演练流程,包含准备阶段、执行阶段、检查阶段和恢复阶段。通过四阶段的流程,覆盖用户从计划到还原的完整演练过程,并通过可视化的方式清晰呈现给用户。结合观测能力和预警能力,通过混沌工程来完成故障巡检、故障注入、以及系统稳态度量。
5) 全面分析方法:FMEA
设计出可靠性高的系统是一个复杂的过程,由于异常场景很多,只要稍有遗落就会存在隐患,根据墨菲定律“可能出错的事情最终会出错”,因此推荐使用FMEA方法对系统做一个全面分析。
FMEA(Failure mode and effects analysis)即故障模式与影响分析,具体分布步骤:
• 给出初始的架构设计图。
• 假设架构中某个组件发生故障。
• 分析故障对系统功能造成的影响。
• 根据分析结果(ROI),判断架构是否需要进行优化。