服务韧性:大建联小推送

2021/10/24 SystemDesign 共 803 字,约 3 分钟

概述

一个常见的系统模式,是将系统拆分为两个平面:

  • 数据面:负责执行请求的服务,通常规模比较大
  • 控制面:负责管理和分发配置的服务,通常规模比较小

alt

  • 控制面放在负载均衡器的后面对外提供服务
  • 数据面通过LB发送API请求

问题分析

规模不匹配问题

由于控制面规模较小,但是数据面规模较大,容易出现控制面过载情况,可能存在的问题:

  1. 数据面代码Bug,导致API调用频率增加
  2. 从中断恢复时,所有数据面服务器尝试同时调用控制面API
  3. 少量API调用失败,导致重试,增加控制面负载,等等

优化措施

平面隔离

alt

在控制面和数据面之间增加一个配置隔离层,可以采用高可用的对象存储系统等。

控制面配置发布时,控制面发布信息至配置系统,数据面定期轮询配置系统,并缓存

数据面状态更新时,数据面更新配置至配置系统,控制面定期轮询配置系统,并缓存

  • 优点:控制面故障,不影响数据面运行
  • 缺点:动态配置更新,时效性不足

小推送

alt

配置时效性要求较高的场景下,通过规模较小的控制面推送数据到规模较大的数据面

优点:

  1. 配置实时更新;
  2. 由规模较小的控制面控制请求的流速,避免系统过载

缺点:

  1. 控制面需要维护规模较大的数据面清单
  2. 数据面规模越大节点出现问题概率越大,控制面需要维护请求失败后的重试等保护措施
  3. 控制面需要负责,让各控制节点合理的负责一定范围的数据节点,确保各司其事,并保证所有数据面节点都能够被管理,可以通过一致性哈希等算法

大建联小推送

alt

为了解决“小推送”场景下过于复杂的问题,可以通过将建连方向与控制流方向解耦

  1. 数据面通过LB和控制面完成长连接建立
  2. 控制面通过已建立的连接发送配置信息

缺点:需要保持长连接,通信协议复杂

参考

  • https://aws.amazon.com/cn/builders-library/avoiding-overload-in-distributed-systems-by-putting-the-smaller-service-in-control/?nc1=h_ls

Search

    Table of Contents