自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

沒用過微服務(wù)?別慌,丐版架構(gòu)圖,讓你輕松拿捏面試官

開發(fā) 架構(gòu)
很多人都說現(xiàn)在是云原生、大模型的時代,微服務(wù)已經(jīng)過時了,但現(xiàn)實的是,很多人開發(fā)多年,都沒有在實際的開發(fā)中用過微服務(wù),更別提搭建微服務(wù)框架和技術(shù)選型了。面試的時候都會問,怎么辦?

大家好,我是哪吒。

很多人都說現(xiàn)在是云原生、大模型的時代,微服務(wù)已經(jīng)過時了,但現(xiàn)實的是,很多人開發(fā)多年,都沒有在實際的開發(fā)中用過微服務(wù),更別提搭建微服務(wù)框架和技術(shù)選型了。

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

今天分享一張微服務(wù)的丐版架構(gòu)圖,讓你可以和面試官掰扯掰扯~

腦中有圖,口若懸河,一套組合拳下來,面試官只能拍案叫好,大呼快哉,HR更是驚呼,我勒個乖乖,完全聽不懂。

話不多說,直接上圖。

由此可見,Spring Cloud微服務(wù)架構(gòu)是由多個組件一起組成的,各個組件的交互流程如下。

  •  瀏覽器通過查詢DNS服務(wù)器,獲取可用的服務(wù)實例的網(wǎng)絡(luò)位置信息,從而實現(xiàn)服務(wù)的自動發(fā)現(xiàn)和動態(tài)更新。
  • 通過CDN獲取靜態(tài)資源,提高訪問速度,解決跨地域請求速度慢的問題。
  • 通過LVS負載均衡器,實現(xiàn)負載均衡和網(wǎng)絡(luò)協(xié)議。
  • 通過Nginx反向代理服務(wù)器,將請求轉(zhuǎn)發(fā)到gateway做路由轉(zhuǎn)發(fā)和安全驗證。
  • 訪問注冊中心和配置中心Nacos,獲取后端服務(wù)和配置項。
  • 通過Sentinel進行限流。
  • 通過Redis進行緩存服務(wù)、會話管理、分布式鎖控制。
  • 通過Elasticsearch進行全文搜索,存儲日志,配合Kibana,對ES中的數(shù)據(jù)進行實時的可視化分析。

一、域名系統(tǒng)DNS

在微服務(wù)中,域名系統(tǒng)DNS的作用主要是進行服務(wù)發(fā)現(xiàn)和負載均衡。

  • 每個微服務(wù)實例在啟動時,將自己的IP地址和端口號等信息注冊到DNS服務(wù)器,瀏覽器通過查詢DNS服務(wù)器,獲取可用的服務(wù)實例的網(wǎng)絡(luò)位置信息,從而實現(xiàn)服務(wù)的自動發(fā)現(xiàn)和動態(tài)更新。
  • DNS服務(wù)器可以根據(jù)一定的策略,比如輪詢、隨機等,將請求分發(fā)到不同的負載均衡器LVS上,提高系統(tǒng)的并發(fā)處理能力和容錯性。

二、LVS(Linux Virtual Server),Linux虛擬服務(wù)器

LVS是一個開源的負載均衡軟件,基于Linux操作系統(tǒng)實現(xiàn)。它在Linux內(nèi)核中實現(xiàn)負載均衡的功能,通過運行在用戶空間的用戶進程實現(xiàn)負載均衡的策略。

  • LVS支持多種負載均衡算法,例如輪詢、隨機、加權(quán)輪詢、加權(quán)隨機等。
  • LVS支持多種網(wǎng)絡(luò)協(xié)議,例如TCP、HTTP、HTTPS,可以滿足不同應用的需求。
  • LVS具有高可用和可擴展性。它支持主從備份和冗余配置,當主服務(wù)器出現(xiàn)故障時,備份服務(wù)器可以自動接管負載,確保服務(wù)的連續(xù)性。此外,LVS還支持動態(tài)添加和刪除服務(wù)器節(jié)點,方便管理員進行擴容和縮容的操作。

三、CDN靜態(tài)資源

CDN靜態(tài)資源圖片、視頻、JavaScript文件、CSS文件、靜態(tài)HTML文件等。這些靜態(tài)資源的特點是讀請求量極大,對訪問速度的要求很高,并占據(jù)了很高的寬帶。如果處理不當,可能導致訪問速度慢,寬帶被占滿,進而影響動態(tài)請求的處理。

CDN的作用是將這些靜態(tài)資源分發(fā)到多個地理位置的機房的服務(wù)器上。讓用戶就近選擇訪問,提高訪問速度,解決跨地域請求速度慢的問題。

