后臺系統可擴展性學習筆記(八)Service Mesh

文章目錄

  • 網絡傳輸可靠性
  • 將微服務控制下沉到網絡棧?
    • Sidecar
  • 從 Sidecar 到 Service Mesh
  • Service Mesh + 部署平臺
  • 參考

網絡傳輸可靠性

從計網的學習過程中我們可以知道數據在網絡傳輸中可能會出現一些異常狀況:

  • 數據丟失:數據包可能會到達一個緩沖區已經被塞滿的路由器,接著被丟掉
  • 順序出錯:一組數據包可能會途徑閑忙程度不同的多個路由器,出現不同程度的延遲,最后到達順序會與發出時的順序不一致

這些丟包重發、順序重組等控制機制已經由網絡協議棧幫我們實現好了,使開發人員更加關注業務層次:
在這里插入圖片描述
在微服務架構中,則需要引入更多的機制來保障整體的可靠性:

  • Service Discovery 機制:通過服務注冊查詢機制,讓一個微服務能夠找到另一個,從而允許動態伸縮、以及故障轉移
  • 熔斷機制(Circuit Breaker pattern):提供斷路保護(就像電表跳閘),防止某個服務不可用引發級聯故障,比如操作不成功導致瘋狂重試,請求堆積,甚至耗盡相關資源,系統中不相關的部分也因此出現故障

同樣,這部分工作早期也是由微服務來完成的(與業務邏輯并存于微服務中):
在這里插入圖片描述
緊接著出現了FinagleProxygen等開源類庫,由專門的類庫來完成這些工作,而不必在每個服務中重復相同的控制邏輯:
在這里插入圖片描述
然而,隨著系統中服務數量的增多,這種方式也暴露出了一些問題:

  • 膠水部分的資源投入:需要投入資源將第三方庫與系統其余部分連接起來
  • 類庫限制了微服務的技術選型:這些類庫通常是特定于平臺的,僅支持特定運行時或編程語言,會給微服務的技術選擇造成限制。畢竟,微服務的一大特點就是允許使用不同的編程語言來編寫不同服務)
  • 類庫的維護成本:類庫本身也需要持續維護升級,每次更新都需要重新部署所有服務,即便服務沒有任何改動

這樣看來,類庫似乎不是個理想的解決方案.
既然在應用層解決不太合適,那么能否如法炮制,下沉到網絡棧呢?

將微服務控制下沉到網絡棧?

與通用的基礎通信機制不同,這些應用服務相關的控制機制很難交由下層網絡棧來實現,照搬下沉行不通。

Sidecar

不能在(服務)里面,也不能在下面,所以最后放到了旁邊:
在這里插入圖片描述
即,通過代理來實現這些網絡控制,所有出入流量都經過代理,稱之為 Sidecar。
Sidecar 作為輔助進程,隨應用程序運行在一旁,并為其提供額外的功能。
問題似乎已經通過網絡代理完美解決了,業界也出現了一些開源方案:Nerve 和 Synapse 基于Zookeeper,Prana 基于Eureka

從 Sidecar 到 Service Mesh

Sidecar 方案都建立在特定的基礎組件之上,而我們需要的是一種基礎組件無關的解決方案,這種模型叫做 Service Mesh
如果給每個服務配套一個代理 Sidecar,服務間僅通過代理互相通信,最終得到了類似這樣的部署模型:
在這里插入圖片描述
即,代理之間相互連接形成了一個網狀網格,稱之為 Service Mesh(服務網格):

服務網格是處理服務到服務通信的專用基礎結構層。
它負責通過復雜的服務拓撲結構可靠地傳遞請求,這些服務構成了一個現代的云本地應用程序。

具體的,Service Mesh 能夠提供Service Discovery、負載均衡、加密、觀察/跟蹤、身份驗證和授權,以及熔斷機制等支持。
從 Sidecar 到 Service Mesh,關鍵在于以更高的視角看待這一個個代理,發現它們形成的網絡所具有的價值:
在這里插入圖片描述

Service Mesh + 部署平臺

Service Mesh 很自然地與(掌控著 Service 的)部署平臺擦出了火花(如Istio + Kubernetes),進而衍生出了控制層(Control Plane),讓這層基礎設施變得配置化:
在這里插入圖片描述
并最終形成了控制層 + 數據層的上下結構:
在這里插入圖片描述
其中,管理實例間網絡流量的部分稱為數據層(Data Plane),數據層的行為由控制層(Control Plane)生成的配置項來控制,而控制層一般會提供 API、CLI 以及 GUI 等多種方式管理應用

參考

http://www.ayqy.net/blog/service-mesh/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376575.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376575.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376575.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于Spring batch的學習之CSV2DB

最近在學習Spring batch相關的內容,網上也有不少Spring Batch相關的知識,不過大多都是使用xml進行配置的。這里是我用注解的方式進行相關的學習心得。 首先我們來看如何將一個文本文件中的內容導入到數據庫中。 我們先來看一下我們所需要的環境。我們這里…

后臺系統可擴展性學習筆記(九)Database Replication

文章目錄數據庫擴展一致性問題Replication (復制)異步復制同步復制半同步復制拓撲結構單主結構多主結構無主結構復制具體措施參考數據庫擴展 之前在第一章后臺系統可擴展性學習筆記(一)概要談到:理論上,有…

python中的sum函數.sum(axis=1)

看起來挺簡單的樣子,但是在給sum函數中加入參數。sum(a,axis0)或者是.sum(axis1) 就有點不解了 在我實驗以后發現 我們平時用的sum應該是默認的axis0 就是普通的相加 而當加入axis1以后就是將一個矩陣的每一行向量相加 例如&…

