升级
Simba 在源码层面遵循 语义化版本:在同一主版本内升级时,基于旧版本编译通过的代码无需修改即可 基于新版本编译通过,因此升级时请重新编译。不承诺二进制兼容(不重新编译就运行基于另一版本编译的代码)。以下内容的源码不兼容变更只会出现在主版本中:
| 范围 | 包括 |
|---|---|
| 核心 API | me.ahoo.simba、me.ahoo.simba.partition、me.ahoo.simba.event、me.ahoo.simba.spi 的公共类型 |
| 后端 | simba-jdbc、simba-redis、simba-spring-redis、simba-zookeeper 的公共类(JdbcLeaseBackend、Dialect、RedisLeaseBackend、RedisScripting、SpringRedisScripting、ZookeeperLeaseBackend 等) |
| Spring Boot starter | 公共类型和注解(@SimbaScheduled、@SimbaPartitioned、各 *Properties 类、SimbaLifecycle、MicrometerSimbaEventListener、SimbaEndpoint、SimbaHealthIndicator)、simba.* 属性、bean 名称和条件 |
| 协程 | simba-coroutines(5.1 起):me.ahoo.simba.coroutines 的函数和类型(awaitAcquire、awaitTryAcquire、withLock、awaitRevoked、SimbaEventFlow) |
| 测试套件 | simba-testing(InMemoryLeaseBackend、VirtualClock、VirtualScheduler、Simulation)和 simba-tck(LeaseBackendSpec、FencingSpec) |
| 可观测性 | 指标名和标签键、Actuator 端点和健康指示器的 JSON 字段 |
| 存储 | JDBC schema、Redis 键和消息、Zookeeper 路径 |
次版本可能新增字段、标签、枚举常量和事件:读取 JSON、对 Simba 的枚举和事件做 when 判断时请容忍新增。标注了 @InternalSimbaApi 的类型(引擎、Simba.Builder.scheduler、Simba.awaitIdle)以及所有 internal 声明不提供这一保证。
从 4.x 升级
5.0 在 API、配置和存储上都与 4.x 不兼容,切换前需要停止所有节点。请按照 从 4.x 迁移到 5.0 操作。
5.x 内部升级
次版本和补丁版本保持存储格式不变,因此不同 5.x 版本的节点可以竞争同一名称,你可以逐个节点滚动升级。发布说明列出了所有变更: GitHub Releases。
从 5.0 升级到 5.1
5.1 新增了 API,调整了 Redis 后端在 Cluster 上的调用计时,并沿用 5.0 的存储格式,因此两个版本的节点可以同时运行:
DistributedLock.acquireAsync(timeout)和tryAcquireAsync()以不阻塞的方式获取锁,参阅 锁。它们是默认方法,你自己的DistributedLock实现无需修改即可编译。- 新的可选模块
simba-coroutines提供挂起版的锁调用、withLock、Term.awaitRevoked()和SimbaEventFlow;它依赖kotlinx-coroutines-core,simba-core不依赖它。 simba-testing:InMemoryLeaseBackend.builder()还可以设置sessionBoundGrants,让一次授予只持续会话剩余的时长,与 Redis 相同;SimulationParams新增sessionBoundGrants、truncatedGrantShare、meanInjectionInterval、groupPartitions和earlyCloseShare(参阅测试)。已有的构造器和参数保持不变。- Redis 开启
routeBySlot(Cluster)时,一次调用先在会话所在的槽运行脚本,再为每个租约或组所在的槽各运行一个脚本 (Cluster):- 从发出会话调用起经过的时间达到会话剩余时长后,获取和加入不再向其他槽发送任何脚本,并以
SimbaException失败。回复晚于这个时长才到达的获取会释放它开始的任期(包括已经授予成功的槽)并失败;引擎会像其他失败的调用一样重试。 - 租约槽仍按自己的时钟授予一个完整的会话租期,持有者再次获取时也按此延长,与 5.0 相同。
- 续约现在只按会话还剩的时长(续约后的剩余时长减去从会话调用返回起经过的时间)延长租约和成员资格,而不是从脚本执行时起延长一个完整租期:延迟的续约不会再让已死亡会话的租约多保留最多两个租期。
- 不再比较不同节点的
TIME。
- 从发出会话调用起经过的时间达到会话剩余时长后,获取和加入不再向其他槽发送任何脚本,并以