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