微服務架構體系

2021-12-31 頂級架構師

前段內部聽了下分享 Service Mesh。做一些總結

架構的演進

這種東西有點信雅達,沒什麼絕對標準

單體應用:在第一階段的單體應用很好理解。

垂直應用:接著隨著業務量增大, 將應用拆成互不相干的幾個應用,Web框架(MVC) 是關鍵。

分布式應用:垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作為獨立的服務。這時用於提高業務復用及整合的 分布式服務框架(RPC) 是關鍵。

其實這時已經能算一種「微服務」了,一般會使用SpringBoot

微服務和SOA

微服務相比於SOA更加精細,微服務更多的以獨立的進程的方式存在,互相之間並無影響,不再需要協調其它服務部署對本服務的影響;

微服務提供的接口方式更加通用化,如HTTP RESTful,各種終端都可以調用,無關語言、平臺,所以技術可以更隨意,只需要提供API

微服務更傾向於分布式去中心化的部署方式,數據的去中心化,也可以使用更不同的資料庫技術;

微服務運維使用docker,k8s 可以自動化部署,集中管理。


SOA微服務服務粒度粒度較粗細粒度拆分部署難度需要重新創建或者部署整個應用每個微服務可以獨立構建部署通信開銷大部分業務模塊在一個應用裡面,通信開銷低更多的遠程調用,增加了通信開銷存儲一般所有服務共享數據存儲每個可以擁有單獨的存儲業務易上手需要了解整個應用的業務,上手較難單服務上手容易,但是服務集群理解比較難(複雜度守恆定律:業務複雜度不會因為遷移到了微服務而降低)通信方式SOA體系結構依賴於消息傳遞(AMQP,MSMQ)和SOAP作為主要的遠程訪問協議,協議偏重量級;使用輕量級協議,如HTTP/REST可擴展性難以擴展使用容器技術很方便擴展微服務和分布式

分布式關注的是服務分開部署,也就是如何將單一服務部署,變為多服務部署(垂直+水平拆分)。
微服務關注的是服務拆分力度,即:一個服務要拆分到多大的維度合適

Spring Cloud 和 Dubbo

說到微服務,兩大框架的討論肯定跑不了

區別

定位

Dubbo 是 SOA 時代的產物,關注點主要在於服務的調用,流量分發、流量監控和熔斷,定位服務治理和** RPC;
Spring Cloud 誕生於微服務架構時代,考慮的是微服務治理的方方面面,另外由於依託Spirng、Spirng Boot 的優勢之上,兩個框架在開始目標就不一致。
Spirng Cloud 更是一個微服務架構生態。

服務發現

對於服務發現而言,可用性比數據一致性更加重要,AP 勝過 CP,而 Eureka 設計則遵循 AP 原則。

傳輸方式:

Dubbo底層用Netty這樣的NIO框架,基於TCP協議傳輸的,配合以Hession序列化完成RPC通信;

SpringCloud基於Http協議+rest接口調用遠程過程的通信,

相對來說,Http會有更大的報文,佔的帶寬也更多。但是REST相比RPC更靈活,服務提供方和調用方的依賴只依靠一紙契約,不存在代碼級別的強依賴,這在強調快速演化的微服務環境下,顯得更為合適,至於注重通信速度還是方便靈活性,具體情況具體考慮。

模塊區別:

Dubbo 主要分為服務註冊中心,服務提供者,服務消費者,還有管控中心;
SpringCloud則是一個完整的分布式一站式框架,服務註冊中心,服務提供者,服務消費者,管控臺,斷路器,分布式配置服務,消息總線,以及服務追蹤等;

架構 SpringCloud


流程:

請求統一通過 API 網關(Zuul)來訪問內部服務。

網關接收到請求後,從註冊中心(Eureka)獲取可用服務。

由 Ribbon 進行均衡負載後,分發到後端具體實例。

微服務之間通過 Feign 進行通信處理業務。

Hystrix 負責處理服務超時熔斷。

