系統(tǒng)設(shè)計(jì)系列初衷
System Design Primer: 英文文檔 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
中文版: https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md
初衷主要還是為了學(xué)習(xí)系統(tǒng)設(shè)計(jì),但是這個(gè)中文版看起來(lái)就像機(jī)器翻譯的一樣,所以還是手動(dòng)做一些簡(jiǎn)單的筆記,并且在難以理解的地方對(duì)照英文版,根據(jù)自己的理解在AI的幫助下進(jìn)行翻譯和知識(shí)擴(kuò)展。
應(yīng)用層
資料來(lái)源:可縮放系統(tǒng)構(gòu)架介紹
首先需要了解下服務(wù)層和應(yīng)用層的概念:
服務(wù)層
????????主要負(fù)責(zé)處理系統(tǒng)的業(yè)務(wù)邏輯。服務(wù)層為應(yīng)用層提供功能性的支持,包括數(shù)據(jù)驗(yàn)證、數(shù)據(jù)處理、業(yè)務(wù)流程控制等。服務(wù)層通過(guò)將底層數(shù)據(jù)處理和邏輯封裝起來(lái),為應(yīng)用層提供了更高層次的抽象,使應(yīng)用層可以更方便地使用這些服務(wù)。
應(yīng)用層
????????是軟件系統(tǒng)的最高層次,直接為用戶提供功能和服務(wù)。應(yīng)用層包括各種應(yīng)用程序、客戶端和服務(wù)器等。應(yīng)用層通過(guò)調(diào)用服務(wù)層提供的功能,實(shí)現(xiàn)了對(duì)用戶需求的響應(yīng)和滿足。應(yīng)用層需要關(guān)注用戶交互、用戶體驗(yàn)以及各種應(yīng)用程序的實(shí)現(xiàn)。
關(guān)系
????????服務(wù)層和應(yīng)用層的關(guān)系主要體現(xiàn)在以下幾個(gè)方面:
????????服務(wù)層為應(yīng)用層提供服務(wù):服務(wù)層通過(guò)封裝底層數(shù)據(jù)處理和邏輯,為應(yīng)用層提供了更高層次的抽象。應(yīng)用層通過(guò)調(diào)用服務(wù)層提供的功能,實(shí)現(xiàn)了對(duì)用戶需求的響應(yīng)和滿足。
????????應(yīng)用層依賴服務(wù)層:應(yīng)用層需要實(shí)現(xiàn)各種功能和服務(wù),而這些功能和服務(wù)很大程度上依賴于服務(wù)層提供的支持。服務(wù)層設(shè)計(jì)的好壞直接影響應(yīng)用層的性能、穩(wěn)定性和可維護(hù)性。
????????服務(wù)層和應(yīng)用層相互隔離:服務(wù)層和應(yīng)用層在功能上相互獨(dú)立,它們之間的接口清晰明確。這樣,當(dāng)需求發(fā)生變化時(shí),可以靈活地進(jìn)行調(diào)整和修改。服務(wù)層和應(yīng)用層相互隔離的設(shè)計(jì)有助于提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。
????????早期的服務(wù)層基于應(yīng)用層存在,共同部署在同一個(gè)平臺(tái),共同運(yùn)維。
????????而微服務(wù)的提出將 Web 服務(wù)層與應(yīng)用層(也被稱作平臺(tái)層)分離,可以獨(dú)立縮放和配置這兩層。添加新的 API 只需要添加應(yīng)用服務(wù)器,而不必添加額外的 web 服務(wù)器。
????????單一職責(zé)原則提倡小型的,自治的服務(wù)共同合作。小團(tuán)隊(duì)通過(guò)提供小型的服務(wù),可以更激進(jìn)地計(jì)劃增長(zhǎng)。
????????應(yīng)用層中的工作進(jìn)程也有可以實(shí)現(xiàn)異步化。
微服務(wù)
?????????微服務(wù),可以被描述為一系列可以獨(dú)立部署的小型的,模塊化服務(wù)。每個(gè)服務(wù)運(yùn)行在一個(gè)獨(dú)立的線程中,通過(guò)明確定義的輕量級(jí)機(jī)制通訊,共同實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。
例如,Pinterest 可能有這些微服務(wù): 用戶資料、關(guān)注者、Feed 流、搜索、照片上傳等。
優(yōu)點(diǎn)
微服務(wù)的主要優(yōu)勢(shì)包括:
靈活性:微服務(wù)可以獨(dú)立進(jìn)行開(kāi)發(fā)、測(cè)試和部署,從而加快軟件開(kāi)發(fā)的迭代速度。同時(shí),每個(gè)服務(wù)都可以根據(jù)實(shí)際需求選擇合適的技術(shù)棧,使得開(kāi)發(fā)者能夠更加靈活地應(yīng)對(duì)不同的業(yè)務(wù)場(chǎng)景。
可擴(kuò)展性:通過(guò)將復(fù)雜的應(yīng)用程序拆分成多個(gè)簡(jiǎn)單的微服務(wù),系統(tǒng)可以在需要時(shí)更容易地進(jìn)行水平擴(kuò)展。這使得系統(tǒng)能夠根據(jù)業(yè)務(wù)需求的變化快速調(diào)整資源,提高系統(tǒng)的整體性能。
高可用性:由于每個(gè)微服務(wù)都是獨(dú)立的,因此一個(gè)服務(wù)的故障不會(huì)直接導(dǎo)致整個(gè)系統(tǒng)崩潰。此外,微服務(wù)架構(gòu)通常采用去中心化的設(shè)計(jì),進(jìn)一步提高了系統(tǒng)的容錯(cuò)能力。
松耦合:微服務(wù)之間的通信采用輕量級(jí)的 HTTP API,使得服務(wù)之間的依賴關(guān)系更加松散。這有助于降低系統(tǒng)間的耦合度,使得系統(tǒng)在面對(duì)需求變更時(shí)更加靈活。
缺點(diǎn)
微服務(wù)的缺點(diǎn):
復(fù)雜性:微服務(wù)架構(gòu)通常比單體架構(gòu)更加復(fù)雜。開(kāi)發(fā)者需要掌握多種技術(shù)棧,理解不同服務(wù)之間的協(xié)作方式,并處理服務(wù)之間的通信和數(shù)據(jù)一致性等問(wèn)題。
部署和運(yùn)維成本:由于微服務(wù)需要運(yùn)行在多個(gè)進(jìn)程中,因此它們的部署和運(yùn)維成本可能會(huì)更高。此外,分布式系統(tǒng)的監(jiān)控、日志管理和故障排查也具有一定的挑戰(zhàn)性。
通信開(kāi)銷:微服務(wù)之間的通信通常基于 HTTP API,這可能會(huì)導(dǎo)致一定的網(wǎng)絡(luò)開(kāi)銷和延遲。在高并發(fā)場(chǎng)景下,通信開(kāi)銷可能成為性能瓶頸。
數(shù)據(jù)一致性:在微服務(wù)架構(gòu)中,不同服務(wù)之間的數(shù)據(jù)一致性需要特別關(guān)注。由于服務(wù)之間的數(shù)據(jù)交互是通過(guò) API 進(jìn)行的,可能會(huì)存在數(shù)據(jù)同步和事務(wù)處理的問(wèn)題。
安全性:微服務(wù)架構(gòu)中的多個(gè)服務(wù)可能使得系統(tǒng)更容易受到攻擊。開(kāi)發(fā)者需要充分考慮服務(wù)的安全防護(hù),以及在分布式環(huán)境中應(yīng)對(duì)安全問(wèn)題的方法。
適用于小型項(xiàng)目:微服務(wù)架構(gòu)在某些小型項(xiàng)目中可能過(guò)于復(fù)雜,浪費(fèi)資源和時(shí)間。因此,開(kāi)發(fā)者需要根據(jù)項(xiàng)目的實(shí)際需求和規(guī)模來(lái)選擇合適的架構(gòu)。
服務(wù)發(fā)現(xiàn)
像?Consul,Etcd?和?Zookeeper?這樣的系統(tǒng)可以通過(guò)追蹤注冊(cè)名、地址、端口等信息來(lái)幫助服務(wù)互相發(fā)現(xiàn)對(duì)方。Health checks?可以幫助確認(rèn)服務(wù)的完整性和是否經(jīng)常使用一個(gè)?HTTP?路徑。Consul 和 Etcd 都有一個(gè)內(nèi)建的?key-value 存儲(chǔ)?用來(lái)存儲(chǔ)配置信息和其他的共享信息。
主要流程
服務(wù)發(fā)現(xiàn)的主要流程如下:
- 服務(wù)注冊(cè):當(dāng)一個(gè)微服務(wù)啟動(dòng)時(shí),它會(huì)將自己的地址、協(xié)議和相關(guān)的元數(shù)據(jù)注冊(cè)到服務(wù)注冊(cè)中心。服務(wù)注冊(cè)中心負(fù)責(zé)維護(hù)一份可用的服務(wù)清單,以便其他服務(wù)可以查找到它。
- 服務(wù)發(fā)現(xiàn):當(dāng)一個(gè)微服務(wù)需要調(diào)用另一個(gè)微服務(wù)時(shí),它會(huì)從服務(wù)注冊(cè)中心獲取可用的服務(wù)清單。根據(jù)清單中的信息,調(diào)用方服務(wù)可以找到被調(diào)用方的服務(wù)地址和端口,從而進(jìn)行遠(yuǎn)程調(diào)用。
- 服務(wù)健康檢查:服務(wù)發(fā)現(xiàn)過(guò)程中,還需要對(duì)服務(wù)進(jìn)行健康檢查,以確保調(diào)用的服務(wù)是正常運(yùn)行的。服務(wù)注冊(cè)中心可以定期接收服務(wù)提供的健康信息,從而實(shí)現(xiàn)對(duì)服務(wù)狀態(tài)的監(jiān)控。
- 服務(wù)注銷:當(dāng)一個(gè)微服務(wù)停止運(yùn)行時(shí),它會(huì)將自己的信息從服務(wù)注冊(cè)中心注銷。這樣,其他服務(wù)在調(diào)用該服務(wù)時(shí),會(huì)發(fā)現(xiàn)該服務(wù)已不存在,從而避免調(diào)用失敗的情況。
服務(wù)發(fā)現(xiàn)在微服務(wù)架構(gòu)中起到了關(guān)鍵作用,它解決了服務(wù)之間的定位和通信問(wèn)題。通過(guò)服務(wù)發(fā)現(xiàn),微服務(wù)可以更加靈活、高效地進(jìn)行通信和協(xié)作,從而提高整個(gè)系統(tǒng)的性能和可擴(kuò)展性。
應(yīng)用使用微服務(wù)
應(yīng)用層調(diào)用具體微服務(wù)時(shí),需要經(jīng)歷以下幾個(gè)步驟:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-702800.html
- 服務(wù)注冊(cè):當(dāng)一個(gè)微服務(wù)啟動(dòng)時(shí),它會(huì)將自己的地址、協(xié)議和相關(guān)的元數(shù)據(jù)注冊(cè)到服務(wù)注冊(cè)中心。服務(wù)注冊(cè)中心負(fù)責(zé)維護(hù)一份可用的服務(wù)清單,以便其他服務(wù)可以查找到它。
- 服務(wù)發(fā)現(xiàn):當(dāng)應(yīng)用需要調(diào)用一個(gè)微服務(wù)時(shí),它會(huì)從服務(wù)注冊(cè)中心獲取可用的服務(wù)清單。根據(jù)清單中的信息,應(yīng)用可以找到需要調(diào)用的服務(wù)的地址和端口,從而進(jìn)行遠(yuǎn)程調(diào)用。
- 服務(wù)調(diào)用:應(yīng)用通過(guò) HTTP 或其他協(xié)議向微服務(wù)發(fā)送請(qǐng)求,并將請(qǐng)求的數(shù)據(jù)傳遞給微服務(wù)。微服務(wù)接收到請(qǐng)求后,處理數(shù)據(jù)并生成響應(yīng),然后將響應(yīng)返回給應(yīng)用。
- 響應(yīng)處理:應(yīng)用接收到微服務(wù)返回的響應(yīng),并對(duì)響應(yīng)數(shù)據(jù)進(jìn)行處理。如果響應(yīng)中包含錯(cuò)誤信息,應(yīng)用可以根據(jù)錯(cuò)誤信息進(jìn)行相應(yīng)的處理,例如進(jìn)行重試或者報(bào)錯(cuò)。
- 異常處理:在服務(wù)調(diào)用過(guò)程中,如果出現(xiàn)網(wǎng)絡(luò)異常、超時(shí)或者其他異常情況,應(yīng)用需要進(jìn)行相應(yīng)的異常處理,以確保系統(tǒng)的穩(wěn)定性和可靠性。
- 負(fù)載均衡與熔斷:為了提高系統(tǒng)的可用性和性能,可以采用負(fù)載均衡技術(shù)對(duì)微服務(wù)進(jìn)行分發(fā)。此外,當(dāng)微服務(wù)出現(xiàn)故障時(shí),可以采用熔斷機(jī)制將其從服務(wù)注冊(cè)中心移除,以避免其他應(yīng)用調(diào)用失敗的情況。
通過(guò)以上流程,應(yīng)用可以實(shí)現(xiàn)對(duì)微服務(wù)的調(diào)用,從而充分利用微服務(wù)架構(gòu)的優(yōu)勢(shì),提高系統(tǒng)的靈活性、可擴(kuò)展性和高可用性。同時(shí),在調(diào)用過(guò)程中,還需要關(guān)注服務(wù)安全、數(shù)據(jù)一致性等問(wèn)題,以確保微服務(wù)架構(gòu)的穩(wěn)定和可靠。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-702800.html
?
到了這里,關(guān)于【系統(tǒng)設(shè)計(jì)系列】 應(yīng)用層與微服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!