1. 程式人生 > >axon框架系列---1、介紹

axon框架系列---1、介紹

 

介紹

Axon是一個輕量級框架,通過直接在架構中解決這些問題,幫助開發人員構建可伸縮和可擴充套件的應用程式。本參考指南解釋了Axon是什麼,它如何幫助您以及如何使用它。

如果您想了解有關Axon及其背景的更多資訊,請繼續閱讀Axon Framework背景。如果您渴望開始使用Axon構建自己的應用程式,請快速進入快速入門。如果您有興趣幫助構建Axon Framework,Contributing將包含您需要的資訊。歡迎大家幫忙。最後,本章介紹了許可證中的一些法律問題。

 

軸突框架背景

 

一個簡短的歷史

隨著時間的推移,對軟體專案的需求迅速增加。公司希望他們的(網路)應用程式與他們的業務一起發展。這意味著不僅專案和程式碼庫變得更加複雜,而且還意味著功能不斷被新增,更改並且(遺憾的是不夠)被刪除。如果發現看似易於實現的功能可能需要開發團隊拆分整個應用程式,那將是令人沮喪的。此外,今天的網路應用程式面向潛在數十億人的受眾,使可擴充套件性成為無可爭辯的要求。

雖然有許多應用程式和框架可以解決可擴充套件性問題,例如GigaSpaces和Terracotta,但它們存在一個基本缺陷。這些堆疊試圖解決可伸縮性問題,同時讓開發人員使用他們習慣的分層架構開發應用程式。在某些情況下,它們甚至會阻止或嚴格限制真實域模型的使用,從而迫使所有域邏輯進入服務。雖然開始構建應用程式的速度更快,但最終這種方法會導致複雜性增加和開發速度變慢。

命令查詢責任隔離(CQRS)模式通過徹底改變應用程式的架構方式來解決這些問題。邏輯不是將邏輯分離成單獨的層,而是根據它是在改變應用程式的狀態還是查詢它來分離。這意味著執行命令(可能會更改應用程式狀態的操作)由不同於查詢應用程式狀態的元件執行。這種分離的最重要原因是每種技術都有不同的技術要求和非技術要求。執行命令時,查詢元件(a)使用事件同步更新。這種通過事件進行更新的機制正是使這種體系結構具有可擴充套件性,可擴充套件性和最終可維護性的原因。

注意

CQRS的完整說明不在本文件的範圍內。如果您想了解有關CQRS的更多背景資訊,請訪問Axon Framework網站:www.axonframework.org。它包含背景資訊的連結。

由於CQRS與構成當今軟體領域的分層架構根本不同,因此開發人員在試圖找到解決方案的同時走進一些陷阱並不罕見。這就是Axon Framework構思的原因:幫助開發人員實施CQRS應用程式,同時專注於業務邏輯。

 

什麼是Axon?

Axon Framework通過支援開發人員應用Command Query Responsibility Segregation(CQRS)架構模式,幫助構建可伸縮,可擴充套件和可維護的應用程式。它通過提供最重要的構建塊的實現來實現,例如聚合,儲存庫和事件匯流排(事件的排程機制)。此外,Axon提供了註釋支援,允許您構建聚合和事件偵聽器,而無需將程式碼繫結到Axon特定邏輯。這使您可以專注於業務邏輯,而不是管道,並幫助您使程式碼更容易單獨測試。

Axon不以任何方式試圖隱藏開發人員的CQRS架構或其任何元件。因此,根據團隊規模,仍然建議讓一個或多個開發人員對每個團隊的CQRS有透徹的瞭解。但是,在確保向正確的事件偵聽器傳遞事件並以正確的順序同時處理事件時,Axon確實提供了幫助。這些多執行緒問題通常難以處理,導致難以跟蹤的錯誤,有時還會導致應用程式失敗。當你有一個緊迫的截止日期,你可能甚至不想關心這些問題。Axon的程式碼經過全面測試,可以防止出現這些型別的錯誤。

Axon Framework由許多模組(jar)組成,這些模組提供了構建可擴充套件基礎架構的工具和元件。Axon Core模組為不同的元件提供基本API,以及為單JVM應用程式提供解決方案的簡單實現。其他模組通過提供專用構建塊來解決可伸縮性或高效能問題。

 

什麼時候使用Axon?

並非每個應用程式都會受益於Axon。簡單的CRUD(建立,讀取,更新,刪除)應用程式可能無法從CQRS或Axon中受益。但是,有很多應用程式可以從Axon中受益。

可能受益於CQRS和Axon的應用程式是那些顯示以下一個或多個特徵的應用程式:

  • 該應用程式可能會在很長一段時間內通過新功能進行擴充套件。例如,線上商店可能會從跟蹤訂單進度的系統開始。在稍後階段,可以使用庫存資訊進行擴充套件,以確保在銷售商品時更新庫存。甚至以後,會計可能需要記錄銷售的財務統計資料等。雖然很難預測軟體專案將來如何發展,但大多數此類應用程式都清楚地呈現。

  • 該應用程式具有很高的讀寫比。這意味著資料只寫了幾次,讀的次數多了很多次。由於查詢的資料來源與用於命令驗證的資料來源不同,因此可以優化這些資料來源以進行快速查詢。重複資料不再是問題,因為事件是在資料更改時釋出的。

  • 該應用程式以多種不同格式呈現資料。現在,許多應用程式在網頁上顯示資訊時不會停止。例如,某些應用程式會發送每月電子郵件,以通知使用者可能與其相關的更改。搜尋引擎是另一個例子。它們使用與您的應用程式相同的資料,但採用的方式針對快速搜尋進行了優化。報告工具將資訊聚合到報告中,以顯示資料隨時間的演變。這又是相同資料的不同格式。使用Axon,每個資料來源可以實時或定期彼此獨立地更新。

  • 當應用程式將具有不同受眾的元件明確分開時,它也可以從Axon中受益。這種應用的一個例子是線上商店。員工將更新網站上的產品資訊和可用性,同時客戶下訂單並查詢訂單狀態。使用Axon,這些元件可以部署在不同的計算機上,並使用不同的策略進行擴充套件。它們使用事件保持最新,Axon將分發給所有訂閱的元件,無論它們部署在哪臺機器上。

  • 與其他應用程式整合可能是繁瑣的工作。使用命令和事件嚴格定義應用程式的API可以更輕鬆地與外部應用程式整合。任何應用程式都可以傳送命令或偵聽應用程式生成的事件