Turbine 監控服務間的調用和熔斷相關指標。

架構 Dubbo

Spring Cloud 和 K8s微服務關注什麼

差不多一半關注點是和運維相關的。spring cloud只是一個開發框架,對於應用如何部署和調度是無能為力的,而kubernetes是一個運維平臺,看起來都不夠。
也許用spring cloud+cloud foundry去和kubernetes比較才更加合理,但即使加入了cloud foundry的paas能力,spring cloud仍然是「侵入式」的且語言相關,而kubernetes是「非侵入式」的且語言無關。

區別

spring cloud關注的功能是kubernetes的一個子集。

關注點Spring CloudKubernetes自愈和自動伸縮無kube-controller-manager調度和發布無kube-scheduler+Deployment配置管理Spring Cloud Config/NacosConfigMap服務發現和LBEureka/NacosService+CoreDNS/Istio彈性和容錯Hystrix/Resillience4jIstioAPI網關Zuul/Spring Cloud GatewayIngress/Istio Gateway服務安全Spring Cloud SecurityIstio調用鏈監控Spring Cloud Sleuth+ZipKinIstio+Jaeger/ZipKinMetrics監控actuator+Spring Boot AdminIstio+Prometheus日誌收集Spring Cloud Sleuth+ELKfluentd/Istio

兩邊的解決方案都是比較完整的。
kubernetes,在Istio還沒出來以前,只能提供最基礎的服務註冊、服務發現能力(service只是一個4層的轉發代理),istio出來以後,具有了相對完整的微服務能力。
spring cloud,除了發布、調度、自愈這些運維平臺的功能,其他的功能也支持的比較全面。
相對而言,雲廠商會更喜歡kubernetes的方案,原因就是:非侵入。平臺能力與應用層的解耦,使得雲廠商可以非常方便的升級、維護基礎設施而不需要去關心應用的情況。

Service Mesh介紹

又譯作「服務網格」,作為服務間通信的基礎設施層。
可以將它比作是應用程式或微服務間的 TCP/IP,負責服務之間的網絡調用、限流、熔斷和監控。
對於編寫應用程式來說一般無須關心 TCP/IP 這一層(比如通過 HTTP 協議的 RESTful 應用),同樣使用 Service Mesh 也就無須關係服務間的那些原來是通過應用程式或者其他框架實現的事情,比如 Spring Cloud、OSS,現在只要交給 Service Mesh 就可以了。

Isito

目前Service Mesh具體落地實現的一種,呼聲最高。

功能列表Spring CloudIsito服務註冊與發現支持,基於Eureka,consul等組件,提供server,和Client管理支持,基於XDS接口獲取服務信息,並依賴「虛擬服務路由表」實現服務發現鏈路監控支持,基於Zikpin或者Pinpoint或者Skywalking實現支持,基於sideCar代理模型,記錄網絡請求信息實現API網關支持,基於zuul或者spring-cloud-gateway實現支持,基於Ingress gateway以及egress實現熔斷器支持,基於Hystrix實現支持,基於聲明配置文件,最終轉化成路由規則實現服務路由支持,基於網關層實現路由轉發支持,基於iptables規則實現安全策略支持,基於spring-security組件實現,包括認證,鑑權等,支持通信加密支持,基於RBAC的權限模型,依賴Kubernetes實現,同時支持通信加密配置中心支持,springcloud-config組件實現不支持性能監控支持,基於Spring cloud提供的監控組件收集數據,對接第三方的監控數據存儲支持,基於SideCar代理,記錄服務調用性能數據,並通過metrics adapter,導入第三方數據監控工具日誌收集支持,提供client,對接第三方日誌系統,例如ELK支持,基於SideCar代理,記錄日誌信息,並通過log adapter,導入第三方日誌系統工具客戶端集成支持,提供消息,總線,部署管道,數據處理等多種工具客戶端SDK不支持分布式事務支持,支持不同的分布式事務模式:JTA,TCC,SAGA等,並且提供實現的SDK框架不支持其他…………

