Axon參考指南 - 2.事件驅動的微服務

在設計和創建(事件驅動的)微服務系統時,DDD和CQRS概念一章中描述的概念非常適用。在本章中,我們將明確列出在此類環境中應用Axon的幾種常見策略。

進化的微服務

在AxonIQ,我們相信系統會逐漸發展爲微服務,而不是嘗試從頭開始構建微服務系統。主要原因是探索合理的上下文邊界(請參閱“邊界上下文”)和模型需要時間。與在整體系統中相比,在分佈式系統中更改這些邊界要困難得多。

Axon利用組件的分離並在組件之間使用顯式消息傳遞,這使這些組件位置透明。與使用服務發現不同,Axon用於消息傳遞的方法完全不需要組件知道消息的目的地。它們會自動路由到一個廣告組件,以宣傳處理此類消息的功能。這使得這些系統比“常規”基於微服務的系統更靈活地進行更改。

Axon使用的策略

在微服務環境中應用Axon有不同的策略。可以在系統級別採用Axon哲學,並使用Axon構建所有服務。但是,僅在單個應用程序/服務中應用Axon時,它也已經很有用。最後,我們還將討論在多語言環境中使用Axon時的特定策略。爲此,Axon在構建時就考慮了集成。

基於Axon的微服務

在系統級別使用Axon時,這意味着有多個服務在運行Axon(或兼容的API),一個服務可以最大程度地使用消息傳遞概念。應用程序可以簡單地利用不同的消息總線來發送和接收來自其他組件的消息。在更改組件的部署策略時,這使系統變得非常靈活。

僅在單體服務中使用Axon

在現有的微服務系統中構建單個基於Axon的服務時,您可能希望使用“傳統”的rest端點公開您的API。在這種情況下,基於Axon的應用程序將需要一個小的API層,該層將REST調用轉換爲命令,然後將其分派到內部。但是請務必考慮到,請求可能不會被一致地路由,並且用於同一聚合的命令可能會被路由到不同的實例。

如果基於Axon的服務已部署了多個實例,則仍可以使用總線的分佈式實現來受益,以允許這些實例在它們之間適當地平衡消息處理。

混合/多語種環境

實際上,許多基於微服務的系統都在多語言環境中運行。不同的服務將在不同的技術堆棧上運行。在這些環境中,確保適當地保護上下文邊界並在適用的情況下提供體面的反腐層更爲重要。

所有使用過的技術堆棧都不太可能遵循與Axon應用程序相同的基於消息傳遞的方法。但是,這並不意味着需要放棄這些概念。您仍然可以從顯式消息傳遞的許多優點中受益。在這樣的環境中,可以將反腐層實現爲處理命令,事件和查詢,並執行對外部服務的其他類型的調用(例如REST調用)的組件。這樣,使用顯式消息傳遞的組件就不必擔心輪詢外部服務是否發生更改,也不必擔心由不同類型的API引起的技術挑戰。

Axon支持不同類型的連接器,這些連接器允許將事件(在某些情況下,還包括其他消息類型)發佈到第三方消息代理。默認情況下,Axon將對這些外部事件的格式進行假設,但始終可以覆蓋它們。閱讀有關這些特定擴展的章節以獲取更多詳細信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章