四、Nginx反向代理服務(wù)器

1、Nginx的主要作用體現(xiàn)在以下幾個方面:

  • 反向代理,Nginx可以作為反向代理服務(wù)器,接收來自客戶端的請求,然后將請求轉(zhuǎn)發(fā)到后端的微服務(wù)實例。
  • 負載均衡,Nginx可以根據(jù)配置,將請求分發(fā)到微服務(wù)不同的實例上,實現(xiàn)負載均衡。
  • 服務(wù)路由,Nginx可以根據(jù)不同的路徑規(guī)則,將請求路由到不同的微服務(wù)上。
  • 靜態(tài)資源服務(wù),Nginx可以提供靜態(tài)資源服務(wù),如圖片、視頻、JavaScript文件、CSS文件、HTML靜態(tài)文件等,減輕后端服務(wù)的壓力,提高系統(tǒng)的響應速度和性能。

2、Nginx靜態(tài)資源服務(wù)和CDN靜態(tài)資源服務(wù),如何選擇?

在選擇Nginx靜態(tài)資源服務(wù)和CDN靜態(tài)資源服務(wù)時,可以根據(jù)以下幾個因素進行權(quán)衡和選擇:

  • 性能和速度:CDN靜態(tài)資源服務(wù)通常具有更廣泛的分布式節(jié)點和緩存機制,可以更快地響應用戶的請求,并減少傳輸距離和網(wǎng)絡(luò)擁塞。如果靜態(tài)資源的加載速度和性能是首要考慮因素,CDN可能是更好的選擇。
  • 控制和自定義能力:Nginx靜態(tài)資源服務(wù)提供更高的靈活性和控制能力,可以根據(jù)具體需求進行定制和配置。如果需要更精細的控制和自定義能力,或者在特定的網(wǎng)絡(luò)環(huán)境下進行部署,Nginx可能更適合。
  • 成本和預算:CDN靜態(tài)資源服務(wù)通常需要支付額外的費用,而Nginx靜態(tài)資源服務(wù)可以自行搭建和部署,成本相對較低。在考慮選擇時,需要綜合考慮成本和預算的因素。
  • 內(nèi)容分發(fā)和全球覆蓋:如果靜態(tài)資源需要分發(fā)到全球各地的用戶,CDN靜態(tài)資源服務(wù)的分布式節(jié)點可以更好地滿足這個需求,提供更廣泛的內(nèi)容分發(fā)和全球覆蓋。

選擇Nginx靜態(tài)資源服務(wù)還是CDN靜態(tài)資源服務(wù)取決于具體的需求和場景。如果追求更好的性能和全球覆蓋,可以選擇CDN靜態(tài)資源服務(wù);如果更需要控制和自定義能力,且對性能要求不是特別高,可以選擇Nginx靜態(tài)資源服務(wù)。

五、Gateway網(wǎng)關(guān)

在微服務(wù)架構(gòu)中,Gateway的作用如下:

  • 統(tǒng)一入口:Gateway作為整個微服務(wù)架構(gòu)的統(tǒng)一入口,所有的請求都會經(jīng)過Gateway,這樣做可以隱藏內(nèi)部微服務(wù)的細節(jié),降低后臺服務(wù)受攻擊的概率。
  • 路由和轉(zhuǎn)發(fā):Gateway根據(jù)請求的路徑、參數(shù)等信息,將請求路由到相應的微服務(wù)實例。這樣可以讓服務(wù)解耦,讓各個微服務(wù)可以獨立的開發(fā)、測試、部署。
  • 安全和認證:Gateway通常集成了身份驗證和權(quán)限驗證的功能,確保只有經(jīng)過驗證的請求才能訪問微服務(wù)。Gateway還具備防爬蟲、限流、熔斷的功能。
  • 協(xié)議轉(zhuǎn)換:由于微服務(wù)架構(gòu)中可以使用不同的技術(shù)和協(xié)議,Gateway可以作為協(xié)議轉(zhuǎn)換中心,實現(xiàn)不同協(xié)議之間的轉(zhuǎn)換和兼容性。
  • 日志和監(jiān)控,Gateway可以記錄所有的請求和響應日志,為后續(xù)的故障排查、性能分析、安全審計提供數(shù)據(jù)支持。Gateway還集成了監(jiān)控和報警功能:實時反饋系統(tǒng)的運行狀態(tài)。
  • 服務(wù)聚合:在某些場景中,Gateway可以將來自多個微服務(wù)的數(shù)據(jù)進行聚合,然后一次性返回給客戶端,減少客戶端和微服務(wù)之間的交互次數(shù),提高系統(tǒng)性能。

六、注冊中心Nacos

