Rpc学习

RPC: Remote Procedure Call(远程过程调用)

* protocol:传输协议
* proxy:client代理,服务引用方调用方法通过代理发送远程消息
* codec:协议编解码压缩等
* transport:协议传输
* registry:注册中心,服务注册服务发现
* cluster:负载均衡,服务容错策略

、RPC:远程调用。通俗说,同一台服务器,两个应用部署到不同的端口号,A要调用B的方法(功能、或者叫服务),同样地,我们需要调取不同服务器上的代码,
需要网络通信,RPC就是提供一种类似调用本地服务一样调用远程服务。
注意:在RPC提供的服务中,本地调用时传入远程方法的参数在远程服务器被修改了,如果不return回来,本地的参数不会被修改。
eg : 调用远程服务器上的updateUser(user)方法,在servlet层中传入[ name = ‘张三’ ],然后在service中被修改为’李四’,如果不return,并让user重新指向返回的user,原来的User还是张三。

实现RPC需要解决的问题:

1. 要解决通讯的问题,主要是通过在client和service建立TCP连接,所有交换的数据都在该连接中传输。连接可以是按需连接,调用完就断掉,也可以是长连接,多个远程调用共享同一个连接。
2. 要解决寻址的问题,就是说,A服务器上的应用怎么告诉RPC框架,如何连接到B服务器(ip地址,端口号),方法名称。比如基于Web服务协议的RPC,就要提供一个endpoint URI,或者从UDDI找,如果是RMI调用,还需要提供一个RMI Registry来注册服务的地址。
3. 数据格式,方法的参数需要通过底层的网络协议如TCP传递到B服务器上,由于网络协议是二进制的,内存中的参数值会被序列化成二进制形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将二进制数据发送给B服务器;B服务器接收到参数后需要进行反序列化,然后调用方法,得到返回值。

名词解释:

* UDDI:Web服务的注册和发现机制,是一种目录服务,通过它对Web services进行注册和服务。小公司一般就是一个配置文件,固定配置提供服务的服务器ip,port,serviceName;但如果要提供给其它公司接口,则会专门有一个服务注册表,每次添加时都在上面注册就行了。

缺点:
单一 RPC 无法实现 push,即推送服务。理由是,RPC 是client 调用 server获取数据,是一个完整的过程,实现不了server调用client。

你可能感兴趣的:(rpc)