微服务无损扩容

微服务无损扩容

December 9, 2020

微服务无损扩容

技术挑战

  • 拆分的不好,热点数据节点成为瓶颈
  • 数据迁移、路由改变,能否让业务没有感知
  • 扩容失败,如何回滚? 整个过程,如何维持数据一致性?

如何拆分

业务设计表的时候,需要决定哪个键是 shardkey

如何让业务没有感知

时间点如凌晨自动切换;也可以让业务根据实际情况判断,人工切换

整个过程如何高可用

    1. 新建数据同步 (syncasync) 关系
    1. 持续进行数据校验,计算延时差,小于某个阈值,比如 5 秒
    1. 小于阈值后,有请求进来,拒绝掉,让业务去重试,业务的响应时间可能有秒级影响,不过整个持续时间很短。数据很快追上来,这个时候原子修改路由,路由切换好了,就可以重新接受请求了
    1. 慢慢地延迟删除冗余数据,防止 IO 波动过大

分布式事务

  • 操作同一个节点,使用普通事务
  • 操作多个节点,使用两阶段提交

参考