1. 程式人生 > 其它 >2021春招BAT面試真題詳解

2021春招BAT面試真題詳解

2021春招BAT面試真題詳解

什麼是Service Mesh

作為Service Mesh技術探索和實踐的先行者,全球第一個真正的Service Mesh專案Linkerd負責人、Buoyant公司創始人兼CEO William Morgan第一次完整地闡述了Service Mesh。按照William Morgan的定義,Service Mesh是一個致力於解決服務間通訊的基礎設施層,其負責在現代雲原生應用的複雜服務拓撲下實現請求的可靠傳遞,在實踐中Service Mesh通常實現為一組輕量級網路代理,這些代理與應用程式部署在一起,並且對應用程式透明。

從上述Service Mesh的定義看,基礎設施層是Service Mesh的定位,致力於解決本書第1章提出的微服務基礎設施標準化、配置化、服務化和產品化問題;服務間通訊是Service Mesh技術面對的問題域,對微服務遮蔽通訊的複雜度,解決微服務的通訊治理問題;請求的可靠傳遞是Service Mesh的目標;輕量級網路代理是Service Mesh的部署方式;對應用程式透明是Service Mesh的亮點和特色,Service Mesh接入對業務無侵入,可以非常方便地獲取Service Mesh帶來的便捷性,算是Service Mesh的一大優勢。

綜合來看,Service Mesh主要解決使用者如下3個維度的痛點需求。

完善的微服務基礎設施

Service Mesh通過將微服務通訊下沉到基礎設施層,遮蔽了微服務處理各種通訊問題的複雜度,可以看成是微服務之間的抽象協議層,抽象層面可以看成是TCP/IP協議棧的一部分。對於微服務的開發者來說,比如當前使用HTTP或者Thrift進行RPC通訊時,你不需要關注TCP/IP這一層的具體實現;有了Service Mesh之後,微服務也不再需要關注RPC通訊(包含服務發現、負載均衡、流量排程、限流降級、監控統計等)的一切細節,真正像本地呼叫一樣使用微服務,通訊相關的一切工作直接交給Service Mesh。

因此,對於一些需要通過微服務改造提升業務敏捷性,但沒有相應技術能力的中小團隊來說,可以藉助Service Mesh提供的完善微服務基礎設施,加速微服務的落地。

語言無關的通訊和鏈路治理

功能上,Service Mesh並沒有提供任何新的特性和能力,Service Mesh提供的所有通訊和服務治理能力在Service Mesh之前的技術中均能找到,比如Spring Cloud就實現完善的微服務RPC通訊和服務治理支援。Service Mesh改變的是通訊和服務治理能力提供的方式,通過將這些能力實現從各語言業務實現中解耦,下沉到基礎設施層面,以一種更加通用和標準化的方式提供,遮蔽不同語言、不同平臺的差異性,這樣不僅有利於通訊和服務治理能力的迭代和創新,業務使用的時候也會更加方便。

Service Mesh避免了多語言服務治理上的重複建設,通過Service Mesh語言無關的通訊和服務治理能力,助力多語言技術棧的效率提升。

通訊和服務治理的標準化

  1. 微服務治理層面,Service Mesh是標準化、體系化、無侵入的分散式服務治理平臺。
  2. 標準化方面,Sidecar成為所有微服務流量通訊的約束標準,同時Service Mesh的資料平面和控制平面也通過標準協議進行互動。
  3. 體系化方面,從全域性考慮,提供多維度立體的微服務可觀測能力(Metric、Trace、Logging),並且提供體系化的服務治理能力,比如限流、熔斷、安全、灰度等;最為重要的是,Service Mesh通過透明無侵入的方式提供全面的服務治理能力,對微服務本身不會帶來直接影響。

通過標準化,帶來一致的服務治理體驗,減少多業務之間由於服務治理標準不一致帶來的溝通和轉換成本,提升全域性服務治理的效率。

Service Mesh的基本模式

根據Service Mesh的發展歷程和使用方式,我們可以把Service Mesh劃分為兩個模式。

Sidecar模式

