成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

掌握這幾種微服務(wù)模式助你成為更出色的工程師

tinyq / 3522人閱讀

摘要:考慮到這一點(diǎn),對(duì)于每個(gè)服務(wù)模式,會(huì)討論產(chǎn)生或使用消息的類(lèi)型。本例中生成的事件消息將是和。該服務(wù)訂閱和事件,并將格式化數(shù)據(jù)發(fā)布到適當(dāng)?shù)亩它c(diǎn)。如果遵循上述模式,將使用更復(fù)雜的稱為命令查詢責(zé)任隔離,的方法。


導(dǎo)讀:對(duì)于很多工程師來(lái)說(shuō),進(jìn)入微服務(wù)領(lǐng)域是很困難的。99%的服務(wù)屬于五類(lèi)之一,通過(guò)這種方式劃分責(zé)任考慮如何通過(guò)管道服務(wù)一起管理特性,就像在Unixshell腳本中一樣。

所有的微服務(wù)有什么共同之處,域驅(qū)動(dòng)設(shè)計(jì)之父Eric Evans將其定義為:“(服務(wù))可以消費(fèi)和生成消息?!?/p>

考慮到這一點(diǎn),對(duì)于每個(gè)服務(wù)模式,會(huì)討論產(chǎn)生或使用消息的類(lèi)型。

這些消息可以再分為兩類(lèi):事件和命令。

開(kāi)始之前,因?yàn)樯舷挛暮苤匾沂紫葟腗att Walters那里看到了這些微服務(wù)模式,它是libraryservicebus的創(chuàng)建者。Servicebus是一個(gè)名為NServiceBus的流行.Net庫(kù)的節(jié)點(diǎn)改編,由Udi Dahan創(chuàng)建和推廣。

通過(guò)Servicebus,可以輕松編寫(xiě)發(fā)送和監(jiān)聽(tīng)命令,并使用AMQP作為通用語(yǔ)言發(fā)布和訂閱事件,使用JSON有效負(fù)載。這意味著其他編程語(yǔ)言可以輕松實(shí)現(xiàn)相同的接口,并能夠無(wú)縫地參與由多種語(yǔ)言編寫(xiě)的部件組成的系統(tǒng)。

1.模型服務(wù)(Model Services)

如果想到MVC,那么可以使用這種類(lèi)型的服務(wù)。模型服務(wù)是模型應(yīng)該存在的地方。邊界通常是在聚合或?qū)嶓w層面進(jìn)行,具體取決于域的復(fù)雜性。

模型服務(wù)使用與上下文相關(guān)的消息。例如,如果有一個(gè)庫(kù)存服務(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ù)庫(kù)所做的事情。它們將多個(gè)規(guī)范化的輸入源合并到一個(gè)可讀的數(shù)據(jù)結(jié)構(gòu)中,客戶端可以使用這些數(shù)據(jù)結(jié)構(gòu)。

例如,假設(shè)一個(gè)電商應(yīng)用。當(dāng)庫(kù)存水平增加或減少,或在庫(kù)存中可用時(shí),應(yīng)用程序應(yīng)該知道它。

想象一下,如果你是應(yīng)用工程師,他們使用的是與MongoDB類(lèi)似的東西——他們只是從外部系統(tǒng)獲得了實(shí)時(shí)的庫(kù)存,而無(wú)需編寫(xiě)一行代碼。這也適用于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ù)非常類(lèi)似于Denormalizers。但是,它不是連接到數(shù)據(jù)庫(kù),而是與API連接。

最近在和一個(gè)叫LiftIgniter的推薦引擎合作,庫(kù)存需要同步。該服務(wù)訂閱inventory.product.updated 和inventory.product.added 事件,并將格式化數(shù)據(jù)發(fā)布到適當(dāng)?shù)亩它c(diǎn)。

后來(lái),又增加了一項(xiàng)服務(wù),監(jiān)聽(tīng)相同的事件,并通過(guò)建立Magento網(wǎng)關(guān)服務(wù),保持更新庫(kù)存的水平。

4.Ingestor服務(wù)

到目前為止,我們討論的都是通過(guò)系統(tǒng)傳播的數(shù)據(jù),或者在模型服務(wù)中創(chuàng)建的數(shù)據(jù)。但是,經(jīng)常需要將外部數(shù)據(jù)輸入到系統(tǒng)中。從概念上講,來(lái)自外部源的數(shù)據(jù)需要被輸入到系統(tǒng)其它部分所講的通用語(yǔ)言中。

Ingestor服務(wù)通常只會(huì)產(chǎn)生信息。這些服務(wù)通常包括通過(guò)HTTP接收API POST,或者運(yùn)行CRON作業(yè),并在一個(gè)時(shí)間間隔內(nèi)抓取。獲取或接收的數(shù)據(jù)隨后使用通用語(yǔ)言(AMQP w/ JSON)發(fā)布到系統(tǒng)中。

5.適配器服務(wù)

適配器服務(wù)是更少見(jiàn),但值得一提。與網(wǎng)關(guān)服務(wù)類(lèi)似,適配器使用消息,使用該數(shù)據(jù)來(lái)調(diào)用系統(tǒng)上的庫(kù)。這個(gè)例子是使用ImageMagick這樣的圖形處理工具。ImageMagick是一個(gè)強(qiáng)大的工具,但是沒(méi)有Node.js綁定。適配器服務(wù)通過(guò)執(zhí)行子進(jìn)程來(lái)解決這個(gè)問(wèn)題,然后以系統(tǒng)的通用語(yǔ)言生成消息。

