自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

優(yōu)步:面向“域”的微服務(wù)架構(gòu),滿足2200個關(guān)鍵微服務(wù)的擴(kuò)展

開發(fā) 前端
最近,業(yè)界圍繞面向服務(wù)的架構(gòu),尤其是微服務(wù)架構(gòu)的弊端進(jìn)行了大量討論。幾年前,由于許多用戶關(guān)注微服務(wù)架構(gòu)的眾多優(yōu)勢,例如獨(dú)立部署形式的靈活性,明確的所有權(quán),系統(tǒng)穩(wěn)定性的改進(jìn),以及關(guān)注點(diǎn)的更好分離,許多企業(yè)很快采用了微服務(wù)架構(gòu)。

 最近,業(yè)界圍繞面向服務(wù)的架構(gòu),尤其是微服務(wù)架構(gòu)的弊端進(jìn)行了大量討論。幾年前,由于許多用戶關(guān)注微服務(wù)架構(gòu)的眾多優(yōu)勢,例如獨(dú)立部署形式的靈活性,明確的所有權(quán),系統(tǒng)穩(wěn)定性的改進(jìn),以及關(guān)注點(diǎn)的更好分離,許多企業(yè)很快采用了微服務(wù)架構(gòu)。而現(xiàn)在關(guān)于微服務(wù)會大大增加其復(fù)雜性的趨勢,有時甚至使瑣碎的功能也難以構(gòu)建的話題,引發(fā)了不少用戶的討論。

[[335051]]

Uber近年來一直在使用微服務(wù),現(xiàn)在Uber已經(jīng)增長到大約2200個關(guān)鍵微服務(wù),這個過程中Uber做了不少的權(quán)衡。Uber表示,在過去的兩年中,他們嘗試降低微服務(wù)的復(fù)雜性,同時仍保持微服務(wù)架構(gòu)的優(yōu)勢。這篇文章詳細(xì)介紹了Uber對微服務(wù)架構(gòu)的通用方法,Uber將其稱為“面向域的微服務(wù)架構(gòu)”(簡稱:DOMA)。

面對微服務(wù)的不足,批評微服務(wù)架構(gòu)的話題喧囂塵上,但很少有用戶主張完全拒絕微服務(wù)架構(gòu)。因?yàn)檫\(yùn)營收益太重要了,似乎還有針對微服務(wù)的更好替代品。Uber使用DOMA通用方法的目標(biāo)是為降低總體系統(tǒng)復(fù)雜性,同時保持與微服務(wù)架構(gòu)相關(guān)聯(lián)的靈活性的企業(yè),提供微服務(wù)向前發(fā)展的道路。

什么是微服務(wù)?

微服務(wù)是面向服務(wù)的架構(gòu)的擴(kuò)展。與過去大型的整體“服務(wù)”相反,微服務(wù)代表一組范圍狹窄的功能的應(yīng)用程序。這些應(yīng)用程序是托管的,并且可以通過網(wǎng)絡(luò)使用,并公開定義明確的接口。其他應(yīng)用程序通過進(jìn)行“ 遠(yuǎn)程過程調(diào)用 ”(RPC)來調(diào)用這個接口。

微服務(wù)架構(gòu)的關(guān)鍵特征是代碼的托管,調(diào)用和部署方式。如果我們考慮大型的整體應(yīng)用程序,通常會將它們分為具有明確定義的接口的封裝組件。這些接口將被直接稱為進(jìn)程內(nèi)接口,而不是通過網(wǎng)絡(luò)。通過這種方式,我們可以開始將微服務(wù)當(dāng)做具有性能問題(網(wǎng)絡(luò)I/O和序列化/反序列化)的庫,以便調(diào)用其任何功能。