后臺系統可擴展性學習筆記(十)Database Partitioning

為了提升數據庫的處理能力,我們把單庫擴展成多庫,并通過更新同步機制(即Replication)來保證多份數據的一致性。然而,在 各種復制方案下,每個數據庫都持有一份完整數據,基于全量數據提供增刪改查…

基于FPGA的HDTV視頻圖像灰度直方圖統計算法設計

隨著HDTV的普及,以LCD-TV為主的高清數字電視逐漸進入蓬勃發展時期。與傳統CRT電視不同的是,這些高清數字電視需要較復雜的視頻處理電路來驅動,比如:模數轉換(A/D Converter)、去隔行(De-interla…

后臺系統可擴展性學習筆記(十一)Database Denormalization

之前的兩篇筆記中談到了從單庫擴展到多庫以承載更多的請求量以及單庫(表)拆分成多庫(表),打破單庫的性能瓶頸。 這都是為了應對大數據量下的措施。 然而,除卻數據量外,還有一個極其影響單庫性能…

Java Swing 影樓管理系統之登錄功能

開頭打廣告,Java1234.com。 首先,來個效果圖。 關鍵代碼 1,界面層 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手機助手是何物,它是怎樣神不知鬼不覺地安裝到你的電腦里的?

【電腦軟件管理中Bdsyn手機助手的問題】Bdsyn手機助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安裝的(應該是自己自己主動安裝的),卸載以后過幾天又會出如今軟件列表里。百度搜索卻無法搜索出…

后臺系統可擴展性學習筆記(十二)NoSQL

文章目錄NoSQL定義NoSQL種類鍵值存儲文檔存儲寬列存儲圖形數據庫NoSQL 意味著什么ACID vs. BASESQL or NoSQLNoSQL定義 不同于關系型數據庫,NoSQL 數據庫(也叫非 SQL 或非關系型數據庫)提供的數據存儲、檢索機制并不是基于表關系建模的。沒有…

android2.2應用開發之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通訊錄的聯系人的機卡混排顯示,由于手機卡類型的不同,導致手機卡存儲容量以及可以存儲信息不同,就要涉…

后臺系統可擴展性學習筆記(十三)緩存

文章目錄在哪兒加緩存緩存什么內容緩存原始查庫結果緩存數據對象怎么查詢緩存結果預留緩存模式直讀模式直寫模式回寫式緩存繞寫式緩存提前刷新模式緩存滿了如何處理參考讀寫分離、分庫分表、反范式化、采用 NoSQL……如果這些擴展手段全都上了,數據響應依舊越來越慢…

[linux]gdb調試

使用gdb可以在命令行方便地調試,并且能以命令程序的方式調試源代碼。 常用命令簡寫print-p,step-s,next-n 進入gdb //方式一 gdb test//test 為可執行文件,使用-g編譯得到 //方式二 gdb -q //不顯示版權信息 file test //file命令打開文件 退出gdb quit …

后臺系統可擴展性學習筆記(十四)異步機制與MQ

對于 Web 服務而言,提升可擴展性的主要途徑是將耗時的同步工作改成異步處理,從而允許將這些工作“外包”給多個 Worker 去做,或者提前完成能夠預知的部分。 異步機制與可擴展性之間的關系需要從(異步)并行處理的優勢說…

RegisterClientScriptBlock與 RegisterStartupScript區別

Page.ClientScript.RegisterClientScriptBlock而用Page.ClientScript.RegisterStartupScript是因為:RegisterStartupScript 把script放置在ASP.NET page的底部,而RegisterClientScriptBlock把script放置在ASP.NET page的頂部,用RegisterClien…

【Web后端筆記】SQL Server與java數據類型對應

編號數據庫類型JDBC類型JDBC索引描述1intjava.lang.Integer4 2varcharjava.lang.String12 3charjava.lang.String1 4ncharjava.lang.String1 5nvarcharjava.lang.String12 6textjava.lang.String-1 7ntextjava.lang.String-1 8tinyintjava.lang.Integer-6 9intjava.lang.Intege…

后臺系統可擴展性學習筆記

整理了一下筆記目錄,將以前學習的一些知識串聯起來了,比如cdn、負載均衡、中間件,以前只是各自了解了一點,現在大概理清了后臺系統設計中他們各自的作用。 后臺系統可擴展性學習筆記(一)概要 后臺系統可擴展…

TFS 強制刪除鎖定文件(數據庫)

TFS:TFS2010 VS:VS2012 OS:Windows2008 DB:Sqlserver2008 R2 我們在團隊開發當中,版本控制是一個不可忽略的工具。我們團隊使用的是TFS2010這個版本控制器。 但在團隊實際協作開發當中,團隊成員難免有電腦損壞或人員離職情況&…

【轉】Java:String、StringBuffer和StringBuilder的區別

1 String String:字符串常量,字符串長度不可變。Java中String是immutable(不可變)的。 String類的包含如下定義: [java]view plaincopy /** The value is used for character storage. */ private final char value[]…

Linux中exit與_exit的區別

在exit,_exit的區別 - exit()與_exit()函數的區別(Linux系統中)2012-03-20 15:19:53 分類: LINUX 注:exit()就是退出,傳入的參數是程序退出時的狀態碼,0表示正常退出,其他表示非正常退出&…

光標閃爍問題的解決辦法

在調用Windows API函數SetCursor設置光標時,可能會碰到閃爍的問題:移動鼠標,光標在Class Cursor(即注冊窗口類時指定的Cursor)與預設Cursor之間閃爍。 在MSDN上有關SetCursor函數的備注中強調,如果Class Cursor非空,那…