RPC

RPC是什麼

RPC(Remote Procedure Call,遠程過程調用)容許程序調用另一個地址空間的過程或者函數。

RPC的實現方式很多,可以基於常見的HTTP協議,也可以在TCP上層封裝自己的協議,由於HTTP報頭較爲冗長,性能較差,基於TCP協議的RPC可以建立長連接,速度和效率明顯。
在分佈式系統中,最重要的就是各個服務之間的RPC調用。

RPC從通信協議層面可以分爲:

  • 基於HTTP文本協議
  • 基於二進制協議

第一代RPC

  • CORBA
  • DCOM
  • Java RMI
    實現複雜,沒有統一標準

    第二代RPC

  • PHPRPC
  • HProse
  • Thrift
    實現了跨平臺和多語言

    第三代RPC

  • dubbo
  • gRPC
    偏重服務治理功能

服務發現與服務註冊

客戶端發現模式

客戶端從一個服務註冊服務表中查詢,客戶端利用負載均衡算法從多個服務實例中選擇出一個,然後發出請求。

服務端發現模式

客戶端通過向代理服務器提出請求,代理服務器通過負載均衡算法,查詢服務器列表,實現服務轉發。
服務發現關鍵的服務註冊表,服務註冊表提供管理請求api的功能,常用的:

  • Apache ZooKeeper
  • etcd
  • consul

ZooKeeper

工作模式

單點模式。有單點故障問題。
爲分佈式。在一臺機器運行多個Zookeeper實例,仍然有單點故障問題。
完全分佈式。多臺機器部署zk集羣,適合線上環境使用。

配置

tickTime=2000:客戶端與服務端維護心跳的時間間隔
dataDir:zk保存數據的目錄
clientPort:zk服務端口號
initLimit:zk服務器集羣中Follower服務器連接到Leader服務器最長能忍受的心跳時間間隔數
syncLimit:Leader與Follower之間發送數據,最長不能超過多少個tickTime
server.n=A:B:n是數字,代表是第幾臺服務器,A/B代表zk服務的ip地址

安裝

brew install zookeeper

啓動服務端

找到zk的安裝目錄,執行

./zkServer start-foreground

啓動客戶端

./zkCli

常用命令:

ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    delquota [-n|-b] path
    ls2 path [watch]
    setAcl path acl
    setquota -n|-b val path
    history 
    redo cmdno
    printwatches on|off
    delete path [version]
    sync path
    listquota path
    rmr path
    get path [watch]
    create [-s] [-e] path data acl
    addauth scheme auth
    quit 
    getAcl path
    close 
    connect host:port
[zk: localhost:2181(CONNECTED) 1] create /server "baidu.com" //創建節點
Created /server
[zk: localhost:2181(CONNECTED) 2] get /server //獲取節點
baidu.com
cZxid = 0x10
ctime = Wed May 29 13:30:31 CST 2019
mZxid = 0x10
mtime = Wed May 29 13:30:31 CST 2019
pZxid = 0x10
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章