RPC 服務
RPC,是一種遠程調用方式(Remote Procedure Call),經過RPC咱們能夠像調用本地方法同樣調用別的機器上的方法,用戶將無感服務器與服務器之間的通信。RPC在微服務當中起到至關大的做用,固然RPC不是微服務必須的一種方式,有別的方式也能夠實現這種遠程調用例如RESTful API就能夠實現遠程調用。若是有用過SOAP那麼你使用RPC將會以爲很相似,都是能夠直接調用別的機器上的方法。php
隨着業務的發展咱們的項目從簡單的單體結構逐漸的演化成微服務結構,咱們爲何要拆分紅微服務呢?那咱們來講說微服務和單體架構的優缺點。咱們看一下單體架構圖。java
單體架構
單體架構優勢
- 部署容易,如php寫的項目,只要一個文件夾複製到支持php的環境就能夠了,java只須要一個jar包
- 測試容易,咱們總體項目只要改了一個地方立刻就能夠測試得出結果
- 負載均衡就能夠解決,快速部署多個如出一轍的項目在不一樣的機器運行分流
單體架構的缺點
- 部署的問題,對於php來講這點還好,可是對於java的項目來講,咱們須要從新打包整個項目耗費的時間是很長的
- 代碼維護,因爲全部的代碼都寫在一個項目裏面,要想要修改某一個功能點那麼須要對項目的總體邏輯和設計有較深的理解,不然代碼耦合嚴重,致使維護難,特別對於新入職的員工來講這將是最容易出現問題的地方
- 開發效率低,隨着項目需求的不斷改變和新的功能新增,老舊的代碼又不敢隨便刪除,致使整個項目變得笨重,這將會增長你閱讀代碼的時間
- 擴展性,在高併發的狀況下,咱們每每不是整個項目的每個功能都處於高流量高請求的狀況下的,不少時候都是某一個功能模塊使用的人數比較多,在單體結構下咱們沒有辦法針對單個功能實現分佈式擴展,必須整個項目一塊兒部署
微服務架構
在2014年被提出,如今國內不少公司已經使用,微服務是一種架構設計,並非說什麼框架或者代替什麼。微服務作的事情是按照項目顆粒度進行服務的拆分,把模塊單獨拿出來作成每個單獨的小項目。微服務的主要特色有:每個功能模塊是一個小項目、獨立運行在不一樣進程或者機器上、不一樣功能能夠又不一樣的人員開發獨立開發不鬆耦合、獨立部署不須要依賴總體項目就能夠啓動單個服務、分佈式管理。每個服務只要作好本身的事情就行了。在設計微服務的時候還須要考慮到數據庫的問題,是全部微服務使用共同一個數據庫仍是每個服務單個數據庫數據庫
微服務優勢
- 拆分業務,把總體大項目分割成不一樣小項目運行在不一樣進程或者機器上實現數據隔離
- 技術棧,每一個服務能夠又不一樣的團隊或者開發者進行開發,外部調用人員不須要操心具體怎麼實現的,只須要相似調用本身方法同樣或者接口同樣按照服務提供者給出來的參數傳遞便可
- 獨立部署,每個服務獨立部署,部署一個服務不會影響總體項目,若是部署失敗最可能是這個服務的功能缺失,並不影響其餘功能的使用
- 按需部署,針對不一樣的需求能夠給不一樣的服務自由擴展服務器,根據服務的規模部署知足需求的實例
- 局部修改,當一個服務有新需求或者其餘修改,不須要修改總體項目只要管好本身的服務就行了
微服務缺點
- 運維,微服務因爲把業務拆分得細,有可能部署在不一樣機器上,所以對於運維人員的管理來講,這部分的成本會加大
- 接口調整,微服務之間經過接口進行通訊。若是修改某個微服務的API,可能全部使用了該接口的微服務都須要作調整;
- 重複勞動,不少服務可能都會使用到相同的功能。而這個功能並無達到分解爲一個微服務的程度,這個時候,可能各個服務都會開發這一功能,致使代碼重複。
- 分佈式,因爲會把不一樣服務部署在不一樣機器上,那麼對於這些服務的調用、容錯、網絡延遲、分佈式事務等等都是一個很大的挑戰,固然微服務不必定所有都是部署在不一樣服務器上
服務調用
如上圖所示,RPC就用於調用者與服務之間的通信,RPC協議可基於TCP、UDP或者HTTP實現,可是更推薦選擇TCP。服務器
例如調用者須要調用商品的服務就能夠經過RPC或者RESTful API來調用,那麼RPC調用和RESTful API二者之間的區別在哪呢?網絡
- TCP的支持保持鏈接,當調用服務的時候不須要每次都進行三次握手才實現。從性能和網絡消耗來講RPC都具有了很好的優點。
- RESTful API 基於HTTP的,也就是說每次調用服務都須要進行三次握手創建起通訊才能夠實現調用,當咱們的併發量高的時候這就會浪費不少帶寬資源
- 服務對外的話採用RESTful API會比RPC更具有優點,所以看本身團隊的服務是對內仍是對外
RPC調用過程
RPC最主要的做用就是用於服務調用
本文做爲RPC的使用場景開山篇,對於單體架構和微服務的進行了一個描述。這個就是RPC的一個使用場景,也是最經常使用的一個使用場景。你們只有瞭解好RPC是什麼使用在什麼場景才能更好的去使用。架構
Swoft給咱們提供了RPC的底層服務,咱們並不須要去關心底層通信細節和調用的過程。併發
Swoft經過定義接口,實現接口,啓動RPC Server 提供接口服務。咱們只須要簡單的寫好幾個類就能夠實現一個簡單RPC模塊。負載均衡