更新时间:2024-07-17 GMT+08:00
分享

RES10-03 采用Grid架构

采用Grid架构,可将应用系统内的工作负载的故障影响限制在有限Grid业务单元中。

  • 风险等级

  • 关键策略

    应用系统采用多个功能相同的Grid业务单元,每个Grid业务单元具备完整业务功能,处理整个业务负载中的一个子集,不涉及与其他Grid业务单元的交互;在一个Grid业务单元发生故障时,仅影响本Grid业务单元所处理的业务,对其他Grid业务单元没有影响,从而减少爆炸半径。

    应用系统典型Grid架构部署如下:

    实施步骤:

    1. 确定分区键。选择分区键应考虑:
      • 选择分区键必须考虑匹配服务的“粒度”或者考虑以最小的方式跨分区互动。对于多用户系统,可使用用户ID作为分区键;而对于资源为对象的系统,则可以使用资源ID作为分区键。
      • 所确定的分区键,必须在所有API或命令中都能直接包含或可通过其他参数间接转换得到,以便能使用该分区键进行分区处理。
      • 按分区键进行分区处理时,需要确保对应分区能独立处理业务,尽可能避免或减少与其他分区的交互。
    2. 确定分区数量与每个分区的大小,后续还存在增加分区的情况。需要综合考虑:
      • 分区数量越多,对应分区会越小,爆炸半径也越小,运维定位简单,可用性高,但由于资源共享利用率低,所需的成本也越高。
      • 分区数量越少,每个分区的资源多,更容易适合对资源要求较高的大客户,运维管理简单,且资源利用率越高,所需的成本低。
    3. 确定分区映射算法。存在以下一些映射算法供参考:
      • 原始除模:即使用分区键对分区数量取模,该算法分布均匀,但是不适配Grid增删场景,一旦增删需要进行业务迁移。
      • Range-Hash/Hash:即使用分区键按范围分区后Hash或直接使用分区键Hash,元数据管理相对复杂一些。
      • Full-Mapping:全映射,即针对分区键指定Grid,使用全映射会带来对映射表的严重读写依赖,读写一致性要求考虑,通常需要引入meta data service。
      • 基于前缀和范围mapping:基于前缀和范围的映射,将键范围映射到Grid,并在提供灵活性的同时,弥补了Full-Mapping的不足。
      • Mapping代替:强制将特定key分配给特定Grid,方便测试、隔离。
    4. 进行Grid路由层设计。设计原则如下:
      • 路由层是系统唯一的一个共享组件,因此需要尽可能的稳定,减少修改。
      • 避免业务逻辑,保证尽可能的稳定,减少修改。
      • 由于爆炸半径大,需要足够轻,足够简单,但是不能太简单。
      • 某些情况,要考虑避免路由所有调用,有助于减少延迟,并减小路由层的规模。
      • 支持横向扩展,避免路由层成为性能瓶颈。
    5. 提供Grid迁移功能,以便在增加/删除Grid业务单元时,可以快速调整分区键对应的Grid业务单元。典型处理过程如下:
      • 从分区键对应的旧位置拷贝数据到新位置。
      • 更新Grid路由层路由,使分区键重定向到新位置。
      • 从分区键旧位置删除数据。
    6. Grid代码部署与更新:
      • Grid代码部署可与跨AZ、跨Region结合,通过多层隔离,减少故障影响范围。
      • Grid业务单元代码更新时,建议采用类似金丝雀部署(灰度发布)的方式进行更新,以减少由于版本问题而导致多个Grid业务单元同时故障的可能

相关文档