6.API服務(wù)

API服務(wù)應(yīng)該保持輕量級(jí)。如果您正在將一大堆業(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ù)庫(kù)中。這就產(chǎn)生了一個(gè)單向的數(shù)據(jù)流。

Unidirectional Systems

使用上述模式可以讓企業(yè)在單向工作流中使用不可變事件。如果你已經(jīng)進(jìn)入應(yīng)用程序開(kāi)發(fā),肯定熟悉Redux如何改變了狀態(tài)管理的游戲。有一個(gè)存儲(chǔ)在組件樹(shù)下的狀態(tài)可以輕松地解釋操作如何影響狀態(tài),因?yàn)樗鼈兪撬邪l(fā)生在集中位置的簡(jiǎn)單的不可變事實(shí)。

如果遵循上述模式,將使用更復(fù)雜的稱為命令查詢責(zé)任隔離(Command Query Responsibility Segregation ,CQRS)的方法。命令是由模型服務(wù)消費(fèi)的,而事件的生成則是由Denormalizer或網(wǎng)關(guān)服務(wù)所消耗的。然后對(duì)讀模型進(jìn)行查詢。

因?yàn)槭褂玫氖遣豢勺兿?,這使得事件采購(gòu)成為構(gòu)建模型服務(wù)的完美模式。值得一提的是Matt Walters的另一個(gè)創(chuàng)造,一個(gè)名為[sourced]的微觀框架,與servicebus完美協(xié)調(diào),可以輕松添加事件采購(gòu)功能來(lái)消費(fèi)服務(wù)的事件,并持久存儲(chǔ)到數(shù)據(jù)庫(kù)中。


微服務(wù)體系

總結(jié):關(guān)于微服務(wù)模式這一塊,想說(shuō)的內(nèi)容已經(jīng)說(shuō)完了,希望我的經(jīng)驗(yàn)可以幫到你們,覺(jué)得寫(xiě)的好的,可以點(diǎn)贊關(guān)注一下,你的點(diǎn)贊關(guān)注就是對(duì)我最大的支持。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71054.html

相關(guān)文章

  • 前端開(kāi)發(fā)周報(bào): CSS 布局方式與JavaScript數(shù)據(jù)結(jié)構(gòu)和算法

    摘要:如果沒(méi)有學(xué)習(xí)過(guò)計(jì)算機(jī)科學(xué)的程序員,當(dāng)我們?cè)谔幚硪恍﹩?wèn)題時(shí),比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無(wú)疑是一個(gè)很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見(jiàn) CSS 布局方式詳見(jiàn): 一些常見(jiàn)的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...

    huhud 評(píng)論0 收藏0
  • 前端開(kāi)發(fā)周報(bào): CSS 布局方式與JavaScript數(shù)據(jù)結(jié)構(gòu)和算法

    摘要:如果沒(méi)有學(xué)習(xí)過(guò)計(jì)算機(jī)科學(xué)的程序員,當(dāng)我們?cè)谔幚硪恍﹩?wèn)題時(shí),比較熟悉的數(shù)據(jù)結(jié)構(gòu)就是數(shù)組,數(shù)組無(wú)疑是一個(gè)很好的選擇。 showImg(https://segmentfault.com/img/bVTSjt?w=400&h=300); 1、常見(jiàn) CSS 布局方式詳見(jiàn): 一些常見(jiàn)的 CSS 布局方式梳理,涉及 Flex 布局、Grid 布局、圣杯布局、雙飛翼布局等。http://cherryb...

    ?xiaoxiao, 評(píng)論0 收藏0
  • ??作為測(cè)試行業(yè)過(guò)來(lái)人,寶貴經(jīng)驗(yàn)分享給剛?cè)胄?em>的你

    恍然間,發(fā)現(xiàn)自己已經(jīng)在這個(gè)行業(yè)五年之久,回顧過(guò)往,思緒良多,一路走來(lái),或多或少都經(jīng)歷過(guò)一些坎坷,也碰到過(guò)不少大大小小的困難。在此就不多加敘述了。 本篇文章主要想寫(xiě)給剛?cè)腴T(mén)的測(cè)試員幾個(gè)忠告,在踏入職場(chǎng)初期,大多數(shù)人都還對(duì)未來(lái)一片迷茫,找不到北,當(dāng)年剛畢業(yè)時(shí)的我也是這樣,可摸著石頭過(guò)河畢竟不是長(zhǎng)久之計(jì),希望新人能夠謹(jǐn)記以下幾點(diǎn),在職場(chǎng)道路上走的更加通順一些。話不多說(shuō),開(kāi)始分享。 01、在校期間的基礎(chǔ)...

    Bamboy 評(píng)論0 收藏0
  • 資深前端面試官建議,助你走進(jìn)阿里

    摘要:適當(dāng)引導(dǎo)面試官。如果有機(jī)會(huì)來(lái)實(shí)習(xí),如何最有效的快速成長(zhǎng)淘寶技術(shù)部前端內(nèi)部有針對(duì)新同學(xué)的前端夜校,有專門(mén)的老師授課。 阿里巴巴2019前端實(shí)習(xí)生招聘還剩最后兩周,面向2019年11月1日至2020年10月31日之間畢業(yè)的同學(xué),在這里分享下阿里前端面試考核的關(guān)鍵點(diǎn): Q:在面試過(guò)程中,前端面試官如何考核面試者?A:會(huì)看同學(xué)為什么選擇前端行業(yè)?是因?yàn)樗惴ㄌy?Java、C++太難?還是因?yàn)闊?..

    Pluser 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<