www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 架構師社區(qū)
[導讀]近來,一些關于面向服務架構的話題,特別是針對微服務架構的弊端這個話題上進行了大量的討論。雖然在幾年前,微服務架構受到很多人的青睞,因為它們提供了許多好處,如獨立部署的靈活性、明確的所有權、系統(tǒng)穩(wěn)定性的改善以及更好的分離問題等優(yōu)點。但是不久,就開始有人吐槽微服務會大幅增加系統(tǒng)復雜性,有時甚至連一些簡單的功能都難以構建。

近來,一些關于面向服務架構的話題,特別是針對微服務架構的弊端這個話題上進行了大量的討論。雖然在幾年前,微服務架構受到很多人的青睞,因為它們提供了許多好處,如獨立部署的靈活性、明確的所有權、系統(tǒng)穩(wěn)定性的改善以及更好的分離問題等優(yōu)點。但是不久,就開始有人吐槽微服務會大幅增加系統(tǒng)復雜性,有時甚至連一些簡單的功能都難以構建。


隨著Uber發(fā)展,我們目前擁有了大約2200個關鍵的微服務,并且也親身經歷了這些權衡。 在過去的兩年里,Uber一直在試圖降低微服務的復雜性的同時仍然保持著微服務架構的優(yōu)勢。 我們希望通過這篇博文介紹我們對微服務架構的通用方法,我們稱之為“面向領域的微服務架構”(DOMA)。

由于這些缺點,近年來也有一些批評微服務架構的聲音,但是卻很少有人主張徹底拒絕微服務架構。運營收益太重要了,而且似乎沒有有效的替代方案。我們介紹DOMA的目的是為了給那些希望降低整體系統(tǒng)復雜性,同時又保持微服務架構相關靈活性的組織提供一些經驗建議。

這篇文章主要解釋了什么是DOMA,以及Uber采用這種架構的原因,它對平臺和產品團隊帶來哪些好處。最后,給想要采用這種架構的團隊一些建議。


什么是微服務



微服務是面向服務架構的延伸。與2000年代相當大的“服務”相比,微服務是代表一組小型功能的應用程序。這些應用通過網絡托管,并暴露出一個明確定義接口。其他應用程序通過進行遠程過程調用(RPC)方式來調用這個接口。

微服務架構的特點是代碼的托管、調用和部署方式。比如大型的單體應用,它們通常會被分割成具有明確定義接口的封裝組件。然后,這些接口就可以直接在進程中調用,而不是通過網絡。通過這種方法,我們將微服務看作一個性能受到影響的庫(網絡I/O和序列化/反序列化),以便調用它的任何功能。

當我們以這種方式來思考微服務時,可能會質疑為什么我們會采用微服務架構。答案通常是獨立部署和擴展。對于一個大型的單體應用程序,應用被迫一次性部署或發(fā)布所有的代碼。應用程序的每一個新版本都可能涉及許多更改。部署變得風險大、耗時長。任何人都可以使整個系統(tǒng)癱瘓。

換句話說,業(yè)務采用微服務是以犧牲性能為代價來獲取運營利益。業(yè)務還必須承擔維護支持微服務所需的基礎設施的成本。事實證明,在很多情況下,這種權衡是很有意義的,但這也是反對過早采用微服務架構的有力論據。


動機

面向領域的微服務架構


在Uber,我們也采用了微服務架構,因為我們(大約在2012-2013年)主要有兩個單體服務,遇到了很多通過微服務來解決的運營問題。

  • 可用性風險。單體代碼庫內的一次回滾就會使整個系統(tǒng)(在本例中是Uber的全部)癱瘓。

  • 部署風險大,成本高。在需要頻繁回滾的情況下,執(zhí)行這些操作既困難又耗時。

  • 不平滑的關注點分離。在龐大的代碼庫中,很難保持良好的關注點分離。尤其在一個指數級增長的環(huán)境中,權宜之計有時會導致邏輯和組件之間的界限不清。

  • 執(zhí)行效率低下。這些問題加在一起,使得團隊很難獨立自主地執(zhí)行任務。


隨著Uber從10多個工程師發(fā)展到100多個工程師,多個團隊擁有技術棧的碎片時,這種單一的架構將團隊的命運捆綁在一起,使得獨立運作變得困難。

