精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當(dāng)前位置:新聞中心行業(yè)動態(tài) → 正文

從單體應(yīng)用轉(zhuǎn)為分布式系統(tǒng):來自Deliveroo的實踐

責(zé)任編輯:editor006 作者: Jan Stenberg |來源:企業(yè)網(wǎng)D1Net  2017-03-21 16:09:52 本文摘自:INFOQ

過去一年中,Deliveroo在商業(yè)和IT領(lǐng)域成長迅速,這導(dǎo)致它的大型單體應(yīng)用面對不少的技術(shù)挑戰(zhàn)。Greg Beech在近期的QCon倫敦大會演講中指出,Deliveroo對此問題的解決方案并非依靠微服務(wù),而是向分布式轉(zhuǎn)變。Beech介紹了Deliveroo在從單體應(yīng)用轉(zhuǎn)變?yōu)榉植际较到y(tǒng)過程中的一些做法。

Deliveroo公司創(chuàng)立于2013年,Beech現(xiàn)任公司的首席工程師。公司起步于采用傳統(tǒng)Ruby on Rails開發(fā)的單體應(yīng)用,數(shù)據(jù)存儲使用了PostgreSQL和Redis,通過不斷增大數(shù)據(jù)庫規(guī)模而處理日益增長的業(yè)務(wù)。一年前,他們需要運行大約20臺Heroku托管服務(wù)器。當(dāng)前運行的服務(wù)器規(guī)模達(dá)數(shù)百臺,這已成為Keroku上部署的最大規(guī)模應(yīng)用,峰值情況下需要使用1800個內(nèi)核和3TB的內(nèi)存。公司由2015年的10名工程師已成長為2017年的近100名工程師,主代碼庫中的有效代碼行達(dá)到約60萬行。

采用單體程序架構(gòu)是一個經(jīng)過深思熟慮的決策,他們因此可以快速添加適合市場需求的特性,但是現(xiàn)在這種架構(gòu)需要面對一些問題。由于當(dāng)前單體程序的規(guī)模增長得很大,Deliveroo受困于性能下降和構(gòu)建時間增加的問題,構(gòu)建時間已經(jīng)從兩年前的7分鐘左右增加到目前的兩個小時左右,進(jìn)而延緩了開發(fā)的速度。大型單體程序也會導(dǎo)致可靠性下降,因為出現(xiàn)一個問題就可能使得所有的服務(wù)宕機。

Deliveroo的解決方案是轉(zhuǎn)向分布式,實現(xiàn)中采用了一種將單體程序切分為三大類“十二要素”(Twelve-Factor)應(yīng)用的方法。這三類應(yīng)用分別是領(lǐng)域服務(wù)(Domain service)、外圍服務(wù)(Edge service)和客戶端應(yīng)用(Client apps for the UI),事件總線為這些服務(wù)提供了支持。

領(lǐng)域服務(wù)是:

占有領(lǐng)域的重要部分。這些服務(wù)占有了領(lǐng)域的重要部分,這些部分只有緊密粘合在一起才具有作用。這就是Beech不喜歡稱其為微服務(wù)的原因所在。 暴露內(nèi)部真實的REST API,包括超媒體。 從事件總線收發(fā)事件。 可以使用其它域服務(wù)的API。

外圍服務(wù)是:

不具有任何一部分領(lǐng)域。 向外部暴露聚合的API。 從事件總線接收事件。 可以使用其它外圍服務(wù)和領(lǐng)域服務(wù)的API。

在這種分布式解決方案中,不存在共享的數(shù)據(jù)存儲。每個應(yīng)用都具有自身的數(shù)據(jù)存儲,除非存在例外情況,否則每個應(yīng)用的數(shù)據(jù)存儲是不能被其它的應(yīng)用訪問的。此外,所有數(shù)據(jù)是作為REST API方式暴露的,Beech指出這是真正包含超媒體的REST。舉個例子,API返回的集合(Collection Resource)是一系列到實體的鏈接,而非內(nèi)嵌的對象。他同時指出,RPC是不允許使用的。

在創(chuàng)建、更新或刪除實體后,領(lǐng)域服務(wù)會通過事件總線發(fā)送事件,他們將這種技術(shù)稱為“呈現(xiàn)狀態(tài)通知”(RSN,Representational State Notification)。事件中從不包含載體,只是鏈接到事件相關(guān)實體。這樣做的部分原因是出于避免總線成為數(shù)據(jù)損失的一個關(guān)鍵源頭。但是一些非關(guān)鍵的不可變值對象是可以在消息中發(fā)送的,這是一種例外情況。

Beech指出雖然Deliveroo對于服務(wù)如何構(gòu)建、如何分層及如何通信給出了相當(dāng)強有力的指南,但依然可以從簡單處著手,按自己需要去演化成一個更為復(fù)雜的架構(gòu)。這樣做的目的在于,允許團隊就像具有自身問題切入點和目標(biāo)的初創(chuàng)公司那樣運行,按團隊需求演化自身的架構(gòu),并在分布式架構(gòu)經(jīng)驗有限的條件下取得成功。

查看英文原文: Moving Deliveroo from a Monolith to a Distributed System

關(guān)鍵字:Deliveroo單體

本文摘自:INFOQ

x 從單體應(yīng)用轉(zhuǎn)為分布式系統(tǒng):來自Deliveroo的實踐 掃一掃
分享本文到朋友圈
當(dāng)前位置:新聞中心行業(yè)動態(tài) → 正文

從單體應(yīng)用轉(zhuǎn)為分布式系統(tǒng):來自Deliveroo的實踐

責(zé)任編輯:editor006 作者: Jan Stenberg |來源:企業(yè)網(wǎng)D1Net  2017-03-21 16:09:52 本文摘自:INFOQ

