掌握這幾種微服務模式助你成爲更出色的工程師

圖片描述
導讀:對於不少工程師來講,進入微服務領域是很困難的。99%的服務屬於五類之一,經過這種方式劃分責任考慮如何經過管道服務一塊兒管理特性,就像在Unixshell腳本中同樣。shell

全部的微服務有什麼共同之處,域驅動設計之父Eric Evans將其定義爲:「(服務)能夠消費和生成消息。」數據庫

考慮到這一點,對於每一個服務模式,會討論產生或使用消息的類型。編程

這些消息能夠再分爲兩類:事件和命令。服務器

開始以前,由於上下文很重要,我首先從Matt Walters那裏看到了這些微服務模式,它是libraryservicebus的建立者。Servicebus是一個名爲NServiceBus的流行.Net庫的節點改編,由Udi Dahan建立和推廣。數據結構

經過Servicebus,能夠輕鬆編寫發送和監聽命令,並使用AMQP做爲通用語言發佈和訂閱事件,使用JSON有效負載。這意味着其餘編程語言能夠輕鬆實現相同的接口,並可以無縫地參與由多種語言編寫的部件組成的系統。架構

1.模型服務(Model Services)框架

若是想到MVC,那麼可使用這種類型的服務。模型服務是模型應該存在的地方。邊界一般是在聚合或實體層面進行,具體取決於域的複雜性。編程語言

模型服務使用與上下文相關的消息。例如,若是有一個庫存服務,與消耗相關的命令消息將是inventory.product.create或inventory.product.increaseStock。做爲響應,你但願生成一些事件消息,以便系統的其他部分可以瞭解模型是如何變化的,並響應這些更改。本例中生成的事件消息將是inventory.product.created和inventory.product.stockLevelIncreased。分佈式

  1. Denormalizer服務

除了分佈式系統以外,Denormalizer正是關係數據庫所作的事情。它們將多個規範化的輸入源合併到一個可讀的數據結構中,客戶端可使用這些數據結構。微服務

例如,假設一個電商應用。當庫存水平增長或減小,或在庫存中可用時,應用程序應該知道它。

想象一下,若是你是應用工程師,他們使用的是與MongoDB相似的東西——他們只是從外部系統得到了實時的庫存,而無需編寫一行代碼。這也適用於RethinkDB和GraphQL訂閱!

若是團隊須要在Kafka中爲大數據提供數據,只需添加一個Kafka的denormalizer服務。

3.網關服務

網關服務很是相似於Denormalizers。可是,它不是鏈接到數據庫,而是與API鏈接。

最近在和一個叫LiftIgniter的推薦引擎合做,庫存須要同步。該服務訂閱inventory.product.updated 和inventory.product.added 事件,並將格式化數據發佈到適當的端點。

後來,又增長了一項服務,監聽相同的事件,並經過創建Magento網關服務,保持更新庫存的水平。

4.Ingestor服務

到目前爲止,咱們討論的都是經過系統傳播的數據,或者在模型服務中建立的數據。可是,常常須要將外部數據輸入到系統中。從概念上講,來自外部源的數據須要被輸入到系統其它部分所講的通用語言中。

Ingestor服務一般只會產生信息。這些服務一般包括經過HTTP接收API POST,或者運行CRON做業,並在一個時間間隔內抓取。獲取或接收的數據隨後使用通用語言(AMQP w/ JSON)發佈到系統中。

5.適配器服務

適配器服務是更少見,但值得一提。與網關服務相似,適配器使用消息,使用該數據來調用系統上的庫。這個例子是使用ImageMagick這樣的圖形處理工具。ImageMagick是一個強大的工具,可是沒有Node.js綁定。適配器服務經過執行子進程來解決這個問題,而後以系統的通用語言生成消息。

6.API服務

API服務應該保持輕量級。若是您正在將一大堆業務邏輯構建到API中,那麼正在構建一個龐然大物。 它比咱們用「n層」架構看到的應用程序和服務器的組合稍好一些,但最終致使臭名昭著的「大泥球」。

要實現這一點,可使用上面的 Denormalizer 服務,將數據的查詢效率視圖映射到API讀取的數據庫中。這就產生了一個單向的數據流。

Unidirectional Systems

使用上述模式可讓企業在單向工做流中使用不可變事件。若是你已經進入應用程序開發,確定熟悉Redux如何改變了狀態管理的遊戲。有一個存儲在組件樹下的狀態能夠輕鬆地解釋操做如何影響狀態,由於它們是全部發生在集中位置的簡單的不可變事實。

若是遵循上述模式,將使用更復雜的稱爲命令查詢責任隔離(Command Query Responsibility Segregation ,CQRS)的方法。命令是由模型服務消費的,而事件的生成則是由Denormalizer或網關服務所消耗的。而後對讀模型進行查詢。

由於使用的是不可變消息,這使得事件採購成爲構建模型服務的完美模式。值得一提的是Matt Walters的另外一個創造,一個名爲[sourced]的微觀框架,與servicebus完美協調,能夠輕鬆添加事件採購功能來消費服務的事件,並持久存儲到數據庫中。

圖片描述
微服務體系

總結:關於微服務模式這一塊,想說的內容已經說完了,但願個人經驗能夠幫到大家,以爲寫的好的,能夠點贊關注一下,你的點贊關注就是對我最大的支持。

相關文章
相關標籤/搜索