搶先一步
VMware 提供培訓和認證,以加速您的進度。
了解更多我們很高興宣布 Spring Statemachine 1.0.0.RC1 的第一個候選版本。
此版本主要目標是使核心框架更加穩定,並最終為分散式狀態機添加 jepsen 測試。 我們還添加了第一個版本的測試支援。 可以從 RC1 問題中找到已解決的 github 問題。 我們相對接近發布版本,這意味著如果沒有出現重大問題,下一個版本將是 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 測試
我們對使用 Zookeeker 的分散式狀態的支援,透過一組普通的單元測試來測試變得相對困難,因此我們在測試覆蓋率方面遇到了瓶頸。我想藉此機會談談使用 jepsen 測試分散式系統。
Kyle Kingsbury(又名 @aphyr)的 Jepsen 測試框架是一個可用於測試分散式系統的系統,它具有同步事件發送到節點並在網路上引起腦裂等功能。Jepsen 將是我們系統的核心,以確保我們的分散式支援能夠完成它應該做的事情。這是測試由 Zookeeper
支援的 Spring 分散式狀態機的一流系統。
將會有一個單獨的部落格文章介紹此內容,但是初步結果可以在我們的參考文檔 分散式狀態機技術文件 中找到。 請繼續關注該部落格文章!
在這裡,我們從我們的 jepsen 測試中窺視,以顯示當群集遭受拆分時會發生什麼,這導致 zookeeper 集群完全崩潰,以及當網路中斷並修復時會發生什麼。
在上圖中,我們有一個 5 節點的群集,它們共享一個由 Zookeeper
集群支援的相同狀態機配置,其中每個節點都連接到其自己的本地實例。 首先,一個事件 C
被發送到所有機器(只有一台機器將處理分散式狀態更改),這將啟動從狀態 S21
到 S211
的分散式轉換。 然後網路中斷,該圖顯示了每台機器最終如何進入錯誤狀態。 當網路和 Zookeeper
集群稍後被修復時,所有機器將重新加入集群並同步其狀態。 最後,事件 K
再次發送到所有機器,以表明所有機器在網路問題修復後都能正常工作。
正如我們的文檔中所提到的,如果現有的 zookeer 領導者保持在少數,則所有實例都會與集群斷開連接,從而導致所有狀態機進入錯誤狀態。 稍後,當網路修復並且 zookeeper 集群自行修復時,此情況會自動解決,並且連接到它的狀態機可以重置其自身的狀態。
#SpringOne 2GX 2015 即將到來!
在 華盛頓特區的 SpringOne2GX 盡快預訂您的位置。 這是第一手了解所有正在發生的事情並提供直接回饋的最佳機會。