自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SpringCloud必知的18道面試題

開發(fā) 架構(gòu)
今天跟大家分享下SpringCloud常見面試題的知識。一起來看一下吧。

 今天跟大家分享下SpringCloud常見面試題的知識。

1、什么是Spring Cloud?

Spring cloud流應(yīng)用程序啟動器是基于Spring Boot的Spring集成應(yīng)用程序,提供與外部系統(tǒng)的集成。Spring cloud Task,一個生命周期短暫的微服務(wù)框架,用于快速構(gòu)建執(zhí)行有限數(shù)據(jù)處理的應(yīng)用程序。

2、使用Spring Cloud有什么優(yōu)勢?

使用Spring Boot開發(fā)分布式微服務(wù)時,我們面臨以下問題:

與分布式系統(tǒng)相關(guān)的復(fù)雜性-這種開銷包括網(wǎng)絡(luò)問題,延遲開銷,帶寬問題,安全問題。

服務(wù)發(fā)現(xiàn)-服務(wù)發(fā)現(xiàn)工具管理群集中的流程和服務(wù)如何查找和互相交談。它涉及一個服務(wù)目錄,在該目錄中注冊服務(wù),然后能夠查找并連接到該目錄中的服務(wù)。

冗余-分布式系統(tǒng)中的冗余問題。

負(fù)載平衡 --負(fù)載平衡改善跨多個計(jì)算資源的工作負(fù)荷,諸如計(jì)算機(jī),計(jì)算機(jī)集群,網(wǎng)絡(luò)鏈路,中央處理單元,或磁盤驅(qū)動器的分布。

性能-問題 由于各種運(yùn)營開銷導(dǎo)致的性能問題。部署復(fù)雜性-Devops技能的要求。

3、服務(wù)注冊和發(fā)現(xiàn)是什么意思?Spring Cloud如何實(shí)現(xiàn)?

當(dāng)我們開始一個項(xiàng)目時,我們通常在屬性文件中進(jìn)行所有的配置。隨著越來越多的服務(wù)開發(fā)和部署,添加和修改這些屬性變得更加復(fù)雜。有些服務(wù)可能會下降,而某些位置可能會發(fā)生變化。手動更改屬性可能會產(chǎn)生問題。 Eureka服務(wù)注冊和發(fā)現(xiàn)可以在這種情況下提供幫助。由于所有服務(wù)都在Eureka服務(wù)器上注冊并通過調(diào)用Eureka服務(wù)器完成查找,因此無需處理服務(wù)地點(diǎn)的任何更改和處理。

4、負(fù)載平衡的意義什么?

在計(jì)算中,負(fù)載平衡可以改善跨計(jì)算機(jī),計(jì)算機(jī)集群,網(wǎng)絡(luò)鏈接,中央處理單元或磁盤驅(qū)動器等多種計(jì)算資源的工作負(fù)載分布。負(fù)載平衡旨在優(yōu)化資源使用,最大化吞吐量,最小化響應(yīng)時間并避免任何單一資源的過載。使用多個組件進(jìn)行負(fù)載平衡而不是單個組件可能會通過冗余來提高可靠性和可用性。負(fù)載平衡通常涉及專用軟件或硬件,例如多層交換機(jī)或域名系統(tǒng)服務(wù)器進(jìn)程。

5、什么是Hystrix?它如何實(shí)現(xiàn)容錯? 

Hystrix是一個延遲和容錯庫,旨在隔離遠(yuǎn)程系統(tǒng),服務(wù)和第三方庫的訪問點(diǎn),當(dāng)出現(xiàn)故障是不可避免的故障時,停止級聯(lián)故障并在復(fù)雜的分布式系統(tǒng)中實(shí)現(xiàn)彈性。

通常對于使用微服務(wù)架構(gòu)開發(fā)的系統(tǒng),涉及到許多微服務(wù)。這些微服務(wù)彼此協(xié)作。 

思考以下微服務(wù):

假設(shè)如果上圖中的微服務(wù)9失敗了,那么使用傳統(tǒng)方法我們將傳播一個異常。但這仍然會導(dǎo)致整個系統(tǒng)崩潰。 

