<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Service Mesh:Istio 的前世今生

          共 5679字,需瀏覽 12分鐘

           ·

          2020-08-25 16:24

          來源:https://morven.life/posts/the_history_of_istio/


          其實要徹底了解Istio以及服務(wù)網(wǎng)格出現(xiàn)的背景,就得從計算機發(fā)展的早期說起。

          下面這張圖展示的的通信模型變種其實從計算機剛出現(xiàn)不久的上世紀50年代開始就得到廣泛應(yīng)用,那個時候,計算機很稀有,也很昂貴,人們手動管理計算機之間的連接,圖中綠色的網(wǎng)絡(luò)棧底層只負責(zé)傳輸電子信號和字節(jié)碼:


          隨著計算機變得越來越普及,價格也沒那么貴了,計算機之間的連接數(shù)量和通信的數(shù)據(jù)量出現(xiàn)了瘋狂式的增長,人們越來越依賴網(wǎng)絡(luò)系統(tǒng),工程師們必須確保他們開發(fā)的服務(wù)能夠滿足用戶的要求。于是,如何提升系統(tǒng)質(zhì)量成為人們關(guān)注的焦點。機器需要知道如何找到其他節(jié)點,處理同一個通道上的并發(fā)連接,與非直接連接的機器發(fā)生通信,通過網(wǎng)絡(luò)路由數(shù)據(jù)包,加密流量……除此之外,還需要流量控制機制,流量控制可以防止下游服務(wù)器給上游服務(wù)器發(fā)送過多的數(shù)據(jù)包。

          于是,在一段時期內(nèi),開發(fā)人員需要在自己的代碼里處理上述問題。在下面這張圖的示例中,為了確保下游服務(wù)器不給其他上游服務(wù)造成過載,應(yīng)用程序需要處理流量控制邏輯,于是網(wǎng)絡(luò)中的流量控制邏輯和業(yè)務(wù)邏輯就混雜在一起:

          幸運的是,上世紀60年代末,TCP/IP協(xié)議棧的出現(xiàn)解決了可靠傳輸和流量控制等問題,此后盡管網(wǎng)絡(luò)邏輯代碼依然存在,但已經(jīng)從應(yīng)用程序里抽離出來,成為操作系統(tǒng)網(wǎng)絡(luò)棧的一部分,工程師只需要按照操作系統(tǒng)的調(diào)用接口進行編程就可以解決基礎(chǔ)的網(wǎng)絡(luò)傳輸問題:

          進入21世紀,計算機越來越普及,也越來越便宜,相互連接的計算機節(jié)點越來越多,業(yè)界出現(xiàn)了各種網(wǎng)絡(luò)系統(tǒng),如分布式代理和面向服務(wù)架構(gòu)(SOA):

          分布式為我們帶來了更高層次的能力和好處,但卻帶來了新的挑戰(zhàn)。這時候工程師的重心開始轉(zhuǎn)移到應(yīng)用程序的網(wǎng)絡(luò)功能上面,這時候的服務(wù)之間的對話以“消息”為傳輸單元,當(dāng)工程師們通過網(wǎng)絡(luò)進行調(diào)用服務(wù)時,必須能為應(yīng)用程序消息執(zhí)行超時、重試、確認等操作。

          于是,有工程師是開始嘗試使用消息主干網(wǎng)(messaging backbone)集中式地來提供、控制應(yīng)用程序網(wǎng)絡(luò)功能,如服務(wù)發(fā)現(xiàn)、負載均衡、重試等等,甚至,比如協(xié)議調(diào)解、消息轉(zhuǎn)換、消息路由、編排等功能,因為他們覺得如果可以將這些看似同一層面的內(nèi)容加入到基礎(chǔ)設(shè)施中,應(yīng)用程序或許會更輕量、更精簡、更敏捷等等。這些需求絕對是真實的,ESB(Enterprise Service Bus)演變并滿足了這些需要。ESB在是2005年被提出的,它的概念特別類似于計算機硬件概念里的USB, USB作為電腦中的標準擴展接口,可以連接各種外部設(shè)備;而ESB則就把路由管理、協(xié)議轉(zhuǎn)換、策略控制等通用應(yīng)用程序網(wǎng)絡(luò)功能加到現(xiàn)有的集中式消息總線里:

          這看似行得通!

          可是,在實施SOA架構(gòu)的時候,工程師們發(fā)現(xiàn)這種架構(gòu)有點兒用力過度,矯枉過正了。集中式的消息總線往往會成為架構(gòu)的瓶頸,用它來進行流量控制、路由、策略執(zhí)行等并不像我們想象那么容易。加上組織結(jié)構(gòu)過于復(fù)雜,使用專有格式(XML等),需要業(yè)務(wù)邏輯需要實現(xiàn)路由轉(zhuǎn)換和編排等功能,各個服務(wù)之間耦合度很高,在敏捷運動的時代背景下,ESB架構(gòu)已經(jīng)無法跟上時代的節(jié)奏了。


          在接下來的幾年內(nèi),REST革命和API優(yōu)先的思潮孕育了微服務(wù)架構(gòu)應(yīng)用,而以docker為代表的容器技術(shù)和以Kubernetes為代表的容器編排技術(shù)的出現(xiàn)促進了微服務(wù)架構(gòu)的落地。事實上,微服務(wù)時代可以以Kubernetes的出現(xiàn)節(jié)點劃分為“前微服務(wù)時代”和“后微服務(wù)時代”:

          “前微服務(wù)時代”基本上是微服務(wù)作為用例推動容器技術(shù)的發(fā)展,而到“后微服務(wù)時代”,特別是成為標準的Kubernetes其實在驅(qū)動和重新定義微服務(wù)的最佳實踐,容器和Kubernetes為微服務(wù)架構(gòu)的落地提供了絕佳的客觀條件。

          微服務(wù)架構(gòu)有很多好處,比如:

          • 快速分配計算資源

          • 快速部署升級迭代

          • 易于分配的存儲

          • 易于訪問的邊界等等

          但是作為較復(fù)雜的分布式系統(tǒng),微服務(wù)架構(gòu)給運維帶來了新的挑戰(zhàn)。當(dāng)工程師開始接嘗試微服務(wù)架構(gòu),必須考慮如何進行微服務(wù)治理。狹義的微服務(wù)治理,關(guān)注的是微服務(wù)組件之間的連接與通訊,例如服務(wù)注冊發(fā)現(xiàn)、東西向路由流控、負載均衡、熔斷降級、遙測追蹤等。

          歷史總是驚人的相似,第一批采用微服務(wù)架構(gòu)的企業(yè)遵循的是與第一代網(wǎng)絡(luò)計算機系統(tǒng)類似的策略,也就是說,解決網(wǎng)絡(luò)通信問題的任務(wù)又落在了業(yè)務(wù)工程師的肩上。

          這個時候出現(xiàn)了看到諸如Netflix OSS堆棧、Twitter Finagle以及赫赫有名的Spring Cloud這樣的框架和類庫幫助業(yè)務(wù)工程師快速開發(fā)應(yīng)用程序級別的網(wǎng)路功能,只需要寫少量代碼,就可以把服務(wù)發(fā)現(xiàn),負載均衡,路由管理,遙測收集,監(jiān)控告警等這些功能實現(xiàn):

          但是如果仔細想一下的話,就會發(fā)現(xiàn)這樣編寫微服務(wù)程序的問題很明顯。

          這些類庫或者框架是特定語言編寫的,并且混合在業(yè)務(wù)邏輯中(或在整個基礎(chǔ)設(shè)施上層分散的業(yè)務(wù)邏輯中)。姑且不說類庫和框架的學(xué)習(xí)成本和門檻,我們知道微服務(wù)架構(gòu)問世的一個承諾就是不同的微服務(wù)可以采用不同的編程語言來編寫,可是當(dāng)你開始編寫代碼的時候會發(fā)現(xiàn)有些語言還沒有提供對應(yīng)的類庫。這是一個尷尬的局面!這個問題非常尖銳,為了解決這個問題,大公司通常選擇就是統(tǒng)一編程語言來編寫微服務(wù)代碼另外的問題是,升級怎么辦?框架不可能一開始就完美無缺,所有功能都齊備,沒有任何BUG。升級一般都是逐個版本遞進升級,一旦出現(xiàn)客戶端和服務(wù)器端版本不一致,就要小心維護兼容性。實際上,每做出一次變更都需要進行集成、測試,還要重新部署所有的服務(wù)——盡管服務(wù)本身并沒有發(fā)生變化。

          與網(wǎng)絡(luò)協(xié)議棧一樣,工程師們急切地希望能夠?qū)⒎植际椒?wù)所需要的一些特性放到底層的平臺中。這就像工程師基于HTTP協(xié)議開發(fā)非常復(fù)雜的應(yīng)用,無需關(guān)心底層TCP如何控制數(shù)據(jù)包。在開發(fā)微服務(wù)時也是類似的,業(yè)務(wù)工程師們聚焦在業(yè)務(wù)邏輯上,不需要浪費時間去編寫服務(wù)基礎(chǔ)設(shè)施代碼或管理系統(tǒng)用到的軟件庫和框架。把這種想法囊括到之前架構(gòu)中,就是下邊這幅圖所示的樣子:

          不過,在網(wǎng)絡(luò)協(xié)議棧中加入這樣的一個層是不實際的。貌似可以嘗試一下代理的方案!事實上,確實有有一些先驅(qū)者,嘗試過使用代理的方案,例如nginx,haproxy,proxygen等代理。也就是說,一個服務(wù)不會直接與上游服務(wù)發(fā)生連接,所有的流量都會流經(jīng)代理,代理會攔截服務(wù)之間的請求并轉(zhuǎn)發(fā)到上游服務(wù)。可是,那時候代理的功能非常簡陋,很多工程師嘗試之后覺得沒有辦法實現(xiàn)服務(wù)的客戶端所有的需求。

          在這樣的訴求下,第一代的Sidecar出現(xiàn)了,Sidecar扮演的角色和代理很像,但是功能就齊全很多,基本上原來微服務(wù)框架在客戶端實現(xiàn)的功能都會有對應(yīng)的實現(xiàn):

          但是第一代的sidecar有一個重要的限制,它們是專門為特定基礎(chǔ)設(shè)施組件而設(shè)計的,導(dǎo)致無法通用。例如,Airbnb的Nerve和Synapse,它們工作的基礎(chǔ)是服務(wù)一定是注冊到ZooKeeper上的,而Netflix的Prana要求一定要使用Netflix自己的Eureka注冊服務(wù)…

          隨著微服務(wù)架構(gòu)日漸流行,新一波的sidecar出現(xiàn)了,可以用在不同基礎(chǔ)設(shè)施組件上,我們把他們叫做通用型的sidecar。其中Linkerd是業(yè)界第一個通用型sidecar,它是基于Twitter微服務(wù)平臺而開發(fā)的,實際上也正是它創(chuàng)造了Service Mesh,即服務(wù)網(wǎng)格的概念。2016年1月15日,Linkerd 0.0.7版本發(fā)布,隨后加入CNCF,1.0版本于2017年4月份發(fā)布;隨后的通用型sidecar就是大名鼎鼎來自于Lyft的envoy,Lyft在2016年9月發(fā)布envoy的1.0版本之后。2017年9月envoy加入CNCF;最后一個比較新的sidecar來自于我們熟悉的NGINX,叫做Nginmesh,2017年9月發(fā)布了第一個版本。


          有了通用型sidecar,每個微服務(wù)都會有一個sidecar代理與之配對,服務(wù)間通信都是通過sidecar代理進行的。正如我們在下這幅圖上看到的那樣,sidecar代理之間的連接形成了一種網(wǎng)格網(wǎng)絡(luò):

          這就是服務(wù)網(wǎng)格概念的來源,下面是服務(wù)網(wǎng)格概念地官方定義,它不再把sidecar代理看成單獨的組件,并強調(diào)了這些sidecar代理所形成的網(wǎng)絡(luò)的重要性。

          A service mesh is a dedicated infrastructure layer for making service-to-service communication safe, fast, and reliable.

          實際上,就像TCP/IP網(wǎng)絡(luò)棧為我們抽象了網(wǎng)絡(luò)傳輸?shù)募毠?jié)一樣,有了服務(wù)網(wǎng)格,我們不需要再擔(dān)心微服務(wù)之間通信的各種網(wǎng)絡(luò)訴求,如服務(wù)發(fā)現(xiàn)和負載均衡,流量管理,策略執(zhí)行,監(jiān)控告警等。


          服務(wù)網(wǎng)格的概念出現(xiàn)之后,有部分工程師們開始將的微服務(wù)部署到更為復(fù)雜的運行時(如Kubernetes和Mesos)上,并開始使用這些基礎(chǔ)平臺提供的網(wǎng)絡(luò)工具來管理整個服務(wù)網(wǎng)格里的所有sidecar,也就是從一系列獨立運行的sidecar代理轉(zhuǎn)向使用集中式的控制面板來管理所有的sidecar代理。

          在Google內(nèi)部,很早通過一個分布式平臺對微服務(wù)進行管理,通過代理處理內(nèi)部與外部的協(xié)議。這些代理的背后是一個控制面板,它在開發(fā)者與運維人員之間提供了一層額外的抽象,在這層抽象之上對跨語言與系統(tǒng)平臺的服務(wù)進行管理。經(jīng)過實戰(zhàn)的檢驗,這套架構(gòu)已經(jīng)證明它能夠確保高伸縮性、低延遲性,并為Google的各項服務(wù)提供了豐富的特性。

          在2016年,Google決定開發(fā)一個對微服務(wù)進行管理的開源項目,它與Google內(nèi)部使用的平臺有很大的相似性,該項目命名為“Istio”, Istio在希臘語中的意思是“啟航”。就在Google啟動Istio項目的幾乎同一時間,IBM也發(fā)布了一個名為Amalgam8的開源項目,這是一個基于NGINX代理技術(shù),為微服務(wù)提供基于內(nèi)容的路由方案的項目。隨后,Google和IBM意識到這兩個項目在使用場景與產(chǎn)品愿景上存在很大一部分交集,于是答應(yīng)成為的合作伙伴,IBM放棄Amalgam8的開發(fā),共同基于Lyft公司 的envoy項目打造Istio這款產(chǎn)品。

          Istio的出現(xiàn)將服務(wù)網(wǎng)格的概念發(fā)揚光大,它創(chuàng)新性地將服務(wù)網(wǎng)格邏輯上劃分為控制面板和數(shù)據(jù)面板,

          1. 隨著分布式應(yīng)用一起部署的sidecar成為數(shù)據(jù)平面(Data Plane),它能夠攔截網(wǎng)絡(luò)請求,并控制服務(wù)之間的通信;

          2. 而集中是的管理模塊成為控制平面(Control Plane),它提供策略實施、遙測數(shù)據(jù)收集以及證書輪換等功能;

          在整個網(wǎng)絡(luò)里面,所有的流量都在sidecar代理的控制當(dāng)中,所有的sidecar代理都在控制面板控制當(dāng)中,因此,可以通過控制面板控制整個服務(wù)網(wǎng)格,這是Istio帶來的最大的革新。

          就如我們在上面這幅圖上看到的那樣,Istio默認使用envoy作為sidecar代理(事實上,Istio利用了envoy內(nèi)建的大量特性,例如服務(wù)發(fā)現(xiàn)與負載均衡、流量拆分、故障注入、熔斷器以及金絲雀發(fā)布等功能),而在控制平面Istio也分為四個主要模塊:

          1. Pilot: 為sidecar代理提供服務(wù)發(fā)現(xiàn)功能和配置下發(fā)功能;它將控制流量的高級路由規(guī)則轉(zhuǎn)換為特定于envoy的配置,并在運行時將它們傳播到envoy;

          2. Mixer: 負責(zé)在服務(wù)網(wǎng)格上執(zhí)行訪問控制和策略檢查,并從envoy代理收集遙測數(shù)據(jù);代理提取請求級屬性,發(fā)送到Mixer進行評估;

          3. Citadel: 證書分發(fā)和管理中心;通過內(nèi)置身份和憑證管理,用于升級服務(wù)網(wǎng)格中未加密的流量,并為運維人員提供基于服務(wù)標識的訪問策略;

          4. Galley: 統(tǒng)一的配置消化,驗證和分發(fā)中心;未來的版本中Galley將承擔(dān)更多的責(zé)任,從而將其他的Istio組件與從底層平臺(例如Kubernetes)細節(jié)中隔離開來;

          2018年7月31日,Istio1.0正式發(fā)布,距離最初的0.1版本發(fā)布以來已經(jīng)過了一年多時間了。

          從0.1起,Istio就在蓬勃發(fā)展的社區(qū)、貢獻者和用戶的幫助下迅速發(fā)展。現(xiàn)在已經(jīng)有許多公司成功將Istio應(yīng)用于生產(chǎn),并通過Istio提供的洞察力和控制力獲得了真正的價值。Istio幫助大型企業(yè)和快速發(fā)展的創(chuàng)業(yè)公司,如eBay、Auto Trader UK、Descartes Labs、HP FitStation、Namely、PubNub和Trulia使用Istio從頭開始連接、管理和保護他們的服務(wù)。

          同時,整個Istio生態(tài)系統(tǒng)也不斷的擴張,envoy增加了許多對生產(chǎn)級別服務(wù)網(wǎng)格至關(guān)重要的功能,包括與許多可觀察性工具的集成,像Datadog、 SolarWinds、 Sysdig、Google Stackdriver和Amazon CloudWatch這樣的可觀察性提供商也編寫了插件來將Istio與他們的產(chǎn)品集成在一起;Red Hat構(gòu)建的Kiali為網(wǎng)格管理和可觀察性提供了良好的用戶體驗;Knative無服務(wù)化項目也正基于Istio開發(fā)下一代下一代流量路由堆棧;Apigee宣布計劃在他們的API管理解決方案中使用它。


          - END -

          ?推薦閱讀?

          從零認識 iptables

          Zabbix 使用微信接收報警信息

          Shell文本處理三劍客:grep、sed、awk

          Java 應(yīng)用運維最常見的3個問題排查思路

          10 個Linux Awk文本處理經(jīng)典案例

          一次搞明白 Docker 容器資源限制

          10 分鐘部署一個 Kubernetes 集群

          部署一套完整的Kubernetes高可用集群(二進制)

          Kubernetes 企業(yè)落地核心技術(shù)方案




          點亮,服務(wù)器三年不宕機

          瀏覽 84
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青亚洲自拍 | 黄色视频一级 | 中国一级久久毛 | 亚洲精品综合在线 | 超碰人人操 |