Spring Statemachine 1.0.0.RC1 版本發布

版本發布 | Janne Valkealahti | 2015 年 9 月 01 日 | ...

我們很高興宣布 Spring Statemachine 1.0.0.RC1 的第一個候選版本。

此版本主要目標是使核心框架更加穩定,並最終為分散式狀態機添加 jepsen 測試。 我們還添加了第一個版本的測試支援。 可以從 RC1 問題中找到已解決的 github 問題。 我們相對接近發布版本,這意味著如果沒有出現重大問題,下一個版本將是 1.0.0.RELEASE。 如果出現緊急情況,我們將在發布之前執行 1.0.0.RC2

現在我們已經準備好了,讓我們看看此版本中有哪些新功能。

除了通常的錯誤修復之外,以下是主要新功能的列表

  • 測試支援
  • 分散式狀態機的 Jepsen 測試

#測試支援 測試狀態機並不是一件容易的事情,因此我們正在引入新的 spring-statemachine-test 模組,該模組將簡化為 Spring Statemachine 建立單元測試的過程。 由於相依性,它沒有在核心系統中使用,但是對於 recipesZookeeper 整合,它已經用於測試這些模組。

在測試中測試簡單的狀態機看起來很簡單,如下所示

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 集群完全崩潰,以及當網路中斷並修復時會發生什麼。

Zookeeper Sample

在上圖中,我們有一個 5 節點的群集,它們共享一個由 Zookeeper 集群支援的相同狀態機配置,其中每個節點都連接到其自己的本地實例。 首先,一個事件 C 被發送到所有機器(只有一台機器將處理分散式狀態更改),這將啟動從狀態 S21S211 的分散式轉換。 然後網路中斷,該圖顯示了每台機器最終如何進入錯誤狀態。 當網路和 Zookeeper 集群稍後被修復時,所有機器將重新加入集群並同步其狀態。 最後,事件 K 再次發送到所有機器,以表明所有機器在網路問題修復後都能正常工作。

正如我們的文檔中所提到的,如果現有的 zookeer 領導者保持在少數,則所有實例都會與集群斷開連接,從而導致所有狀態機進入錯誤狀態。 稍後,當網路修復並且 zookeeper 集群自行修復時,此情況會自動解決,並且連接到它的狀態機可以重置其自身的狀態。

#SpringOne 2GX 2015 即將到來!

華盛頓特區的 SpringOne2GX 盡快預訂您的位置。 這是第一手了解所有正在發生的事情並提供直接回饋的最佳機會。

獲取 Spring 電子報

透過 Spring 電子報保持聯繫

訂閱

搶先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中為 OpenJDK™、Spring 和 Apache Tomcat® 提供支援和二進位檔。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

查看全部