隨著微服務(wù)數(shù)量的增加,這個問題變得更加復(fù)雜。微服務(wù)的數(shù)量可以高達(dá)1000.這是hystrix出現(xiàn)的地方 我們將使用Hystrix在這種情況下的Fallback方法功能。我們有兩個服務(wù)employee-consumer使用由employee-consumer公開的服務(wù)。 

簡化圖如下所示:

現(xiàn)在假設(shè)由于某種原因,employee-producer公開的服務(wù)會拋出異常。我們在這種情況下使用Hystrix定義了一個回退方法。這種后備方法應(yīng)該具有與公開服務(wù)相同的返回類型。如果暴露服務(wù)中出現(xiàn)異常,則回退方法將返回一些值。

6、什么是Hystrix斷路器?我們需要它嗎? 

由于某些原因,employee-consumer公開服務(wù)會引發(fā)異常。在這種情況下使用Hystrix我們定義了一個回退方法。如果在公開服務(wù)中發(fā)生異常,則回退方法返回一些默認(rèn)值。

如果firstPage method() 中的異常繼續(xù)發(fā)生,則Hystrix電路將中斷,并且員工使用者將一起跳過firtsPage方法,并直接調(diào)用回退方法。斷路器的目的是給第一頁方法或第一頁方法可能調(diào)用的其他方法留出時間,并導(dǎo)致異?;謴?fù)??赡馨l(fā)生的情況是,在負(fù)載較小的情況下,導(dǎo)致異常的問題有更好的恢復(fù)機(jī)會 。

7、什么是Netflix Feign?它的優(yōu)點(diǎn)是什么?

Feign是受到Retrofit,JAXRS-2.0和WebSocket啟發(fā)的java客戶端聯(lián)編程序。Feign的第一個目標(biāo)是將約束分母的復(fù)雜性統(tǒng)一到http apis,而不考慮其穩(wěn)定性。在employee-consumer的例子中,我們使用了employee-producer使用REST模板公開的REST服務(wù)。

但是我們必須編寫大量代碼才能執(zhí)行以下步驟:

1、使用功能區(qū)進(jìn)行負(fù)載平衡。

2、獲取服務(wù)實(shí)例,然后獲取基本URL。