在Service Mesh發展早期,Service Mesh以Sidecar的形態存在。Sidecar模式下,網路代理服務在微服務旁邊,為微服務提供通訊和鏈路治理功能。因此,資料平面代理服務也經常被簡稱為Sidecar。

此時,只有資料平面的網路代理服務沒有控制平面,和外部基礎設施服務的互動直接在網路代理服務中進行。

Sidecar模式可以看作是第一代Service Mesh,代表有早期的Linkerd和Envoy。

第一代Service Mesh通過採用Sidecar模式,通過將通訊和通訊鏈路治理功能從微服務中剝離出來,實現了通訊基礎設施的下沉和服務化,這裡也體現了架構解耦的思想,通過解耦減少了微服務的負擔。

第二代Service Mesh模式

Sidecar模式的Service Mesh有一個突出的問題,將通訊和通訊鏈路治理的所有功能都放到這個代理服務中,導致資料平面代理很重,並且由於承載了太多的特性和功能,使得資料平面代理的更新和修改特別頻繁,頻繁的更新和升級會導致代理服務出問題的概率增大,影響代理服務的穩定性。同時,Service Mesh模式下,資料平面代理承載了微服務通訊的全部流量,對穩定性要求極高,這個服務的任何故障都會對整個系統的穩定性產生很大的影響。為了解決上述頻繁升級和穩定性之間的矛盾,將策略和配置決策邏輯從代理服務中脫離出來,形成了獨立的控制平面,這就是第二代Service Mesh。

第二代Service Mesh最重要的標誌就是控制平面和資料平面分離。資料平面和控制平面並不是新的概念,路由器/交換機等資料通訊產品架構上,就有運行於專門處理器上的控制平面和多個獨立執行、用於路由或交換功能的資料平面。SDN(Software Defined Network,軟體定義網路)將資料平面和控制平面分離,控制平面具有可程式設計性,使得網路更加智慧、靈活和易擴充套件,激發了網路技術的又一次革命。

第二代Service Mesh借鑑了SDN的思路,基於控制平面和資料平面分離思想,有了完善的控制平面:①所有的代理服務都由控制平面掌控,因為控制平面可以控制整個系統,所以提供了強大的控制能力和策略能力;②將具體的控制邏輯從資料平面移除,簡化了資料平面的設計,資料平面不需要和外部系統進行互動,資料平面完全聚焦在變更頻率很低的流量路由和轉發邏輯上,提升了資料平面的穩定性。

Service Mesh架構

第二代Service Mesh的基本架構上分為資料平面和控制平面兩個部分,大致如下圖所示。

資料平面

資料平面負責代理微服務之間的通訊,具體包含RPC通訊、服務發現、負載均衡、降級熔斷、限流容錯等,資料平面可以認為是將Spring Cloud、Dubbo等語言相關的微服務框架中通訊和服務治理能力獨立出來的一個語言無關的程序,並且更注重通用性和擴充套件性。在Service Mesh中,不再將資料平面代理視為一個個孤立的元件,而是將這些代理連線在一起形成一個全域性的分散式網路。

控制平面

控制平面負責對資料平面進行管理,定義服務發現、路由、流量控制、遙測統計等策略,這些策略可以是全域性的,也可以通過配置某個資料平面節點單獨指定。控制平面通過一定的機制將策略下發到各個資料平面節點,資料平面節點在通訊時會使用這些策略。

最後

由於文案過於長,在此就不一一介紹了,這份Java後端架構進階筆記內容包括:Java集合,JVM、Java併發、微服務、SpringNetty與 RPC 、網路、日誌 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基礎、負載均衡、資料庫、一致性演算法、Java演算法、資料結構、分散式快取等等知識詳解。

本知識體系適合於所有Java程式設計師學習,關於以上目錄中的知識點都有詳細的講解及介紹,掌握該知識點的所有內容對你會有一個質的提升,其中也總結了很多面試過程中遇到的題目以及有對應的視訊解析總結。
**有需要的朋友可以點選這裡免費獲取

百度網盤連結:pan.baidu.com/s/1BDrBZ5sv4rzxyDDFLbpocw

提取碼:exa7

**