當(dāng)我們以這種方式考慮微服務(wù)時,我們可能會思考為什么我們會完全采用微服務(wù)架構(gòu)?答案通常是獨(dú)立部署和擴(kuò)展。對于大型的整體應(yīng)用程序,企業(yè)不得不一次部署或釋放所有代碼。應(yīng)用程序的每個新版本都可能涉及許多更改,而且部署變得既危險(xiǎn)又費(fèi)時。任何差池都可能使整個系統(tǒng)癱瘓。

換句話說,企業(yè)采用微服務(wù)來獲得運(yùn)營的價(jià)值,而以性能為代價(jià)。企業(yè)還必須承擔(dān)維護(hù)支持微服務(wù)所需的基礎(chǔ)架構(gòu)的成本。事實(shí)證明,在很多情況下,這種權(quán)衡是有道理的,但這也是反對過早采用微服務(wù)架構(gòu)的理由之一。

緣起

Uber采用微服務(wù)架構(gòu),因?yàn)榇蠹s在2012年至2013年,Uber擁有兩個整體服務(wù),并且微服務(wù)的使用解決了許多運(yùn)營問題。

可用性風(fēng)險(xiǎn)。單一代碼庫中的單個回歸可以使整個系統(tǒng)癱瘓。

風(fēng)險(xiǎn)高昂的部署。由于頻繁需要回滾,因此執(zhí)行這些操作很痛苦且耗時。

關(guān)注點(diǎn)分離差。使用龐大的代碼庫,很難很好地保持關(guān)注點(diǎn)的分離。在指數(shù)增長的環(huán)境中,權(quán)宜有時會導(dǎo)致邏輯和組件之間的邊界不清晰。

執(zhí)行效率低下。這些問題加在一起使團(tuán)隊(duì)難以自主或獨(dú)立執(zhí)行。

換句話說,隨著Uber的工程師人數(shù)從10增長到100,擁有多個團(tuán)隊(duì),擁有部分技術(shù)棧的整體式架構(gòu)將團(tuán)隊(duì)的命運(yùn)束縛在一起,使其難以獨(dú)立運(yùn)營。

Uber采用了微服務(wù)架構(gòu)之后。最終,系統(tǒng)變得更加靈活,從而使團(tuán)隊(duì)更加自治。

系統(tǒng)可靠性。在微服務(wù)架構(gòu)中,總體系統(tǒng)可靠性得到提高。單個服務(wù)可以關(guān)閉(并回滾),而無需關(guān)閉整個系統(tǒng)。

關(guān)注點(diǎn)分離。在架構(gòu)上,微服務(wù)架構(gòu)迫使Uber提出以下問題:“為什么存在這項(xiàng)服務(wù)?”,從而更清楚地定義不同組件的角色。

清除所有權(quán)。誰擁有什么代碼變得更加清楚。服務(wù)通常在個人,團(tuán)隊(duì)或企業(yè)級別擁有,從而實(shí)現(xiàn)更快的增長。

自主執(zhí)行。獨(dú)立的部署和更清晰的所有權(quán)界限,可釋放各個產(chǎn)品和平臺團(tuán)隊(duì)的自主執(zhí)行權(quán)。

開發(fā)人員速度。團(tuán)隊(duì)可以獨(dú)立部署代碼,這使他們能夠按照自己的節(jié)奏執(zhí)行。

毫不夸張地說,沒有微服務(wù)架構(gòu),Uber將無法實(shí)現(xiàn)今天維持的執(zhí)行規(guī)模和執(zhí)行質(zhì)量。

但是,隨著Uber規(guī)模的擴(kuò)大,從100名工程師增加到1000名工程師,Uber開始注意到與系統(tǒng)復(fù)雜性大大增加相關(guān)的一系列問題。使用微服務(wù)架構(gòu),可以將單個整體的代碼庫換成“黑盒子”,“黑盒子”的功能可以隨時更改,并且很容易導(dǎo)致意外的發(fā)生。

 

優(yōu)步:面向“域”的微服務(wù)架構(gòu),滿足2200個關(guān)鍵微服務(wù)的擴(kuò)展

 