因此,我們采用了微服務架構。最終,我們的系統(tǒng)變得更加靈活,這使得團隊能夠更加自主。

  • 系統(tǒng)的可靠性。在微服務架構中,整體系統(tǒng)的可靠性上升。單個服務可以在不影響整個系統(tǒng)的情況下宕機(并被回滾)。

  • 關注點的分離。從架構上來看,微服務架構迫使你去問 "這個服務為什么存在?"更加清晰地定義不同組件的角色。

  • 明確所有權。代碼擁有者變得更加清楚。服務通常由個人、團隊或組織級別擁有,從而實現更快的增長。

  • 自主執(zhí)行。獨立的部署 更清晰的所屬權限,讓不同的產品和平臺團隊能夠自主執(zhí)行。

  • 開發(fā)人員的速度。應用團隊可以獨立部署他們的代碼,這使得他們能夠按照自己的項目進度來執(zhí)行。


毫不夸張地說,如果沒有微服務架構,Uber不可能達到今天所保持的規(guī)模和執(zhí)行質量。

然而,隨著公司規(guī)模的進一步擴大,從100多名工程師到1000多名工程師,我們開始注意到一系列與系統(tǒng)復雜性大大增加的相關問題。在微服務架構下,人們用單一的整體代碼庫換取了黑盒,黑盒的功能隨時可能發(fā)生變化,很容易造成意外情況。

例如,工程師們不得不通過12個不同團隊大約50個服務來調查問題的根本原因。

理解服務之間的依賴關系可能會變得相當困難,因為服務之間的調用可能會深入許多層。第n個依賴關系的延遲峰值可能會導致上游的一連串問題。如果沒有合適的工具,就不可能看到實際發(fā)生的情況,這讓調試變得困難。

面向領域的微服務架構

Jaeger于2018年中發(fā)布的Uber微服務架構

為了構建一個簡單的功能,工程師往往需要跨多個服務工作,所有這些服務都由不同的個人和團隊所擁有。這就需要跨部門跨團隊的合作,在會議、設計和代碼審查上花費時間。由于團隊在彼此的服務中構建代碼,修改彼此的數據模型,甚至代表服務所有者執(zhí)行部署,早期對服務所有權的明確界限劃分受到了影響。網絡化的單體可能會形成,看似獨立的服務都必須一起部署才能安全地執(zhí)行任何變更。

面向領域的微服務架構

大約在2018年Uber的復雜流程示例,在DOMA之前需要10個接觸點才能進行簡單集成。

這樣所帶來的結果就是開發(fā)進度變慢、服務所屬不穩(wěn)定、遷移更困難等。對于已經采用微服務架構的企業(yè)來說,已經沒有回頭路了。這就變成了“有了它們不能活,沒有它們不能活”。


面向領域的微服務架構

面向領域的微服務架構


如果我們可以將微服務視為I / O綁定的庫,而將“微服務架構”視為大型的分布式應用程序,則可以使用眾所周知的架構來思考如何組織代碼。

因此,“面向領域的微服務體系結構”大量借鑒了組織代碼的既定方法,例如域驅動設計,清晰架構,面向服務的體系架構以及面向對象和面向接口的設計模式。我們認為DOMA僅是創(chuàng)新,因為它是在大型應用的分布式系統(tǒng)中利用既定設計原則的相對新穎的方法。

DOMA相關的核心原理和術語如下:

  • 圍繞相關微服務的集合,稱為域。

  • 域的集合稱之為層。域所屬的層確定了允許該域內的微服務承擔什么依賴性,稱為層設計。

  • 為域提供接口,這些域被視為集合的單個入口點,稱為網關。

  • 確定每個域都應該與其他域不可知,一個域不應該具有與其代碼庫或數據模型內部硬編碼的另一個域相關的邏輯。由于團隊經常需要在另一個團隊的域中包含邏輯(例如,自定義驗證邏輯或數據模型上的某些元上下文),因此我們提供了一種擴展架構,以支持該域中定義明確的擴展點。


通過提供系統(tǒng)的體系結構,域網關和預定義的擴展點,DOMA打算將微服務體系結構從復雜的東西轉變?yōu)榭衫斫獾臇|西:結構化的一組靈活,可重用和分層的組件。

