RPC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于RPC的主要内容,如果未能解决你的问题,请参考以下文章

C 代码,RPC 错误“RPC:无法编码参数”

区块链 | 智能合约Ethereum源代码- 以太坊RPC通信实例和原理代码分析(上)

使用java代码本地测试远程rpc接口

RPC介绍与代码实现

windows无法启动windows Audio 错误代码:1722RPC服务器不可用

每天一点源代码:rpc/dubbo