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的主要内容,如果未能解决你的问题,请参考以下文章
区块链 | 智能合约Ethereum源代码- 以太坊RPC通信实例和原理代码分析(上)