3、利用REST模板來使用服務(wù)。前面的代碼如下: 

  1. @Controller  
  2. public class ConsumerControllerClient {  
  3. @Autowired  
  4. private LoadBalancerClient loadBalancer;  
  5. public void getEmployee() throws RestClientException, IOException {  
  6.     ServiceInstance serviceInstance=loadBalancer.choose("employee-producer");  
  7.     System.out.println(serviceInstance.getUri());  
  8.     String baseUrl=serviceInstance.getUri().toString();  
  9.     baseUrlbaseUrl=baseUrl+"/employee";  
  10.     RestTemplate restTemplate = new RestTemplate();  
  11.     ResponseEntity<String> response=null 
  12.     try{  
  13.     response=restTemplate.exchange(baseUrl,  
  14.             HttpMethod.GET, getHeaders(),String.class);  
  15.     }catch (Exception ex)  
  16.     {  
  17.         System.out.println(ex);  
  18.     }  
  19.     System.out.println(response.getBody());  

之前的代碼,有像NullPointer這樣的例外的機(jī)會,并不是最優(yōu)的。我們將看到如何使用Netflix Feign使呼叫變得更加輕松和清潔。如果Netflix Ribbon依賴關(guān)系也在類路徑中,那么Feign默認(rèn)也會負(fù)責(zé)負(fù)載平衡。

8、什么是Spring Cloud Bus?我們需要它嗎? 

考慮以下情況:我們有多個應(yīng)用程序使用Spring Cloud Config讀取屬性,而Spring Cloud Config從GIT讀取這些屬性。 

下面的例子中多個員工生產(chǎn)者模塊從Employee Config Module獲取Eureka注冊的財產(chǎn)。

如果假設(shè)GIT中的Eureka注冊屬性更改為指向另一臺Eureka服務(wù)器,會發(fā)生什么情況。在這種情況下,我們將不得不重新啟動服務(wù)以獲取更新的屬性。

還有另一種使用執(zhí)行器端點(diǎn)/刷新的方式。但是我們將不得不為每個模塊單獨(dú)調(diào)用這個url。例如,如果Employee Producer1部署在端口8080上,則調(diào)用 http:// localhost:8080 / refresh。同樣對于Employee Producer2 http:// localhost:8081 / refresh等等。這又很麻煩。這就是Spring Cloud Bus發(fā)揮作用的地方。 

Spring Cloud Bus提供了跨多個實(shí)例刷新配置的功能。因此,在上面的示例中,如果我們刷新Employee Producer1,則會自動刷新所有其他必需的模塊。如果我們有多個微服務(wù)啟動并運(yùn)行,這特別有用。這是通過將所有微服務(wù)連接到單個消息代理來實(shí)現(xiàn)的。無論何時刷新實(shí)例,此事件都會訂閱到偵聽此代理的所有微服務(wù),并且它們也會刷新??梢酝ㄟ^使用端點(diǎn)/總線/刷新來實(shí)現(xiàn)對任何單個實(shí)例的刷新。

9、SpringCloud和Dubbo

SpringCloud和Dubbo都是現(xiàn)在主流的微服務(wù)架構(gòu);

SpringCloud是Apache旗下的Spring體系下的微服務(wù)解決方案;

Dubbo是阿里系的分布式服務(wù)治理框架。

從技術(shù)維度上,其實(shí)SpringCloud遠(yuǎn)遠(yuǎn)的超過Dubbo,Dubbo本身只是實(shí)現(xiàn)了服務(wù)治理,而SpringCloud現(xiàn)在以及有21個子項(xiàng)目以后還會更多。

所以其實(shí)很多人都會說Dubbo和SpringCloud是不公平的

但是由于RPC以及注冊中心元數(shù)據(jù)等原因,在技術(shù)選型的時候我們只能二者選其一,所以我們常常為用他倆來對比。

服務(wù)的調(diào)用方式Dubbo使用的是RPC遠(yuǎn)程調(diào)用,而SpringCloud使用的是 Rest API,其實(shí)更符合微服務(wù)官方的定義。

服務(wù)的注冊中心來看,Dubbo使用了第三方的ZooKeeper作為其底層的注冊中心,實(shí)現(xiàn)服務(wù)的注冊和發(fā)現(xiàn),SpringCloud使用Spring Cloud Netflix Eureka實(shí)現(xiàn)注冊中心,當(dāng)然SpringCloud也可以使用ZooKeeper實(shí)現(xiàn),但一般我們不會這樣做。

服務(wù)網(wǎng)關(guān),Dubbo并沒有本身的實(shí)現(xiàn),只能通過其他第三方技術(shù)的整合,而SpringCloud有Zuul路由網(wǎng)關(guān),作為路由服務(wù)器,進(jìn)行消費(fèi)者的請求分發(fā),SpringCloud還支持?jǐn)嗦菲?與git完美集成分布式配置文件支持版本控制,事務(wù)總線實(shí)現(xiàn)配置文件的更新與服務(wù)自動裝配等等一系列的微服務(wù)架構(gòu)要素。

10、技術(shù)選型

目前國內(nèi)的分布式系統(tǒng)選型主要還是Dubbo畢竟國產(chǎn),而且國內(nèi)工程師的技術(shù)熟練程度高,并且Dubbo在其他維度上的缺陷可以由其他第三方框架進(jìn)行集成進(jìn)行彌補(bǔ)

而SpringCloud目前是國外比較流行,當(dāng)然我覺得國內(nèi)的市場也會慢慢的偏向SpringCloud,就連劉軍作為Dubbo重啟的負(fù)責(zé)人也發(fā)表過觀點(diǎn),Dubbo的發(fā)展方向是積極適應(yīng)SpringCloud生態(tài),并不是起沖突

11、Rest和RPC對比

其實(shí)如果仔細(xì)閱讀過微服務(wù)提出者馬丁福勒的論文的話可以發(fā)現(xiàn)其定義的服務(wù)間通信機(jī)制就是Http Rest

RPC最主要的缺陷就是服務(wù)提供方和調(diào)用方式之間依賴太強(qiáng),我們需要為每一個微服務(wù)進(jìn)行接口的定義,并通過持續(xù)繼承發(fā)布,需要嚴(yán)格的版本控制才不會出現(xiàn)服務(wù)提供和調(diào)用之間因?yàn)榘姹静煌a(chǎn)生的沖突

