微服常見面試題

1、什么是微服務(wù)?

就目前而言,對于微服務(wù)業(yè)界并沒有一個(gè)統(tǒng)一的,標(biāo)準(zhǔn)的定義。

但通常而言,微服務(wù)架構(gòu)是一種架構(gòu)模式或者說是一種架構(gòu)風(fēng)格,它提倡將單一應(yīng)用程序劃分一組小的服務(wù),每個(gè)服務(wù)運(yùn)行在其獨(dú)立的自己的進(jìn)程中,服務(wù)之間相互協(xié)調(diào)、互相配合,為用戶提供最總價(jià)值。服務(wù)之間采用輕量級的通信機(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ī)制,對具體的一個(gè)服務(wù)而言,應(yīng)根據(jù)業(yè)務(wù)上下文,選擇合適的語言、工具對其進(jìn)行構(gòu)建,可以有一個(gè)非常輕量級的集中式管理來協(xié)調(diào)這些服務(wù),可以使用不同的語言來編寫服務(wù),也可以使用不同的數(shù)據(jù)存儲。


2、SpringCloud和Dubbo有哪些區(qū)別?


最大區(qū)別:SpringCloud拋棄了Dubbo的RPC通信,采用的是基于HTTP的REST方式。????總體來說,兩者各有優(yōu)勢。雖說后者服務(wù)調(diào)用的功能,但也避免了上面提到的原生RPC帶來的問題。而且REST相比RPC更為靈活,服務(wù)提供方和調(diào)用方的依賴只依靠一紙契約,不存在代碼級別的依賴,這在強(qiáng)調(diào)快速演化的微服務(wù)環(huán)境下,顯得更加合適。??? 品牌機(jī)與組裝機(jī)的區(qū)別:很明顯SpringCloud比dubbo的功能更強(qiáng)大,覆蓋面更廣,而且能夠與SpringFramework、SpringBoot、SpringData、SpringBatch等其他Spring項(xiàng)目完美融合,這些對于微服務(wù)至關(guān)重要。使用Dubbo構(gòu)建的微服務(wù)架構(gòu)就像組裝電腦、各環(huán)節(jié)我們選擇自由度高,但是最總可能會因?yàn)閮?nèi)存質(zhì)量而影響整體,但對于高手這也就不是問題。而SpringCloud就像品牌機(jī),在Spring Source的整合下,做了大量的兼容性測試,保證了機(jī)器擁有更高的穩(wěn)定性。??? 在面臨微服務(wù)基礎(chǔ)框架選型時(shí)Dubbo與SpringCloud只能二選一。

3、SpringBoot和SpringCloud,請你談?wù)剬λ麄兊睦斫猓?/p>

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

??? 2)、SpringCloud是關(guān)注全局的微服務(wù)協(xié)調(diào)、整理、治理的框架,它將SpringBoot開發(fā)的單體整合并管理起來。

??? 3)、SpringBoot可以離開SpringCloud獨(dú)立使用開發(fā)項(xiàng)目,但是SpringCloud離不開SpringBoot,屬于依賴關(guān)系。

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

????????熔斷機(jī)制是應(yīng)對雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制。當(dāng)扇出鏈路的某個(gè)微服務(wù)不可用或者響應(yīng)時(shí)間太長時(shí),會進(jìn)行服務(wù)降級,進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用,快速返回“錯(cuò)誤”的響應(yīng)信息。當(dāng)檢測到該節(jié)點(diǎn)微服務(wù)調(diào)用響應(yīng)正常后恢復(fù)調(diào)用鏈路。在SpringCloud框架里熔斷機(jī)制通過Hystrix實(shí)現(xiàn),Hystrix會監(jiān)控微服務(wù)間調(diào)用的狀況,當(dāng)失敗的調(diào)用到一定閾值,缺省是5秒內(nèi)調(diào)用20次,如果失敗,就會啟動熔斷機(jī)制。熔斷機(jī)制的注解是@HystrixCommand

????????服務(wù)降級,一般是從整體負(fù)荷考慮。就是當(dāng)某個(gè)服務(wù)熔斷之后,服務(wù)器將不再被調(diào)用,此時(shí)客戶端可以自己準(zhǔn)備一個(gè)本地的fallback回調(diào),返回一個(gè)缺省值。這樣做,雖然水平下降,但好歹可用,比直接掛掉強(qiáng)。

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

優(yōu)點(diǎn):1)、每個(gè)服務(wù)足夠內(nèi)聚,足夠小,代碼容易理解這樣能聚焦一個(gè)指定的業(yè)務(wù)功能或業(yè)務(wù)需求。

????????? 2)、開發(fā)簡單,開發(fā)效率提高,一個(gè)服務(wù)可能就是專一的只干一件事。

