摘要:考慮到這一點,對于每個服務模式,會討論產生或使用消息的類型。本例中生成的事件消息將是和。該服務訂閱和事件,并將格式化數(shù)據(jù)發(fā)布到適當?shù)亩它c。如果遵循上述模式,將使用更復雜的稱為命令查詢責任隔離,的方法。
導讀:對于很多工程師來說,進入微服務領域是很困難的。99%的服務屬于五類之一,通過這種方式劃分責任考慮如何通過管道服務一起管理特性,就像在Unixshell腳本中一樣。
所有的微服務有什么共同之處,域驅動設計之父Eric Evans將其定義為:“(服務)可以消費和生成消息。”
考慮到這一點,對于每個服務模式,會討論產生或使用消息的類型。
這些消息可以再分為兩類:事件和命令。
開始之前,因為上下文很重要,我首先從Matt Walters那里看到了這些微服務模式,它是libraryservicebus的創(chuàng)建者。Servicebus是一個名為NServiceBus的流行.Net庫的節(jié)點改編,由Udi Dahan創(chuàng)建和推廣。
通過Servicebus,可以輕松編寫發(fā)送和監(jiān)聽命令,并使用AMQP作為通用語言發(fā)布和訂閱事件,使用JSON有效負載。這意味著其他編程語言可以輕松實現(xiàn)相同的接口,并能夠無縫地參與由多種語言編寫的部件組成的系統(tǒng)。
1.模型服務(Model Services)
如果想到MVC,那么可以使用這種類型的服務。模型服務是模型應該存在的地方。邊界通常是在聚合或實體層面進行,具體取決于域的復雜性。
模型服務使用與上下文相關的消息。例如,如果有一個庫存服務,與消耗相關的命令消息將是inventory.product.create或inventory.product.increaseStock。作為響應,你希望生成一些事件消息,以便系統(tǒng)的其余部分能夠了解模型是如何變化的,并響應這些更改。本例中生成的事件消息將是inventory.product.created和inventory.product.stockLevelIncreased。
Denormalizer服務
除了分布式系統(tǒng)之外,Denormalizer正是關系數(shù)據(jù)庫所做的事情。它們將多個規(guī)范化的輸入源合并到一個可讀的數(shù)據(jù)結構中,客戶端可以使用這些數(shù)據(jù)結構。
例如,假設一個電商應用。當庫存水平增加或減少,或在庫存中可用時,應用程序應該知道它。
想象一下,如果你是應用工程師,他們使用的是與MongoDB類似的東西——他們只是從外部系統(tǒng)獲得了實時的庫存,而無需編寫一行代碼。這也適用于RethinkDB和GraphQL訂閱!
如果團隊需要在Kafka中為大數(shù)據(jù)提供數(shù)據(jù),只需添加一個Kafka的denormalizer服務。
3.網(wǎng)關服務
網(wǎng)關服務非常類似于Denormalizers。但是,它不是連接到數(shù)據(jù)庫,而是與API連接。
最近在和一個叫LiftIgniter的推薦引擎合作,庫存需要同步。該服務訂閱inventory.product.updated 和inventory.product.added 事件,并將格式化數(shù)據(jù)發(fā)布到適當?shù)亩它c。
后來,又增加了一項服務,監(jiān)聽相同的事件,并通過建立Magento網(wǎng)關服務,保持更新庫存的水平。
4.Ingestor服務
到目前為止,我們討論的都是通過系統(tǒng)傳播的數(shù)據(jù),或者在模型服務中創(chuàng)建的數(shù)據(jù)。但是,經常需要將外部數(shù)據(jù)輸入到系統(tǒng)中。從概念上講,來自外部源的數(shù)據(jù)需要被輸入到系統(tǒng)其它部分所講的通用語言中。
Ingestor服務通常只會產生信息。這些服務通常包括通過HTTP接收API POST,或者運行CRON作業(yè),并在一個時間間隔內抓取。獲取或接收的數(shù)據(jù)隨后使用通用語言(AMQP w/ JSON)發(fā)布到系統(tǒng)中。
5.適配器服務
適配器服務是更少見,但值得一提。與網(wǎng)關服務類似,適配器使用消息,使用該數(shù)據(jù)來調用系統(tǒng)上的庫。這個例子是使用ImageMagick這樣的圖形處理工具。ImageMagick是一個強大的工具,但是沒有Node.js綁定。適配器服務通過執(zhí)行子進程來解決這個問題,然后以系統(tǒng)的通用語言生成消息。
6.API服務
API服務應該保持輕量級。如果您正在將一大堆業(yè)務邏輯構建到API中,那么正在構建一個龐然大物。 它比我們用“n層”架構看到的應用程序和服務器的組合稍好一些,但最終導致臭名昭著的“大泥球”。
要實現(xiàn)這一點,可以使用上面的 Denormalizer 服務,將數(shù)據(jù)的查詢效率視圖映射到API讀取的數(shù)據(jù)庫中。這就產生了一個單向的數(shù)據(jù)流。
Unidirectional Systems
使用上述模式可以讓企業(yè)在單向工作流中使用不可變事件。如果你已經進入應用程序開發(fā),肯定熟悉Redux如何改變了狀態(tài)管理的游戲。有一個存儲在組件樹下的狀態(tài)可以輕松地解釋操作如何影響狀態(tài),因為它們是所有發(fā)生在集中位置的簡單的不可變事實。
如果遵循上述模式,將使用更復雜的稱為命令查詢責任隔離(Command Query Responsibility Segregation ,CQRS)的方法。命令是由模型服務消費的,而事件的生成則是由Denormalizer或網(wǎng)關服務所消耗的。然后對讀模型進行查詢。
因為使用的是不可變消息,這使得事件采購成為構建模型服務的完美模式。值得一提的是Matt Walters的另一個創(chuàng)造,一個名為[sourced]的微觀框架,與servicebus完美協(xié)調,可以輕松添加事件采購功能來消費服務的事件,并持久存儲到數(shù)據(jù)庫中。
微服務體系
總結:關于微服務模式這一塊,想說的內容已經說完了,希望我的經驗可以幫到你們,覺得寫的好的,可以點贊關注一下,你的點贊關注就是對我最大的支持。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/71054.html
摘要:如果沒有學習過計算機科學的程序員,當我們在處理一些問題時,比較熟悉的數(shù)據(jù)結構就是數(shù)組,數(shù)組無疑是一個很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...
摘要:如果沒有學習過計算機科學的程序員,當我們在處理一些問題時,比較熟悉的數(shù)據(jù)結構就是數(shù)組,數(shù)組無疑是一個很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見 CSS 布局方式詳見: 一些常見的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...
恍然間,發(fā)現(xiàn)自己已經在這個行業(yè)五年之久,回顧過往,思緒良多,一路走來,或多或少都經歷過一些坎坷,也碰到過不少大大小小的困難。在此就不多加敘述了。 本篇文章主要想寫給剛入門的測試員幾個忠告,在踏入職場初期,大多數(shù)人都還對未來一片迷茫,找不到北,當年剛畢業(yè)時的我也是這樣,可摸著石頭過河畢竟不是長久之計,希望新人能夠謹記以下幾點,在職場道路上走的更加通順一些。話不多說,開始分享。 01、在校期間的基礎...
摘要:適當引導面試官。如果有機會來實習,如何最有效的快速成長淘寶技術部前端內部有針對新同學的前端夜校,有專門的老師授課。 阿里巴巴2019前端實習生招聘還剩最后兩周,面向2019年11月1日至2020年10月31日之間畢業(yè)的同學,在這里分享下阿里前端面試考核的關鍵點: Q:在面試過程中,前端面試官如何考核面試者?A:會看同學為什么選擇前端行業(yè)?是因為算法太難?Java、C++太難?還是因為熱...
閱讀 1636·2021-11-02 14:42
閱讀 531·2021-10-18 13:24
閱讀 968·2021-10-12 10:12
閱讀 1825·2021-09-02 15:41
閱讀 3211·2019-08-30 15:56
閱讀 2884·2019-08-29 16:09
閱讀 2065·2019-08-29 11:13
閱讀 3626·2019-08-28 18:06