天天看點

沒用過微服務?别慌,丐版架構圖,讓你輕松拿捏面試官

作者:哪吒程式設計

大家好,我是哪吒。

很多人都說現在是雲原生、大模型的時代,微服務已經過時了,但現實的是,很多人開發多年,都沒有在實際的開發中用過微服務,更别提搭建微服務架構和技術選型了。

面試的時候都會問,怎麼辦?

今天分享一張微服務的丐版架構圖,讓你可以和面試官掰扯掰扯~

話不多說,直接上圖。

沒用過微服務?别慌,丐版架構圖,讓你輕松拿捏面試官

由此可見,Spring Cloud微服務架構是由多個元件一起組成的,各個元件的互動流程如下。

  1. 浏覽器通過查詢DNS伺服器,擷取可用的服務執行個體的網絡位置資訊,進而實作服務的自動發現和動态更新;
  2. 通過CDN擷取靜态資源,提高通路速度,解決跨地域請求速度慢的問題;
  3. 通過LVS負載均衡器,實作負載均衡和網絡協定;
  4. 通過Nginx反向代理伺服器,将請求轉發到gateway做路由轉發和安全驗證;
  5. 通路注冊中心和配置中心Nacos,擷取後端服務和配置項;
  6. 通過Sentinel進行限流;
  7. 通過Redis進行緩存服務、會話管理、分布式鎖控制;
  8. 通過Elasticsearch進行全文搜尋,存儲日志,配合Kibana,對ES中的資料進行實時的可視化分析。

一、域名系統DNS

在微服務中,域名系統DNS的作用主要是進行服務發現和負載均衡。

  1. 每個微服務執行個體在啟動時,将自己的IP位址和端口号等資訊注冊到DNS伺服器,浏覽器通過查詢DNS伺服器,擷取可用的服務執行個體的網絡位置資訊,進而實作服務的自動發現和動态更新。
  2. DNS伺服器可以根據一定的政策,比如輪詢、随機等,将請求分發到不同的負載均衡器LVS上,提高系統的并發處理能力和容錯性。

二、LVS(Linux Virtual Server),Linux虛拟伺服器

LVS是一個開源的負載均衡軟體,基于Linux作業系統實作。它在Linux核心中實作負載均衡的功能,通過運作在使用者空間的使用者程序實作負載均衡的政策。

  1. LVS支援多種負載均衡算法,例如輪詢、随機、權重輪詢、權重随機等。
  2. LVS支援多種網絡協定,例如TCP、HTTP、HTTPS,可以滿足不同應用的需求。
  3. LVS具有高可用和可擴充性。它支援主從備份和備援配置,當主伺服器出現故障時,備份伺服器可以自動接管負載,確定服務的連續性。此外,LVS還支援動态添加和删除伺服器節點,友善管理者進行擴容和縮容的操作。

三、CDN靜态資源

CDN靜态資源圖檔、視訊、JavaScript檔案、CSS檔案、靜态HTML檔案等。這些靜态資源的特點是讀請求量極大,對通路速度的要求很高,并占據了很高的寬帶。如果處理不當,可能導緻通路速度慢,寬帶被占滿,進而影響動态請求的處理。

CDN的作用是将這些靜态資源分發到多個地理位置的機房的伺服器上。讓使用者就近選擇通路,提高通路速度,解決跨地域請求速度慢的問題。

四、Nginx反向代理伺服器

1、Nginx的主要作用展現在以下幾個方面:

  1. 反向代理,Nginx可以作為反向代理伺服器,接收來自用戶端的請求,然後将請求轉發到後端的微服務執行個體。
  2. 負載均衡,Nginx可以根據配置,将請求分發到微服務不同的執行個體上,實作負載均衡。
  3. 服務路由,Nginx可以根據不同的路徑規則,将請求路由到不同的微服務上。
  4. 靜态資源服務,Nginx可以提供靜态資源服務,如圖檔、視訊、JavaScript檔案、CSS檔案、HTML靜态檔案等,減輕後端服務的壓力,提高系統的響應速度和性能。

2、Nginx靜态資源服務和CDN靜态資源服務,如何選擇?