要調(diào)試pick-up問題,工程師必須在12個不同的團(tuán)隊(duì)中完成約50項(xiàng)服務(wù)。

由于服務(wù)之間的調(diào)用可能會深入很多層,因此了解服務(wù)之間的依賴性可能會變得非常困難。第n個依賴項(xiàng)中的延遲峰值可能會導(dǎo)致上游問題的級聯(lián)。如果沒有合適的工具,就不可能看到實(shí)際發(fā)生的事情,從而使調(diào)試變得困難。

 

優(yōu)步:面向“域”的微服務(wù)架構(gòu),滿足2200個關(guān)鍵微服務(wù)的擴(kuò)展

 

Jaeger于2018年中發(fā)布的Uber微服務(wù)架構(gòu)

為了構(gòu)建簡單的功能,工程師經(jīng)常必須跨多個服務(wù)工作,所有這些服務(wù)均由不同的個人和團(tuán)隊(duì)擁有。這就需要大量的協(xié)作以及花在會議,設(shè)計(jì)和代碼審查上的時間。當(dāng)團(tuán)隊(duì)在彼此的服務(wù)中構(gòu)建代碼,修改彼此的數(shù)據(jù)模型,甚至代表服務(wù)所有者執(zhí)行部署時,先前明確的服務(wù)所有權(quán)承諾將受到損害??梢孕纬删W(wǎng)絡(luò)整體,其中必須將似乎獨(dú)立的所有服務(wù)一起部署以安全地執(zhí)行任何更改。

 

優(yōu)步:面向“域”的微服務(wù)架構(gòu),滿足2200個關(guān)鍵微服務(wù)的擴(kuò)展

 

大約在2018年Uber的復(fù)雜流程示例,在DOMA之前需要10個接觸點(diǎn)才能進(jìn)行簡單集成。

結(jié)果是開發(fā)人員體驗(yàn)變慢,服務(wù)所有者不穩(wěn)定,遷移更加痛苦等等。對于已經(jīng)采用微服務(wù)架構(gòu)的企業(yè)而言,沒有回頭路。需要找到解決方案來克服這些挑戰(zhàn)

面向“域”的微服務(wù)架構(gòu)

如果可以將微服務(wù)視為I/O綁定庫,而將“微服務(wù)架構(gòu)”視為大型的分布式應(yīng)用程序,則可以使用眾所周知的架構(gòu)來思考如何組織代碼。

因此,“面向域的微服務(wù)架構(gòu)”大量借鑒了已建立的組織代碼的方式,例如域驅(qū)動設(shè)計(jì),干凈架構(gòu),面向服務(wù)的架構(gòu),以及面向?qū)ο蠛兔嫦蚪涌诘脑O(shè)計(jì)模式。Uber將DOMA視為創(chuàng)新,因?yàn)樗窃诖笮徒M織的大型分布式系統(tǒng)中,利用既定設(shè)計(jì)原則的相對新穎的方法。

與DOMA相關(guān)的核心原理和術(shù)語如下:

  • Uber不是圍繞單個微服務(wù),而是圍繞相關(guān)微服務(wù)的集合——稱為域。
  • Uber進(jìn)一步創(chuàng)建稱為圖層的域的集合。域所屬的層確定了允許該域內(nèi)的微服務(wù)承擔(dān)什么依賴性——稱為層設(shè)計(jì)。
  • Uber為域提供干凈的接口,這些域被視為集合的單個入口點(diǎn)——稱為網(wǎng)關(guān)。
  • 最后,Uber確定每個域都應(yīng)該與其他域不可知,也就是說,一個域不應(yīng)該具有與在其代碼庫或數(shù)據(jù)模型內(nèi)部進(jìn)行硬編碼的另一個域相關(guān)的邏輯。由于團(tuán)隊(duì)經(jīng)常需要在另一個團(tuán)隊(duì)的域中,包括邏輯(如,自定義驗(yàn)證邏輯或數(shù)據(jù)模型上的某些元上下文),因此我們提供了一種擴(kuò)展架構(gòu),以支持該域中定義明確的擴(kuò)展點(diǎn)。

