微服務(wù)
微服務(wù)架構(gòu)風(fēng)格,就像是把一個(gè)單獨(dú)的應(yīng)用程序開發(fā)為一套小服務(wù),每個(gè)小服務(wù)運(yùn)行在自己的進(jìn)程中,并使用輕量級(jí)機(jī)制通信(各微服務(wù)之間需要交換數(shù)據(jù)等),為了減少通信效率,通常是HTTP API,這些服務(wù)圍繞業(yè)務(wù)能力來構(gòu)建,并通過完全自動(dòng)化部署機(jī)制來獨(dú)立部署。
簡(jiǎn)而言之:拒絕大型單體應(yīng)用,基于業(yè)務(wù)邊界進(jìn)行服務(wù)微化拆分,各個(gè)服務(wù)獨(dú)立部署運(yùn)行。
集群&分布式&節(jié)點(diǎn)
集群是個(gè)物理形態(tài),分布式是工作方式。
分布式是指將不同的業(yè)務(wù)分布在不同的地方。
集群是指將幾臺(tái)服務(wù)器集中在一起,實(shí)現(xiàn)同一業(yè)務(wù)。
分布式中的每一個(gè)節(jié)點(diǎn),都可以做集群,而集群并不一定就是分布式的。
節(jié)點(diǎn):集群中的一個(gè)服務(wù)器。
遠(yuǎn)程調(diào)用
在分布式系統(tǒng)中,各個(gè)服務(wù)可能出于不同主機(jī),但服務(wù)之間不可避免的需要相互調(diào)用,我們稱為遠(yuǎn)程調(diào)用。
SpringCloud中使用HTTP+JSON的方式完成遠(yuǎn)程調(diào)用。
負(fù)載均衡
分布式系統(tǒng)中,A服務(wù)需要調(diào)用B服務(wù),B服務(wù)在多臺(tái)機(jī)器中都存在,A調(diào)用任意一個(gè)服務(wù)器均可完成功能。
不要讓服務(wù)器太忙或者太閑
常見的負(fù)載均衡算法:輪詢、最小連接、散列
服務(wù)注冊(cè)/發(fā)現(xiàn)&注冊(cè)中心
A服務(wù)調(diào)用B服務(wù),A服務(wù)并不知道B服務(wù)當(dāng)前在哪幾臺(tái)服務(wù)器有,哪些正常的,哪些服務(wù)已經(jīng)下線,解決這個(gè)問題引入注冊(cè)中心。
配置中心
每一個(gè)服務(wù)都有大量的配置,并且每個(gè)服務(wù)都可能部署在多臺(tái)機(jī)器上。我們經(jīng)常需要變更配置,我們可以讓每個(gè)服務(wù)在配置中心獲取自己的配置。
配置中心用來集中管理微服務(wù)的配置信息
服務(wù)熔斷&服務(wù)降級(jí)
服務(wù)熔斷(被動(dòng))
設(shè)置服務(wù)的超時(shí),當(dāng)被調(diào)用的服務(wù)經(jīng)常失敗到達(dá)某個(gè)閾值,我們可以開啟斷路保護(hù)機(jī)制,后來的請(qǐng)求不再去調(diào)用這個(gè)服務(wù)。本地直接返回默認(rèn)的數(shù)據(jù)。
服務(wù)降級(jí)(主動(dòng))
當(dāng)系統(tǒng)處于高峰期,可以讓非核心業(yè)務(wù)降低運(yùn)行。
API網(wǎng)關(guān)
在微服務(wù)架構(gòu)中,API Gateway作為整體架構(gòu)的重要組件,它抽象了微服務(wù)中都需要的公共功能,同時(shí)提供了客戶端負(fù)載均衡,服務(wù)自動(dòng)熔斷,灰度發(fā)布,統(tǒng)一認(rèn)證,限流流控,日志統(tǒng)計(jì)等豐富的功能,幫助我們解決很多API管理難題。