而REST是輕量級的接口,服務(wù)的提供和調(diào)用不存在代碼之間的耦合,只是通過一個約定進(jìn)行規(guī)范,但也有可能出現(xiàn)文檔和接口不一致而導(dǎo)致的服務(wù)集成問題,但可以通過swagger工具整合,是代碼和文檔一體化解決,所以REST在分布式環(huán)境下比RPC更加靈活

這也是為什么當(dāng)當(dāng)網(wǎng)的DubboX在對Dubbo的增強(qiáng)中增加了對REST的支持的原因

12、文檔質(zhì)量和社區(qū)活躍度

SpringCloud社區(qū)活躍度遠(yuǎn)高于Dubbo,畢竟由于梁飛團(tuán)隊(duì)的原因?qū)е翫ubbo停止更新迭代五年,而中小型公司無法承擔(dān)技術(shù)開發(fā)的成本導(dǎo)致Dubbo社區(qū)嚴(yán)重低落,而SpringCloud異軍突起,迅速占領(lǐng)了微服務(wù)的市場,背靠Spring混的風(fēng)生水起

Dubbo經(jīng)過多年的積累文檔相當(dāng)成熟,對于微服務(wù)的架構(gòu)體系各個公司也有穩(wěn)定的現(xiàn)狀

13、SpringBoot和SpringCloud

SpringBoot是Spring推出用于解決傳統(tǒng)框架配置文件冗余,裝配組件繁雜的基于Maven的解決方案,旨在快速搭建單個微服務(wù)

而SpringCloud專注于解決各個微服務(wù)之間的協(xié)調(diào)與配置,服務(wù)之間的通信,熔斷,負(fù)載均衡等,技術(shù)維度并相同,并且SpringCloud是依賴于SpringBoot的,而SpringBoot并不是依賴與SpringCloud,甚至還可以和Dubbo進(jìn)行優(yōu)秀的整合開發(fā)

總結(jié):

1、SpringBoot專注于快速方便的開發(fā)單個個體的微服務(wù)   

2、SpringCloud是關(guān)注全局的微服務(wù)協(xié)調(diào)整理治理框架,整合并管理各個微服務(wù),為各個微服務(wù)之間提供,配置管理,服務(wù)發(fā)現(xiàn),斷路器,路由,事件總線等集成服務(wù)

3、SpringBoot不依賴于SpringCloud,SpringCloud依賴于SpringBoot,屬于依賴關(guān)系

4、SpringBoot專注于快速,方便的開發(fā)單個的微服務(wù)個體,SpringCloud關(guān)注全局的服務(wù)治理框架

14、Eureka和ZooKeeper都可以提供服務(wù)注冊與發(fā)現(xiàn)的功能,請說說兩個的區(qū)別

1.ZooKeeper保證的是CP,Eureka保證的是AP

ZooKeeper在選舉期間注冊服務(wù)癱瘓,雖然服務(wù)最終會恢復(fù),但是選舉期間不可用的

Eureka各個節(jié)點(diǎn)是平等關(guān)系,只要有一臺Eureka就可以保證服務(wù)可用,而查詢到的數(shù)據(jù)并不是最新的

自我保護(hù)機(jī)制會導(dǎo)致:

Eureka不再從注冊列表移除因長時間沒收到心跳而應(yīng)該過期的服務(wù)

Eureka仍然能夠接受新服務(wù)的注冊和查詢請求,但是不會被同步到其他節(jié)點(diǎn)(高可用)

當(dāng)網(wǎng)絡(luò)穩(wěn)定時,當(dāng)前實(shí)例新的注冊信息會被同步到其他節(jié)點(diǎn)中(最終一致性)

