大家好,我是哪吒。
很多人都說(shuō)現(xiàn)在是云原生、大模型的時(shí)代,微服務(wù)已經(jīng)過(guò)時(shí)了,但現(xiàn)實(shí)的是,很多人開(kāi)發(fā)多年,都沒(méi)有在實(shí)際的開(kāi)發(fā)中用過(guò)微服務(wù),更別提搭建微服務(wù)框架和技術(shù)選型了。
面試的時(shí)候都會(huì)問(wèn),怎么辦?
今天分享一張微服務(wù)的丐版架構(gòu)圖,讓你可以和面試官掰扯掰扯~
腦中有圖,口若懸河,一套組合拳下來(lái),面試官只能拍案叫好,大呼快哉,HR更是驚呼,我勒個(gè)乖乖,完全聽(tīng)不懂。
話不多說(shuō),直接上圖。
由此可見(jiàn),Spring Cloud微服務(wù)架構(gòu)是由多個(gè)組件一起組成的,各個(gè)組件的交互流程如下。
- 瀏覽器通過(guò)查詢DNS服務(wù)器,獲取可用的服務(wù)實(shí)例的網(wǎng)絡(luò)位置信息,從而實(shí)現(xiàn)服務(wù)的自動(dòng)發(fā)現(xiàn)和動(dòng)態(tài)更新;
- 通過(guò)CDN獲取靜態(tài)資源,提高訪問(wèn)速度,解決跨地域請(qǐng)求速度慢的問(wèn)題;
- 通過(guò)LVS負(fù)載均衡器,實(shí)現(xiàn)負(fù)載均衡和網(wǎng)絡(luò)協(xié)議;
- 通過(guò)Nginx反向代理服務(wù)器,將請(qǐng)求轉(zhuǎn)發(fā)到gateway做路由轉(zhuǎn)發(fā)和安全驗(yàn)證?;
- 訪問(wèn)注冊(cè)中心和?配置中心Nacos,獲取后端服務(wù)和配置項(xiàng);
- 通過(guò)Sentinel進(jìn)行限流;
- 通過(guò)Redis進(jìn)行緩存服務(wù)、會(huì)話管理、分布式鎖控制;
- 通過(guò)Elasticsearch進(jìn)行全文搜索,存儲(chǔ)日志,配合Kibana,對(duì)ES中的數(shù)據(jù)進(jìn)行實(shí)時(shí)的可視化分析?。
一、域名系統(tǒng)DNS
在微服務(wù)中,域名系統(tǒng)DNS的作用主要是進(jìn)行服務(wù)發(fā)現(xiàn)和負(fù)載均衡。
- 每個(gè)微服務(wù)實(shí)例在啟動(dòng)時(shí),將自己的IP地址和端口號(hào)等信息注冊(cè)到DNS服務(wù)器,瀏覽器通過(guò)查詢DNS服務(wù)器,獲取可用的服務(wù)實(shí)例的網(wǎng)絡(luò)位置信息,從而實(shí)現(xiàn)服務(wù)的自動(dòng)發(fā)現(xiàn)和動(dòng)態(tài)更新。
- DNS服務(wù)器可以根據(jù)一定的策略,比如輪詢、隨機(jī)等,將請(qǐng)求分發(fā)到不同的負(fù)載均衡器LVS上,提高系統(tǒng)的并發(fā)處理能力和容錯(cuò)性。
二、LVS(Linux Virtual Server),Linux虛擬服務(wù)器
LVS是一個(gè)開(kāi)源的負(fù)載均衡軟件,基于Linux操作系統(tǒng)實(shí)現(xiàn)。它在Linux內(nèi)核中實(shí)現(xiàn)負(fù)載均衡的功能,通過(guò)運(yùn)行在用戶空間的用戶進(jìn)程實(shí)現(xiàn)負(fù)載均衡的策略。
- LVS支持多種負(fù)載均衡算法,例如輪詢、隨機(jī)、加權(quán)輪詢、加權(quán)隨機(jī)等。
- LVS支持多種網(wǎng)絡(luò)協(xié)議,例如TCP、HTTP、HTTPS,可以滿足不同應(yīng)用的需求。
- LVS具有高可用和可擴(kuò)展性。它支持主從備份和冗余配置,當(dāng)主服務(wù)器出現(xiàn)故障時(shí),備份服務(wù)器可以自動(dòng)接管負(fù)載,確保服務(wù)的連續(xù)性。此外,LVS還支持動(dòng)態(tài)添加和刪除服務(wù)器節(jié)點(diǎn),方便管理員進(jìn)行擴(kuò)容和縮容的操作。
三、CDN靜態(tài)資源
CDN靜態(tài)資源圖片、視頻、JavaScript文件、CSS文件、靜態(tài)HTML文件等。這些靜態(tài)資源的特點(diǎn)是讀請(qǐng)求量極大,對(duì)訪問(wèn)速度的要求很高,并占據(jù)了很高的寬帶。如果處理不當(dāng),可能導(dǎo)致訪問(wèn)速度慢,寬帶被占滿,進(jìn)而影響動(dòng)態(tài)請(qǐng)求的處理。
CDN的作用是將這些靜態(tài)資源分發(fā)到多個(gè)地理位置的機(jī)房的服務(wù)器上。讓用戶就近選擇訪問(wèn),提高訪問(wèn)速度,解決跨地域請(qǐng)求速度慢的問(wèn)題。
四、Nginx反向代理服務(wù)器
1、Nginx的主要作用體現(xiàn)在以下幾個(gè)方面:
- 反向代理,Nginx可以作為反向代理服務(wù)器,接收來(lái)自客戶端的請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)到后端的微服務(wù)實(shí)例。
- 負(fù)載均衡,Nginx可以根據(jù)配置,將請(qǐng)求分發(fā)到微服務(wù)不同的實(shí)例上,實(shí)現(xiàn)負(fù)載均衡。
- 服務(wù)路由,Nginx可以根據(jù)不同的路徑規(guī)則,將請(qǐng)求路由到不同的微服務(wù)上。
- 靜態(tài)資源服務(wù),Nginx可以提供靜態(tài)資源服務(wù),如圖片、視頻、JavaScript文件、CSS文件、HTML靜態(tài)文件等,減輕后端服務(wù)的壓力,提高系統(tǒng)的響應(yīng)速度和性能。
2、Nginx靜態(tài)資源服務(wù)和CDN靜態(tài)資源服務(wù),如何選擇?
在選擇Nginx靜態(tài)資源服務(wù)和CDN靜態(tài)資源服務(wù)時(shí),可以根據(jù)以下幾個(gè)因素進(jìn)行權(quán)衡和選擇:
- 性能和速度:CDN靜態(tài)資源服務(wù)通常具有更廣泛的分布式節(jié)點(diǎn)和緩存機(jī)制,可以更快地響應(yīng)用戶的請(qǐng)求,并減少傳輸距離和網(wǎng)絡(luò)擁塞。如果靜態(tài)資源的加載速度和性能是首要考慮因素,CDN可能是更好的選擇。
- 控制和自定義能力:Nginx靜態(tài)資源服務(wù)提供更高的靈活性和控制能力,可以根據(jù)具體需求進(jìn)行定制和配置。如果需要更精細(xì)的控制和自定義能力,或者在特定的網(wǎng)絡(luò)環(huán)境下進(jìn)行部署,Nginx可能更適合。
- 成本和預(yù)算:CDN靜態(tài)資源服務(wù)通常需要支付額外的費(fèi)用,而Nginx靜態(tài)資源服務(wù)可以自行搭建和部署,成本相對(duì)較低。在考慮選擇時(shí),需要綜合考慮成本和預(yù)算的因素。
- 內(nèi)容分發(fā)和全球覆蓋:如果靜態(tài)資源需要分發(fā)到全球各地的用戶,CDN靜態(tài)資源服務(wù)的分布式節(jié)點(diǎn)可以更好地滿足這個(gè)需求,提供更廣泛的內(nèi)容分發(fā)和全球覆蓋。
選擇Nginx靜態(tài)資源服務(wù)還是CDN靜態(tài)資源服務(wù)取決于具體的需求和場(chǎng)景。如果追求更好的性能和全球覆蓋,可以選擇CDN靜態(tài)資源服務(wù);如果更需要控制和自定義能力,且對(duì)性能要求不是特別高,可以選擇Nginx靜態(tài)資源服務(wù)。
五、Gateway網(wǎng)關(guān)
在微服務(wù)架構(gòu)中,Gateway的作用如下:
- 統(tǒng)一入口:Gateway作為整個(gè)微服務(wù)架構(gòu)的統(tǒng)一入口,所有的請(qǐng)求都會(huì)經(jīng)過(guò)Gateway,這樣做可以隱藏內(nèi)部微服務(wù)的細(xì)節(jié),降低后臺(tái)服務(wù)受攻擊的概率;
- 路由和轉(zhuǎn)發(fā):Gateway根據(jù)請(qǐng)求的路徑、參數(shù)等信息,將請(qǐng)求路由到相應(yīng)的微服務(wù)實(shí)例。這樣可以讓服務(wù)解耦,讓各個(gè)微服務(wù)可以獨(dú)立的開(kāi)發(fā)、測(cè)試、部署;
- 安全和認(rèn)證:Gateway通常集成了身份驗(yàn)證和權(quán)限驗(yàn)證的功能,確保只有經(jīng)過(guò)驗(yàn)證的請(qǐng)求才能訪問(wèn)微服務(wù)。Gateway還具備防爬蟲(chóng)、限流、熔斷的功能;
- 協(xié)議轉(zhuǎn)換:由于微服務(wù)架構(gòu)中可以使用不同的技術(shù)和協(xié)議,Gateway可以作為協(xié)議轉(zhuǎn)換中心,實(shí)現(xiàn)不同協(xié)議之間的轉(zhuǎn)換和兼容性;
- 日志和監(jiān)控,Gateway可以記錄所有的請(qǐng)求和響應(yīng)日志,為后續(xù)的故障排查、性能分析、安全審計(jì)提供數(shù)據(jù)支持。Gateway還集成了監(jiān)控和報(bào)警功能:實(shí)時(shí)反饋系統(tǒng)的運(yùn)行狀態(tài);
- 服務(wù)聚合:在某些場(chǎng)景中,Gateway可以將來(lái)自多個(gè)微服務(wù)的數(shù)據(jù)進(jìn)行聚合,然后一次性返回給客戶端,減少客戶端和微服務(wù)之間的交互次數(shù),提高系統(tǒng)性能;
六、注冊(cè)中心Nacos
在微服務(wù)架構(gòu)中,Nacos的作用主要體現(xiàn)在注冊(cè)中心、配置中心、服務(wù)健康檢查等方面。
- 注冊(cè)中心:Nacos支持基于DNS和RPC的服務(wù)發(fā)現(xiàn),微服務(wù)可以將接口服務(wù)注冊(cè)到Nacos中,客戶端通過(guò)nacos查找和調(diào)用這些服務(wù)實(shí)例。
- 配置中心:Nacos提供了動(dòng)態(tài)配置服務(wù),可以動(dòng)態(tài)的修改配置中心中的配置項(xiàng),不需要重啟后臺(tái)服務(wù),即可完成配置的修改和發(fā)布,提高了系統(tǒng)的靈活性和可維護(hù)性。
- 服務(wù)健康檢查:Nacos提供了一系列的服務(wù)治理功能,比如服務(wù)健康檢查、負(fù)載均衡、容錯(cuò)處理等。服務(wù)健康檢查可以阻止向不健康的主機(jī)或服務(wù)實(shí)例發(fā)送請(qǐng)求,保證了服務(wù)的穩(wěn)定性和可靠性。負(fù)載均衡可以根據(jù)一定的策略,將請(qǐng)求分發(fā)到不同的服務(wù)實(shí)例中,提高系統(tǒng)的并發(fā)處理能力和性能。
七、Redis緩存
1、在微服務(wù)架構(gòu)中,Redis的作用主要體現(xiàn)在以下幾個(gè)方面:
- 緩存服務(wù):Redis可以作為高速緩存服務(wù)器,將常用的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,提高數(shù)據(jù)訪問(wèn)速度和響應(yīng)時(shí)間,減輕數(shù)據(jù)庫(kù)的訪問(wèn)壓力,并加速后臺(tái)數(shù)據(jù)的查詢;
- 會(huì)話管理:Redis可以存儲(chǔ)會(huì)話信息,并實(shí)現(xiàn)分布式會(huì)話管理。這使會(huì)話信息可以在多個(gè)服務(wù)之間共享和訪問(wèn),提供一致的用戶體驗(yàn);
- 分布式鎖:Redis提供了分布式鎖機(jī)制,可以確保微服務(wù)中多個(gè)節(jié)點(diǎn)對(duì)共享資源的訪問(wèn)的合理性和有序性,避免競(jìng)態(tài)條件和資源沖突;
- 消息隊(duì)列:Redis支持發(fā)布訂閱模式和消息隊(duì)列模式,可以作為消息中間件使用。微服務(wù)之間可以通過(guò)Redis實(shí)現(xiàn)異步通信,實(shí)現(xiàn)解耦和高可用性;
2、競(jìng)態(tài)條件
競(jìng)態(tài)條件是指在同一個(gè)程序的多線程訪問(wèn)同一個(gè)資源的情況下,如果對(duì)資源的訪問(wèn)順序敏感,就存在競(jìng)態(tài)條件。競(jìng)態(tài)條件可能會(huì)導(dǎo)致執(zhí)行結(jié)果出現(xiàn)各種問(wèn)題,例如計(jì)算機(jī)死機(jī)、出現(xiàn)非法操作提示并結(jié)束程序、錯(cuò)誤的讀取舊的數(shù)據(jù)或錯(cuò)誤的寫入新數(shù)據(jù)。在串行的內(nèi)存和存儲(chǔ)訪問(wèn)能防止這種情況,當(dāng)讀寫命令同時(shí)發(fā)生的時(shí)候,默認(rèn)是先執(zhí)行讀操作的。
競(jìng)態(tài)條件也可能在網(wǎng)絡(luò)中出現(xiàn),當(dāng)兩個(gè)用戶同時(shí)試圖訪問(wèn)同一個(gè)可用信道的時(shí)候就會(huì)發(fā)生,系統(tǒng)同意訪問(wèn)之前沒(méi)有計(jì)算機(jī)能得到信道被占用的提示。統(tǒng)計(jì)上說(shuō)這種情況通常是發(fā)生在有相當(dāng)長(zhǎng)的延遲時(shí)間的網(wǎng)絡(luò)里,比如使用地球同步衛(wèi)星。為了防止這種競(jìng)態(tài)條件發(fā)生,需要制定優(yōu)先級(jí)列表,比如用戶的用戶名在字母表里排列靠前可以得到相對(duì)較高的優(yōu)先級(jí)。黑客可以利用競(jìng)態(tài)條件這一弱點(diǎn)來(lái)贏得非法訪問(wèn)網(wǎng)絡(luò)的權(quán)利。
競(jìng)態(tài)條件是由于多個(gè)線程或多個(gè)進(jìn)程同時(shí)訪問(wèn)共享資源而引發(fā)的問(wèn)題,它可能會(huì)導(dǎo)致不可預(yù)測(cè)的結(jié)果和不一致的狀態(tài)。解決競(jìng)態(tài)條件的方法包括使用鎖、同步機(jī)制、優(yōu)先級(jí)列表等。
3、Redis會(huì)話管理如何實(shí)現(xiàn)?
Redis會(huì)話管理的一般實(shí)現(xiàn)步驟:
- 會(huì)話創(chuàng)建:當(dāng)用戶首次訪問(wèn)應(yīng)用時(shí),可以在Redis中創(chuàng)建一個(gè)新的會(huì)話,會(huì)話可以是一個(gè)具有唯一標(biāo)識(shí)符的數(shù)據(jù)結(jié)構(gòu),例如哈希表或字符串;
- 會(huì)話信息存儲(chǔ):將會(huì)話信息關(guān)聯(lián)到會(huì)話ID存儲(chǔ)到Redis中,會(huì)話信息可以包括用戶身份、登錄狀態(tài)、權(quán)限等。
- 會(huì)話過(guò)期時(shí)間設(shè)置:為會(huì)話設(shè)置過(guò)期時(shí)間,以確保會(huì)話在一定時(shí)間后自動(dòng)失效。Redis提供了設(shè)置鍵值對(duì)過(guò)期時(shí)間的機(jī)制,可以通過(guò)EXPIRE命令為會(huì)話設(shè)置過(guò)期時(shí)間;
- 會(huì)話訪問(wèn)和更新:在每次用戶訪問(wèn)應(yīng)用時(shí),通過(guò)會(huì)話ID獲取相應(yīng)的會(huì)話信息,并對(duì)其進(jìn)行驗(yàn)證和更新。如果會(huì)話已過(guò)期,可以要求用戶重新登錄;
- 會(huì)話銷毀:當(dāng)用戶主動(dòng)退出或會(huì)話到期后,需要銷毀會(huì)話,通過(guò)刪除Redis中存儲(chǔ)的會(huì)話信息即可。
八、Elasticsearch全文搜索引擎
在微服務(wù)架構(gòu)中,Elasticsearch全文搜索引擎的應(yīng)用主要體現(xiàn)在如下幾個(gè)方面:
- 全文搜索引擎:ES是一個(gè)分布式的全文搜索引擎,它可以對(duì)海量的數(shù)據(jù)進(jìn)行實(shí)時(shí)的全文搜索,返回與關(guān)鍵詞相關(guān)的結(jié)果;
- 分布式存儲(chǔ):ES提供了分布式的實(shí)時(shí)文件存儲(chǔ)功能,每個(gè)字段都可以被索引并可被搜索,這使得數(shù)據(jù)在ES中的存儲(chǔ)和查詢都非常高效;
- 數(shù)據(jù)分析:配合Kibana,對(duì)ES中的數(shù)據(jù)進(jìn)行實(shí)時(shí)的可視化分析,為數(shù)據(jù)決策提供數(shù)據(jù)支持;
- 日志和監(jiān)控:ES可以作為日志和監(jiān)控?cái)?shù)據(jù)的存儲(chǔ)和分析平臺(tái)。通過(guò)收集系統(tǒng)的日志信息,存入ES,可以實(shí)現(xiàn)實(shí)時(shí)的日志查詢、分析、告警、展示;
- 擴(kuò)展性:ES具有很好的擴(kuò)展性,可以水平擴(kuò)展到數(shù)百臺(tái)服務(wù)器,處理PB級(jí)別的數(shù)據(jù),使得ES能夠應(yīng)對(duì)海量數(shù)據(jù)的挑戰(zhàn)。
九、感覺(jué)Redis和Elasticsearch很像?微服務(wù)中Redis和Elasticsearch的區(qū)別
- 數(shù)據(jù)存儲(chǔ)和查詢方式:Redis是一種基于鍵值對(duì)的存儲(chǔ)系統(tǒng),它提供高性能的讀寫操作,適用于存儲(chǔ)結(jié)構(gòu)簡(jiǎn)單、查詢條件同樣簡(jiǎn)單的應(yīng)用場(chǎng)景。而Elasticsearch是一個(gè)分布式搜索和分析引擎,適用于全文搜索、數(shù)據(jù)分析等復(fù)雜場(chǎng)景,能夠處理更復(fù)雜的查詢需求;
- 數(shù)據(jù)結(jié)構(gòu)與處理能力:Redis支持豐富的數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合等,并提供了原子性的操作,適用于實(shí)現(xiàn)緩存、消息隊(duì)列、計(jì)數(shù)器等功能。而Elasticsearch則是基于倒排索引的數(shù)據(jù)結(jié)構(gòu),提供了強(qiáng)大的搜索和分析能力。但相對(duì)于Redis,Elasticsearch的寫入效率較低;
- 實(shí)時(shí)性和一致性:Redis提供了很高的實(shí)時(shí)性,Redis將數(shù)據(jù)存儲(chǔ)到內(nèi)存中,能夠很快的進(jìn)行讀寫操作;而Elasticsearch是一個(gè)近實(shí)時(shí)的搜索平臺(tái),實(shí)時(shí)性不如Redis;
- 擴(kuò)展性:Redis是通過(guò)增加Redis實(shí)例的形式實(shí)現(xiàn)擴(kuò)展,對(duì)非常大的數(shù)據(jù)集可能要進(jìn)行數(shù)據(jù)分片;而Elasticsearch具有水平擴(kuò)展的能力,可以通過(guò)添加更多的節(jié)點(diǎn)來(lái)提高系統(tǒng)的處理能力,適用于大量數(shù)據(jù)的場(chǎng)景;
微服務(wù) Spring Cloud系列
微服務(wù) Spring Cloud 1,服務(wù)如何拆分?使用微服務(wù)的注意事項(xiàng)?
微服務(wù) Spring Cloud 2,一文講透微服務(wù)核心架構(gòu)(注冊(cè)中心、服務(wù)通信、服務(wù)監(jiān)控、服務(wù)追蹤、服務(wù)治理)
微服務(wù) Spring Cloud 3,如何對(duì)微服務(wù)進(jìn)行有效的監(jiān)控?
微服務(wù) Spring Cloud 4,分布式系統(tǒng)如何進(jìn)行數(shù)據(jù)分區(qū)
??哪吒多年工作總結(jié):Java學(xué)習(xí)路線總結(jié),搬磚工逆襲Java架構(gòu)師。
華為OD機(jī)試 2023B卷題庫(kù)瘋狂收錄中,刷題點(diǎn)這里文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-752730.html
刷的越多,抽中的概率越大,每一題都有詳細(xì)的答題思路、詳細(xì)的代碼注釋、樣例測(cè)試,發(fā)現(xiàn)新題目,隨時(shí)更新,全天CSDN在線答疑。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-752730.html
到了這里,關(guān)于微服務(wù) Spring Cloud 5,一圖說(shuō)透Spring Cloud微服務(wù)架構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!