eBay透過事件溯源實現持續交付

danny_2018發表於2018-08-14

eBay的持續交付團隊透過使用以事件為中心的方法構建了一個可以持續交付的編配器,具備故障彈性和伸縮性,以便處理eBay構建管道中不斷增加的負載。John Long和Nataraj Sundar在兩篇博文中描述了事件溯源的好處以及在實際應用程式開發當中所具備的優勢。

Long和Sundar都是eBay的員工,他們指出,事件溯源背後的想法在很多領域已經存在了很長一段時間。例如,在金融會計中,每個條目都以不可變的方式記錄下來,並且透過相加所有相關條目來計算當前餘額。當發生錯誤時,追加新的補償條目,而不是擦除錯誤的條目。他們認為,事件溯源與開發管道中的程式碼進度有著天然的相識點。

企業持續交付(ECD)實現了事件溯源。這是一個編配器,用於協調、定義和觀察部署管道,並被用在許多內部系統中。部署管道透過拉取請求、構建、測試和部署的方式來移動程式碼。管道執行服務(PES)是ECD的一個元件,一種執行和跟蹤管道的服務,它負責將狀態報告給GitHub。這個元件使用Scala開發,並使用了actor模型框架Akka。

除了事件溯源的一般性好處之外,Long和Sundar還指出了他們在PES中使用事件溯源的三個主要原因:

•併發。在過去,同時從管道的不同部分收到的事件之間具有竟態條件,而以序列的方式處理每個事件可以更輕鬆地解決併發問題。


•除錯和可追溯性。由於他們是個小團隊,同時要支援許多管道,因此能夠快速找到故障原因並修復它們對他們來說至關重要。


•清晰度和正確性。編配對於公司來說至關重要,並且可能會變得非常複雜,因此他們需要高質量和簡單且易於理解的程式碼庫。將程式碼拆分成幾個部分,記錄傳入的資訊,計算最終模型並對模型變化做出反應,這種方式可以幫助他們實現上述的目的。


選擇事件溯源最大的原因是最後一點——清晰度和正確性。Long和Sundar認為,對於涉及時間和狀態的複雜系統,事件溯源是可行的解決方案。透過精心設計的模型,可以分別處理流程中的不同部分,從而使流程更易於理解。他們介紹了事件溯源的四個元件,每個元件都很容易理解,也很容易進行修改和測試。

•驗證傳入事件,根據需要建立和儲存相關內部事件。


•按事件插入的順序處理事件,並進行適當的檢視模型更新。


•在處理完事件之後持久化檢視,這樣在進行查詢時就不需要載入和重放所有事件。


•根據狀態變更做出響應,並在讀取模型發生更新時決定該做些什麼,然後啟動新actor來執行操作。


到目前為止,他們的系統已經處理了超過220萬個事件,生成了大約200,000個執行檢視。Long和Sundar表示,事件溯源架構對於實現相容和直觀的解決方案來說至關重要。

英文原文:Continuous Delivery Implemented with Event Sourcing at eBay


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547898/viewspace-2200049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章