1潭辈、什么是 Spring Cloud?
Spring cloud 流應(yīng)用程序啟動(dòng)器是基于 Spring Boot 的 Spring 集成應(yīng)用程序程梦,提供與外部系統(tǒng)的集 成且警。Spring cloud Task,一個(gè)生命周期短暫的微服務(wù)框架弧轧,用于快速構(gòu)建執(zhí)行有限數(shù)據(jù)處理的應(yīng)用程 序缔刹。
2、使用 Spring Cloud 有什么優(yōu)勢(shì)劣针?
使用 Spring Boot 開發(fā)分布式微服務(wù)時(shí)校镐,我們面臨以下問(wèn)題
1、與分布式系統(tǒng)相關(guān)的復(fù)雜性-這種開銷包括網(wǎng)絡(luò)問(wèn)題捺典,延遲開銷鸟廓,帶寬問(wèn)題,安全問(wèn)題。
2引谜、服務(wù)發(fā)現(xiàn)-服務(wù)發(fā)現(xiàn)工具管理群集中的流程和服務(wù)如何查找和互相交談菇民。它涉及一個(gè)服務(wù)目錄,在該 目錄中注冊(cè)服務(wù)虱疏,然后能夠查找并連接到該目錄中的服務(wù)力试。
3、冗余-分布式系統(tǒng)中的冗余問(wèn)題贝室。
4契讲、負(fù)載平衡 --負(fù)載平衡改善跨多個(gè)計(jì)算資源的工作負(fù)荷,諸如計(jì)算機(jī)滑频,計(jì)算機(jī)集群捡偏,網(wǎng)絡(luò)鏈路,中央 處理單元峡迷,或磁盤驅(qū)動(dòng)器的分布银伟。
5、性能-問(wèn)題 由于各種運(yùn)營(yíng)開銷導(dǎo)致的性能問(wèn)題绘搞。
6彤避、部署復(fù)雜性-Devops 技能的要求。
3夯辖、服務(wù)注冊(cè)和發(fā)現(xiàn)是什么意思忠藤?Spring Cloud 如何實(shí)現(xiàn)?
當(dāng)我們開始一個(gè)項(xiàng)目時(shí)楼雹,我們通常在屬性文件中進(jìn)行所有的配置模孩。隨著越來(lái)越多的服務(wù)開發(fā)和部署,添 加和修改這些屬性變得更加復(fù)雜贮缅。有些服務(wù)可能會(huì)下降榨咐,而某些位置可能會(huì)發(fā)生變化。手動(dòng)更改屬性可 能會(huì)產(chǎn)生問(wèn)題谴供。 Eureka 服務(wù)注冊(cè)和發(fā)現(xiàn)可以在這種情況下提供幫助块茁。由于所有服務(wù)都在 Eureka 服務(wù) 器上注冊(cè)并通過(guò)調(diào)用 Eureka 服務(wù)器完成查找,因此無(wú)需處理服務(wù)地點(diǎn)的任何更改和處理桂肌。
4数焊、負(fù)載平衡的意義什么?
在計(jì)算中崎场,負(fù)載平衡可以改善跨計(jì)算機(jī)佩耳,計(jì)算機(jī)集群,網(wǎng)絡(luò)鏈接谭跨,中央處理單元或磁盤驅(qū)動(dòng)器等多種計(jì) 算資源的工作負(fù)載分布干厚。負(fù)載平衡旨在優(yōu)化資源使用李滴,最大化吞吐量,最小化響應(yīng)時(shí)間并避免任何單一 資源的過(guò)載蛮瞄。使用多個(gè)組件進(jìn)行負(fù)載平衡而不是單個(gè)組件可能會(huì)通過(guò)冗余來(lái)提高可靠性和可用性所坯。負(fù)載 平衡通常涉及專用軟件或硬件,例如多層交換機(jī)或域名系統(tǒng)服務(wù)器進(jìn)程挂捅。
5芹助、什么是 Hystrix?它如何實(shí)現(xiàn)容錯(cuò)闲先?
假設(shè)如果上圖中的微服務(wù) 9 失敗了渊迁,那么使用傳統(tǒng)方法我們將傳播一個(gè)異常。但這仍然會(huì)導(dǎo)致整個(gè)系統(tǒng) 崩潰灶挟。 隨著微服務(wù)數(shù)量的增加琉朽,這個(gè)問(wèn)題變得更加復(fù)雜。微服務(wù)的數(shù)量可以高達(dá) 1000.這是 hystrix 出 現(xiàn)的地方 我們將使用 Hystrix 在這種情況下的 Fallback 方法功能稚铣。我們有兩個(gè)服務(wù) employee-consumer 使用由 employee-consumer 公開的服務(wù)箱叁。簡(jiǎn)化圖如下所示
現(xiàn)在假設(shè)由于某種原因,employee-producer 公開的服務(wù)會(huì)拋出異常惕医。我們?cè)谶@種情況下使用 Hystrix 定義了一個(gè)回退方法耕漱。這種后備方法應(yīng)該具有與公開服務(wù)相同的返回類型。如果暴露服務(wù)中出現(xiàn)異常抬伺, 則回退方法將返回一些值螟够。
6、什么是 Hystrix 斷路器峡钓?我們需要它嗎妓笙?
由于某些原因,employee-consumer 公開服務(wù)會(huì)引發(fā)異常能岩。在這種情況下使用Hystrix 我們定義了一 個(gè)回退方法寞宫。如果在公開服務(wù)中發(fā)生異常,則回退方法返回一些默認(rèn)值拉鹃。
如果 ?rstPage method() 中的異常繼續(xù)發(fā)生淆九,則 Hystrix 電路將中斷统锤,并且員工使用者將一起跳過(guò) ?rtsPage 方法,并直接調(diào)用回退方法炭庙。 斷路器的目的是給第一頁(yè)方法或第一頁(yè)方法可能調(diào)用的其他方 法留出時(shí)間饲窿,并導(dǎo)致異常恢復(fù)焕蹄∮庑郏可能發(fā)生的情況是,在負(fù)載較小的情況下腻脏,導(dǎo)致異常的問(wèn)題有更好的恢 復(fù)機(jī)會(huì) 鸦泳。
7、什么是 Net?ix Feign永品?它的優(yōu)點(diǎn)是什么做鹰?
@Controller public class ConsumerControllerClient {
@Autowired
private LoadBalancerClient loadBalancer;
public void getEmployee() throws RestClientException, IOException {
ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");
System.out.println(serviceInstance.getUri());
String baseUrl=serviceInstance.getUri().toString();
baseUrl=baseUrl+"/employee";
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response=null;
try{
response=restTemplate.exchange(baseUrl,
HttpMethod.GET, getHeaders(),String.class);
}catch (Exception ex)
{
System.out.println(ex);
}
System.out.println(response.getBody());
}
}
之前的代碼,有像 NullPointer 這樣的例外的機(jī)會(huì)鼎姐,并不是最優(yōu)的钾麸。我們將看到如何使用 Net?ix Feign 使呼叫變得更加輕松和清潔。如果 Net?ix Ribbon 依賴關(guān)系也在類路徑中炕桨,那么 Feign 默認(rèn)也會(huì)負(fù)責(zé)負(fù) 載平衡饭尝。
8、什么是 Spring Cloud Bus献宫?我們需要它嗎钥平?
考慮以下情況:我們有多個(gè)應(yīng)用程序使用 Spring Cloud Con?g 讀取屬性,而Spring Cloud Con?g 從 GIT 讀取這些屬性姊途。
下面的例子中多個(gè)員工生產(chǎn)者模塊從 Employee Con?g Module 獲取 Eureka 注冊(cè)的財(cái)產(chǎn)
如果假設(shè) GIT 中的 Eureka 注冊(cè)屬性更改為指向另一臺(tái) Eureka 服務(wù)器涉瘾,會(huì)發(fā)生什么情況。在這種情況 下捷兰,我們將不得不重新啟動(dòng)服務(wù)以獲取更新的屬性立叛。還有另一種使用執(zhí)行器端點(diǎn)/刷新的方式。但是我 們將不得不為每個(gè)模塊單獨(dú)調(diào)用這個(gè) url寂殉。例如囚巴,如果 Employee Producer1 部署在端口 8080 上,則 調(diào)用 http:// localhost:8080 / refresh友扰。同樣對(duì)于 Employee Producer2 http://localhost:8081 / refresh 等等彤叉。這又很麻煩。這就是 Spring Cloud Bus 發(fā)揮作用的地方村怪。
Spring Cloud Bus 提供了跨多個(gè)實(shí)例刷新配置的功能秽浇。因此,在上面的示例中甚负,如果我們刷新 Employee Producer1柬焕,則會(huì)自動(dòng)刷新所有其他必需的模塊审残。如果我們有多個(gè)微服務(wù)啟動(dòng)并運(yùn)行,這特 別有用斑举。這是通過(guò)將所有微服務(wù)連接到單個(gè)消息代理來(lái)實(shí)現(xiàn)的搅轿。無(wú)論何時(shí)刷新實(shí)例,此事件都會(huì)訂閱到 偵聽此代理的所有微服務(wù)富玷,并且它們也會(huì)刷新璧坟。可以通過(guò)使用端點(diǎn)/總線/刷新來(lái)實(shí)現(xiàn)對(duì)任何單個(gè)實(shí)例的 刷新
9赎懦、什么是微服務(wù)
微服務(wù)架構(gòu)是一種架構(gòu)模式或者說(shuō)是一種架構(gòu)風(fēng)格雀鹃,它提倡將單一應(yīng)用程序劃分為一組小的服務(wù),每個(gè) 服務(wù)運(yùn)行在其獨(dú)立的自己的進(jìn)程中励两,服務(wù)之間相互協(xié)調(diào)黎茎、互相配合,為用戶提供最終價(jià)值当悔。服務(wù)之間采 用輕量級(jí)的通信機(jī)制互相溝通(通常是基于HTTP的RESTful API),每個(gè)服務(wù)都圍繞著具體的業(yè)務(wù)進(jìn)行構(gòu) 建傅瞻,并且能夠被獨(dú)立的構(gòu)建在生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等先鱼。另外俭正,應(yīng)避免統(tǒng)一的奸鬓、集中式的服務(wù)管理機(jī) 制焙畔,對(duì)具體的一個(gè)服務(wù)而言,應(yīng)根據(jù)業(yè)務(wù)上下文串远,選擇合適的語(yǔ)言宏多、工具對(duì)其進(jìn)行構(gòu)建,可以有一個(gè)非 常輕量級(jí)的集中式管理來(lái)協(xié)調(diào)這些服務(wù)澡罚,可以使用不同的語(yǔ)言來(lái)編寫服務(wù)伸但,也可以使用不同的數(shù)據(jù)存 儲(chǔ)。
10留搔、什么是服務(wù)熔斷更胖?什么是服務(wù)降級(jí)
熔斷機(jī)制是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制。當(dāng)某個(gè)微服務(wù)不可用或者響應(yīng)時(shí)間太長(zhǎng)時(shí)隔显,會(huì)進(jìn) 行服務(wù)降級(jí)却妨,進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用,快速返回“錯(cuò)誤”的響應(yīng)信息括眠。當(dāng)檢測(cè)到該節(jié)點(diǎn)微服務(wù)調(diào)用 響應(yīng)正常后恢復(fù)調(diào)用鏈路彪标。在SpringCloud框架里熔斷機(jī)制通過(guò)Hystrix實(shí)現(xiàn),Hystrix會(huì)監(jiān)控微服務(wù)間調(diào) 用的狀況掷豺,當(dāng)失敗的調(diào)用到一定閾值捞烟,缺省是5秒內(nèi)調(diào)用20次薄声,如果失敗,就會(huì)啟動(dòng)熔斷機(jī)制题画。
服務(wù)降級(jí)默辨,一般是從整體負(fù)荷考慮。就是當(dāng)某個(gè)服務(wù)熔斷之后苍息,服務(wù)器將不再被調(diào)用廓奕,此時(shí)客戶端可以 自己準(zhǔn)備一個(gè)本地的fallback回調(diào),返回一個(gè)缺省值档叔。這樣做桌粉,雖然水平下降,但好歹可用衙四,比直接掛 掉強(qiáng)铃肯。
Hystrix相關(guān)注解
@EnableHystrix:開啟熔斷
@HystrixCommand(fallbackMethod=”XXX”):聲明一個(gè)失敗回滾處理函數(shù)XXX,當(dāng)被注解的方法執(zhí)行 超時(shí)(默認(rèn)是1000毫秒)传蹈,就會(huì)執(zhí)行fallback函數(shù)押逼,返回錯(cuò)誤提示
11、Eureka和zookeeper都可以提供服務(wù)注冊(cè)與發(fā)現(xiàn)的功能惦界,請(qǐng)說(shuō) 說(shuō)兩個(gè)的區(qū)別挑格?
Zookeeper保證了CP(C:一致性,P:分區(qū)容錯(cuò)性)沾歪,Eureka保證了AP(A:高可用)1.當(dāng)向注冊(cè)中 心查詢服務(wù)列表時(shí)漂彤,我們可以容忍注冊(cè)中心返回的是幾分鐘以前的信息,但不能容忍直接down掉不可 用灾搏。也就是說(shuō)挫望,服務(wù)注冊(cè)功能對(duì)高可用性要求比較高,但zk會(huì)出現(xiàn)這樣一種情況狂窑,當(dāng)master節(jié)點(diǎn)因?yàn)榫W(wǎng) 絡(luò)故障與其他節(jié)點(diǎn)失去聯(lián)系時(shí)媳板,剩余節(jié)點(diǎn)會(huì)重新選leader。問(wèn)題在于泉哈,選取leader時(shí)間過(guò)長(zhǎng)蛉幸,30 ~ 120s,且選取期間zk集群都不可用丛晦,這樣就會(huì)導(dǎo)致選取期間注冊(cè)服務(wù)癱瘓奕纫。在云部署的環(huán)境下,因網(wǎng)絡(luò) 問(wèn)題使得zk集群失去master節(jié)點(diǎn)是較大概率會(huì)發(fā)生的事采呐,雖然服務(wù)能夠恢復(fù)若锁,但是漫長(zhǎng)的選取時(shí)間導(dǎo)致 的注冊(cè)長(zhǎng)期不可用是不能容忍的。
2.Eureka保證了可用性斧吐,Eureka各個(gè)節(jié)點(diǎn)是平等的又固,幾個(gè)節(jié)點(diǎn)掛掉不會(huì)影響正常節(jié)點(diǎn)的工作仲器,剩余的節(jié) 點(diǎn)仍然可以提供注冊(cè)和查詢服務(wù)。而Eureka的客戶端向某個(gè)Eureka注冊(cè)或發(fā)現(xiàn)時(shí)發(fā)生連接失敗仰冠,則會(huì) 自動(dòng)切換到其他節(jié)點(diǎn)乏冀,只要有一臺(tái)Eureka還在,就能保證注冊(cè)服務(wù)可用洋只,只是查到的信息可能不是最新 的辆沦。除此之外,Eureka還有自我保護(hù)機(jī)制识虚,如果在15分鐘內(nèi)超過(guò)85%的節(jié)點(diǎn)沒(méi)有正常的心跳肢扯,那么 Eureka就認(rèn)為客戶端與注冊(cè)中心發(fā)生了網(wǎng)絡(luò)故障,此時(shí)會(huì)出現(xiàn)以下幾種情況:
①担锤、Eureka不在從注冊(cè)列表中移除因?yàn)殚L(zhǎng)時(shí)間沒(méi)有收到心跳而應(yīng)該過(guò)期的服務(wù)蔚晨。
②、Eureka仍然能夠接受新服務(wù)的注冊(cè)和查詢請(qǐng)求肛循,但是不會(huì)被同步到其他節(jié)點(diǎn)上(即保證當(dāng)前節(jié)點(diǎn)仍 然可用)
③铭腕、當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí),當(dāng)前實(shí)例新的注冊(cè)信息會(huì)被同步到其他節(jié)點(diǎn)多糠。因此累舷,Eureka可以很好的應(yīng)對(duì)因網(wǎng)絡(luò) 故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況,而不會(huì)像Zookeeper那樣使整個(gè)微服務(wù)癱瘓
12夹孔、SpringBoot和SpringCloud的區(qū)別被盈?
SpringBoot專注于快速方便的開發(fā)單個(gè)個(gè)體微服務(wù)。
SpringCloud是關(guān)注全局的微服務(wù)協(xié)調(diào)整理治理框架析蝴,它將SpringBoot開發(fā)的一個(gè)個(gè)單體微服務(wù)整合并 管理起來(lái)害捕,為各個(gè)微服務(wù)之間提供绿淋,配置管理闷畸、服務(wù)發(fā)現(xiàn)、斷路器吞滞、路由佑菩、微代理、事件總線裁赠、全局 鎖殿漠、決策競(jìng)
選、分布式會(huì)話等等集成服務(wù)SpringBoot可以離開SpringCloud獨(dú)立使用開發(fā)項(xiàng)目佩捞, 但是SpringCloud 離不開SpringBoot 绞幌,屬于依賴的關(guān)系.
SpringBoot專注于快速、方便的開發(fā)單個(gè)微服務(wù)個(gè)體一忱,SpringCloud關(guān)注全局的服務(wù)治理框架
13莲蜘、什么是Hystrix斷路器谭确?我們需要它嗎
如果?rstPage method() 中的異常繼續(xù)發(fā)生昂秃,則Hystrix電路將中斷,并且員工使用者將一起跳過(guò) ?rtsPage方法杜窄,并直接調(diào)用回退方法肠骆。 斷路器的目的是給第一頁(yè)方法或第一頁(yè)方法可能調(diào)用的其他方 法留出時(shí)間,并導(dǎo)致異橙恢復(fù)哗戈。可能發(fā)生的情況是荷科,在負(fù)載較小的情況下唯咬,導(dǎo)致異常的問(wèn)題有更好的恢 復(fù)機(jī)會(huì) 。
14畏浆、說(shuō)說(shuō) RPC 的實(shí)現(xiàn)原理
首先需要有處理網(wǎng)絡(luò)連接通訊的模塊胆胰,負(fù)責(zé)連接建立、管理和消息的傳輸刻获。其次需要有編解碼的模塊蜀涨, 因?yàn)榫W(wǎng)絡(luò)通訊都是傳輸?shù)淖止?jié)碼,需要將我們使用的對(duì)象序列化和反序列化蝎毡。剩下的就是客戶端和服務(wù) 器端的部分厚柳,服務(wù)器端暴露要開放的服務(wù)接口,客戶調(diào)用服務(wù)接口的一個(gè)代理實(shí)現(xiàn)沐兵,這個(gè)代理實(shí)現(xiàn)負(fù)責(zé) 收集數(shù)據(jù)别垮、編碼并傳輸給服務(wù)器然后等待結(jié)果返回。
15扎谎、微服務(wù)的優(yōu)點(diǎn)缺點(diǎn)?說(shuō)下開發(fā)項(xiàng)目中遇到的坑?
優(yōu)點(diǎn):
1.每個(gè)服務(wù)直接足夠內(nèi)聚碳想,代碼容易理解
2.開發(fā)效率高,一個(gè)服務(wù)只做一件事毁靶,適合小團(tuán)隊(duì)開發(fā)
3.松耦合胧奔,有功能意義的服務(wù)。
4.可以用不同語(yǔ)言開發(fā)预吆,面向接口編程龙填。
5.易于第三方集成
6.微服務(wù)只是業(yè)務(wù)邏輯的代碼,不會(huì)和HTML,CSS或其他界面結(jié)合.
7.可以靈活搭配,連接公共庫(kù)/連接獨(dú)立庫(kù)
缺點(diǎn):
1.分布式系統(tǒng)的責(zé)任性
2.多服務(wù)運(yùn)維難度加大岩遗。
3.系統(tǒng)部署依賴胶背,服務(wù)間通信成本,數(shù)據(jù)一致性喘先,系統(tǒng)集成測(cè)試钳吟,性能監(jiān)控。
16窘拯、spring cloud 和dubbo區(qū)別?
1.服務(wù)調(diào)用方式 dubbo是RPC springcloud Rest Api
2.注冊(cè)中心,dubbo 是zookeeper springcloud是eureka红且,也可以是zookeeper
3.服務(wù)網(wǎng)關(guān),dubbo本身沒(méi)有實(shí)現(xiàn),只能通過(guò)其他第三方技術(shù)整合涤姊,springcloud有Zuul路由網(wǎng)關(guān)暇番,作為 路由服務(wù)器,進(jìn)行消費(fèi)者的請(qǐng)求分發(fā),springcloud支持?jǐn)嗦菲魉己埃cgit完美集成配置文件支持版本控制壁酬, 事物總線實(shí)現(xiàn)配置文件的更新與服務(wù)自動(dòng)裝配等等一系列的微服務(wù)架構(gòu)要素。
17恨课、REST 和RPC對(duì)比
1.RPC主要的缺陷是服務(wù)提供方和調(diào)用方式之間的依賴太強(qiáng)舆乔,需要對(duì)每一個(gè)微服務(wù)進(jìn)行接口的定義,并 通過(guò)持續(xù)繼承發(fā)布剂公,嚴(yán)格版本控制才不會(huì)出現(xiàn)沖突希俩。
2.REST是輕量級(jí)的接口,服務(wù)的提供和調(diào)用不存在代碼之間的耦合纲辽,只需要一個(gè)約定進(jìn)行規(guī)范颜武。
18、你所知道的微服務(wù)技術(shù)棧拖吼?
維度(springcloud)
服務(wù)開發(fā):springboot spring springmvc
服務(wù)配置與管理:Net?x公司的Archaiusm ,阿里的Diamond 服務(wù)注冊(cè)與發(fā)現(xiàn):Eureka,Zookeeper
服務(wù)調(diào)用:Rest RPC gRpc
服務(wù)熔斷器:Hystrix
服務(wù)負(fù)載均衡:Ribbon Nginx
服務(wù)接口調(diào)用:Fegin
消息隊(duì)列:Kafka Rabbitmq activemq
服務(wù)配置中心管理:SpringCloudCon?g
服務(wù)路由(API網(wǎng)關(guān))Zuul
事件消息總線:SpringCloud Bus
19鳞上、微服務(wù)之間是如何獨(dú)立通訊的?
1.遠(yuǎn)程調(diào)用,比如feign調(diào)用吊档,直接通過(guò)遠(yuǎn)程過(guò)程調(diào)用來(lái)訪問(wèn)別的service篙议。
2.消息中間件
20、springcloud如何實(shí)現(xiàn)服務(wù)的注冊(cè)?
1.服務(wù)發(fā)布時(shí)籍铁,指定對(duì)應(yīng)的服務(wù)名,將服務(wù)注冊(cè)到 注冊(cè)中心(eureka zookeeper)
2.注冊(cè)中心加@EnableEurekaServer,服務(wù)用@EnableDiscoveryClient涡上,然后用ribbon或feign進(jìn)行服務(wù) 直接的調(diào)用發(fā)現(xiàn)。
21拒名、Eureka和Zookeeper區(qū)別
1.Eureka取CAP的AP,注重可用性芋酌,Zookeeper取CAP的CP注重一致性增显。
2.Zookeeper在選舉期間注冊(cè)服務(wù)癱瘓,雖然服務(wù)最終會(huì)恢復(fù),但選舉期間不可用同云。
3.eureka的自我保護(hù)機(jī)制糖权,會(huì)導(dǎo)致一個(gè)結(jié)果就是不會(huì)再?gòu)淖?cè)列表移除因長(zhǎng)時(shí)間沒(méi)收到心跳而過(guò)期的服 務(wù)。依然能接受新服務(wù)的注冊(cè)和查詢請(qǐng)求炸站,但不會(huì)被同步到其他節(jié)點(diǎn)星澳。不會(huì)服務(wù)癱瘓。
4.Zookeeper有Leader和Follower角色旱易,Eureka各個(gè)節(jié)點(diǎn)平等禁偎。
5.Zookeeper采用過(guò)半數(shù)存活原則,Eureka采用自我保護(hù)機(jī)制解決分區(qū)問(wèn)題阀坏。
6.eureka本質(zhì)是一個(gè)工程如暖,Zookeeper只是一個(gè)進(jìn)程。
22忌堂、eureka自我保護(hù)機(jī)制是什么?
1.當(dāng)Eureka Server 節(jié)點(diǎn)在短時(shí)間內(nèi)丟失了過(guò)多實(shí)例的連接時(shí)(比如網(wǎng)絡(luò)故障或頻繁啟動(dòng)關(guān)閉客戶端) 節(jié)點(diǎn)會(huì)進(jìn)入自我保護(hù)模式盒至,保護(hù)注冊(cè)信息,不再刪除注冊(cè)數(shù)據(jù)士修,故障恢復(fù)時(shí)枷遂,自動(dòng)退出自我保護(hù)模式。
23棋嘲、什么是Ribbon登淘?
ribbon是一個(gè)負(fù)載均衡客戶端,可以很好的控制htt和tcp的一些行為封字。feign默認(rèn)集成了ribbon黔州。
24、什么是feigin阔籽?它的優(yōu)點(diǎn)是什么流妻?
1.feign采用的是基于接口的注解
2.feign整合了ribbon,具有負(fù)載均衡的能力
3.整合了Hystrix笆制,具有熔斷的能力
使用:
1.添加pom依賴绅这。
2.啟動(dòng)類添加@EnableFeignClients
3.定義一個(gè)接口@FeignClient(name=“xxx”)指定調(diào)用哪個(gè)服務(wù)
25、Ribbon和Feign的區(qū)別在辆?
1.Ribbon都是調(diào)用其他服務(wù)的证薇,但方式不同。
2.啟動(dòng)類注解不同匆篓,Ribbon是@RibbonClient feign的是@EnableFeignClients
3.服務(wù)指定的位置不同浑度,Ribbon是在@RibbonClient注解上聲明,F(xiàn)eign則是在定義抽象方法的接口中 使用@FeignClient聲明鸦概。
4.調(diào)用方式不同箩张,Ribbon需要自己構(gòu)建http請(qǐng)求,模擬http請(qǐng)求然后使用RestTemplate發(fā)送給其他服 務(wù),步驟相當(dāng)繁瑣先慷。Feign需要將調(diào)用的方法定義成抽象方法即可饮笛。
26、什么是Spring Cloud Bus?
spring cloud bus 將分布式的節(jié)點(diǎn)用輕量的消息代理連接起來(lái)论熙,它可以用于廣播配置文件的更改或者服 務(wù)直接的通訊福青,也可用于監(jiān)控。
如果修改了配置文件脓诡,發(fā)送一次請(qǐng)求无午,所有的客戶端便會(huì)重新讀取配置文件。
使用:
1.添加依賴
2.配置rabbimq
27誉券、springcloud斷路器作用?
當(dāng)一個(gè)服務(wù)調(diào)用另一個(gè)服務(wù)由于網(wǎng)絡(luò)原因或自身原因出現(xiàn)問(wèn)題指厌,調(diào)用者就會(huì)等待被調(diào)用者的響應(yīng) 當(dāng)更多 的服務(wù)請(qǐng)求到這些資源導(dǎo)致更多的請(qǐng)求等待,發(fā)生連鎖效應(yīng)(雪崩效應(yīng))
斷路器有完全打開狀態(tài):一段時(shí)間內(nèi) 達(dá)到一定的次數(shù)無(wú)法調(diào)用 并且多次監(jiān)測(cè)沒(méi)有恢復(fù)的跡象 斷路器完全 打開 那么下次請(qǐng)求就不會(huì)請(qǐng)求到該服務(wù)
半開:短時(shí)間內(nèi) 有恢復(fù)跡象 斷路器會(huì)將部分請(qǐng)求發(fā)給該服務(wù)踊跟,正常調(diào)用時(shí) 斷路器關(guān)閉
關(guān)閉:當(dāng)服務(wù)一直處于正常狀態(tài) 能正常調(diào)用
28踩验、Spring Cloud Gateway?
Spring Cloud Gateway是Spring Cloud官方推出的第二代網(wǎng)關(guān)框架,取代Zuul網(wǎng)關(guān)商玫。網(wǎng)關(guān)作為流量的箕憾, 在微服務(wù)系統(tǒng)中有著非常作用,網(wǎng)關(guān)常見的功能有路由轉(zhuǎn)發(fā)拳昌、權(quán)限校驗(yàn)袭异、限流控制等作用。
使用了一個(gè)RouteLocatorBuilder的bean去創(chuàng)建路由炬藤,除了創(chuàng)建路由RouteLocatorBuilder可以讓你添 加各種predicates和?lters御铃,predicates斷言的意思,顧名思義就是根據(jù)具體的請(qǐng)求的規(guī)則沈矿,由具體的 route去處理上真,?lters是各種過(guò)濾器,用來(lái)對(duì)請(qǐng)求做各種判斷和修改羹膳。
29睡互、作為服務(wù)注冊(cè)中心,Eureka比Zookeeper好在哪里?
1.Eureka保證的是可用性和分區(qū)容錯(cuò)性陵像,Zookeeper 保證的是一致性和分區(qū)容錯(cuò)性 就珠。
2.Eureka還有一種自我保護(hù)機(jī)制,如果在15分鐘內(nèi)超過(guò)85%的節(jié)點(diǎn)都沒(méi)有正常的心跳醒颖,那么Eureka就 認(rèn)為客戶端與注冊(cè)中心出現(xiàn)了網(wǎng)絡(luò)故障妻怎。而不會(huì)像zookeeper那樣使整個(gè)注冊(cè)服務(wù)癱瘓。
30图贸、什么是 Ribbon負(fù)載均衡蹂季?
1.Spring Cloud Ribbon是基于Net?ix Ribbon實(shí)現(xiàn)的一套客戶端 負(fù)載均衡的工具冕广。
- Ribbon客戶端組件提供一系列完善的配置項(xiàng)如連接超時(shí)疏日,重試等偿洁。簡(jiǎn)單的說(shuō),就是在配置文件中 列出Load Balancer(簡(jiǎn)稱LB)后面所有的機(jī)器沟优,Ribbon會(huì)自動(dòng)的幫助你基于某種規(guī)則(如簡(jiǎn)單 輪詢涕滋,隨機(jī)連接等)去連接這些機(jī)器。我們也很容易使用Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法挠阁。
31宾肺、Ribbon負(fù)載均衡能干什么?
1.將用戶的請(qǐng)求平攤的分配到多個(gè)服務(wù)上
2.集中式LB即在服務(wù)的消費(fèi)方和提供方之間使用獨(dú)立的LB設(shè)施(可以是硬件侵俗,如F5, 也可以是軟件锨用,如 nginx), 由該設(shè)施負(fù)責(zé)把訪問(wèn)請(qǐng)求通過(guò)某種策略轉(zhuǎn)發(fā)至服務(wù)的提供方;
3.進(jìn)程內(nèi)LB將LB邏輯集成到消費(fèi)方隘谣,消費(fèi)方從服務(wù)注冊(cè)中心獲知有哪些地址可用增拥,然后自己再?gòu)倪@些地 址中選擇出一個(gè)合適的服務(wù)器。
注意: Ribbon就屬于進(jìn)程內(nèi)LB寻歧,它只是一個(gè)類庫(kù)掌栅,集成于消費(fèi)方進(jìn)程,消費(fèi)方通過(guò)它來(lái)獲取到服務(wù)提 供方的地址码泛。
32猾封、什么是 zuul路由網(wǎng)關(guān)
1.Zuul 包含了對(duì)請(qǐng)求的路由和過(guò)濾兩個(gè)最主要的功能:其中路由功能負(fù)責(zé)將外部請(qǐng)求轉(zhuǎn)發(fā)到具體的微服 務(wù)實(shí)例上,是實(shí)現(xiàn)外部訪問(wèn)統(tǒng)一入口的基礎(chǔ)而過(guò)濾器功能則負(fù)責(zé)對(duì)請(qǐng)求的處理過(guò)程進(jìn)行干預(yù)噪珊,是實(shí)現(xiàn)請(qǐng) 求校驗(yàn)晌缘、服務(wù)聚合等功能的基礎(chǔ)、
2.Zuul和Eureka進(jìn)行整合痢站,將Zuul自身注冊(cè)為Eureka服務(wù)治理下的應(yīng)用磷箕,同時(shí)從Eureka中獲得其他微 服務(wù)的消息,也即以后的訪問(wèn)微服務(wù)都是通過(guò)Zuul跳轉(zhuǎn)后獲得瑟押。
注意: Zuul服務(wù)最終還是會(huì)注冊(cè)進(jìn)Eureka 提供=代理+路由+過(guò)濾 三大功能搀捷。
33、分布式配置中心能干嘛多望?
1.集中管理配置文件不同環(huán)境不同配置嫩舟,動(dòng)態(tài)化的配置更新,分環(huán)境部署比如
dev/test/prod/beta/release
2.運(yùn)行期間動(dòng)態(tài)調(diào)整配置怀偷,不再需要在每個(gè)服務(wù)部署的機(jī)器上編寫配置文件家厌,服務(wù)會(huì)向配置中心統(tǒng)一拉 取配置自己的信息
3.當(dāng)配置發(fā)生變動(dòng)時(shí),服務(wù)不需要重啟即可感知到配置的變化并應(yīng)用新的配置將配置信息以REST接口的 形式暴露
34椎工、Hystrix相關(guān)注解
@EnableHystrix:開啟熔斷
@HystrixCommand(fallbackMethod=”XXX”):聲明一個(gè)失敗回滾處理函數(shù)XXX饭于,當(dāng)被注解的方法執(zhí)行 超時(shí)(默認(rèn)是1000毫秒)蜀踏,就會(huì)執(zhí)行fallback函數(shù),返回錯(cuò)誤提示掰吕。
35果覆、Eureka和zookeeper都可以提供服務(wù)注冊(cè)與發(fā)現(xiàn)的功能,請(qǐng)說(shuō) 說(shuō)兩個(gè)的區(qū)別殖熟?
Zookeeper保證了CP(C:一致性局待,P:分區(qū)容錯(cuò)性),Eureka保證了AP(A:高可用)
1.當(dāng)向注冊(cè)中心查詢服務(wù)列表時(shí)菱属,我們可以容忍注冊(cè)中心返回的是幾分鐘以前的信息钳榨,但不能容忍直 接down掉不可用。也就是說(shuō)纽门,服務(wù)注冊(cè)功能對(duì)高可用性要求比較高薛耻,但zk會(huì)出現(xiàn)這樣一種情況,當(dāng) master節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)故障與其他節(jié)點(diǎn)失去聯(lián)系時(shí)赏陵,剩余節(jié)點(diǎn)會(huì)重新選leader饼齿。問(wèn)題在于,選取leader時(shí) 間過(guò)長(zhǎng)瘟滨,30 ~ 120s候醒,且選取期間zk集群都不可用,這樣就會(huì)導(dǎo)致選取期間注冊(cè)服務(wù)癱瘓杂瘸。在云部署的 環(huán)境下倒淫,因網(wǎng)絡(luò)問(wèn)題使得zk集群失去master節(jié)點(diǎn)是較大概率會(huì)發(fā)生的事,雖然服務(wù)能夠恢復(fù)败玉,但是漫長(zhǎng) 的選取時(shí)間導(dǎo)致的注冊(cè)長(zhǎng)期不可用是不能容忍的敌土。
2.Eureka保證了可用性,Eureka各個(gè)節(jié)點(diǎn)是平等的运翼,幾個(gè)節(jié)點(diǎn)掛掉不會(huì)影響正常節(jié)點(diǎn)的工作返干,剩余的 節(jié)點(diǎn)仍然可以提供注冊(cè)和查詢服務(wù)。而Eureka的客戶端向某個(gè)Eureka注冊(cè)或發(fā)現(xiàn)時(shí)發(fā)生連接失敗血淌,則 會(huì)自動(dòng)切換到其他節(jié)點(diǎn)矩欠,只要有一臺(tái)Eureka還在,就能保證注冊(cè)服務(wù)可用悠夯,只是查到的信息可能不是最 新的癌淮。除此之外,Eureka還有自我保護(hù)機(jī)制沦补,如果在15分鐘內(nèi)超過(guò)85%的節(jié)點(diǎn)沒(méi)有正常的心跳乳蓄,那么 Eureka就認(rèn)為客戶端與注冊(cè)中心發(fā)生了網(wǎng)絡(luò)故障,此時(shí)會(huì)出現(xiàn)以下幾種情況:
①夕膀、Eureka不在從注冊(cè)列表中移除因?yàn)殚L(zhǎng)時(shí)間沒(méi)有收到心跳而應(yīng)該過(guò)期的服務(wù)虚倒。
②美侦、Eureka仍然能夠接受新服務(wù)的注冊(cè)和查詢請(qǐng)求,但是不會(huì)被同步到其他節(jié)點(diǎn)上(即保證當(dāng)前節(jié)點(diǎn) 仍然可用)
③魂奥、當(dāng)網(wǎng)絡(luò)穩(wěn)定時(shí)菠剩,當(dāng)前實(shí)例新的注冊(cè)信息會(huì)被同步到其他節(jié)點(diǎn)。
因此捧弃,Eureka可以很好的應(yīng)對(duì)因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況赠叼,而不會(huì)像Zookeeper那樣使 整個(gè)微服務(wù)癱瘓擦囊。