換句話說,通過提供系統(tǒng)的架構(gòu),域網(wǎng)關(guān)和預(yù)定義的擴(kuò)展點(diǎn),DOMA打算將微服務(wù)腳骨從復(fù)雜的東西轉(zhuǎn)變?yōu)榭衫斫獾臇|西:結(jié)構(gòu)化的一組靈活,可重用和分層的組件。

以下將深入研究Uber在DOMA中的實(shí)施,已經(jīng)看到的價(jià)值,以及為可能希望采用這種方法的企業(yè)提供的實(shí)用建議。

DOMA的實(shí)施

Uber域代表一個或多個與邏輯功能分組綁定的微服務(wù)的集合。設(shè)計(jì)域時常見的問題是“域應(yīng)該有多大?” 在此Uber不提供任何指導(dǎo)。有些域可以包含數(shù)十個服務(wù),有些域只能包含一個服務(wù)。

重要的任務(wù)是仔細(xì)考慮每個集合的邏輯角色。例如,Uber的地圖搜索服務(wù)構(gòu)成一個域,票價(jià)服務(wù)是一個領(lǐng)域,匹配平臺(匹配駕駛員)是一個域。這些也不總是遵循企業(yè)的組織結(jié)構(gòu)。Uber Maps組織本身分為三個域,在三個不同的網(wǎng)關(guān)后面有80個微服務(wù)。

層設(shè)計(jì)

層設(shè)計(jì)回答了“什么服務(wù)可以調(diào)用什么其他服務(wù)?”的問題。在Uber的微服務(wù)架構(gòu)中,可以將層設(shè)計(jì)視為“按比例分離關(guān)注點(diǎn)”。另外,可以將層設(shè)計(jì)視為“大規(guī)模依賴管理”。

層設(shè)計(jì)描述了一種機(jī)制,用于考慮Uber跨服務(wù)依賴項(xiàng)的失敗故障面(原文為失敗爆炸半徑, failure blast radius)和產(chǎn)品特異性。當(dāng)域從底層移到頂層時,它們在中斷的情況下會影響較少的服務(wù),并代表更多特定的產(chǎn)品使用案例。相反,底層的功能具有更多的依存關(guān)系,因此趨向于具有更大的故障面,并代表了更通用的業(yè)務(wù)功能集。下圖說明了此概念。

 

優(yōu)步:面向“域”的微服務(wù)架構(gòu),滿足2200個關(guān)鍵微服務(wù)的擴(kuò)展

 

可以將頂層看作是特定的用戶體驗(yàn)(比如移動功能),而底層看作是通用的業(yè)務(wù)功能(比如賬戶管理)。這為我們思考故障面和域集成等問題提供了有益的啟發(fā)。

值得注意的是,在這個圖表中,功能常常從特定的“向下”到更普遍的“向下”。可以想象,隨著需求的發(fā)展,一個簡單的特性最終會越來越像一個平臺。事實(shí)上,這種向下的遷移是意料之中的,而且Uber的許多核心業(yè)務(wù)平臺一開始只是針對乘客或司機(jī)的特定功能,隨著我們發(fā)展了更多的業(yè)務(wù)線,它們變得越來越普遍(比如Uber Eats或Uber Freight)。

