系列文章:
總目錄索引:九析帶你輕鬆完爆 istio 服務網格系列教程
目錄
1 前言
2 架構演變史
2.1 單體架構
2.2 垂直架構
2.3 微服務架構
3 微服務架構模型演進史
3.1 框架與通信
3.2 運行時的支撐服務
3.3 服務安全
3.4 服務監控和告警
3.5 服務部署
3.6 底層服務
3.7 服務防護
3.8 全鏈路壓測
4 微服務架構模型全景圖
5 帶來的問題
5.1 服務治理方式不統一
5.2 重複造輪子
5.3 服務治理缺乏標準化
6 總結
1 前言
介紹 istio 之前,要先講微服務,因爲 istio 是在微服務技術體系上發展起來的。當你對微服務的技術體系有了一定把握之後,回過頭再來理解 istio,你就會感覺技術果然是一路傳承向前發展的。
歷史總會反覆,但科技永遠向前。
本文很多內容來自我在多個公司的技術分享後的 ppt 截圖,如果你對此 ppt 感興趣,可以向我索要。
2 架構演變史
2.1 單體架構
特點:
1 所有功能集成在一個項目工程中
2 所有功能打包在一個 web 包部署到服務器
3 應用跟數據庫分開部署
4 通過部署應用集羣和數據庫集羣來提高系統性能
優點:
架構簡單,前期開發成本低,週期短。小型項目首選。
缺點:
1 全部功能集成在一個工程中,對於大型項目不易開發、擴展和維護
2 系統性能擴展只能通過擴展集羣,成本高
3 技術棧受限
2.2 垂直架構
特點:
當訪問量逐漸增大,單一應用增加機器帶來的性價比越來越小,將應用拆成互不相關的幾個應用,以提升效率。
優點:
1 相關架構簡單,前期開發成本低,週期短,小型項目的首選
2 通過垂直拆分,原來的單體不至於無限擴大
3 不同的項目可採用不同的技術棧
缺點:
1 同業務域功能集成在一個工程中,對於大型項目不易開發、擴展和維護成本高
2 系統性能擴展只能通過擴展集羣,成本高,有瓶頸
3 單體之間的函數調用過度到系統之間的 rpc 或者 http 調用,服務發現需要單獨機制保證
2.3 微服務架構
特點:
1 將系統服務層完全獨立出來,並將服務層抽取爲一個個微服務
2 微服務遵循單一原則
3 微服務之間採用 RESTful輕量級協議進行傳輸
優點:
1 服務拆分粒度更細,有利於資源重複利用,提高開發效率
2 可以更加精準指定每個服務的優化方案,提高系統的可維護性
3 微服務架構採用去中心化思想,服務之間採用 RESTful 等輕量級協議通信,相比 ESB 更輕
4 適合互聯網產品,產品迭代更加快速和便捷
缺點:
1 微服務過多,服務治理成本高,不利於系統維護
2 分佈式系統開發的技術成本高(容錯、分佈式事務等),對團隊技術挑戰大
3 微服務架構模型演進史
微服務架構的模型也是一個從簡單到複雜的演進過程。
3.1 框架與通信
微服務架構初期,主要的技術訴求是尋找更簡單和輕量的開發框架,不同的開發框架意味着採用不同的通信協議。
3.2 運行時的支撐服務
當服務的編寫和通信解決了之後,接下來就要考慮一些運行時的支撐服務了。這些服務跟業務去耦,屬於基礎層的支撐服務,比如網關、負載均衡、服務註冊與發現、配置中心等。
3.3 服務安全
解決了服務的通信以及基礎支撐後,大體上業務就可以開展了。但是這樣裸奔的服務是有很大安全風險的,很多敏感的信息在不經過認證和授權就可以輕易獲取到,因此服務安全就加入到了微服務的模型體系中。服務安全主要有兩種,分別是 jwt 和 oauth2。
3.4 服務監控和告警
服務在解決了通信、支撐和安全之後,就可以愉快地展開工作了。但就跟判斷健康需要做體檢一樣,判斷在線服務是否健康就需要監控和遙測,當工作負載超過了閾值就要告警通知人爲介入。服務的監控有很多的維度,常見地有系統指標監控、業務指標監控、服務健康檢查、調用鏈監控、日誌監控等。
3.5 服務部署
容器化時代帶來了新的運維思路,原有基於虛擬機、物理機的重運維開始向基於容器以及容器編排的輕運維轉換,這種轉換也帶來了服務部署方式的改變。更快、更好、更有效的部署成爲微服務架構模型新的挑戰。
服務部署需要解決的問題有發佈機制的引入、鏡像治理、容器治理、卷管理、CI/CD 等方面。
3.6 底層服務
當業務範圍越來越廣,再大的公司也不可能解決任何技術問題,這時就需要引入一些業界優秀的第三方服務作爲底層服務來解決特定問題。有時這些第三方服務並不可能完全適合自己的架構,因此就需要做適當的剪裁。儘管如此,這些第三方服務也構成了整個微服務架構模型中不可或缺的一部分。常用的第三方底層服務有分佈式消息中間件、分佈式數據訪問、分佈式任務調度和分佈式緩存等。底層服務跟基礎支撐服務的區別在於前者更多在業務問題域,而後者則主要是通用問題域。
3.7 服務防護
就像胃口再好的人也不可能一次吃下整頭大象一樣,編寫再好的服務也不可能支持無限的請求。技術人員在處理無限、不可期技術場景的技術方案時,經常的策略是以不變應萬變:根據目前的服務負載設置峯值,超過峯值就進行熔斷、限流等措施。
熔斷如下圖所示:
降級如下圖所示:
限流如下圖所示:
3.8 全鏈路壓測
在上面的介紹中,我們介紹了微服務架構模型的各個維度。本來可以在這裏結束,但是想想實在不妥,因爲我們缺少了很關鍵的一環,那便是測試。
全鏈路壓測是稍具規模的科技公司都必須要做的工作之一。它的重要性不言而喻,當業務發展超出預期,系統要具有先知先覺的能力以抵禦洪災。畢竟未雨綢繆總好過亡羊補牢。全鏈路壓測是一個大的話題,因爲這裏介紹的是 istio,故這裏一筆帶過,有關 ppt 詳情我也照顧篇幅不再贅述,如果有朋友對此感興趣,可以向我索要。
4 微服務架構模型全景圖
下圖展示了整個微服務架構模型:
5 帶來的問題
微服務架構的引入帶來了很多好處,但同時也帶來了服務治理諸多的問題。核心問題如下:
5.1 服務治理方式不統一
不同服務治理的方式會引入不同的中間件,而這些中間件的技術標準和維護標準都不同。因此運維人員或者架構人員必須掌握每種中間件的使用方法,很多時候這對一個人力資源有限的科技公司並不現實。
5.2 重複造輪子
微服務架構是允許多語言棧、多技術棧的,但不同的技術棧針對通信、支撐服務、服務安全、服務監控、熔斷/降級/限流等通用技術問題卻需要各自的解決方案,實在是成本的浪費。
5.3 服務治理缺乏標準化
由於服務治理缺乏標準化,因此微服務治理的好壞全依靠技術人員個人的能力、經驗和水平,這就有點像手工作坊時代,器物優質全靠工匠。但是無標準化顯然不符合科技發展的軌跡。
6 總結
微服務發展目前已經趨於穩定,併成爲了技術主流,但與此同時它的處境卻越來越尷尬,暴露的問題也越來越尖銳。幸運的是,服務網格時代到來了,服務網格的領軍 istio 正穩步進入歷史舞臺,並變得越來越炙手可熱。下文九析將繼續帶你輕鬆完爆 istio。