為什麼要使用服務網格Service Mesh?
為了理解服務網格的必要性,我們將從多個階段來檢視Internet應用程式的簡要歷史。
階段0:巨石單體
記得那些時候?整個程式碼庫打包為一個可執行檔案並已部署。根據用例,這仍然可以更好地工作。
但問題是一些快速增長的公司在擴充套件性,部署,所有權等方面遇到了困難。
第1階段:微服務
想法很簡單,用SLA將monolith分解成多個部分。這種方法運作良好,並被許多公司廣泛採用。
現在,每個團隊都可以大膽地用他們喜歡的語言、框架等來構建他們的微服務。
雖然它解決了第0階段的一些問題,但現在還是存在一些嚴重的問題
- 為每個微服務配置VM的規範。
- 使用Chef,OS版本等自動化工具維護系統級依賴性。
- 監控每項服務。
對於實現生產環境的構建和部署的人來說,這是一場噩夢。並且假設它們共享相同的作業系統但需要隔離,或者出於可移植性原因將它們打包到單獨的VM映象中。為每個服務實現新VM非常昂貴!
階段2:容器化
透過利用Linux中的cgroups和名稱空間,新的作業系統級虛擬化技術透過共享相同的主機作業系統來實現應用程式的隔離環境。Docker是最受歡迎的容器執行時。
因此,為每個微服務建立併發布了一個映象。現在,應用程式被隔離,快速,便宜地啟動新容器,所有這些都可以透過一個作業系統實現!
容器化解決了構建和部署問題。我們還沒有完善的監控解決方案!
我們還有其他問題嗎?
管理容器!
使用容器執行可靠的基礎架構需要注意一些關鍵事項。
- 容器的可用性
- 供應容器
- 向上/向下縮放
- 負載均衡
- 服務發現
- 跨多臺計算機排程容器
階段3:容器編排
Kubernetes是最受歡迎的集裝箱協調器,它徹底改變了我們對基礎設施的看法。
Kubernetes負責健康檢查,可用性,負載平衡,服務發現,可擴充套件性,跨VM的排程容器等。太棒了!
那真是嗎?
不是,請記住,我們尚未解決微服務階段的監控/可觀察性問題。那只是冰山一角。微服務是分散式的管理微服務,但是不是那麼簡單。
我們需要考慮一些最佳實踐來方便地執行微服務。
- 指標(延遲,成功率等)
- 分散式跟蹤
- 客戶端負載平衡
- 斷路
- 交通換乘
- 限速
- 訪問記錄
像Netflix這樣的公司提出了幾種工具,並經過了微服務執行的實踐考驗。
- Netflix Spectator(適用於指標)
- Netflix Ribbon (客戶端LB /服務發現)
- Netflix Hystrix(斷路器)
- Netflix Zuul(邊緣路由器)
滿足這些最佳實踐的方法是在每個微服務上使用客戶端庫來解決每個問題。
微服務增加了多個庫!
但服務A是用Java編寫的,其他服務呢?
如果我找不到其他語言的等效庫怎麼辦?
如何讓所有團隊使用/維護/升級庫版本?
我的公司有幾百個服務我應該修改它們以便使用上面的庫嗎?
你現在看到問題了嗎?
自微服務出現以來,這一直是一個問題。
階段4:服務網格
Envoy,Linkerd和Nginx 等多個代理為Mesh提供解決方案。但是這篇文章只關注Envoy Mesh。Envoy是服務代理,設計為管理微服務產生的所有運營問題。
Envoy可以作為邊車與每個應用程式一起執行並抽象網路。當基礎設施中的所有服務流量透過Envoy網格流動時,透過統一的可觀察介面可以很容易地顯示問題區域。
Envoy擁有許多方便的功能
- 支援HTTP 2,包括gRPC
- 健康檢查
- 負載均衡
- 度量
- 追蹤
- 訪問日誌記錄
- 斷路
- 重試政策
- 超時配置
- 限速
- Statsd / Prometheus支援
- 交通流量
- 使用xDS Server進行動態配置
還有很多!
因此,透過從服務中抽象整個網路並與Envoy形成網格,因為它的資料皮膚允許我們控制上面列出的能力。
相關文章
- 為什麼我們需要服務網格Service mesh?
- 服務網格 Service Mesh
- 服務網格service mesh 之 Linkerd
- 快速上手 Linkerd v2 Service Mesh(服務網格)
- Service Mesh大咖訪談:使用服務網格的微服務通訊與治理微服務
- Emoji.voto,Linkerd 服務網格(service mesh)的示例應用程式
- 服務網格重蹈ESB的覆轍?為什麼需要SMI服務網格介面? - samnewman
- Service Mesh是什麼,為我們解決了什麼問題?
- 服務網格新成員:亞馬遜釋出App Mesh應用網格亞馬遜APP
- 服務網格Service Mesh、API閘道器和訊息佇列的對比 - Wolfram HempelAPI佇列
- 企業級服務網格架構之路解讀——Service Mesh在會話層解耦架構會話解耦
- 服務網格將更安全:VMware收購Mesh7改變服務網格的遊戲規則遊戲
- Linkerd Service Mesh 服務配置檔案規範
- 為什麼要搭建自己的部落格
- 為什麼要寫技術部落格?
- 什麼是資料即服務(Data as a Service)?
- k8s-服務網格實戰-配置 Mesh(灰度釋出)K8S
- Aeraki Mesh正式成為CNCF沙箱專案,騰訊雲攜夥伴加速服務網格成熟商用
- 微服務架構一直火,為什麼服務化要搞懂?微服務架構
- 服務遷移之路 | Spring Cloud向Service Mesh轉變SpringCloud
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 螞蟻金服 Service Mesh 深度實踐
- 螞蟻金服 Service Mesh 實踐探索
- 技術人員為什麼要寫部落格?
- 做為技術人員為什麼要寫部落格?
- 做為技術人員為什麼要寫部落格
- 為什麼要網頁模組化?網頁
- 避免使用服務網格的原因? - Reddit
- 在 Intenseye,為什麼我們選擇 Linkerd2 作為 Service Mesh 工具(Part.1)
- 在 Intenseye,為什麼我們選擇 Linkerd2 作為 Service Mesh 工具(Part.2)
- 大型網站為何要打造分散式服務網站分散式
- 代理伺服器 ip為網際網路提供什麼服務?伺服器
- 企業服務行業如何試水 Istio | Service Mesh Meetup 分享實錄行業
- 螞蟻金服Service Mesh新型網路代理的思考與實踐
- 使用Istio服務網格實現流量映象
- 服務網格|如何使用 Amesh 配置外掛
- 為什麼我們要關注醫療衛生服務面臨的網路安全威脅
- 重磅 | 騰訊雲服務網格開源專案 Aeraki Mesh 加入 CNCF 雲原生全景圖