云计算开发-RPC应用

RPC概念

             1. 概念

                   RPC是系统间的一种通信方式,就是从一台机器上通过参数传递的方式调用另一台机器上的一个函数或方法并得到返回的结果。

              2. 原因

                   无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯。由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用

RPC框架

  1. thrift,Finagle,dubbo,grpc,json-rpc等

RPC框架应该具备的特点

  1. 具有服务的分层设计,借鉴Future/Service/Filter概念
  2. 具有网络的分层设计,区分协议层、数据层、传输层、连接层
  3. 独立的可适配的codec层,可以灵活增加HTTP,Memcache,Redis,MySQL/JDBC,Thrift等协议的支持。
  4. 将多年各种远程调用的经验融入在实现中,如负载均衡,failover,多副本策略,开关降级等。
  5. 通用的远程调用实现,采用异步方式来减少业务服务的开销,并通过future分离远程调用与数据流程的关注。
  6. 具有状态查看及使用统计功能
  7. 具备通用的远程容错处理能力,如超时、重试、负载均衡、failover等

RPC调用流程

  1. 服务消费者(Client 客户端)通过本地调用的方式调用服务
  2. 客户端存根(Client Stub)接收到调用请求后负责将方法、入参等信息序列化(组装)成能够进行网络传输的消息体
  3. 客户端存根(Client Stub)找到远程的服务地址,并且将消息通过网络发送给服务端
  4. 服务端存根(Server Stub)收到消息后进行解码(反序列化操作)
  5. 服务端存根(Server Stub)根据解码结果调用本地的服务进行相关处理
  6. 服务端(Server)本地服务业务处理
  7. 处理结果返回给服务端存根(Server Stub)
  8. 服务端存根(Server Stub)序列化结果
  9. 服务端存根(Server Stub)将结果通过网络发送至消费方
  10. 客户端存根(Client Stub)接收到消息,并进行解码(反序列化)
  11. 服务消费方得到最终结果

Python3调用RPC简单应用

  1. [server端]
#] server.py

from xmlrpc.server import SimpleXMLRPCServer
def fun_add(a, b):
    totle = a + b
    return totle
if __name__ == '__main__':
    s = SimpleXMLRPCServer(('0.0.0.0', 8088))  # 开启xmlrpcserver
    s.register_function(fun_add)  # 注册函数fun_add
    print("server is online...")
    s.serve_forever()  # 开启循环等待

#] python server.py

server is online... [挂起,等待连接]
    1. [client端]
]# client.py

from xmlrpc.client import ServerProxy

s = ServerProxy("http://192.168.89.134:8088") #定义xmlrpc客户端

print(s.fun_add(2,3))

]# python client.py

5
  1. Python3调用RPC多线程访问

               1. 客户端不用更改,只需动用服务端即可实现多客户端访问调用

               2. server.py

from xmlrpc.server import SimpleXMLRPCServer
from socketserver import ThreadingMixIn

class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):
    pass

def fun_add(a, b):
    totle = a + b
    return totle

def fun_delf(a, b):
    result = a - b
    return result

if __name__ == '__main__':
    s = SimpleXMLRPCServer(('0.0.0.0', 8088))  # 开启xmlrpcserver
    s.register_function(fun_add, "add")  # 注册函数1
    s.register_function(fun_delf, "delf")  # 注册函数2
    print("server is online...")
    s.serve_forever()  # 开启循环等待

 

          3. client.py

from xmlrpc.server import SimpleXMLRPCServer

from xmlrpc.client import ServerProxy

s = ServerProxy("http://192.168.89.134:8088") #定义xmlrpc客户端

print(s.add(2,3))

print(s.delf(2,3))

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值