這篇文章的其余部分將深入研究Uber在DOMA中的實施,我們已經看到的好處以及為可能希望采用這種方法的公司提供的實用建議。


Uber的措施

面向領域的微服務架構



Uber域代表一個或多個與邏輯功能分組綁定的微服務的集合。設計域時常見的問題是“域應該有多大?”有些域可以包含數十個服務,有些域只能包含單個服務。重要的任務是仔細考慮每個集合的邏輯角色。例如,我們的地圖搜索服務構成一個域,票價服務是一個域,匹配平臺(匹配騎手和駕駛員)是一個域。這些也不總是遵循公司的組織結構。Uber Maps組織本身分為三個域,在三個不同的網關后面有80個微服務。

層設計

層設計回答了“什么服務可以調用其他什么服務?”的問題。在Uber的微服務架構中,我們可以將層設計視為“規(guī)?;年P注點分離”,或者,我們可以將層設計視為“規(guī)?;囊蕾嚬芾怼薄?

層設計描述了一種機制,用于考慮Uber的故障影響范圍和跨服務依賴的產品特異性。當域從底層移到頂層時,它們在中斷的情況下會影響較少的服務,并代表更多特定的產品使用案例。相反,底層的功能具有更多的依存關系,因此趨向于具有更大的影響半徑,并代表了更通用的業(yè)務功能集。下圖說明了此概念。

面向領域的微服務架構


可以將頂層視為具體的用戶體驗(例如移動功能),將底層視為通用的業(yè)務功能(例如帳戶管理或市場行程)。層僅取決于其下的層,這為我們提供了一種有用的啟發(fā)式方法,可以思考影響范圍和區(qū)域集成等問題。

值得注意的是,功能經常會從這個圖表中 "向下 "移動,從具體到更普遍??梢韵胂螅粋€簡單的功能,隨著需求的變多,最終會變成越來越多的平臺。事實上,這種向下遷移是意料之中的,Uber的許多核心業(yè)務平臺一開始都是針對騎手或司機的功能,隨著我們開發(fā)出更多的業(yè)務線,它們也有了更多的依賴性,就會變得越來越通用(比如Uber Eats或Uber Freight)。

在Uber內部,我們建立了以下五個層次。

  • 基礎設施層。提供任何工程項目都可以使用的功能。這是Uber對諸如存儲或網絡等重大工程問題的處理。

  • 業(yè)務層。提供應用可以使用的Uber功能,但并非特定于特定產品類別或業(yè)務線(LOB)的功能,例如乘車,進餐或貨運。

  • 產品層。提供與特定產品類別或LOB相關但與移動應用程序無關的功能,例如由多個面向應用程序的Rides所利用的“請求乘車”邏輯(Rider,Rider“Lite”,m.uber.com等)。

  • 演示層。提供直接與面向消費者的應用程序(移動/網絡)中存在的功能相關的功能。

  • 邊緣層。將Uber服務安全地暴露給外界。該層也支持移動應用程序。


每層代表著越來越具體的功能分組,并且影響半徑越來越小(或者換句話說,更少的組件取決于該層中的功能)。

網關

在微服務架構中相信大家對“API網關”這個術語并不陌生。而在DOMA中我們的定義的網關其實與大家所熟知的“API網關”的概念相差無幾,只是我們傾向于將網關專門視為進入基礎服務集合(稱為域)的單個入口點。網關的成功取決于API設計的成功。

面向領域的微服務架構


由于上游使用者僅在單一服務上運行,因此網關在遷移,服務發(fā)現以及整體系統(tǒng)復雜度方面提供了許多好處,上游服務僅需一個依賴項,而不是對域中可能存在的幾個下游服務的依賴。如果我們從面向對象設計的角度考慮網關,那么它們就是接口定義,它使我們能夠根據底層“實現”(在本例中為底層微服務的集合)做我們想做的任何事情。

擴展

擴展表示一種擴展域的機制。擴展的基本定義是,它提供了一種擴展基礎服務功能的機制,而無需更改該服務的實際實現,也不會影響其整體可靠性。在Uber,我們提供了兩種不同的擴展模型:邏輯擴展和數據擴展。擴展的概念使我們能夠將架構擴展到能夠獨立工作的多個團隊。

