2.2.4 韧性原则
韧性是指当软件所依赖的软硬件组件出现异常时,软件所表现出来的抵御能力。这些异常通常包括硬件故障、硬件资源瓶颈(如CPU或网卡带宽耗尽)、业务流量超出软件设计承受能力、影响机房正常工作的故障或灾难、所依赖软件发生故障等可能造成业务不可用的潜在影响因素。
业务上线之后,在运行期的大部分时间里,可能还会遇到各种不确定性输入和不稳定依赖的情况。当这些非正常场景出现时,业务需要尽可能地保证服务质量,满足当前以联网服务为代表的“永远在线”的要求。因此,韧性能力的核心设计理念是面向失败设计,即考虑如何在各种依赖不正常的情况下,减小异常对系统及服务质量的影响并尽快恢复正常。
韧性原则的实践与常见架构主要包括服务异步化能力、重试/限流/降级/熔断/反压、主从模式、集群模式、多AZ(Availability Zone,可用区)的高可用、单元化、跨区域(Region)容灾、异地多活容灾等。
下面结合具体案例详细说明如何在大型系统中进行韧性设计。“双11”对于阿里巴巴来说是一场不能输的战役,因此其系统的设计在策略上需要严格遵循韧性原则。例如,在统一接入层通过流量清洗实现安全策略,防御黑产攻击;通过精细化限流策略确保峰值流量稳定,从而保障后端工作正常进行。为了提升全局的高可用能力,阿里巴巴通过单元化机制实现了跨区域多活容灾,通过同城容灾机制实现同城双活容灾,从而最大程度提升IDC(Internet Data Center,互联网数据中心)的服务质量。在同一IDC内通过微服务和容器技术实现业务的无状态迁移;通过多副本部署提高高可用能力;通过消息完成微服务间的异步解耦以降低服务的依赖性,同时提升系统吞吐量。从每个应用的角度,做好自身依赖梳理,设置降级开关,并通过故障演练不断强化系统健壮性,保证阿里巴巴“双11”大促活动正常稳定进行。
随着数字化进程的加快,越来越多的数字化业务成为整个社会经济正常运转的基础设施,但随着支撑这些数字化业务的系统越来越复杂,依赖服务质量不确定的风险正变得越来越高,因此系统必须进行充分的韧性设计,以便更好地应对各种不确定性。尤其是在涉及核心行业的核心业务链路(如金融的支付链路、电商的交易链路)、业务流量入口、依赖复杂链路时,韧性设计至关重要。