1.什么是RPC遠(yuǎn)程調(diào)用?
RPC 的全稱是 Remote Procedure Call 是一種進(jìn)程間通信方式椅贱。它允許程序調(diào)用另一個(gè)地址空間(通常是共享網(wǎng)絡(luò)的另一臺機(jī)器上)的過程或函數(shù)懂算,而不用程序員顯式編碼這個(gè)遠(yuǎn)程調(diào)用的細(xì)節(jié)。即無論是調(diào)用本地接口/服務(wù)的還是遠(yuǎn)程的接口/服務(wù)庇麦,本質(zhì)上編寫的調(diào)用代碼基本相同计技。比如兩臺服務(wù)器A,B山橄,一個(gè)應(yīng)用部署在A服務(wù)器上垮媒,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)或者方法,由于不在一個(gè)內(nèi)存空間航棱,不能直接調(diào)用睡雇,這時(shí)候需要通過就可以應(yīng)用RPC框架的實(shí)現(xiàn)來解決
2.什么是SOA?與SOAP區(qū)別是什么饮醇?
SOA是一種面向服務(wù)架構(gòu)它抱,是將相同業(yè)務(wù)邏輯抽取出來組成單獨(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)歌径、互相配合沒用戶提供最終價(jià)值。每個(gè)服務(wù)運(yùn)行在其獨(dú)立的進(jìn)程中亲茅,服務(wù)與服務(wù)間采用輕量級的同學(xué)機(jī)制互相溝通(通暢采用Http+restful API)回铛,每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立的部署到生成環(huán)境克锣、類生存環(huán)境等茵肃。另外,應(yīng)盡量避免同一的娶耍、集中式服務(wù)管理機(jī)制免姿。
4.微服務(wù)與SOA區(qū)別
SOA實(shí)現(xiàn)微服務(wù)架構(gòu)實(shí)現(xiàn)
企業(yè)級,自頂向下開展實(shí)施團(tuán)隊(duì)級榕酒,自定向上開展實(shí)施
服務(wù)由多個(gè)子系統(tǒng)組成一個(gè)系統(tǒng)被拆分成多個(gè)服務(wù)
集成式服務(wù)(esb胚膊、ws、soap)集成方式簡單(http想鹰、rest紊婉、json)
5.RPC遠(yuǎn)程調(diào)用有哪些框架?
SpringCloud辑舷、Dubbo喻犁、Dubbox、Hessian何缓、HttpClient肢础、thrift等。
6.什么是SpringCloud
SpringCloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)的一些工具碌廓,包括配置管理传轰、服務(wù)發(fā)現(xiàn)(Eureka)、斷路器谷婆、路由慨蛙、微代理、事件總線纪挎、全局鎖期贫、決策競選、分布式會話等等异袄。它運(yùn)行環(huán)境簡單通砍,可以在開發(fā)人員的電腦上跑。另外說明spring cloud是基于Springboot的烤蜕,所以需要開發(fā)中對Springboot有一定的了解封孙,如果不了解的話可以看螞蟻課堂SpringBoot課程垢揩。
SpringCloud使用Eureka作為注冊中心,使用rest+ribbon或者feign敛瓷,斷路器Hystrix、zuul接口網(wǎng)關(guān)等斑匪。
7.什么是Dubbo呐籽?
Duubbo是一個(gè)RPC遠(yuǎn)程調(diào)用框架,分布式服務(wù)治理框架
什么是Dubbo服務(wù)治理蚀瘸?
服務(wù)與服務(wù)之間會有很多個(gè)Url狡蝶、依賴關(guān)系、負(fù)載均衡贮勃、容錯(cuò)贪惹、自動注冊服務(wù)。
8.Dubbo有哪些協(xié)議寂嘉?
默認(rèn)用的dubbo協(xié)議奏瞬、Http、RMI泉孩、Hessian
9.Dubbo整個(gè)架構(gòu)流程
分為四大模塊
生產(chǎn)者硼端、消費(fèi)者、注冊中心寓搬、監(jiān)控中心
生產(chǎn)者:提供服務(wù)
消費(fèi)者: 調(diào)用服務(wù)
注冊中心:注冊信息(redis珍昨、zk)
監(jiān)控中心:調(diào)用次數(shù)、關(guān)系依賴等句喷。
首先生產(chǎn)者將服務(wù)注冊到注冊中心(zk)镣典,使用zk持久節(jié)點(diǎn)進(jìn)行存儲,消費(fèi)訂閱zk節(jié)點(diǎn)唾琼,一旦有節(jié)點(diǎn)變更兄春,zk通過事件通知傳遞給消費(fèi)者,消費(fèi)可以調(diào)用生產(chǎn)者服務(wù)父叙。
服務(wù)與服務(wù)之間進(jìn)行調(diào)用神郊,都會在監(jiān)控中心中,存儲一個(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ù)場景下蒸辆。
區(qū)別:
dubbo有比較強(qiáng)的背景,在國內(nèi)有一定影響力征炼。
dubbo使用zk或redis作為注冊中心
springcloud使用eureka作為注冊中心
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)行可靠的消息傳遞魄懂,來協(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工作在集群中哀蘑,對集群提供分布式協(xié)調(diào)服務(wù),它提供的分布式協(xié)調(diào)服務(wù)具有如下的特點(diǎn):
順序一致性:從同一個(gè)客戶端發(fā)起的事務(wù)請求葵第,最終將會嚴(yán)格按照其發(fā)起順序被應(yīng)用到zookeeper中
原子性:所有事物請求的處理結(jié)果在整個(gè)集群中所有機(jī)器上的應(yīng)用情況是一致的绘迁,即,要么整個(gè)集群中所有機(jī)器都成功應(yīng)用了某一事務(wù)卒密,要么都沒有應(yīng)用缀台,一定不會出現(xiàn)集群中部分機(jī)器應(yīng)用了改事務(wù),另外一部分沒有應(yīng)用的情況哮奇。
單一視圖:無論客戶端連接的是哪個(gè)zookeeper服務(wù)器膛腐,其看到的服務(wù)端數(shù)據(jù)模型都是一致的。
可靠性:一旦服務(wù)端成功的應(yīng)用了一個(gè)事務(wù)鼎俘,并完成對客戶端的響應(yīng)哲身,那么該事務(wù)所引起的服務(wù)端狀態(tài)變更將會一直保留下來,除非有另一個(gè)事務(wù)又對其進(jìn)行了改變贸伐。
實(shí)時(shí)性:zookeeper并不是一種強(qiáng)一致性勘天,只能保證順序一致性和最終一致性,只能稱為達(dá)到了偽實(shí)時(shí)性。
14.zookeeper的數(shù)據(jù)模型
zookeepei中可以保存數(shù)據(jù)脯丝,正是利用zookeeper可以保存數(shù)據(jù)這一特點(diǎn)商膊,我們的集群通過在zookeeper里存取數(shù)據(jù)來進(jìn)行消息的傳遞。
zookeeper中保存數(shù)據(jù)的結(jié)構(gòu)非常類似于文件系統(tǒng)宠进。都是由節(jié)點(diǎn)組成的樹形結(jié)構(gòu)晕拆。不同的是文件系統(tǒng)是由文件夾和文件來組成的樹,而zookeeper中是由ZNODE來組成的樹材蹬。
每一個(gè)ZNODE里都可以存放一段數(shù)據(jù)潦匈,ZNODE下還可以掛載零個(gè)或多個(gè)子ZNODE節(jié)點(diǎn),從而組成一個(gè)樹形結(jié)構(gòu)赚导。
15.Zookeeper應(yīng)用場景
數(shù)據(jù)發(fā)布訂閱
負(fù)載均衡
命名服務(wù)
分布式協(xié)調(diào)
集群管理
配置管理
分布式隊(duì)列
16.什么是分布式鎖
簡單的理解就是:分布式鎖是一個(gè)在很多環(huán)境中非常有用的原語,它是不同的系統(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)成功,生成訂單號裕膀,如果創(chuàng)建節(jié)點(diǎn)失敗员串,就等待。臨時(shí)節(jié)點(diǎn)zk關(guān)閉昼扛,釋放鎖寸齐,其他節(jié)點(diǎn)就可以重新生成訂單號。
19.Zookeeper與 Redis實(shí)現(xiàn)分布式鎖的區(qū)別
基于緩存實(shí)現(xiàn)分布式鎖鎖沒有失效事件抄谐,容易死鎖非阻塞式
不可重入
基于Zookeeper實(shí)現(xiàn)分布式鎖
實(shí)現(xiàn)相對簡單
可靠性高
性能較好
分布式情況下定時(shí)任務(wù)會出現(xiàn)哪些問題渺鹦?
分布式集群的情況下,怎么保證定時(shí)任務(wù)不被重復(fù)執(zhí)行
分布式定時(shí)任務(wù)解決方案
①使用zookeeper實(shí)現(xiàn)分布式鎖 缺點(diǎn)(需要創(chuàng)建臨時(shí)節(jié)點(diǎn)蛹含、和事件通知不易于擴(kuò)展)
②使用配置文件做一個(gè)開關(guān)? 缺點(diǎn)發(fā)布后毅厚,需要重啟
③數(shù)據(jù)庫唯一約束,缺點(diǎn)效率低
④使用分布式任務(wù)調(diào)度平臺
? XXLJOB