在Uber內(nèi)部,建立了以下五個層次。

  • 基礎(chǔ)設(shè)施層。提供任何工程團(tuán)隊(duì)可以使用的功能。這是Uber對諸如存儲或網(wǎng)絡(luò)等重大工程問題的解答。
  • 業(yè)務(wù)層。提供Uber作為一個組織可以使用的功能,但這并不特定于特定的產(chǎn)品類別或業(yè)務(wù)(LOB),如乘車、餐飲或貨運(yùn)。
  • 產(chǎn)品層。提供與特定產(chǎn)品類別或LOB相關(guān)的功能,但與移動應(yīng)用程序無關(guān),比如“請求搭車”邏輯,它被多個搭車應(yīng)用程序(Rider、Rider“Lite”、m.uber.com等)利用。
  • 演示層。提供與面向消費(fèi)者的應(yīng)用程序(移動/web)中存在的特性直接相關(guān)的功能。
  • 邊緣層。安全向外界開放優(yōu)步服務(wù)。這一層也支持移動應(yīng)用程序。

如您所見,后續(xù)的每一層都代表了越來越具體的功能分組,并且具有越來越小的故障面(換句話說,更少的組件依賴于該層內(nèi)的功能)。

網(wǎng)關(guān)

術(shù)語“網(wǎng)關(guān)API”在微服務(wù)架構(gòu)中已經(jīng)是一個廣泛建立的概念。Uber的定義與已建立的定義差別不大,除了傾向于將網(wǎng)關(guān)專門看作底層服務(wù)集合(稱之為域)的單個入口點(diǎn)之外。網(wǎng)關(guān)的成功依賴于API設(shè)計(jì)的成功。

 

優(yōu)步:面向“域”的微服務(wù)架構(gòu),滿足2200個關(guān)鍵微服務(wù)的擴(kuò)展

 

上圖說明了網(wǎng)關(guān)的高級圖。它抽象出域的內(nèi)部細(xì)節(jié)——多個服務(wù)、數(shù)據(jù)表、ETL管道等。只有接口—RPC api、消息傳遞事件和查詢被公開給其他域。

由于上游使用者只在單個服務(wù)上操作,因此通過上游服務(wù)只接受單個依賴項(xiàng)(而不是依賴于某個域中可能存在的多個下游服務(wù)),網(wǎng)關(guān)在未來的遷移、可發(fā)現(xiàn)性和系統(tǒng)復(fù)雜性的整體降低方面提供了許多好處。如果從面向?qū)ο笤O(shè)計(jì)的角度來考慮網(wǎng)關(guān),那么它們就是接口定義,它使Uber能夠根據(jù)底層“實(shí)現(xiàn)”(在本例中是底層微服務(wù)的集合)來做任何想做的事情。

擴(kuò)展

擴(kuò)展表示一種擴(kuò)展域的機(jī)制。擴(kuò)展的基本定義是,它提供了一種機(jī)制來擴(kuò)展基礎(chǔ)服務(wù)的功能,而不改變該服務(wù)的實(shí)際實(shí)現(xiàn),也不影響其總體可靠性。在Uber,提供兩種不同的擴(kuò)展模型:邏輯擴(kuò)展和數(shù)據(jù)擴(kuò)展。擴(kuò)展的概念允許Uber將架構(gòu)擴(kuò)展到多個團(tuán)隊(duì),從而能夠彼此獨(dú)立地工作。

邏輯擴(kuò)展

邏輯擴(kuò)展為擴(kuò)展服務(wù)的底層邏輯提供了一種機(jī)制。對于邏輯擴(kuò)展,Uber使用provider or plugin模式的變體,并在逐個服務(wù)的基礎(chǔ)上定義接口。這使得擴(kuò)展團(tuán)隊(duì)能夠以接口驅(qū)動的方式實(shí)現(xiàn)擴(kuò)展邏輯,而無需修改底層平臺的核心代碼。

如,一個司機(jī)上線(go online)。通常,我們會進(jìn)行各種檢查,來確保司機(jī)可以運(yùn)營(安全檢查、合規(guī)等)。每一個都屬于一個單獨(dú)的團(tuán)隊(duì)。實(shí)現(xiàn)這一點(diǎn)的一種方法是讓每個團(tuán)隊(duì)在相同的端點(diǎn)編寫邏輯,但這可能會引入復(fù)雜性。每個檢查都需要定制的、完全不相關(guān)的邏輯。

