
好順佳集團(tuán)
2022-06-02 12:44:46
1716
0元注冊(cè)公司 · 工商變更 · 公司注銷(xiāo) · 地址掛靠
好順佳經(jīng)工商局、財(cái)稅局批準(zhǔn)的工商財(cái)稅代理服務(wù)機(jī)構(gòu),專業(yè)正規(guī)可靠 點(diǎn)擊0元注冊(cè)
面試官:如果公司要開(kāi)發(fā)分布式注冊(cè)中心,您的設(shè)計(jì)思路是什么?
1.報(bào)名中心是什么?
服務(wù)注冊(cè)中心,它是微服務(wù)實(shí)例和服務(wù)元數(shù)據(jù)的數(shù)據(jù)庫(kù)。服務(wù)實(shí)例在啟動(dòng)時(shí)向服務(wù)注冊(cè)中心注冊(cè),并在關(guān)閉時(shí)注銷(xiāo)。
服務(wù)的客戶端和路由器查詢服務(wù)注冊(cè)表以查找服務(wù)的可用實(shí)例。服務(wù)注冊(cè)中心可以調(diào)用服務(wù)實(shí)例的健康檢查API,以驗(yàn)證它是否可以處理請(qǐng)求。
2.帽蓋的設(shè)計(jì)原則和基本理論是什么?
一致性(C):分布式系統(tǒng)中的所有數(shù)據(jù)備份是否同時(shí)具有相同的值。(相當(dāng)于所有節(jié)點(diǎn)訪問(wèn)數(shù)據(jù)的同一最新副本)
可用性(A):集群中的某些節(jié)點(diǎn)發(fā)生故障后,整個(gè)集群是否仍能響應(yīng)客戶端的讀寫(xiě)請(qǐng)求。(數(shù)據(jù)更新的高可用性)
分區(qū)容忍度(P):當(dāng)集群中的機(jī)器因網(wǎng)絡(luò)故障無(wú)法保證彼此正常通信時(shí),每臺(tái)機(jī)器都有能力各自為戰(zhàn),保證服務(wù)的正常使用
CAP原理的本質(zhì)不是AP、CP就是AC,就是沒(méi)有CAP。
如果分布式系統(tǒng)中沒(méi)有數(shù)據(jù)的副本,那么系統(tǒng)必須滿足強(qiáng)一致性條件,因?yàn)橹挥幸粋€(gè)數(shù)據(jù),不會(huì)出現(xiàn)數(shù)據(jù)不一致的情況。此時(shí)C和P有兩個(gè)元素
但是,如果系統(tǒng)出現(xiàn)網(wǎng)絡(luò)分區(qū)情況或停機(jī),則不可避免地會(huì)導(dǎo)致部分?jǐn)?shù)據(jù)無(wú)法訪問(wèn)
此時(shí),可用性條件不能滿足,即在這種情況下得到了CP系統(tǒng),但不能同時(shí)滿足CAP。不可避免地會(huì)有一些數(shù)據(jù)無(wú)法訪問(wèn),此時(shí)無(wú)法滿足可用性條件,即在這種情況下獲得CP系統(tǒng),但無(wú)法同時(shí)滿足CAP。
BASE的庸俗CA退而求其次,這就是所謂的最終一致性。
3.面對(duì)種類繁多的注冊(cè)表組件,該如何選擇技術(shù)?
基于以上理論,我將目前工作中最常用的尤里卡和Z
OoKeeper用于比較。
我直接放了兩張圖:
上圖是Eureka集群的示意圖,采用對(duì)等架構(gòu)集群模式,部署一個(gè)集群,但集群中每臺(tái)機(jī)器的狀態(tài)是相等的
每個(gè)服務(wù)都可以向任何Euerka實(shí)例服務(wù)和服務(wù)發(fā)現(xiàn)注冊(cè)。在集群中的任何Euerka實(shí)例接收到寫(xiě)請(qǐng)求后,它將自動(dòng)同步到所有其他Eureka實(shí)例
但他會(huì)有問(wèn)題。他可能還沒(méi)有同步數(shù)據(jù),結(jié)果他會(huì)死的
此時(shí)可以繼續(xù)從其他機(jī)器上拉出注冊(cè)表,但看到的不是最新數(shù)據(jù),但可用性是有保證的。這種狀態(tài)遵循基礎(chǔ)理論,即最終一致性。
架構(gòu)圖如下:
ZooKeeper有一個(gè)領(lǐng)導(dǎo)者節(jié)點(diǎn),它將接收數(shù)據(jù),然后同步地寫(xiě)到其他節(jié)點(diǎn)。一旦領(lǐng)導(dǎo)人去世,就要重新選舉領(lǐng)導(dǎo)人
在這個(gè)過(guò)程中,為了保證C,犧牲了A,在一段時(shí)間內(nèi)無(wú)法使用。但是,如果一個(gè)領(lǐng)導(dǎo)當(dāng)選了,那么您可以繼續(xù)數(shù)據(jù)并確保一致性
說(shuō)到這里,筆者認(rèn)為真正意義上的AP在現(xiàn)實(shí)場(chǎng)景中幾乎是不存在的,我也從未體驗(yàn)過(guò)完全不需要數(shù)據(jù)統(tǒng)一的場(chǎng)景。說(shuō)白了,這不是大腦分裂嗎?...
接下來(lái),我將從兩個(gè)方面繼續(xù)談?wù)勊鼈冎g的區(qū)別:
(一)服務(wù)注冊(cè)發(fā)現(xiàn)的及時(shí)性
ZK,更好的時(shí)效性,注冊(cè)或掛機(jī),秒級(jí)即可感知
尤里卡,默認(rèn)配置很糟糕,服務(wù)發(fā)現(xiàn)感知幾十秒甚至幾分鐘
當(dāng)啟動(dòng)一個(gè)新的服務(wù)實(shí)例以便其他人可以找到它時(shí),在極端情況下,ribbon可能需要1分鐘來(lái)獲得每個(gè)服務(wù)上緩存的eureka注冊(cè)表以進(jìn)行負(fù)載平衡
服務(wù)失敗,每60秒檢查一次心跳,發(fā)現(xiàn)該服務(wù)最后一次心跳是在60秒之前,每60秒檢查一次心跳,超過(guò)90秒沒(méi)有心跳就認(rèn)為他死了,2
幾分鐘過(guò)去了
30秒,緩存將被更新,30秒,其他服務(wù)將拉出最新的注冊(cè)表
三分鐘過(guò)去了,如果你的服務(wù)實(shí)例掛斷了,別人覺(jué)得可能需要兩三分鐘,一兩分鐘,很長(zhǎng)時(shí)間
(2)容量
Zk,不適合大規(guī)模的服務(wù)實(shí)例,因?yàn)楫?dāng)服務(wù)上下行時(shí),需要即時(shí)向所有其他服務(wù)實(shí)例推送數(shù)據(jù)通知
因此,一旦業(yè)務(wù)規(guī)模過(guò)大,當(dāng)有上千個(gè)業(yè)務(wù)實(shí)例時(shí),就會(huì)大量占用網(wǎng)絡(luò)帶寬
Eureka也很難支持大規(guī)模的服務(wù)實(shí)例,因?yàn)槊總€(gè)Eureka實(shí)例都要接受所有請(qǐng)求,很多實(shí)例的壓力太大無(wú)法支持,很難達(dá)到上千個(gè)服務(wù)實(shí)例
之前dubbo技術(shù)系統(tǒng)使用zk作為注冊(cè)中心,spring cloud技術(shù)系統(tǒng)使用eureka作為注冊(cè)中心,這兩種技術(shù)應(yīng)用最廣泛
但是現(xiàn)在很多中小型公司大多是spring cloud,所以我們后面會(huì)講到基于eureka的service registry的生產(chǎn)優(yōu)化
4.如果要自學(xué)報(bào)名中心,需要注意什么?
既然要開(kāi)發(fā)自己的注冊(cè)中心,就必然要開(kāi)發(fā)相應(yīng)的客戶端和服務(wù)器,兩端都要考慮自己的事情
客戶:
服務(wù)拉動(dòng):絕對(duì)不是一次全拉動(dòng)。此時(shí),您應(yīng)該考慮服務(wù)器可能會(huì)提供一個(gè)最近的更改隊(duì)列供客戶機(jī)拉取的可能性
還有,必須有一個(gè)指標(biāo)數(shù)據(jù),用來(lái)驗(yàn)證拉增量數(shù)據(jù)后數(shù)據(jù)是否完整,以及驗(yàn)證數(shù)據(jù)是否異常。如果有異常,拉動(dòng)整個(gè)數(shù)量一次。
心跳發(fā)送:告訴服務(wù)器是否活著來(lái)續(xù)訂服務(wù)。
服務(wù)離線:服務(wù)離線,修改標(biāo)志的狀態(tài),當(dāng)然這個(gè)標(biāo)志要保證它的可見(jiàn)性。
服務(wù)器端:
Service registry:要深入理解java并發(fā)收縮,必須注意Service registry中的讀寫(xiě)并發(fā)控制,既要保證線程安全,又要減少鎖爭(zhēng)用,最大限度地保證
它的性能。
注冊(cè)服務(wù)健康檢查:在單位時(shí)間內(nèi),如果注冊(cè)服務(wù)不續(xù)簽服務(wù),則該服務(wù)應(yīng)離線。
集群同步:根據(jù)自己的實(shí)際業(yè)務(wù)需求,制定合適的集群架構(gòu)方案,在此前提下,制定合適的數(shù)據(jù)傳輸方案,保證吞吐量。
此外,還要考慮注冊(cè)表與主流技術(shù)框架的兼容性。
< 上一篇:蘇州公司注冊(cè)名稱預(yù)先核準(zhǔn)
下一篇:蘇州注冊(cè)的公司能轉(zhuǎn)到南通 >
您的申請(qǐng)我們已經(jīng)收到!
專屬顧問(wèn)會(huì)盡快與您聯(lián)系,請(qǐng)保持電話暢通!