從上面表格中可以看到,如果從功能層面考慮,Spring Cloud與Service Mesh在服務治理場景下,有相當大量的重疊功能,從這個層面而言,為Spring Cloud向Service Mesh遷移提供了一種潛在的可能性。

服務網格

服務網格從總體架構上來講比較簡單,不過是一堆緊挨著各項服務的用戶代理,外加一組任務管理流程組成。


更進一步地說,服務網格是一個專用的基礎設施層,旨在「在微服務架構中實現可靠、快速和安全的服務間調用」。它不是一個「服務」的網格,而是一個「代理」的網格,服務可以插入這個代理,從而使網絡抽象化。

在典型的服務網格中,這些代理作為一個 sidecar(邊車)被注入到每個服務部署中。服務不直接通過網絡調用服務,而是調用它們本地的 sidecar 代理,而 sidecar 代理又代表服務管理請求,從而封裝了服務間通信的複雜性。

相互連接的 sidecar 代理集實現了所謂的數據平面,這與用於配置代理和收集指標的服務網格組件(控制平面)形成對比。
總而言之,Service Mesh 的基礎設施層主要分為兩部分:控制平面與數據平面。當前流行的兩款開源服務網格 Istio 和 Linkerd 實際上都是這種構造。

控制平面 數據平面

控制平面的特點:

數據平面的特點:

服務網格帶來的變化

第一,微服務治理與業務邏輯的解耦。服務網格把 SDK 中的大部分能力從應用中剝離出來,拆解為獨立進程,以 sidecar 的模式進行部署。

第二,異構系統的統一治理。不同語言、不同框架的應用和服務,能夠統一管控

技術優勢

此外,服務網格相對於傳統微服務框架,還擁有三大技術優勢:

服務網格被稱為第二代「微服務架構」。但服務網格也有它的局限性。

複雜度。服務網格將 sidecar 代理和其它組件引入到已經很複雜的分布式環境中,會極大地增加整體鏈路和操作運維的複雜性。

運維人員能力。

延遲。從鏈路層面來講,服務網格是一種侵入性的、複雜的技術,可以為系統調用增加顯著的延遲。

適配。服務網格的侵入性要適應高度自治的平臺並遵守平臺的規則。

小結

從架構演進路徑來看,從最早期的巨石單體(Monolithic)到分布式(Distributed),再到微服務(Microservices)、容器化(Containerization)、容器編排(Container Orchestration),最後到服務網格(Service Mesh)、無伺服器(Serverless)。

K8S 正爆炸式發展,已經成為企業綠地應用的容器編排的首選。如果說 Kubernetes 已經徹底贏得了市場,並且基於 Kubernetes 的應用程式的規模和複雜性持續增加,那麼就會有一個臨界點,而服務網格則將是有效管理這些應用程式所必需的。

隨著服務網格技術的持續發展,其實現產品(如 Istio)的架構與功能的不斷優化,服務網格將完全取代傳統微服務架構,成為大小企業微服務化和上雲改造的首選架構。

參考

微服務架構發展和趨勢
SpringCloud和Dubbo
SpingBoot+K8s搭建環境
[serviceMesh服務網格]