在選擇Nginx靜态資源服務和CDN靜态資源服務時,可以根據以下幾個因素進行權衡和選擇:

  1. 性能和速度:CDN靜态資源服務通常具有更廣泛的分布式節點和緩存機制,可以更快地響應使用者的請求,并減少傳輸距離和網絡擁塞。如果靜态資源的加載速度和性能是首要考慮因素,CDN可能是更好的選擇。
  2. 控制和自定義能力:Nginx靜态資源服務提供更高的靈活性和控制能力,可以根據具體需求進行定制和配置。如果需要更精細的控制和自定義能力,或者在特定的網絡環境下進行部署,Nginx可能更适合。
  3. 成本和預算:CDN靜态資源服務通常需要支付額外的費用,而Nginx靜态資源服務可以自行搭建和部署,成本相對較低。在考慮選擇時,需要綜合考慮成本和預算的因素。
  4. 内容分發和全球覆寫:如果靜态資源需要分發到全球各地的使用者,CDN靜态資源服務的分布式節點可以更好地滿足這個需求,提供更廣泛的内容分發和全球覆寫。

選擇Nginx靜态資源服務還是CDN靜态資源服務取決于具體的需求和場景。如果追求更好的性能和全球覆寫,可以選擇CDN靜态資源服務;如果更需要控制和自定義能力,且對性能要求不是特别高,可以選擇Nginx靜态資源服務。

五、Gateway網關

在微服務架構中,Gateway的作用如下:

  1. 統一入口:Gateway作為整個微服務架構的統一入口,所有的請求都會經過Gateway,這樣做可以隐藏内部微服務的細節,降低背景服務受攻擊的機率;
  2. 路由和轉發:Gateway根據請求的路徑、參數等資訊,将請求路由到相應的微服務執行個體。這樣可以讓服務解耦,讓各個微服務可以獨立的開發、測試、部署;
  3. 安全和認證:Gateway通常內建了身份驗證和權限驗證的功能,確定隻有經過驗證的請求才能通路微服務。Gateway還具備防爬蟲、限流、熔斷的功能;
  4. 協定轉換:由于微服務架構中可以使用不同的技術和協定,Gateway可以作為協定轉換中心,實作不同協定之間的轉換和相容性;
  5. 日志和監控,Gateway可以記錄所有的請求和響應日志,為後續的故障排查、性能分析、安全審計提供資料支援。Gateway還內建了監控和報警功能:實時回報系統的運作狀态;
  6. 服務聚合:在某些場景中,Gateway可以将來自多個微服務的資料進行聚合,然後一次性傳回給用戶端,減少用戶端和微服務之間的互動次數,提高系統性能;

六、注冊中心Nacos

在微服務架構中,Nacos的作用主要展現在注冊中心、配置中心、服務健康檢查等方面。

  1. 注冊中心:Nacos支援基于DNS和RPC的服務發現,微服務可以将接口服務注冊到Nacos中,用戶端通過nacos查找和調用這些服務執行個體。
  2. 配置中心:Nacos提供了動态配置服務,可以動态的修改配置中心中的配置項,不需要重新開機背景服務,即可完成配置的修改和釋出,提高了系統的靈活性和可維護性。
  3. 服務健康檢查:Nacos提供了一系列的服務治理功能,比如服務健康檢查、負載均衡、容錯處理等。服務健康檢查可以阻止向不健康的主機或服務執行個體發送請求,保證了服務的穩定性和可靠性。負載均衡可以根據一定的政策,将請求分發到不同的服務執行個體中,提高系統的并發處理能力和性能。

七、Redis緩存

1、在微服務架構中,Redis的作用主要展現在以下幾個方面:

  1. 緩存服務:Redis可以作為高速緩存伺服器,将常用的資料存儲在記憶體中,提高資料通路速度和響應時間,減輕資料庫的通路壓力,并加速背景資料的查詢;
  2. 會話管理:Redis可以存儲會話資訊,并實作分布式會話管理。這使會話資訊可以在多個服務之間共享和通路,提供一緻的使用者體驗;
  3. 分布式鎖:Redis提供了分布式鎖機制,可以確定微服務中多個節點對共享資源的通路的合理性和有序性,避免競态條件和資源沖突;
  4. 消息隊列:Redis支援釋出訂閱模式和消息隊列模式,可以作為消息中間件使用。微服務之間可以通過Redis實作異步通信,實作解耦和高可用性;