邏輯擴展

邏輯擴展提供了一種擴展服務的底層邏輯機制。對于邏輯擴展,我們使用提供程序或插件模式的變體,其接口是以服務為基礎定義的。這樣一來使得擴展團隊可以在不修改底層平臺核心代碼的情況下,以接口驅動的方式實現擴展邏輯。

例如,一個驅動上線。通常,我們會進行各種檢查以確保允許驅動上線(安全檢查,合規(guī)性等)。這些都由一個單獨的團隊擁有。一種實現方法是讓每個團隊在同一端點編寫邏輯,但這可能會增加復雜性。每次檢查都需要自定義且完全不相關的邏輯。

對于邏輯擴展,“上線”端點將定義一個接口,他們希望每個擴展都符合預定義的請求類型和響應。每個團隊都將注冊一個負責執(zhí)行此邏輯的擴展。在這種情況下,他們可能簡單地獲取一些關于驅動程序的上下文況,然后返回布爾值,來判斷驅動程序是否可以上線?!吧暇€”端點將簡單地遍歷這些響應,并確定它們其中是否有問題。

這就將核心代碼與每個擴展解耦,并提供了擴展之間的隔離,它不知道其他邏輯在執(zhí)行什么。圍繞這一點,就能很容易建立更多的功能,比如可觀察性或者是特征標志等。

數據擴展

數據擴展提供了一種將任意數據附加到接口的機制,來避免核心平臺數據模型中的臃腫。對于數據擴展,我們利用Protobuf的Any功能,這樣團隊可以將任意數據添加到請求中。服務通常會存儲這些數據或將其傳遞給邏輯擴展,這樣核心平臺就永遠不會負責反序列化(從而 "知道")這個任意上下文。Protobuf的任何實現都會有一些基礎設施開銷,以換取更強的類型化。為了更簡單的實現,我們可以直接使用JSON字符串來表示任意數據。

面向領域的微服務架構


自定義擴展

在邏輯和數據擴展之外,Uber的很多團隊都推出了自己適合自己領域的擴展模式。例如,與我們的展示架構綁定的很多集成都使用了基于DAG的任務執(zhí)行邏輯。


效益

面向領域的微服務架構


Uber幾乎每個主要領域都在一定程度上受到了DOMA的影響。在過去的一年里,我們主要關注Uber的業(yè)務層,它為我們的各個業(yè)務線提供了通用的邏輯。

DOMA在Uber還很年輕,我們很高興能在未來分享更多的數據和我們架構的深入案例。不過,在簡化開發(fā)人員體驗和降低整體系統(tǒng)復雜度方面,早期的跡象是非常積極的。

產品與平臺

DOMA是Uber整個產品和平臺團隊達成共識的結果。平臺支持成本往往下降了一個數量級。產品團隊從護欄和加速開發(fā)中獲益。

例如,我們擴展架構的一個早期平臺消費者通過采用擴展架構,減少了代碼審查、規(guī)劃和消費者學習曲線的時間,能夠將一個新功能的優(yōu)先級和集成時間從三天下降到三個小時。

降低復雜度

以前產品團隊要利用一個領域,需要調用許多下游服務,現在只需要調用一個服務。通過減少入駐新功能的接觸點數量,平臺能夠將入駐時間縮短25-50%。此外,我們能夠將2200個微服務劃分為70個域。其中大約有50%已經實施,其中大部分有一些未來采用的計劃。

未來的遷移

在Uber,我們計算過微服務的半衰期是1.5年,也就是說每1.5年我們就有50%的微服務流失。如果沒有網關,微服務架構很容易因為這種流失而陷入“遷移地獄”。不斷變化的微服務需要不斷進行上游遷移。網關使團隊能夠避免對底層領域服務的依賴性,這意味著這些服務可以在不強制進行上游遷移的情況下發(fā)生變化。

Uber在去年最大的兩次平臺重寫都發(fā)生在網關背后。這些平臺有數百個依賴于它們的服務,這些服務將不得不遷移現有的平臺。在這些情況下,遷移的成本會非常高,使得的平臺重寫變得不可行。

新的業(yè)務和產品線