相關焦點

  • Medium 的微服務架構
    我們已經建立了幾個附屬服務,但我們還沒有制定採用微服架構系統的戰略。隨著系統變得更加複雜和團隊的壯大,我們在 2018年初遷移到了微服務架構。在這篇文章中,我們希望分享我們的經驗,有效地做到這一點,避免微服務症候群。微服務架構是什麼?
  • 微服務架構-從理想到現實
    ,而是結合我們自己所做的一些微服務架構實踐情況做一些總結和復盤。也就是說微服務架構實際是傳統組件化架構設計思想的進一步強化,強化的核心就是獨立和解耦。微服務架構思想的一個重點就是單體應用的拆分。在當前微服務架構設計裡面,微服務間的接口協同,微服務本身前後端接口協同全部混雜在一起,實際導致了後續整個微服務體系裡面的API管控治理完全失控。基於Saga分布式事務前面談分布式事務的時候,更多談的是事物補償或者事務最終一致性保障,但是很多長周期的事務仍然是API接口的同步調用方式來實現。即當API接口同步調用的時候,微服務間並沒有徹底解耦。
  • 微服務下的數據架構
    ,對微服務的討論大多集中在容器或其他技術是否能很好的實施微服務,而本文將從以下幾個角度來和大家分享在微服務架構下進行數據設計需要關注的地方,旨在幫助大家在構建微服務架構時,提供一個從數據方面的視角:微服務定義微服務的優勢及架構特點微服務架構下的數據設計選擇一個合適的資料庫按照 Martin Fowler 的定義,微服務是一個軟體架構模式
  • 淺談微服務架構設計
    這樣才不會錯過每日進階架構文章呀。架構定義是一門技術,但更是一門藝術。微服務架構是基於分而治之的思想演化出來的。過去傳統的一個大型而又全面的系統,隨著網際網路的發展已經很難滿足市場對技術的需求,於是我們從單獨架構發展到分布式架構。
  • 微服務與SOA架構有什麼本質區別?
    面向服務的架構體系(SOA)面向服務的架構是一種軟體體系架構,其中應用程式的不同組件通過網絡通信協議向其它組件提供服務。通信可以涉及簡單的數據傳遞,或者涉及彼此協調連接服務的兩個或更多個服務。這些不同的服務執行一些小功能,例如驗證付款,創建用戶帳戶或提供社交帳號登錄等。
  • Medium的微服務架構解析
    何為微服務架構首先,我們來思考微服務之架構是什麼,不是什麼。微服務是拯救那些過載和混亂軟體工程的技術趨勢之一。在Medium團隊,我們認為它是:「在微服務架構中,多個鬆散耦合的服務協同工作。我們不會從微服務架構中獲得所有的好處,它會增加我們的運維成本。如果沒有做到鬆耦合,對一項目服務的更改就會波及到其它服務,因此我們無法快速並安全的發布更新,這便是微服務架構的核心優勢。另外一個更重要的事情是,緊耦合引發的問題將是災難性的,比如數據不一致,甚至導致數據丟失。
  • 微服務架構雲端應用
    擁有超過12年網際網路產品開發和管理經驗,專注於網際網路技術架構設計,對產品設計、敏捷開發、安全、OKRs、大數據等領域有深入研究。現推崇反應式編程(http://www.reactivemanifesto.org/),並在多個產品中成功應用。劉總在這次分享中主要為大家介紹了什麼是徽服務,實現微服務有哪些架構模式以及微服務在實際中的應用情況。
  • 微服務架構談系列(2):微服務到底是什麼鬼?
    傳統上,架構的目標是可擴展性、可靠性和安全性。但是今天,該架構能夠快速安全地交付軟體,這一點非常重要。你將了解微服務架構是一種架構風格,可為應用程式提供更高的可維護性、可測試性和可部署性。我將通過描述軟體架構的概念及其重要性來開始本文。接下來,我將討論架構風格的概念。然後我將微服務架構定義為特定的架構風格。讓我們從理解軟體架構的概念開始。
  • 微服務架構技術棧選型手冊
    2014~2017,微服務經過三年的發展,現狀如何?這是一份為讓你更好使用微服務的技術站選型手冊。除此之外,你還可以按需選用配套的微服務架構視頻內容。開源微服務組件集成到其 Spring 體系,推出 Spring Cloud 微服務開發技術棧。
  • 微服務體系和API開放平臺的關係
    企業API開發框架平臺與SOA體系和微服務體系都還是存在一些關係。在整體行業來看,企業API開發框架平臺是SOA體系的一個組成部分。如圖1所示。              圖1  SOA體系中的企業API開發框架平臺在某項跨多個組織的綜合業務流程中,各個企業API開發框架平臺只是整體業務的一個模塊或組成。
  • 微服務架構設計
    微服務也指一種種鬆耦合的、有一定的有界上下文的面向服務架構。也就是說,如果每個服務都要同時修改,那麼它們就不是微服務,因為它們緊耦合在一起;如果你需要掌握一個服務太多的上下文場景使用條件,那麼它就是一個有上下文邊界的服務,這個定義來自DDD領域驅動設計。
  • Web 應用程式的架構體系變遷
    在客戶端側,我們已經有了很多優秀且新的JavaScript(或其它腳本語言)框架;而在伺服器端,我們有新的架構類型,如單頁應用程式、微服務、以及無伺服器體系架構。此文是面向全棧開發者的系列文章,特別是來自伺服器端的內容,關於Web應用程式設計和開發的趨勢和最佳實踐。我們一起來看伺服器端架構已經發生的變化。
  • 微服務架構實踐(API Gateway)
    點擊上方藍字關注 周小叨在微服務架構風格中,一個大應用通常會被拆分成為了多個小的服務系統提供出來
  • 下一代的微服務架構基礎是ServiceMesh?
    今年,ServiceMesh(服務網格) 概念在社區裡頭非常火,有人提出 2018 年是 ServiceMesh 年,還有人提出 ServiceMesh 是下一代的微服務架構基礎。作為架構師,如果你現在還不了解 ServiceMesh 的話,是否感覺有點落伍了?那麼到底什麼是 ServiceMesh?它的誕生是為了解決什麼問題?
  • 多次嘗試學習,終於搞懂了微服務架構
    總的來說,微服務的優勢,就是在於,面對大的系統,可以有效的減少複雜程度,使服務架構的邏輯更清晰明了。但是這樣也會帶來很多問題,就譬如分布式環境下的數據一致性,測試的複雜性,運維的複雜性。微服務帶了種種優點,種種弊端,那麼什麼組織適合使用微服務?
  • 微服務架構:BFF和網關是如何演化出來的?
    根據康威法則,單塊的無線BFF和多團隊之間就出現不匹配問題,團隊之間溝通協調成本高,交付效率低下。Mobile BFF裡頭不僅有各個業務線的聚合/裁剪/適配和業務邏輯,還引入了很多跨橫切面邏輯,比如安全認證,日誌監控,限流熔斷等。隨著時間的推移,代碼變得越來越複雜,技術債越堆越多,開發效率不斷下降,缺陷數量不斷增加。
  • 微服務架構設計(一):核心概念&從既有的架構遷移到微服務的策略
    所謂的微服務具體應包含哪些核心的概念?既有的架構遷移到微服務的又有哪些策略?微服務設計是架構設計。所以, 微服務設計不應是一個講求標準答案, 簡單粗暴的設計過程。而應該是一個考量各方因素下的一個決策的過程。所以, 在探討微服務設計前, 我們先來探討下, 所謂的微服務具體應包含哪些核心的概念?
  • 微服務架構-設計總結
    八、微服務的優點和缺點九、思考:意識的轉變十、參考資料和推薦閱讀一、微服務架構介紹微服務架構(Microservice Architecture)是一種架構概念,旨在通過將功能分解到各個離散的服務中以實現對解決方案的解耦
  • 微服務架構談系列(3):SOA VS 微服務
    維基百科給出的SOA定義:「面向服務的體系結構(Service-oriented architecture)是構造分布式系統的應用程式的方法。它將應用程式功能作為服務發送給最終用戶或者其他服務。它採用開放標準、與軟體資源進行交互並採用表示的標準方式。」。
  • 微服務與SOA架構(一)
    微服務和SOA都被認為是基於服務的架構,這意味著這兩種架構模式都非常強調將「服務」作為其架構中的首要組件,用於實現各種功能(包括業務層面和非業務層面)。微服務和SOA是兩種差異很大的架構模式,但是他們仍有一些相同的特徵。