2021-05-28

分布式系统升级所遇到的问题

Views: 6347 | Add Comments

常规的单机软件升级, 一般认为是一个原子操作, 也就是说, 软件会在"瞬间"完成升级, 即使不能在"瞬间"完成升级, 也要中断服务, 等升级完成后再提供服务.

对于需要中断服务的情况, 在分布式系统中是不能接受的. 同时, 分布式系统的升级永远不可能在"瞬间"完成. 因此, 分布式系统升级会面临一个长时间的中间态, 新旧版本的软件同时运行, 这就涉及到兼容性问题.

假如, 新版本的软件的数据格式改变了, 那么, 新版本写入的数据就无法被旧版本识别, 旧版本就会报错. 因为, 新版本的软件很容易做到向后兼容(新的兼容旧的), 但是, 向前兼容(旧的兼容新的)依赖预见性, 不可能预见全部未来.

如果分布式系统无法做到向前兼容, 这时候, 应该怎么办呢? 难道要停服升级?

一个常用的解决方案是在旧版本和新版本之间插入一个中间版本. 这个中间版本的主要特点是不写入新格式的数据, 但能识别新格式的数据.

我们先逐步把旧版本替换为中间版本, 在这个过程中, 因为没有新格式的数据产生, 所以没有兼容问题. 等旧版本全部替换完毕后, 逐步升级为新版本, 在这个过程中, 虽然新旧格式的数据都有, 但新版本都能识别, 也没有兼容问题

Related posts:

  1. 并发编程的核心技术 – 多版本(Multi Version)
  2. 李彦宏:成也萧何,败也萧何
  3. 什么是 Paxos 的日志空洞?
  4. 我所理解的分布式系统
  5. 分布式一致性协议-Raft和Paxos
Posted by ideawu at 2021-05-28 21:09:45

Leave a Comment