RPC分布式处理

RPC(远程过程调用)的应用

接触背景

因为工作上某项目的需要设计一种分布式处理耗时的运算,每个节点然后将运算结果返回给中心服务器,而最初未了解RPC这部分之前我的设计是在每一个RPC服务器上搭建一个webserver,然后部署运算的service在上面,用json的方式通讯,这样肯定是可以实现的,但是部署极其麻烦又让webserver大材小用还会增加其它脚本语言或者框架的依赖。

之前也是有听说RPC,我当初也只是以为是一种概念,且需要自己实现的一种远程过程调用,没想到发现有大量现成的库已经做好了包装,让你远程调用就像本地一样使用那么方便。

RPC介绍

RPC全称叫Remote Procedure Call,中文叫远程过程调用,它是一种通过网络从一台计算机向另一台远程计算机上所写的模块上请求服务,一般是函数调用形式,而不需要自己实现底层变量类型转换数据再传输等网络技术的协议。

优点

使用者无需关注各个服务器之间调用所需的网络协议部分(比如tcp分包重传、http的参数协议制定),可以把更多的精力花在业务功能逻辑上,特别适合应用在分布式服务器上。

缺点

安全性一直是RPC的弊病,因为此协议一般没有用于验证调用者机制,如果把它直接替代简单的CURD并暴露给外部用户使用可能会很快被黑客利用。所以一般应用在企业内网或者设定防火墙ACL或者由远程计算机自行判断IP。

RPC实例(Python)

各种不同的语言对此都有自己的不同解决方案。比如Unix下,C可以用SUNRPC,Java则可使用RMI来处理。
Python同样也提供了一个基于XMLRPC的解决方案,用法非常简单:
首先,就像在编写普通的程序那样子编写你的模块或函数。
接着使用xmlrpc.server模块运行XMLRPC服务器,并且设定绑定IP和Port,以及注册服务器暴露出去的函数。
最后,在客户端内使用xmlrpc.client连接到服务器,想要调用服务器的函数像在本地的函数一样直接调用注册过的函数名即可。

XMLRPC server code:

# -*- coding:utf-8 -*-
from xmlrpc.server import SimpleXMLRPCServer
from socketserver import ThreadingMixIn

class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):
    pass

def add(x, y):
    return x + y

if __name__ == ‘__main__‘:
    #rpc_server = SimpleXMLRPCServer((‘0.0.0.0‘, 8848)) #使用这个会让add函数始终只能同时处理一件事,必须等前一件事情做完才能接新任务
    rpc_server = ThreadXMLRPCServer((‘0.0.0.0‘, 8848)) #支持异步并行接受任务
    rpc_server.register_function(add, "add")
    rpc_server.serve_forever()

XML RPC client code:

# -*- coding:utf-8 -*-
import xmlrpc.client

if __name__ == ‘__main__‘:
    rpc_client = xmlrpc.client.ServerProxy("http://127.0.0.1:8848")
    print( rpc_client.add(3,4) )
    print( rpc_client.add("a+","b=c") )

首先启动Server端代码,再启动Client代码,即可得到输出的7、a+b=c结果,说明成功透过RPC远程调用add函数。

到此一个远程调用就完成了。感谢阅读,望能对读者有帮助。

时间: 2024-10-31 17:40:37

RPC分布式处理的相关文章

storm翻译(3)Distributed RPC(分布式远程调用)

原文地址:http://storm.apache.org/documentation/Distributed-RPC.html 分布式RPC的目的是在storm进行大量的实时计算时,能够并行的调用storm上的函数.Storm topology可以将函数参数作为输入Stream,并且将被调用方法产生的结果作为返回发送出去. 与其说DRPC是storm的一个特点,不如说它只是storm基本概念如steams,spouts,bolts和topologies的一种表达方式.DRPC可以独立于storm

深入RPC分布式原理

前面几节讲的都是单机 RPC 服务的模式,无论是多线程也好多进程也好,它们都只能算是单点的设计.现代企业的关键性 RPC 服务是绝不可以只使用单点部署的.本节我们要对 RPC 服务进行分布式化,使得服务可以容忍个别节点故障仍能继续对外提供服务. 客户端 当 RPC 服务部署在多个节点上时,客户端得到的是一个服务列表,有多个 IP 端口对.客户端的连接池可以随机地挑选任意的 RPC 服务节点进行连接. 每个服务节点应该有个权重值,当所有节点的权重值一样时,它们的流量分配就是均匀的.如果某个节点的相

HDinsight Storm概述

HDinsight Storm概述 什么是Storm? Apache Storm是一个分布式,容错,开放源码的计算系统,让你来处理数据的实时.Storm解决方案还可以提供有保证的处理的数据,与重试未成功处理的第一次数据的能力. 什么是Azure HDInsight Storm? HDInsightStorm被提供作为一个管理的集群集成到Azure环境,在那里它可以被用来作为一个更大的Azure溶液的一部分.例如,Storm可能会使用来自服务,如ServiceBus队列或事件中心,和使用网站或云服

AD域控制器所有使用的端口明细列表

AD域控制器所有使用的端口明细列表 :lol 端口 协议 应用程序协议 系统服务名称 n/a GRE GRE(IP 协议 47) 路由和远程访问 n/a ESP IPSec ESP(IP 协议 50) 路由和远程访问 n/a AH IPSec AH(IP 协议 51) 路由和远程访问 7 TCP Echo 简单 TCP/IP 服务 7 UDP Echo 简单 TCP/IP 服务 9 TCP Discard 简单 TCP/IP 服务 9 UDP Discard 简单 TCP/IP 服务 13 TC

Java 程序员必备的 15 个框架,前 3 个地位无可动摇!

Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天,栈长我给大家列举了一些通用的.必须掌握的框架,学会这些,20K+ 不是问题. 1.Spring 毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP 两大利器,大大简化了软件开发复杂性.并且,Spring 现在能与所有主流开发框架集成,可谓是一个万

Java程序员必备的15个框架,学会这些20K+ 不是问题

Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天,给大家列举了一些通用的.必须掌握的框架,学会这些,20K+ 不是问题. 1.Spring 毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP 两大利器,大大简化了软件开发复杂性.并且,Spring 现在能与所有主流开发框架集成,可谓是一个万能框架

说一下Dubbo 的工作原理?注册中心挂了可以继续通信吗?

面试题 说一下的 dubbo 的工作原理?注册中心挂了可以继续通信吗?说说一次 rpc 请求的流程? 面试官心理分析 MQ.ES.Redis.Dubbo,上来先问你一些思考性的问题.原理,比如 kafka 高可用架构原理.es 分布式架构原理.redis 线程模型原理.Dubbo 工作原理:之后就是生产环境里可能会碰到的一些问题,因为每种技术引入之后生产环境都可能会碰到一些问题:再来点综合的,就是系统设计,比如让你设计一个 MQ.设计一个搜索引擎.设计一个缓存.设计一个 rpc 框架等等. 那既

(转)史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

背景:因为自己的简历写了dubbo,面试时候经常被问到.实际自己对dubbo的认识只停留在使用阶段,所以有必要好好补充下基础的理论知识. https://zhuanlan.zhihu.com/p/45846108 想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一.Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉. 下面我为大家准备了一些 Dubbo 常见的的面试题,一些是我经常问别人的,一些是我过

dubbo学习(一)认识dubbo

一.发展背景 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是关键. 垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率.此时,用于加速前端页面开发的Web框架(MVC)是关键. 分布式服务架构 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求.此时