Restful、SOAP、RPC、SOA、微服务之间的区别
一、介紹Restful、SOAP、RPC、SOA以及微服務(wù)
1.1、什么是Restful?
? ? ? ?Restful是一種架構(gòu)設(shè)計(jì)風(fēng)格,提供了設(shè)計(jì)原則和約束條件,而不是架構(gòu),而滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 Restful架構(gòu)或服務(wù)。
? ? ? ?主要的設(shè)計(jì)原則:
(1)、資源與URI
(2)、統(tǒng)一資源接口(HTTP方法如GET,PUT和POST)
(3)、資源的表述
(4)、資源的鏈接
(5)、狀態(tài)的轉(zhuǎn)移
? ? ? ?總之,RESTful的核心就是后端將資源發(fā)布為URI,前端通過(guò)URI訪問(wèn)資源,并通過(guò)HTTP動(dòng)詞表示要對(duì)資源進(jìn)行的操作。
1.2、什么是SOAP?
? ? ? ?SOAP(簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議)是一種數(shù)據(jù)交換協(xié)議規(guī)范,是一種輕量的、簡(jiǎn)單的、基于XML的協(xié)議的規(guī)范。SOAP協(xié)議和HTTP協(xié)議一樣,都是底層的通信協(xié)議,只是請(qǐng)求包的格式不同而已,SOAP包是XML格式的。
? ? ? ?SOAP的消息是基于xml并封裝成了符合http協(xié)議,因此,它符合任何路由器、 防火墻或代理服務(wù)器的要求。
? ? ? ?SOAP可以使用任何語(yǔ)言來(lái)完成,只要發(fā)送正確的soap請(qǐng)求即可,基于soap的服務(wù)可以在任何平臺(tái)無(wú)需修改即可正常使用。
1.3、什么是RPC?
? ? ? ?RPC就是從一臺(tái)機(jī)器(客戶端)上通過(guò)參數(shù)傳遞的方式調(diào)用另一臺(tái)機(jī)器(服務(wù)器)上的一個(gè)函數(shù)或方法(可以統(tǒng)稱為服務(wù))并得到返回的結(jié)果。
? ? ? ?RPC 會(huì)隱藏底層的通訊細(xì)節(jié)(不需要直接處理Socket通訊或Http通訊)
? ? ? ?RPC 是一個(gè)請(qǐng)求響應(yīng)模型。客戶端發(fā)起請(qǐng)求,服務(wù)器返回響應(yīng)(類似于Http的工作方式)
? ? ? ?RPC 在使用形式上像調(diào)用本地函數(shù)(或方法)一樣去調(diào)用遠(yuǎn)程的函數(shù)(或方法)。
4種典型RPC遠(yuǎn)程調(diào)用框架:
(1)、RMI實(shí)現(xiàn):利用java.rmi包實(shí)現(xiàn),基于Java遠(yuǎn)程方法協(xié)議(Java Remote Method Protocol)和java的原生序列化。
(2)、Hessian:是一個(gè)輕量級(jí)的remoting onhttp工具,使用簡(jiǎn)單的方法提供了RMI的功能。 基于HTTP協(xié)議,采用二進(jìn)制編解碼。
(3)、thrift:是一種可伸縮的跨語(yǔ)言服務(wù)的軟件框架。thrift允許你定義一個(gè)描述文件,描述數(shù)據(jù)類型和服務(wù)接口。依據(jù)該文件,編譯器方便地生成RPC客戶端和服務(wù)器通信代碼。
(4)、dubbo:阿里的RPC框架。
(5)、SpringCloud:框架微服務(wù)全家桶。為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)的一些工具,包括配置管理、服務(wù)發(fā)現(xiàn)、斷路器、路由、微代理、事件總線、全局鎖、決策競(jìng)選、分布式會(huì)話等等。
? ? ? ?微服務(wù)在本質(zhì)上,就是rpc。rpc有基于tcp的,http的,mq的等等。spring cloud是基于spring boot的,spring boot 實(shí)現(xiàn)的是http協(xié)議的rpc,算是rpc的一個(gè)子集。
1.4、什么是SOA?
? ? ? ?SOA(Service-Oriented Architecture),中文全稱:面向服務(wù)的架構(gòu)。?
? ? ? ?通俗點(diǎn)來(lái)講,SOA提倡將不同應(yīng)用程序的業(yè)務(wù)功能封裝成“服務(wù)”并宿主起來(lái),通常以接口和契約的形式暴露并提供給外界應(yīng)用訪問(wèn)(通過(guò)交換消息),達(dá)到不同系統(tǒng)可重用的目的。
? ? ? ?SOA是一個(gè)組件模型,它能將不同的服務(wù)通過(guò)定義良好的接口和契約聯(lián)系起來(lái)。服務(wù)是SOA的基石。
二、微服務(wù)和SOA的區(qū)別
? ? ? ?微服務(wù)是SOA架構(gòu)演進(jìn)的結(jié)果。兩者說(shuō)到底都是對(duì)外提供接口的一種架構(gòu)設(shè)計(jì)方式,隨著互聯(lián)網(wǎng)的發(fā)展,復(fù)雜的平臺(tái)、業(yè)務(wù)的出現(xiàn),導(dǎo)致SOA架構(gòu)向更細(xì)粒度、更通過(guò)化程度發(fā)展,就成了所謂的微服務(wù)了。
? ? ? ?總之,微服務(wù)是SOA發(fā)展出來(lái)的產(chǎn)物,它是一種比較現(xiàn)代化的細(xì)粒度的SOA實(shí)現(xiàn)方式。
? ? ? ?SOA與微服務(wù)的區(qū)別在于如下幾個(gè)方面:
(1)、微服務(wù)相比于SOA更加精細(xì),微服務(wù)更多的以獨(dú)立的進(jìn)程的方式存在,互相之間并無(wú)影響;
(2)、微服務(wù)提供的接口方式更加通用化,例如HTTP RESTful方式,各種終端都可以調(diào)用,無(wú)關(guān)語(yǔ)言、平臺(tái)限制;
(3)、微服務(wù)更傾向于分布式去中心化的部署方式,在互聯(lián)網(wǎng)業(yè)務(wù)場(chǎng)景下更適合。
三、為什么要使用微服務(wù)?
? ? ? ?技術(shù)為業(yè)務(wù)而生,架構(gòu)也為業(yè)務(wù)而出現(xiàn),當(dāng)然SOA和微服務(wù)也是因?yàn)闃I(yè)務(wù)的發(fā)展而出現(xiàn)。出現(xiàn)SOA和微服務(wù)框架與業(yè)務(wù)的發(fā)展、平臺(tái)的壯大密不可分,下面借用dubbo的網(wǎng)站架構(gòu)發(fā)展圖和說(shuō)明:
(1)、單一應(yīng)用架構(gòu)
? ? ? ?當(dāng)網(wǎng)站流量很小時(shí),只需一個(gè)應(yīng)用,將所有功能都部署在一起,以減少部署節(jié)點(diǎn)和成本。
? ? ? ?此時(shí),用于簡(jiǎn)化增刪改查工作量的 數(shù)據(jù)訪問(wèn)框架(ORM) 是關(guān)鍵。
(2)、垂直應(yīng)用架構(gòu)
? ? ? ?當(dāng)訪問(wèn)量逐漸增大,單一應(yīng)用增加機(jī)器帶來(lái)的加速度越來(lái)越小,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用,以提升效率。
? ? ? ?此時(shí),用于加速前端頁(yè)面開(kāi)發(fā)的 Web框架(MVC) 是關(guān)鍵。
(3)、分布式服務(wù)架構(gòu)
? ? ? ?當(dāng)垂直應(yīng)用越來(lái)越多,應(yīng)用之間交互不可避免,將核心業(yè)務(wù)抽取出來(lái),作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求。
? ? ? ?此時(shí),用于提高業(yè)務(wù)復(fù)用及整合的 分布式服務(wù)框架(RPC) 是關(guān)鍵。
(4)、流動(dòng)計(jì)算架構(gòu)
? ? ? ?當(dāng)服務(wù)越來(lái)越多,容量的評(píng)估,小服務(wù)資源的浪費(fèi)等問(wèn)題逐漸顯現(xiàn),此時(shí)需增加一個(gè)調(diào)度中心基于訪問(wèn)壓力實(shí)時(shí)管理集群容量,提高集群利用率。
? ? ? ?此時(shí),用于提高機(jī)器利用率的資源調(diào)度和治理中心(SOA) 是關(guān)鍵。
???????平臺(tái)隨著業(yè)務(wù)的發(fā)展從 All in One 環(huán)境就可以滿足業(yè)務(wù)需求(以Java來(lái)說(shuō),可能只是一兩個(gè)war包就解決了),發(fā)展到需要拆分多個(gè)應(yīng)用,并且采用MVC的方式分離前后端,加快開(kāi)發(fā)效率;在發(fā)展到服務(wù)越來(lái)越多,不得不將一些核心或共用的服務(wù)拆分出來(lái),其實(shí)發(fā)展到此階段,如果服務(wù)拆分的足夠精細(xì),并且獨(dú)立運(yùn)行,我覺(jué)得就可以將之理解為一個(gè)微服務(wù)了。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的Restful、SOAP、RPC、SOA、微服务之间的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 肖仰华 | 知识图谱落地的基本原则与最
- 下一篇: 论文浅尝 | 基于图卷积网络的跨语言图谱