對于邏輯擴(kuò)展,“go online”端點(diǎn)將定義一個接口,希望每個擴(kuò)展都符合預(yù)定義的請求類型和響應(yīng)。每個團(tuán)隊(duì)將注冊一個負(fù)責(zé)執(zhí)行此邏輯的擴(kuò)展。在這種情況下,它們可能只是取一些關(guān)于驅(qū)動程序的上下文,然后返回一個bool,說明驅(qū)動程序是否可以上線。go online端點(diǎn)將簡單地遍歷這些響應(yīng),并確定其中是否有錯誤。

這將核心代碼與每個擴(kuò)展解耦,并提供擴(kuò)展之間的隔離,而不知道其他邏輯正在執(zhí)行。圍繞它構(gòu)建更多的功能很容易,比如可觀察性或特性標(biāo)記。

數(shù)據(jù)擴(kuò)展

數(shù)據(jù)擴(kuò)展提供了將任意數(shù)據(jù)附加到接口,來避免核心平臺數(shù)據(jù)模型膨脹的機(jī)制。對于數(shù)據(jù)擴(kuò)展,Uber利用了Protobuf的Any功能,讓團(tuán)隊(duì)可以向請求添加任意數(shù)據(jù)。服務(wù)通常會存儲這些數(shù)據(jù)或?qū)⑵鋫鬟f給邏輯擴(kuò)展,便于核心平臺永遠(yuǎn)不會對這個任意上下文進(jìn)行反序列化(從而“knowing about”)。Protobuf的Any實(shí)現(xiàn)帶來了一些基礎(chǔ)設(shè)施開銷,以換取更強(qiáng)的類型。對于更簡單的實(shí)現(xiàn),可以簡單地使用JSON字符串表示任意數(shù)據(jù)。

 

優(yōu)步:面向“域”的微服務(wù)架構(gòu),滿足2200個關(guān)鍵微服務(wù)的擴(kuò)展

 

自定義

除了邏輯和數(shù)據(jù)擴(kuò)展,Uber的許多團(tuán)隊(duì)都引入了適合自己領(lǐng)域的擴(kuò)展模式。例如,與presentation架構(gòu)綁定的許多集成使用基于DAG的任務(wù)執(zhí)行邏輯。

價(jià)值所在

Uber的幾乎每個主要域都在某種程度上受到了DOMA的影響。在過去的一年里,Uber主要關(guān)注業(yè)務(wù)層,它為不同的業(yè)務(wù)線提供了通用的邏輯。

DOMA在Uber還很年輕,然而從簡化開發(fā)人員體驗(yàn)和降低整個系統(tǒng)復(fù)雜性的角度來看,它的早期表現(xiàn)非常積極。

產(chǎn)品與平臺

DOMA是Uber跨產(chǎn)品和平臺團(tuán)隊(duì)一致努力的結(jié)果。平臺支持成本通常會下降一個數(shù)量級。產(chǎn)品團(tuán)隊(duì)受益于guard rails和加速的開發(fā)。

例如,我們的擴(kuò)展架構(gòu)的早期平臺使用者能夠通過采用擴(kuò)展架構(gòu)減少代碼審查、規(guī)劃和用戶學(xué)習(xí)曲線的時間,將優(yōu)先級和集成新特性的時間從三天減少到三小時。

降低復(fù)雜性

以前的產(chǎn)品團(tuán)隊(duì)必須調(diào)用大量的下游服務(wù)來利用一個域;現(xiàn)在只需要調(diào)用一個。通過減少加載新功能的接觸點(diǎn)數(shù)量,平臺能夠減少25-50%的登陸時間。此外,能夠?qū)?200個微服務(wù)劃分為70個域。其中大約有50%已經(jīng)實(shí)現(xiàn),而且大多數(shù)都有未來采用的計(jì)劃。

