SOA、微服務(wù)、RPC、分布式

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

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

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

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