1.什么是RPC遠(yuǎn)程調(diào)用?
RPC 的全稱(chēng)是 Remote Procedure Call 是一種進(jìn)程間通信方式。它允許程序調(diào)用另一個(gè)地址空間(通常是共享網(wǎng)絡(luò)的另一臺(tái)機(jī)器上)的過(guò)程或函數(shù),而不用程序員顯式編碼這個(gè)遠(yuǎn)程調(diào)用的細(xì)節(jié)。即無(wú)論是調(diào)用本地接口/服務(wù)的還是遠(yuǎn)程的接口/服務(wù),本質(zhì)上編寫(xiě)的調(diào)用代碼基本相同。比如兩臺(tái)服務(wù)器A,B,一個(gè)應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)或者方法,由于不在一個(gè)內(nèi)存空間,不能直接調(diào)用,這時(shí)候需要通過(guò)就可以應(yīng)用RPC框架的實(shí)現(xiàn)來(lái)解決
2.什么是SOA?與SOAP區(qū)別是什么?
SOA是一種面向服務(wù)架構(gòu),是將相同業(yè)務(wù)邏輯抽取出來(lái)組成單獨(dú)服務(wù)。
SOAP是WebService面向服務(wù)協(xié)議,采用xml,因?yàn)楸容^中,現(xiàn)在不是特別流行。
3.什么是微服務(wù)架構(gòu)
微服務(wù)架構(gòu)師一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間互相
協(xié)調(diào)、互相配合沒(méi)用戶(hù)提供最終價(jià)值。每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中,服務(wù)與服務(wù)間采用輕量級(jí)的同學(xué)機(jī)制互相溝通(通暢采用Http+restful API),每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立的部署到生成環(huán)境、類(lèi)生存環(huán)境等。另外,應(yīng)盡量避免同一的、集中式服務(wù)管理機(jī)制。
4.微服務(wù)與SOA區(qū)別
SOA實(shí)現(xiàn)微服務(wù)架構(gòu)實(shí)現(xiàn)
企業(yè)級(jí),自頂向下開(kāi)展實(shí)施團(tuán)隊(duì)級(jí),自定向上開(kāi)展實(shí)施
服務(wù)由多個(gè)子系統(tǒng)組成一個(gè)系統(tǒng)被拆分成多個(gè)服務(wù)
集成式服務(wù)(esb、ws、soap)集成方式簡(jiǎn)單(http、rest、json)
5.RPC遠(yuǎn)程調(diào)用有哪些框架?
SpringCloud、Dubbo、Dubbox、Hessian、HttpClient、thrift等。
6.什么是SpringCloud
SpringCloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)的一些工具,包括配置管理、服務(wù)發(fā)現(xiàn)(Eureka)、斷路器、路由、微代理、事件總線、全局鎖、決策競(jìng)選、分布式會(huì)話等等。它運(yùn)行環(huán)境簡(jiǎn)單,可以在開(kāi)發(fā)人員的電腦上跑。另外說(shuō)明spring cloud是基于Springboot的,所以需要開(kāi)發(fā)中對(duì)Springboot有一定的了解,如果不了解的話可以看螞蟻課堂SpringBoot課程。
SpringCloud使用Eureka作為注冊(cè)中心,使用rest+ribbon或者feign,斷路器Hystrix、zuul接口網(wǎng)關(guān)等。
7.什么是Dubbo?
Duubbo是一個(gè)RPC遠(yuǎn)程調(diào)用框架,分布式服務(wù)治理框架
什么是Dubbo服務(wù)治理?
服務(wù)與服務(wù)之間會(huì)有很多個(gè)Url、依賴(lài)關(guān)系、負(fù)載均衡、容錯(cuò)、自動(dòng)注冊(cè)服務(wù)。
8.Dubbo有哪些協(xié)議?
默認(rèn)用的dubbo協(xié)議、Http、RMI、Hessian
9.Dubbo整個(gè)架構(gòu)流程
分為四大模塊
生產(chǎn)者、消費(fèi)者、注冊(cè)中心、監(jiān)控中心
生產(chǎn)者:提供服務(wù)
消費(fèi)者: 調(diào)用服務(wù)
注冊(cè)中心:注冊(cè)信息(redis、zk)
監(jiān)控中心:調(diào)用次數(shù)、關(guān)系依賴(lài)等。
首先生產(chǎn)者將服務(wù)注冊(cè)到注冊(cè)中心(zk),使用zk持久節(jié)點(diǎn)進(jìn)行存儲(chǔ),消費(fèi)訂閱zk節(jié)點(diǎn),一旦有節(jié)點(diǎn)變更,zk通過(guò)事件通知傳遞給消費(fèi)者,消費(fèi)可以調(diào)用生產(chǎn)者服務(wù)。
服務(wù)與服務(wù)之間進(jìn)行調(diào)用,都會(huì)在監(jiān)控中心中,存儲(chǔ)一個(gè)記錄。
10.Dubbox與Dubbo區(qū)別?
Dubox使用http協(xié)議+rest風(fēng)格傳入json或者xml格式進(jìn)行遠(yuǎn)程調(diào)用。
Dubbo使用Dubbo協(xié)議。
11.SpringCloud與Dubbo區(qū)別?
相同點(diǎn):
dubbo與springcloud都可以實(shí)現(xiàn)RPC遠(yuǎn)程調(diào)用。
dubbo與springcloud都可以使用分布式、微服務(wù)場(chǎng)景下。
區(qū)別:
dubbo有比較強(qiáng)的背景,在國(guó)內(nèi)有一定影響力。
dubbo使用zk或redis作為注冊(cè)中心
springcloud使用eureka作為注冊(cè)中心
dubbo支持多種協(xié)議,默認(rèn)使用dubbo協(xié)議。
Springcloud只能支持http協(xié)議。
Springcloud是一套完整的微服務(wù)解決方案。
Dubbo目前已經(jīng)停止更新,SpringCloud更新速度快。
12.什么是Zookeeper
Zookeeper是一個(gè)工具,可以實(shí)現(xiàn)集群中的分布式協(xié)調(diào)服務(wù)。
所謂的分布式協(xié)調(diào)服務(wù),就是在集群的節(jié)點(diǎn)中進(jìn)行可靠的消息傳遞,來(lái)協(xié)調(diào)集群的工作。
Zookeeper之所以能夠?qū)崿F(xiàn)分布式協(xié)調(diào)服務(wù),靠的就是它能夠保證分布式數(shù)據(jù)一致性。
所謂的分布式數(shù)據(jù)一致性,指的就是可以在集群中保證數(shù)據(jù)傳遞的一致性。
?Zookeeper能夠提供的分布式協(xié)調(diào)服務(wù)包括:數(shù)據(jù)發(fā)布訂閱、負(fù)載均衡、命名服務(wù)、分布式協(xié)調(diào)/通知、集群管理、分布式鎖、分布式隊(duì)列等功能
13.Zookeeper特點(diǎn)
Zookeeper工作在集群中,對(duì)集群提供分布式協(xié)調(diào)服務(wù),它提供的分布式協(xié)調(diào)服務(wù)具有如下的特點(diǎn):
順序一致性:從同一個(gè)客戶(hù)端發(fā)起的事務(wù)請(qǐng)求,最終將會(huì)嚴(yán)格按照其發(fā)起順序被應(yīng)用到zookeeper中
原子性:所有事物請(qǐng)求的處理結(jié)果在整個(gè)集群中所有機(jī)器上的應(yīng)用情況是一致的,即,要么整個(gè)集群中所有機(jī)器都成功應(yīng)用了某一事務(wù),要么都沒(méi)有應(yīng)用,一定不會(huì)出現(xiàn)集群中部分機(jī)器應(yīng)用了改事務(wù),另外一部分沒(méi)有應(yīng)用的情況。
單一視圖:無(wú)論客戶(hù)端連接的是哪個(gè)zookeeper服務(wù)器,其看到的服務(wù)端數(shù)據(jù)模型都是一致的。
可靠性:一旦服務(wù)端成功的應(yīng)用了一個(gè)事務(wù),并完成對(duì)客戶(hù)端的響應(yīng),那么該事務(wù)所引起的服務(wù)端狀態(tài)變更將會(huì)一直保留下來(lái),除非有另一個(gè)事務(wù)又對(duì)其進(jìn)行了改變。
實(shí)時(shí)性:zookeeper并不是一種強(qiáng)一致性,只能保證順序一致性和最終一致性,只能稱(chēng)為達(dá)到了偽實(shí)時(shí)性。
14.zookeeper的數(shù)據(jù)模型
zookeepei中可以保存數(shù)據(jù),正是利用zookeeper可以保存數(shù)據(jù)這一特點(diǎn),我們的集群通過(guò)在zookeeper里存取數(shù)據(jù)來(lái)進(jìn)行消息的傳遞。
zookeeper中保存數(shù)據(jù)的結(jié)構(gòu)非常類(lèi)似于文件系統(tǒng)。都是由節(jié)點(diǎn)組成的樹(shù)形結(jié)構(gòu)。不同的是文件系統(tǒng)是由文件夾和文件來(lái)組成的樹(shù),而zookeeper中是由ZNODE來(lái)組成的樹(shù)。
每一個(gè)ZNODE里都可以存放一段數(shù)據(jù),ZNODE下還可以掛載零個(gè)或多個(gè)子ZNODE節(jié)點(diǎn),從而組成一個(gè)樹(shù)形結(jié)構(gòu)。
15.Zookeeper應(yīng)用場(chǎng)景
數(shù)據(jù)發(fā)布訂閱
負(fù)載均衡
命名服務(wù)
分布式協(xié)調(diào)
集群管理
配置管理
分布式隊(duì)列
16.什么是分布式鎖
簡(jiǎn)單的理解就是:分布式鎖是一個(gè)在很多環(huán)境中非常有用的原語(yǔ),它是不同的系統(tǒng)或是同一個(gè)系統(tǒng)的不同主機(jī)之間互斥操作共享資源的有效方法。
17.Zookeeper實(shí)現(xiàn)分布式鎖
分布式鎖使用zk,在zk上創(chuàng)建一個(gè)臨時(shí)節(jié)點(diǎn),使用臨時(shí)節(jié)點(diǎn)作為鎖,因?yàn)楣?jié)點(diǎn)不允許重復(fù)。
如果能創(chuàng)建節(jié)點(diǎn)成功,生成訂單號(hào),如果創(chuàng)建節(jié)點(diǎn)失敗,就等待。臨時(shí)節(jié)點(diǎn)zk關(guān)閉,釋放鎖,其他節(jié)點(diǎn)就可以重新生成訂單號(hào)。
19.Zookeeper與 Redis實(shí)現(xiàn)分布式鎖的區(qū)別
基于緩存實(shí)現(xiàn)分布式鎖鎖沒(méi)有失效事件,容易死鎖非阻塞式
不可重入
基于Zookeeper實(shí)現(xiàn)分布式鎖
實(shí)現(xiàn)相對(duì)簡(jiǎn)單
可靠性高
性能較好
分布式情況下定時(shí)任務(wù)會(huì)出現(xiàn)哪些問(wèn)題?
分布式集群的情況下,怎么保證定時(shí)任務(wù)不被重復(fù)執(zhí)行
分布式定時(shí)任務(wù)解決方案
①使用zookeeper實(shí)現(xiàn)分布式鎖 缺點(diǎn)(需要?jiǎng)?chuàng)建臨時(shí)節(jié)點(diǎn)、和事件通知不易于擴(kuò)展)
②使用配置文件做一個(gè)開(kāi)關(guān)? 缺點(diǎn)發(fā)布后,需要重啟
③數(shù)據(jù)庫(kù)唯一約束,缺點(diǎn)效率低
④使用分布式任務(wù)調(diào)度平臺(tái)
? XXLJOB