在微服務(wù)架構(gòu)中,Nacos的作用主要體現(xiàn)在注冊中心、配置中心、服務(wù)健康檢查等方面。

  • 注冊中心:Nacos支持基于DNS和RPC的服務(wù)發(fā)現(xiàn),微服務(wù)可以將接口服務(wù)注冊到Nacos中,客戶端通過nacos查找和調(diào)用這些服務(wù)實例。
  • 配置中心:Nacos提供了動態(tài)配置服務(wù),可以動態(tài)的修改配置中心中的配置項,不需要重啟后臺服務(wù),即可完成配置的修改和發(fā)布,提高了系統(tǒng)的靈活性和可維護性。
  • 服務(wù)健康檢查:Nacos提供了一系列的服務(wù)治理功能,比如服務(wù)健康檢查、負載均衡、容錯處理等。服務(wù)健康檢查可以阻止向不健康的主機或服務(wù)實例發(fā)送請求,保證了服務(wù)的穩(wěn)定性和可靠性。負載均衡可以根據(jù)一定的策略,將請求分發(fā)到不同的服務(wù)實例中,提高系統(tǒng)的并發(fā)處理能力和性能。

七、Redis緩存

1、在微服務(wù)架構(gòu)中,Redis的作用主要體現(xiàn)在以下幾個方面:

  • 緩存服務(wù):Redis可以作為高速緩存服務(wù)器,將常用的數(shù)據(jù)存儲在內(nèi)存中,提高數(shù)據(jù)訪問速度和響應時間,減輕數(shù)據(jù)庫的訪問壓力,并加速后臺數(shù)據(jù)的查詢。
  • 會話管理:Redis可以存儲會話信息,并實現(xiàn)分布式會話管理。這使會話信息可以在多個服務(wù)之間共享和訪問,提供一致的用戶體驗。
  • 分布式鎖:Redis提供了分布式鎖機制,可以確保微服務(wù)中多個節(jié)點對共享資源的訪問的合理性和有序性,避免競態(tài)條件和資源沖突。
  • 消息隊列:Redis支持發(fā)布訂閱模式和消息隊列模式,可以作為消息中間件使用。微服務(wù)之間可以通過Redis實現(xiàn)異步通信,實現(xiàn)解耦和高可用性。

2、競態(tài)條件

競態(tài)條件是指在同一個程序的多線程訪問同一個資源的情況下,如果對資源的訪問順序敏感,就存在競態(tài)條件。競態(tài)條件可能會導致執(zhí)行結(jié)果出現(xiàn)各種問題,例如計算機死機、出現(xiàn)非法操作提示并結(jié)束程序、錯誤的讀取舊的數(shù)據(jù)或錯誤的寫入新數(shù)據(jù)。在串行的內(nèi)存和存儲訪問能防止這種情況,當讀寫命令同時發(fā)生的時候,默認是先執(zhí)行讀操作的。

競態(tài)條件也可能在網(wǎng)絡(luò)中出現(xiàn),當兩個用戶同時試圖訪問同一個可用信道的時候就會發(fā)生,系統(tǒng)同意訪問之前沒有計算機能得到信道被占用的提示。統(tǒng)計上說這種情況通常是發(fā)生在有相當長的延遲時間的網(wǎng)絡(luò)里,比如使用地球同步衛(wèi)星。

為了防止這種競態(tài)條件發(fā)生,需要制定優(yōu)先級列表,比如用戶的用戶名在字母表里排列靠前可以得到相對較高的優(yōu)先級。黑客可以利用競態(tài)條件這一弱點來贏得非法訪問網(wǎng)絡(luò)的權(quán)利。

競態(tài)條件是由于多個線程或多個進程同時訪問共享資源而引發(fā)的問題,它可能會導致不可預測的結(jié)果和不一致的狀態(tài)。解決競態(tài)條件的方法包括使用鎖、同步機制、優(yōu)先級列表等。

3、Redis會話管理如何實現(xiàn)?

Redis會話管理的一般實現(xiàn)步驟:

  • 會話創(chuàng)建:當用戶首次訪問應用時,可以在Redis中創(chuàng)建一個新的會話,會話可以是一個具有唯一標識符的數(shù)據(jù)結(jié)構(gòu),例如哈希表或字符串。
  • 會話信息存儲:將會話信息關(guān)聯(lián)到會話ID存儲到Redis中,會話信息可以包括用戶身份、登錄狀態(tài)、權(quán)限等。
  • 會話過期時間設(shè)置:為會話設(shè)置過期時間,以確保會話在一定時間后自動失效。Redis提供了設(shè)置鍵值對過期時間的機制,可以通過EXPIRE命令為會話設(shè)置過期時間。
  • 會話訪問和更新:在每次用戶訪問應用時,通過會話ID獲取相應的會話信息,并對其進行驗證和更新。如果會話已過期,可以要求用戶重新登錄。
  • 會話銷毀:當用戶主動退出或會話到期后,需要銷毀會話,通過刪除Redis中存儲的會話信息即可。