????????? 3)、微服務(wù)能夠被小團(tuán)隊(duì)開發(fā),這個(gè)團(tuán)隊(duì)可以是2到5個(gè)開發(fā)人員組成。

????????? 4)、微服務(wù)是松耦合的,是有功能意義的服務(wù),無論是在開發(fā)階段或部署階段都是獨(dú)立的。

????????? 5)、微服務(wù)能使用不同的語言開發(fā)。

????? ? ? 6)、易于第三方集成,微服務(wù)允許容易且靈活的方式集成自動部署,通過持續(xù)集成集成工具,如Jenkins、Hudson等。

????????? 7)、微服務(wù)易于被一個(gè)開發(fā)人員理解,修改和維護(hù),這樣小團(tuán)隊(duì)能夠更關(guān)注自己的工作成果。無需通過合作體現(xiàn)價(jià)值。

????????? 8)、微服務(wù)允許你融合最新技術(shù)。

????????? 9)、微服務(wù)知識業(yè)務(wù)邏輯代碼,不會和HTML和CSS其他界面組件混合。

??????? 10)、每個(gè)微服務(wù)都有自己的存儲能力,可以有自己的數(shù)據(jù)庫,也可以由統(tǒng)一的數(shù)據(jù)庫。

缺點(diǎn):1)、開發(fā)人員要處理分布式系統(tǒng)的復(fù)雜性。

????????? 2)、多服務(wù)運(yùn)維難度,隨著服務(wù)的增加,運(yùn)維的壓力也在增加。

????????? 3)、系統(tǒng)部署依賴。

????????? 4)、服務(wù)間通訊成本。

????????? 5)、數(shù)據(jù)一致性。

????????? 6)、系統(tǒng)集成測試。

????????? 7)、性能監(jiān)控.....

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

微服務(wù)的技術(shù)棧(各項(xiàng)功能的實(shí)現(xiàn)所使用的技術(shù))具體如下:


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

1)、Zookeeper保證了CP(C:一致性,P:分區(qū)容錯(cuò)性),Eureka保證了AP(A:高可用)

(1)、當(dāng)向注冊中心查詢服務(wù)列表時(shí),我們可以容忍注冊中心返回的是幾分鐘以前的信息,但不能容忍直接down掉不可用。也就是說,服務(wù)注冊功能對高可用性要求比較高,但zk會出現(xiàn)這樣一種情況,當(dāng)master節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)故障與其他節(jié)點(diǎn)失去聯(lián)系時(shí),剩余節(jié)點(diǎn)會重新選leader。問題在于,選取leader時(shí)間過長,30 ~ 120s,且選取期間zk集群都不可用,這樣就會導(dǎo)致選取期間注冊服務(wù)癱瘓。在云部署的環(huán)境下,因網(wǎng)絡(luò)問題使得zk集群失去master節(jié)點(diǎn)是較大概率會發(fā)生的事,雖然服務(wù)能夠恢復(fù),但是漫長的選取時(shí)間導(dǎo)致的注冊長期不可用是不能容忍的。

(2)、Eureka保證了可用性,Eureka各個(gè)節(jié)點(diǎn)是平等的,幾個(gè)節(jié)點(diǎn)掛掉不會影響正常節(jié)點(diǎn)的工作,剩余的節(jié)點(diǎn)仍然可以提供注冊和查詢服務(wù)。而Eureka的客戶端向某個(gè)Eureka注冊或發(fā)現(xiàn)是發(fā)生連接失敗,則會自動切換到其他節(jié)點(diǎn),只要有一臺Eureka還在,就能保證注冊服務(wù)可用,只是查到的信息可能不是最新的。除此之外,Eureka還有自我保護(hù)機(jī)制,如果在15分鐘內(nèi)超過85%的節(jié)點(diǎn)沒有正常的心跳,那么Eureka就認(rèn)為客戶端與注冊中心發(fā)生了網(wǎng)絡(luò)故障,此時(shí)會出現(xiàn)以下幾種情況:

①、Eureka不在從注冊列表中移除因?yàn)殚L時(shí)間沒有收到心跳而應(yīng)該過期的服務(wù)。

②、Eureka仍然能夠接受新服務(wù)的注冊和查詢請求,但是不會被同步到其他節(jié)點(diǎn)上(即保證當(dāng)前節(jié)點(diǎn)仍然可用)

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

因此,Eureka可以很好的應(yīng)對因網(wǎng)絡(luò)故障導(dǎo)致部分節(jié)點(diǎn)失去聯(lián)系的情況,而不會像Zookeeper那樣使整個(gè)微服務(wù)癱瘓。



//一個(gè)比較不錯(cuò)的對springcloud的理解

https://blog.csdn.net/qq_35906921/article/details/84032874

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容