Eureka可以很好的應(yīng)對因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況,而不會像ZooKeeper一樣使得整個注冊系統(tǒng)癱瘓

2.ZooKeeper有Leader和Follower角色,Eureka各個節(jié)點(diǎn)平等

3.ZooKeeper采用過半數(shù)存活原則,Eureka采用自我保護(hù)機(jī)制解決分區(qū)問題

4.Eureka本質(zhì)上是一個工程,而ZooKeeper只是一個進(jìn)程

15、微服務(wù)之間是如何獨(dú)立通訊的

微服務(wù)通信機(jī)制:

系統(tǒng)中的各個微服務(wù)可被獨(dú)立部署,各個微服務(wù)之間是松耦合的。每個微服務(wù)僅關(guān)注于完成一件任務(wù)并很好地完成該任務(wù)。

圍繞業(yè)務(wù)能力組織服務(wù)、自動化部署、智能端點(diǎn)、對語言及數(shù)據(jù)的去集中化控制。

將組件定義為可被獨(dú)立替換和升級的軟件單元。

以業(yè)務(wù)能力為出發(fā)點(diǎn)組織服務(wù)的策略。

倡導(dǎo)誰開發(fā),誰運(yùn)營的開發(fā)運(yùn)維一體化方法。

RESTful HTTP協(xié)議是微服務(wù)架構(gòu)中最常用的通訊機(jī)制。

每個微服務(wù)可以考慮選用最佳工具完成(如不同的編程語言)。

允許不同微服務(wù)采用不同的數(shù)據(jù)持久化技術(shù)。

微服務(wù)非常重視建立架構(gòu)及業(yè)務(wù)相關(guān)指標(biāo)的實(shí)時監(jiān)控和日志機(jī)制,必須考慮每個服務(wù)的失敗容錯機(jī)制。

注重快速更新,因此系統(tǒng)會隨時間不斷變化及演進(jìn)??商娲阅K化設(shè)計(jì)。

微服務(wù)通信方式:    

同步:RPC,REST等    

異步:消息隊(duì)列。要考慮消息可靠傳輸、高性能,以及編程模型的變化等。

消息隊(duì)列中間件如何選型:

1.協(xié)議:AMQP、STOMP、MQTT、私有協(xié)議等。

2.消息是否需要持久化。

3.吞吐量。

4.高可用支持,是否單點(diǎn)。

5.分布式擴(kuò)展能力。

6.消息堆積能力和重放能力。

7.開發(fā)便捷,易于維護(hù)。

8.社區(qū)成熟度。

RabbitMQ是一個實(shí)現(xiàn)了AMQP(高級消息隊(duì)列協(xié)議)協(xié)議的消息隊(duì)列中間件。RabbitMQ支持其中的最多一次和最少一次兩種。網(wǎng)易蜂巢平臺的服務(wù)架構(gòu),服務(wù)間通過RabbitMQ實(shí)現(xiàn)通信。

16、什么是服務(wù)熔斷?什么是服務(wù)降級

在復(fù)雜的分布式系統(tǒng)中,微服務(wù)之間的相互調(diào)用,有可能出現(xiàn)各種各樣的原因?qū)е路?wù)的阻塞,在高并發(fā)場景下,服務(wù)的阻塞意味著線程的阻塞,導(dǎo)致當(dāng)前線程不可用,服務(wù)器的線程全部阻塞,導(dǎo)致服務(wù)器崩潰,由于服務(wù)之間的調(diào)用關(guān)系是同步的,會對整個微服務(wù)系統(tǒng)造成服務(wù)雪崩,為了解決某個微服務(wù)的調(diào)用響應(yīng)時間過長或者不可用進(jìn)而占用越來越多的系統(tǒng)資源引起雪崩效應(yīng)就需要進(jìn)行服務(wù)熔斷和服務(wù)降級處理。

所謂的服務(wù)熔斷指的是某個服務(wù)故障或異常一起類似顯示世界中的“保險絲"當(dāng)某個異常條件被觸發(fā)就直接熔斷整個服務(wù),而不是一直等到此服務(wù)超時。