過去一年中,Deliveroo在商業(yè)和IT領(lǐng)域成長迅速,這導(dǎo)致它的大型單體應(yīng)用面對不少的技術(shù)挑戰(zhàn)。Greg Beech在近期的QCon倫敦大會演講中指出,Deliveroo對此問題的解決方案并非依靠微服務(wù),而是向分布式轉(zhuǎn)變。Beech介紹了Deliveroo在從單體應(yīng)用轉(zhuǎn)變?yōu)榉植际较到y(tǒng)過程中的一些做法。

Deliveroo公司創(chuàng)立于2013年,Beech現(xiàn)任公司的首席工程師。公司起步于采用傳統(tǒng)Ruby on Rails開發(fā)的單體應(yīng)用,數(shù)據(jù)存儲使用了PostgreSQL和Redis,通過不斷增大數(shù)據(jù)庫規(guī)模而處理日益增長的業(yè)務(wù)。一年前,他們需要運行大約20臺Heroku托管服務(wù)器。當(dāng)前運行的服務(wù)器規(guī)模達(dá)數(shù)百臺,這已成為Keroku上部署的最大規(guī)模應(yīng)用,峰值情況下需要使用1800個內(nèi)核和3TB的內(nèi)存。公司由2015年的10名工程師已成長為2017年的近100名工程師,主代碼庫中的有效代碼行達(dá)到約60萬行。

采用單體程序架構(gòu)是一個經(jīng)過深思熟慮的決策,他們因此可以快速添加適合市場需求的特性,但是現(xiàn)在這種架構(gòu)需要面對一些問題。由于當(dāng)前單體程序的規(guī)模增長得很大,Deliveroo受困于性能下降和構(gòu)建時間增加的問題,構(gòu)建時間已經(jīng)從兩年前的7分鐘左右增加到目前的兩個小時左右,進(jìn)而延緩了開發(fā)的速度。大型單體程序也會導(dǎo)致可靠性下降,因為出現(xiàn)一個問題就可能使得所有的服務(wù)宕機。

Deliveroo的解決方案是轉(zhuǎn)向分布式,實現(xiàn)中采用了一種將單體程序切分為三大類“十二要素”(Twelve-Factor)應(yīng)用的方法。這三類應(yīng)用分別是領(lǐng)域服務(wù)(Domain service)、外圍服務(wù)(Edge service)和客戶端應(yīng)用(Client apps for the UI),事件總線為這些服務(wù)提供了支持。

領(lǐng)域服務(wù)是:

占有領(lǐng)域的重要部分。這些服務(wù)占有了領(lǐng)域的重要部分,這些部分只有緊密粘合在一起才具有作用。這就是Beech不喜歡稱其為微服務(wù)的原因所在。 暴露內(nèi)部真實的REST API,包括超媒體。 從事件總線收發(fā)事件。 可以使用其它域服務(wù)的API。

外圍服務(wù)是:

不具有任何一部分領(lǐng)域。 向外部暴露聚合的API。 從事件總線接收事件。 可以使用其它外圍服務(wù)和領(lǐng)域服務(wù)的API。

在這種分布式解決方案中,不存在共享的數(shù)據(jù)存儲。每個應(yīng)用都具有自身的數(shù)據(jù)存儲,除非存在例外情況,否則每個應(yīng)用的數(shù)據(jù)存儲是不能被其它的應(yīng)用訪問的。此外,所有數(shù)據(jù)是作為REST API方式暴露的,Beech指出這是真正包含超媒體的REST。舉個例子,API返回的集合(Collection Resource)是一系列到實體的鏈接,而非內(nèi)嵌的對象。他同時指出,RPC是不允許使用的。

在創(chuàng)建、更新或刪除實體后,領(lǐng)域服務(wù)會通過事件總線發(fā)送事件,他們將這種技術(shù)稱為“呈現(xiàn)狀態(tài)通知”(RSN,Representational State Notification)。事件中從不包含載體,只是鏈接到事件相關(guān)實體。這樣做的部分原因是出于避免總線成為數(shù)據(jù)損失的一個關(guān)鍵源頭。但是一些非關(guān)鍵的不可變值對象是可以在消息中發(fā)送的,這是一種例外情況。

Beech指出雖然Deliveroo對于服務(wù)如何構(gòu)建、如何分層及如何通信給出了相當(dāng)強有力的指南,但依然可以從簡單處著手,按自己需要去演化成一個更為復(fù)雜的架構(gòu)。這樣做的目的在于,允許團隊就像具有自身問題切入點和目標(biāo)的初創(chuàng)公司那樣運行,按團隊需求演化自身的架構(gòu),并在分布式架構(gòu)經(jīng)驗有限的條件下取得成功。

查看英文原文: Moving Deliveroo from a Monolith to a Distributed System

關(guān)鍵字:Deliveroo單體

本文摘自:INFOQ

電子周刊
回到頂部

關(guān)于我們聯(lián)系我們版權(quán)聲明隱私條款廣告服務(wù)友情鏈接投稿中心招賢納士

企業(yè)網(wǎng)版權(quán)所有 ©2010-2024 京ICP備09108050號-6 京公網(wǎng)安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 南木林县| 临高县| 都兰县| 泰安市| 泰来县| 尉氏县| 诸暨市| 古丈县| 永修县| 桂东县| 堆龙德庆县| 阳西县| 海阳市| 灵璧县| 定陶县| 高安市| 包头市| 安塞县| 龙海市| 麻阳| 利津县| 临夏市| 五寨县| 淮南市| 阳新县| 云阳县| 司法| 五台县| 扎兰屯市| 九龙城区| 定襄县| 伊宁县| 遵义县| 田阳县| 高密市| 隆子县| 敦化市| 英吉沙县| 茌平县| 刚察县| 光泽县|