事實證明,使用DOMA設計的平臺可擴展性更強,也更容易維護。Uber的大多數團隊之所以采用DOMA,是因為支持新業(yè)務線的成本太高。


一些建議

面向領域的微服務架構


本節(jié)為可能想采用DOMA的公司提供一些實用的建議。這里的指導原則是,根據我們的經驗,一個成熟的、經過深思熟慮的微服務架構源于在正確的時間向正確的方向悄悄推敲?,F實情況是,對于一個人的整個微服務架構來說,真正的“重寫”是永遠不可能的。

因此,我們認為微服務架構的演進更像是“修剪樹籬”,使其最終正確成長,而不是自上而下或一次性的架構(或重新架構)工作。這是一個動態(tài)和漸進的過程。

創(chuàng)業(yè)公司

驅動性的問題應該是“我們應該在什么時候采用微服務架構?”和“它對我們的組織有意義嗎?”正如我們在上面所看到的那樣,雖然微服務為擁有大量工程師的組織提供了運營上的好處,但這也換來了復雜性的增加,會使功能的構建更加困難。

在小型公司中,運營效益可能無法抵消架構復雜性的增加。此外,微服務架構通常需要專門的工程資源來支持,這對于早期階段的公司來說可能超出了預算,否則從優(yōu)先級的角度來看是次優(yōu)的。

考慮到這一點,在一段時間內完全暫緩采用微服務也不是沒有道理的。如果一個組織真的選擇采用微服務,就應該考慮“微服務作為大型分布式應用”的類比,以及想要構建的微服務之間的關注點分離。另外,要認識到,第一批微服務很可能是最重要的,也是持續(xù)時間最長的,因為它們真正描述了業(yè)務的核心。

中等公司

一旦公司的規(guī)模達到中等,有了多個團隊,不同的功能和平臺之間的關注點明確分離變得朦朧,微服務架構就會變得更加明顯有用。

在這個階段,人們可以開始考慮微服務之間的層次結構。依賴性管理可能會變得更加重要,因為一些服務開始對業(yè)務運營變得更加明顯的關鍵,越來越多的團隊依賴這些服務。

早期對平臺化的投資可能會在未來的道路上得到回報。如果能夠創(chuàng)建完全產品不可知的業(yè)務平臺,避免核心平臺服務中任意的產品邏輯,這里就有可能避免技術債務。此時采用擴展來實現這一目標可能是有意義的。

鑒于微服務的數量可能還相當少,將它們集中在一起可能沒有意義。不過,這里值得注意的是,在Uber的DOMA實現背景下,一個領域可以包含一個服務,所以用“面向領域”的方式來思考可能還是有用的。

大型公司

規(guī)模較大的工程組織可能有數百名工程師和微服務以及多個依賴關系。這時DOMA就達到了它的全部作用。很可能會有明顯的微服務集群,這些集群可以很容易地歸為域,在它們前面有一個網關。遺留服務往往開始需要重構或重寫,然后進行遷移,這意味著如果網關已經到位的話,很快就會開始在遷移的便利性方面提供價值。

明確的層次結構也將變得越來越重要,一些服務將作為“產品”服務來運行,以實現特定的功能或功能分組,而其他服務將越來越多地支持多個產品,并被認為是“平臺”?,F階段關鍵是要保持任意產品邏輯與平臺的脫鉤,這樣才能避免給平臺團隊帶來沉重的運營負擔以及整個系統(tǒng)的不穩(wěn)定。


最后的感想

面向領域的微服務架構


隨著Uber越來越多的團隊來采用DOMA,我們仍在積極地進化DOMA。DOMA的關鍵洞察力在于,微服務架構實際上只是一個大型的分布式程序,你可以將同樣的原則應用于它的演進,就像你應用于任何軟件一樣。DOMA只是一種在實踐中思考這些原則的方法。我們希望其他人覺得它有用,我們也期待著反饋。

特別推薦一個分享架構+算法的優(yōu)質內容,還沒關注的小伙伴,可以長按關注一下:

面向領域的微服務架構

面向領域的微服務架構

面向領域的微服務架構

長按訂閱更多精彩▼

面向領域的微服務架構

如有收獲,點個在看,誠摯感謝

免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