未來的遷移

在Uber,計(jì)算出微服務(wù)的半衰期是1.5年,這意味著每1.5年我們的微服務(wù)就會有50%的變動。如果沒有網(wǎng)關(guān),微服務(wù)架構(gòu)很容易因此陷入“遷移的噩夢”。不斷變化的微服務(wù)需要不斷進(jìn)行上游遷移。

網(wǎng)關(guān)使團(tuán)隊(duì)能夠避免對基礎(chǔ)域服務(wù)的依賴,這意味著這些服務(wù)可以在不強(qiáng)制上游遷移的情況下進(jìn)行更改。

這些平臺有數(shù)百個依賴于它們的服務(wù),而這些服務(wù)將不得不遷移現(xiàn)有的消費(fèi)者。在這些情況下,遷移的成本會非常高,使得重寫一個完整的平臺變得不可行。

新的業(yè)務(wù)和產(chǎn)品線

實(shí)踐證明,使用DOMA設(shè)計(jì)的平臺具有更高的可擴(kuò)展性和易于維護(hù)性。Uber采納DOMA的大多數(shù)團(tuán)隊(duì)之所以這樣做,是因?yàn)橹С中碌臉I(yè)務(wù)線變得太昂貴了。

實(shí)用建議

Uber為希望采用DOMA的公司提供一些實(shí)用建議。指導(dǎo)原則是,根據(jù)Uber的經(jīng)驗(yàn),一個成熟的、深思熟慮的微服務(wù)架構(gòu)來自于在正確的時間朝著正確的方向緩慢推進(jìn)?,F(xiàn)實(shí)情況是,對于整個微服務(wù)架構(gòu)而言,真正的“重寫”是不可能的。

因此,Uber認(rèn)為發(fā)展微服務(wù)架構(gòu)更像是“修剪園藝”,一步步上線正確增長,而不是自上而下或一次性架構(gòu)(或重新架構(gòu))。這是一個動態(tài)的,漸進(jìn)的過程。

初創(chuàng)企業(yè)

驅(qū)動問題應(yīng)該是“何時應(yīng)采用微服務(wù)架構(gòu)?” 以及“這對企業(yè)有意義嗎?” 如上所述,盡管微服務(wù)為擁有大量工程師的企業(yè)帶來了運(yùn)營優(yōu)勢,但這種做法的代價(jià)是復(fù)雜性的增加,復(fù)雜性的增加使功能的構(gòu)建更加困難。

在初創(chuàng)企業(yè)中,運(yùn)營收益可能無法抵消架構(gòu)復(fù)雜性的增加。此外,微服務(wù)架構(gòu)通常需要專用的工程資源來支持,這對于早期公司來說可能超出預(yù)算,或者從優(yōu)先級的角度來看不是優(yōu)秀選擇。

考慮到這一點(diǎn),完全擱置一段時間的微服務(wù)并非沒有道理。如果企業(yè)確實(shí)選擇采用微服務(wù),則應(yīng)考慮“將微服務(wù)視為大型分布式應(yīng)用程序”的類比,并考慮要構(gòu)建的微服務(wù)之間的關(guān)注點(diǎn)分離。此外,請注意第一個微服務(wù)可能真正地描述了業(yè)務(wù)的核心,因此可能是最重要的。

中型企業(yè)

對于中型企業(yè),已經(jīng)有了成熟的團(tuán)隊(duì),而關(guān)注點(diǎn)之間的明確區(qū)分變得模糊不清,那么不同功能和平臺之間的微服務(wù)架構(gòu)就變得更加有用。

在這個階段,企業(yè)可以開始考慮微服務(wù)之間的層次結(jié)構(gòu)。依賴管理可能變得更加重要,因?yàn)槟承┓?wù)對于業(yè)務(wù)運(yùn)營變得越來越至關(guān)重要,并且越來越多的團(tuán)隊(duì)依賴于它們。