服務(wù)熔斷就是相當(dāng)于我們電閘的保險絲,一旦發(fā)生服務(wù)雪崩的,就會熔斷整個服務(wù),通過維護(hù)一個自己的線程池,當(dāng)線程達(dá)到閾值的時候就啟動服務(wù)降級,如果其他請求繼續(xù)訪問就直接返回fallback的默認(rèn)值。

17、微服務(wù)的優(yōu)缺點(diǎn)分別是什么?說下你在項(xiàng)目開發(fā)中碰到的坑

優(yōu)點(diǎn):        

每一個服務(wù)足夠內(nèi)聚,代碼容易理解

開發(fā)效率提高,一個服務(wù)只做一件事 

微服務(wù)能夠被小團(tuán)隊(duì)單獨(dú)開發(fā)        

微服務(wù)是松耦合的,是有功能意義的服務(wù)        

可以用不同的語言開發(fā),面向接口編程

易于與第三方集成        

微服務(wù)只是業(yè)務(wù)邏輯的代碼,不會和HTML,CSS或者其他界面組合           

開發(fā)中,兩種開發(fā)模式                

前后端分離                

全棧工程師        

可以靈活搭配,連接公共庫/連接獨(dú)立庫    

缺點(diǎn):       

分布式系統(tǒng)的負(fù)責(zé)性;多服務(wù)運(yùn)維難度,隨著服務(wù)的增加,運(yùn)維的壓力也在增大;系統(tǒng)部署依賴;服務(wù)間通信成本;數(shù)據(jù)一致性;系統(tǒng)集成測試;性能監(jiān)控.

18、你所知道的微服務(wù)技術(shù)棧有哪些?請列舉一二

多種技術(shù)的集合體

我們在討論一個分布式的微服務(wù)架構(gòu)的話,需要哪些維度

維度(SpringCloud)        

  1. 服務(wù)開發(fā)            SpringBoot            Spring            SpringMVC        服務(wù)配置與管理            Netfilx公司的Archaiusm,阿里的Diamond        服務(wù)注冊與發(fā)現(xiàn)            Eureka,ZooKeeper        服務(wù)調(diào)用            Rest,RPC,gRPC        服務(wù)熔斷器            Hystrix        服務(wù)負(fù)載均衡            Ribbon,Nginx        服務(wù)接口調(diào)用            Feign        消息隊(duì)列            Kafka,RabbitMq,ActiveMq        服務(wù)配置中心管理            SpringCloudConfing        服務(wù)路由(API網(wǎng)關(guān))            Zuul        事件消息總線            SpringCloud Bus 

 

  1. 參考文獻(xiàn):https://blog.csdn.net/moakun/article/details/82817757 

今天就分享這么多,如果覺得文章對你有一丟丟幫助,請點(diǎn)右下角【在看】,讓更多人看到該文章。 

 

責(zé)任編輯:龐桂玉 來源: JAVA高級架構(gòu)
相關(guān)推薦

2023-05-10 07:15:22

Nacos管理工具配置

2022-04-15 09:23:29

Kubernetes面試題

2024-06-04 14:52:28

2010-11-26 10:53:29

戴爾

2024-10-11 17:09:27

2024-02-26 15:35:44

2024-04-15 08:34:43

2024-04-28 08:23:18

2023-09-21 14:55:24

Web 開發(fā)TypeScript

2024-01-01 15:30:59

JavaScriptWeb 應(yīng)用程序開發(fā)

2018-03-06 15:30:47

Java面試題

2011-05-23 11:27:32

面試題面試java

2019-02-18 11:20:59

shell面試題命令

2019-05-15 16:45:13

SpringBoot面試題Java

2018-02-25 16:35:32

前端CSS面試題

2022-02-11 14:01:22

底層String字符串

2021-10-26 11:45:22

Vue面試前端

2023-02-04 18:24:10

SeataJava業(yè)務(wù)

2009-08-11 10:12:07

C#算法

2019-04-02 17:40:47

春招面試Python面試題
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號