# 滚动更新
##  简介

滚动更新是将系统的一个版本替换为另一个版本而不停机的过程。更改可以是新代码、更改的依赖项（如新的 Akka 版本）或修改的配置。滚动更新通常用于有状态的 Akka 集群，在更新期间不能像蓝绿色部署那样并行运行两个单独的集群。

在执行滚动更新时，Akka 有两个部分需要仔细考虑。

1. 远程消息协议的兼容性。旧节点可以向新节点发送消息，反之亦然。
2. 持久化事件和快照的序列化格式。新节点必须能够读取旧数据，并且在更新期间，旧节点必须能够读取新节点存储的数据。

还有许多应用程序特定的方面。有一个可以改进的序列化格式策略是很重要的，并且你可以在「[持久化 - 模式演化](https://doc.akka.io/docs/akka/current/persistence-schema-evolution.html)」中找到一些建议，它在使用滚动更新部署时也适用于远程消息。

Akka 支持在两个连续补丁版本之间滚动更新，除非本页提到异常。例如，将 Akka 版本从 2.5.15 更新到 2.5.16。很多时候也可以跳过几个版本，这里也描述了一些例外情况。例如，在没有中间版本 2.5.15 的情况下，可以从 2.5.14 更新到 2.5.16。

不支持具有两个以上不同版本的集群。在开始下一个更新之前，必须执行完前一个更新。

由于协议完全不同，不支持从经典远程处理到动脉（`Artery`）的滚动更新。它将需要完全关闭集群并重新启动。

## 关闭命令

最好将运行时间最长的节点保留到最后。这是因为集群单例（包括集群分片协调员）运行在最旧的节点上。更有效的方法是避免移动单例，因为这些单例通常必须恢复其状态，并且可能会导致不必要的延迟，例如访问新的分片 Actor。

## 更改日志
### 2.5.0 小版本中的几个变更

从 2.4.x 更新到 2.5.x 时，请参阅「[迁移指南](https://doc.akka.io/docs/akka/current/project/migration-guide-2.4.x-2.5.x.html#rolling-update)」。

### 2.5.10 连接回归

问题：[#24622](https://github.com/akka/akka/issues/24622)

不兼容的变化在 2.5.10 中引入，并在 2.5.11 中得到修正。

这意味着你不能从 2.5.9 进行滚动更新到 2.5.10，而必须从 2.5.9 更新到 2.5.11。

### 2.5.10 加入旧版本

问题：[#25491](https://github.com/akka/akka/issues/25491)

不兼容的变化在 2.5.10 中引入，并在 2.5.15 中得到修正。

这意味着如果需要在更新阶段连接 2.5.9 节点，那么应该直接从 2.5.9 滚动更新到 2.5.15。

### 2.5.14 ORSet[ActorRef] 的分布式数据序列化

问题：[#23703](https://github.com/akka/akka/issues/23703)

在 2.5.14 中进行了有意的变更。

此更改需要两个阶段的更新，其中复制的数据与新节点和旧节点都兼容。

- 2.5.13 - 更改前的旧格式。可以与中间格式和旧格式通信。
- 2.5.14、2.5.15、2.5.16 - 中间格式。可以与旧格式和新格式通信。
- 2.5.17 - 新格式。可以与中间格式和新格式通信。

这意味着你不能直接从 2.5.13 更新到 2.5.17，必须首先更新到中间版本 2.5.14、2.5.15 或 2.5.16 之一。

### 2.5.22 ShardRegionStats 的 ClusterSharding 序列化

问题：[#25348](https://github.com/akka/akka/issues/25348)

在 2.5.22 中进行了有意的变更。

已更改类的序列化程序：`GetShardRegionStats`、`ShardRegionStats`、`GetShardStats`和`ShardStats`。

此更改需要两个阶段的更新，其中引入了新的序列化程序，但在早期版本中未启用。

- 2.5.18 - 添加了序列化程序但未启用，仍使用`JavaSerializer`
- 2.5.22 - 为这些类启用了`ClusterShardingMessageSerializer`

这意味着你不能直接从 2.5.17 更新到 2.5.22，必须首先更新到中间版本 2.5.18、2.5.19、2.5.20 或 2.5.21 之一。




----------

**英文原文链接**：[Rolling Updates](https://doc.akka.io/docs/akka/current/project/rolling-update.html).



----------
———— ☆☆☆ —— [返回 -> Akka 中文指南 <- 目录](https://codechina.csdn.net/monokai/akka-guide/blob/master/README.md) —— ☆☆☆ ————