领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多我们很高兴地宣布 Spring Statemachine 1.0.0.RC1 的第一个候选版本发布。
此版本的重点是使核心框架更加稳定,并最终为分布式状态机添加 Jepsen 测试。我们还添加了测试支持的第一个版本。已解决的 GitHub 问题可以从 RC1 问题 中找到。我们离发布正式版本已经很近了,这意味着如果没有任何重大问题出现,下一个版本将是 1.0.0.RELEASE
。如果出现紧急情况,我们将在发布之前发布 1.0.0.RC2
。
既然我们已经到了这里,让我们深入了解一下此版本中的新功能。
除了通常的错误修复之外,以下列出了主要的新功能
## 测试支持 测试状态机并非易事,因此我们引入了新的 spring-statemachine-test
模块,该模块将简化 Spring Statemachine 单元测试的过程。由于依赖关系,它没有用于核心系统,但对于 recipes
和 Zookeeper
集成来说,它已经被用于测试这些模块。
在测试中测试一个简单的状态机将看起来很简单,就像
StateMachine<String, String> machine = buildMachine();
StateMachineTestPlan<String, String> plan =
StateMachineTestPlanBuilder.<String, String>builder()
.defaultAwaitTime(2)
.stateMachine(machine)
.step()
.expectStates("SI")
.and()
.step()
.sendEvent("E1")
.expectStateChanged(1)
.expectStates("S1")
.and()
.build();
plan.test();
如果定义了一个状态机
StateMachine<String, String> buildMachine()
throws Exception {
StateMachineBuilder.Builder<String, String> builder =
StateMachineBuilder.builder();
builder.configureConfiguration()
.withConfiguration()
.taskExecutor(new SyncTaskExecutor())
.autoStartup(true);
builder.configureStates()
.withStates()
.initial("SI")
.state("S1");
builder.configureTransitions()
.withExternal()
.source("SI").target("S1")
.event("E1");
return builder.build();
}
## Jepsen 测试
我们对使用 Zookeeper 的分布式状态的支持证明测试起来相对困难,因此我们在测试覆盖率方面遇到了瓶颈。我想借此机会谈谈使用 Jepsen 测试分布式系统。
Jepsen 是 Kyle Kingsbury(又名 @aphyr)开发的测试框架,可用于测试分布式系统,并具有同步发送到节点的事件以及导致网络发生脑裂等功能。Jepsen 将成为我们系统核心的组成部分,以确保我们的分布式支持能够按预期工作。这是测试由 Zookeeper
支持的 Spring 分布式 Statemachine 的一流系统。
我们将对此进行单独的博文介绍,但初步结果可以在我们的参考文档 分布式状态机技术论文 中找到。敬请期待那篇博文!
在这里,我们从 Jepsen 测试中窥探一下,看看当集群发生网络分割导致 Zookeeper 集群完全中断时会发生什么,以及当网络中断并恢复时会发生什么。
在上图中,我们有一个 5 节点的集群,共享由 Zookeeper
集群支持的相同状态机配置,其中每个节点连接到其自己的本地实例。首先,事件 C
发送到所有机器(只有一个将处理分布式状态更改),这将启动从状态 S21
到 S211
的分布式转换。然后网络中断,图表显示了每台机器最终将如何进入错误状态。当网络和 Zookeeper
集群稍后恢复时,所有机器将重新加入集群并同步其状态。最后,事件 K
再次发送到所有机器,以显示所有机器在网络问题解决后都能正常工作。
如我们的文档中所述,如果现有的 Zookeeper 领导者被保留在少数派中,所有实例都将与集群断开连接,从而导致所有状态机进入错误状态。这种情况稍后将在网络恢复并且 Zookeeper 集群自行修复后自动解决,并连接到它的状态机可以重置其自身状态。
## SpringOne 2GX 2015 即将到来!
尽快在 华盛顿特区的 SpringOne2GX 上预订您的席位。这是了解所有最新动态并提供直接反馈的最佳机会。