多活容灾MSHA(Multi-Site High Availability)是一个云原生的多活容灾架构解决⽅案,同城流量封闭是指调用都在同一可用区内进行,减少和避免跨可用区调用带来的响应时间增长。本文通过一个电商业务案例,介绍如何进行同城流量封闭的操作。
业务背景信息
本示例的电商业务包含以下应用:
- frontend:入口Web应用,负责和用户交互。
- cartservice:购物车应用。记录用户的购物车数据,使用自建的Redis。
- productservice:商品应用。提供商品、库存服务,使用RDS MySQL。
技术栈:
- SpringBoot。
- RPC框架:SpringCloud,注册中心使用自建的Eureka。
案例背景
本示例电商业务在进行了多可用区部署后,避免了在一个可用区部署的单点风险。也因此导致应用间的RPC调用会出现跨可用区的情况。跨可用区的网络传输带来了RT的延迟,导致电商页面加载和操作出现明显的响应慢和卡顿现象。为了保障用户体验,业务开始考虑如何减少、避免跨可用区调用来避免RT的猛增。
假设同地域的网络双向延迟约为5 ms,若一个调用链包含100次RPC调用,则最多可能出现100次跨可用区调用,最大RT延迟为500 ms(5 ms×100)。
同城多活架构改造
同城多活架构改造,请参见同城多活架构实践。
开启单元格流量封闭策略
MSHA提供的同城多活架构能力,除了容灾恢复(同城切流)能力外,还针对常见RPC框架(HSF、SpringCloud、Dubbo)提供了单元格流量封闭的能力。下面将电商业务的各个应用,均配置和启用阈值为20%的单元格流量封闭策略。
说明 阈值可选范围为[0,100]。阈值表示:当一个单元格内应用健康的机器和总机器占比≥${阈值} 时,则流量封闭策略生效。
- 封闭策略开启前,验证是否存在跨单元格(可用区)的RPC调用。
- 封闭策略开启后,验证是否存在跨单元格(可用区)的RPC调用。