2、競态條件

競态條件可能會導緻執行結果出現各種問題,例如計算機當機、出現非法操作提示并結束程式、錯誤的讀取舊的資料或錯誤的寫入新資料。在串行的記憶體和存儲通路能防止這種情況,當讀寫指令同時發生的時候,預設是先執行讀操作的。

競态條件也可能在網絡中出現,當兩個使用者同時試圖通路同一個可用信道的時候就會發生,系統同意通路之前沒有計算機能得到信道被占用的提示。統計上說這種情況通常是發生在有相當長的延遲時間的網絡裡,比如使用地球同步衛星。

為了防止這種競态條件發生,需要制定優先級清單,比如使用者的使用者名在字母表裡排列靠前可以得到相對較高的優先級。黑客可以利用競态條件這一弱點來赢得非法通路網絡的權利。

3、Redis會話管理如何實作?

Redis會話管理的一般實作步驟:

  1. 會話建立:當使用者首次通路應用時,可以在Redis中建立一個新的會話,會話可以是一個具有唯一辨別符的資料結構,例如哈希表或字元串;
  2. 會話資訊存儲:将會話資訊關聯到會話ID存儲到Redis中,會話資訊可以包括使用者身份、登入狀态、權限等。
  3. 會話過期時間設定:為會話設定過期時間,以確定會話在一定時間後自動失效。Redis提供了設定鍵值對過期時間的機制,可以通過EXPIRE指令為會話設定過期時間;
  4. 會話通路和更新:在每次使用者通路應用時,通過會話ID擷取相應的會話資訊,并對其進行驗證和更新。如果會話已過期,可以要求使用者重新登入;
  5. 會話銷毀:當使用者主動退出或會話到期後,需要銷毀會話,通過删除Redis中存儲的會話資訊即可。

八、Elasticsearch全文搜尋引擎

在微服務架構中,Elasticsearch全文搜尋引擎的應用主要展現在如下幾個方面:

  1. 全文搜尋引擎:ES是一個分布式的全文搜尋引擎,它可以對海量的資料進行實時的全文搜尋,傳回與關鍵詞相關的結果;
  2. 分布式存儲:ES提供了分布式的實時檔案存儲功能,每個字段都可以被索引并可被搜尋,這使得資料在ES中的存儲和查詢都非常高效;
  3. 資料分析:配合Kibana,對ES中的資料進行實時的可視化分析,為資料決策提供資料支援;
  4. 日志和監控:ES可以作為日志和監控資料的存儲和分析平台。通過收集系統的日志資訊,存入ES,可以實作實時的日志查詢、分析、告警、展示;
  5. 擴充性:ES具有很好的擴充性,可以水準擴充到數百台伺服器,處理PB級别的資料,使得ES能夠應對海量資料的挑戰。

九、感覺Redis和Elasticsearch很像?微服務中Redis和Elasticsearch的差別

  1. 資料存儲和查詢方式:Redis是一種基于鍵值對的存儲系統,它提供高性能的讀寫操作,适用于存儲結構簡單、查詢條件同樣簡單的應用場景。而Elasticsearch是一個分布式搜尋和分析引擎,适用于全文搜尋、資料分析等複雜場景,能夠處理更複雜的查詢需求;
  2. 資料結構與處理能力:Redis支援豐富的資料結構,如字元串、哈希、清單、集合等,并提供了原子性的操作,适用于實作緩存、消息隊列、計數器等功能。而Elasticsearch則是基于反向索引的資料結構,提供了強大的搜尋和分析能力。但相對于Redis,Elasticsearch的寫入效率較低;
  3. 實時性和一緻性:Redis提供了很高的實時性,Redis将資料存儲到記憶體中,能夠很快的進行讀寫操作;而Elasticsearch是一個近實時的搜尋平台,實時性不如Redis;
  4. 擴充性:Redis是通過增加Redis執行個體的形式實作擴充,對非常大的資料集可能要進行資料分片;而Elasticsearch具有水準擴充的能力,可以通過添加更多的節點來提高系統的處理能力,适用于大量資料的場景;
沒用過微服務?别慌,丐版架構圖,讓你輕松拿捏面試官

繼續閱讀