平臺化的早期投資可能會在未來帶來回報(bào)。如果一個人能夠創(chuàng)造出完全與產(chǎn)品無關(guān)的商業(yè)平臺,并且在核心平臺服務(wù)中避免任意的產(chǎn)品邏輯,那么就有可能避免技術(shù)債務(wù)。此時采用擴(kuò)展來實(shí)現(xiàn)這個目標(biāo)是有意義的。

鑒于微服務(wù)的數(shù)量可能仍然很低,將它們聚在一起可能沒有意義。然而,這里值得注意的是,Uber的DOMA實(shí)現(xiàn)上下文中的域可以包含單個服務(wù),因此以“面向域”的方式思考仍然是有用的。

大型企業(yè)

較大的企業(yè)組織可能擁有數(shù)百名工程師和微服務(wù)以及數(shù)個依賴項(xiàng)。至此,DOMA完全發(fā)揮了作用??赡軙忻黠@的微服務(wù)集群,可以很容易地將它們組合在一起,并在它們前面放置網(wǎng)關(guān)。傳統(tǒng)服務(wù)通常需要開始進(jìn)行重構(gòu)或重寫,然后再進(jìn)行遷移。這意味著,如果網(wǎng)關(guān)已經(jīng)存在,網(wǎng)關(guān)將很快開始提供易于遷移方面的價(jià)值。

清晰的層次結(jié)構(gòu)也將變得越來越重要,因?yàn)槟承┓?wù)作為特定功能或功能分組的“產(chǎn)品”服務(wù)運(yùn)行,而其他服務(wù)將越來越多地支持多種產(chǎn)品,并被視為“平臺”。在此階段,保持任意產(chǎn)品邏輯與平臺的分離至關(guān)重要,這樣可以避免給平臺團(tuán)隊(duì)帶來沉重的運(yùn)營負(fù)擔(dān)以及整個系統(tǒng)的不穩(wěn)定。

寫在最后

Uber越來越多的團(tuán)隊(duì)采用DOMA,并且仍在積極發(fā)展DOMA。DOMA的關(guān)鍵見解是,微服務(wù)架構(gòu)實(shí)際上只是一個大型的分布式程序,可以將其應(yīng)用于所有軟件的原理和演進(jìn)。DOMA只是在實(shí)踐中考慮這些原則的一種方法。

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2020-12-01 12:08:45

微服務(wù)架構(gòu)DOMA

2017-07-12 13:49:45

微服務(wù)架構(gòu)數(shù)據(jù)共享

2023-07-28 09:23:24

微服務(wù)架構(gòu)

2023-07-27 14:03:51

微服務(wù)

2020-04-20 10:04:56

微服務(wù)架構(gòu)數(shù)據(jù)

2023-08-31 17:13:01

架構(gòu)軟件開發(fā)

2019-10-16 08:41:46

微服務(wù)架構(gòu)Nginx

2018-12-12 09:59:47

微服務(wù)架構(gòu)分布式系統(tǒng)

2022-12-21 16:13:31

微服務(wù)架構(gòu)

2020-06-09 22:05:44

NGINX微服務(wù)架構(gòu)

2022-08-14 07:04:44

微服務(wù)架構(gòu)設(shè)計(jì)模式

2024-06-03 00:00:10

微服務(wù)Python

2020-09-02 07:00:00

微服務(wù)架構(gòu)

2017-07-04 14:57:40

微服務(wù)paasdocker

2023-12-30 08:27:13

2022-08-07 22:11:25

微服務(wù)架構(gòu)

2018-10-28 18:09:22

微服務(wù)Microservic架構(gòu)

2022-08-12 07:39:30

數(shù)字化集成微服務(wù)

2018-12-12 14:51:46

容器微服務(wù)編排

2019-09-10 11:34:23

軟件技術(shù)數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號