八、Elasticsearch全文搜索引擎

在微服務(wù)架構(gòu)中,Elasticsearch全文搜索引擎的應用主要體現(xiàn)在如下幾個方面:

  • 全文搜索引擎:ES是一個分布式的全文搜索引擎,它可以對海量的數(shù)據(jù)進行實時的全文搜索,返回與關(guān)鍵詞相關(guān)的結(jié)果;
  • 分布式存儲:ES提供了分布式的實時文件存儲功能,每個字段都可以被索引并可被搜索,這使得數(shù)據(jù)在ES中的存儲和查詢都非常高效。
  • 數(shù)據(jù)分析:配合Kibana,對ES中的數(shù)據(jù)進行實時的可視化分析,為數(shù)據(jù)決策提供數(shù)據(jù)支持。
  • 日志和監(jiān)控:ES可以作為日志和監(jiān)控數(shù)據(jù)的存儲和分析平臺。通過收集系統(tǒng)的日志信息,存入ES,可以實現(xiàn)實時的日志查詢、分析、告警、展示。
  • 擴展性:ES具有很好的擴展性,可以水平擴展到數(shù)百臺服務(wù)器,處理PB級別的數(shù)據(jù),使得ES能夠應對海量數(shù)據(jù)的挑戰(zhàn)。

九、感覺Redis和Elasticsearch很像?微服務(wù)中Redis和Elasticsearch的區(qū)別

  • 數(shù)據(jù)存儲和查詢方式:Redis是一種基于鍵值對的存儲系統(tǒng),它提供高性能的讀寫操作,適用于存儲結(jié)構(gòu)簡單、查詢條件同樣簡單的應用場景。而Elasticsearch是一個分布式搜索和分析引擎,適用于全文搜索、數(shù)據(jù)分析等復雜場景,能夠處理更復雜的查詢需求。
  • 數(shù)據(jù)結(jié)構(gòu)與處理能力:Redis支持豐富的數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合等,并提供了原子性的操作,適用于實現(xiàn)緩存、消息隊列、計數(shù)器等功能。而Elasticsearch則是基于倒排索引的數(shù)據(jù)結(jié)構(gòu),提供了強大的搜索和分析能力。但相對于Redis,Elasticsearch的寫入效率較低。
  • 實時性和一致性:Redis提供了很高的實時性,Redis將數(shù)據(jù)存儲到內(nèi)存中,能夠很快的進行讀寫操作;而Elasticsearch是一個近實時的搜索平臺,實時性不如Redis。
  • 擴展性:Redis是通過增加Redis實例的形式實現(xiàn)擴展,對非常大的數(shù)據(jù)集可能要進行數(shù)據(jù)分片;而Elasticsearch具有水平擴展的能力,可以通過添加更多的節(jié)點來提高系統(tǒng)的處理能力,適用于大量數(shù)據(jù)的場景。

責任編輯:姜華 來源: 哪吒編程
相關(guān)推薦

2017-07-26 10:08:06

FABDesign SuppAndroid

2021-08-13 07:23:15

架構(gòu)秒殺系統(tǒng)

2020-11-04 10:31:29

Jupyter NotPython數(shù)據(jù)分析

2021-09-01 07:21:41

面試官開發(fā)讀寫鎖

2021-01-03 16:12:35

Java工具開發(fā)

2024-03-12 14:36:44

微服務(wù)HTTPRPC

2020-01-17 20:00:25

SQL函數(shù)數(shù)據(jù)庫

2024-04-19 09:02:32

前端調(diào)試技巧

2024-08-23 11:51:39

2015-08-13 10:29:12

面試面試官

2022-11-29 07:33:15

JavaLombokRecord

2019-04-29 14:59:41

Tomcat系統(tǒng)架構(gòu)

2021-08-02 17:21:08

設(shè)計模式訂閱

2024-09-03 09:31:41

微服務(wù)面試官系統(tǒng)

2024-03-06 15:38:06

Spring微服務(wù)架構(gòu)擴展組件

2022-07-20 07:29:52

Java

2021-06-24 09:08:34

Java代碼泛型

2024-03-26 00:48:38

2023-01-03 18:06:42

高并發(fā)架構(gòu)

2018-09-27 15:58:06

MySQL數(shù)據(jù)庫性能優(yōu)化
點贊
收藏

51CTO技術(shù)棧公眾號