Zeromq 是基于zeromq、gevent和 msgpack开发的分布式RPC框架zerorpc-python。这个框架简单、易用。

1. 安装zeromq

1
2
3
4
5
6
yum -y install zeromq
yum install gcc gcc-c++ libuuid-devel python-uuid uuid
wget http://download.zeromq.org/zeromq-2.1.9.tar.gz
./configure
make
make install

2.安装gevent

1
pip install gevent

3.  安装zerorpc

1
pip install zerorpc

server的测试代码:

1
2
3
4
5
6
7
8
9
import zerorpc
import time
class HelloRPC(object):
    def hello(self, name):
        print   "this is %s  %s" %(name,time.strftime('%Y-%m-%d %H-%m-%S',time.localtime(time.time())))
        return "Hello, %s" %time.strftime('%Y-%m-%d %H-%m-%S',time.localtime(time.time()))
s = zerorpc.Server(HelloRPC())
s.bind("tcp://0.0.0.0:4242")
s.run()

client的测试代码


1
2
3
4
5
import zerorpc
import os,sys
= zerorpc.Client()
c.connect("tcp://127.0.0.1:4242")
print c.hello('www.ruifengyun.com')

也可以传送cmd的命令,然后return结果,这个有点像是 zeromq的req方法

客户端也可以独立的存在

1
zerorpc --client --connect tcp://127.0.0.1:4242 hello lllllllllllllllllllllllllll

客户端显示:

服务端显示:

现在看来,如果按照mq的性能对比的话,这个结果还是令人不太满意的,但这个是应用于rpc远程调用的场景内,外部调用的话一秒中可以可以发送并接受10次的调用,内部调用的话,可以每秒钟打到300次左右,但这个结果还是可以接受的,毕竟没有谁每时每刻都在用远端的函数的。。。。。。。

这个一个老外的测试数据:

1
2
3
4
xmlrpc client & server (single-threaded): 850 calls/sec
zerorpc client & server (single-threaded): 4500 calls/sec
xmlrpc client & server (multi-threaded): 1200 calls/sec
zerorpc client & server (multi-threaded): 11000 calls/sec

我很纳闷他是怎么测试出来的~

如果不需要return结果,只是类pub数据过去的话,是可以到600多,但是远达不到他们的数据。。。

很奇怪~

为了测试性能我把gevent引入了,测试的结果不稳定,以我对gevent协程框架的使用,他很少出这样的情况,问题很有可能是server的问题。。。

测试的结果:

完成的测试代码,以供大家学习测试:

server 测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Cooler:
    def add_man(self, sentence):
        return the result. """
        return sentence + ", man!"
    def add_42(self, n):
        result. """
        return n + 42
    def boat(self, sentence):
        because it's cooler. """
        return "I'm on a boat!"
import zerorpc
s = zerorpc.Server(Cooler())
s.bind("tcp://0.0.0.0:4242")
s.run()

client 测试代码:

1
2
3
4
5
6
$ zerorpc -j tcp://:4242 add_42 1
43
$ zerorpc tcp://:4242 add_man 'I own a mint-condition Volkswagen Golf'
"I own a mint-condition Volkswagen Golf, man!"
$ zerorpc tcp://:4242 boat 'I own a mint-condition Volkswagen Golf, man!'
"I'm on a boat!"

zerorpc 官方推荐的高可用的方法是用haproxy实现的

1
2
3
4
5
6
7
8
haproxy.cfg的配置
$cat haproxy.cfg
listen zerorpc 0.0.0.0:1111
    mode tcp
    server backend_a localhost:2222 check
    server backend_b localhost:3333 check
检测语法
$ haproxy -f haproxy.cfg

可以进行语句的超时处理

本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1254000,如需转载请自行联系原作者

基于zeromq的高性能分布式RPC框架Zerorpc 性能测试相关推荐

  1. commonrpc 1.0 发布,高性能分布式 RPC 框架

    还在羡慕BAT,京东等公司的大流量的架构吗?让你的java系统引用解耦,互相独立,commonrpc 就可以办到.commonrpc 1.1版本 在commonrpc 1.0 支持tcp 协议基础上, ...

  2. voyage java_GitHub - yezilong9/voyage: 采用Java实现的基于netty轻量的高性能分布式RPC服务框架...

    Voyage Overview 采用Java实现的基于netty轻量的高性能分布式RPC服务框架.实现了RPC的基本功能,开发者也可以自定义扩展,简单,易用,高效. Features 服务端支持注解配 ...

  3. 还发愁项目经验吗?基于Netty实现分布式RPC框架[附完整代码]

    写给大家的话 最近我收到很多读者的来信,对如何学习分布式.如何进行项目实践和提高编程能力,存在很多疑问. 分布式那么难,怎么学?为什么看了那么多书还是掌握不了? 开源的框架比如Dubbo代码太多了,完 ...

  4. dubbo-快速入门-分布式RPC框架Apache Dubbo

    文章目录 分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 1.1 单体架构 1.2 垂直架构 1.3 SOA架构 1.4 微服务架构 2. Apache Dubbo概述 2.1 D ...

  5. 一个轻量级分布式RPC框架--NettyRpc

    1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...

  6. 分布式RPC框架Apache Dubbo

    分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 软件架构的发展经历了由单体架构.垂直架构.SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构. 1.1 单体架构 1. ...

  7. 分布式RPC框架dubbo、motan、rpcx、gRPC、thrift简介与性能比较

    分布式RPC框架性能大比拼 dubbo.motan.rpcx.gRPC.thrift的性能比较  Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现 ...

  8. 轻量级分布式 RPC 框架

    RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. RPC 可基于 HTTP 或 TCP 协议,Web Servi ...

  9. python分布式框架_高性能分布式执行框架——Ray

    Ray是UC Berkeley RISELab新推出的高性能分布式执行框架,它使用了和传统分布式计算系统不一样的架构和对分布式计算的抽象方式,具有比Spark更优异的计算性能. Ray目前还处于实验室 ...

最新文章

  1. 图像处理和模式识别等技术的快速发展大大地推动了机器视觉的发展
  2. ArcGIS Desktop 10.1安装教程
  3. 织梦文章主表关联栏目查询 生成静态url语句
  4. Linux cJSON库的使用、编译为cJSON动态库
  5. 提取某一个镇的行政边界_关于获取某个省份下面的 镇的 行政区划编码。
  6. vscode比较整个文件夹_vscode开发ROS1(5)-ROS工程目录结构
  7. Pandas将列表(List)转换为数据框(Dataframe)
  8. thymeleaf引用html_SpringBoot+Thymeleaf实现html文件引入(类似include功能)_html/css_WEB-ITnose...
  9. 线段树(多维+双成段更新) UVA 11992 Fast Matrix Operations
  10. 初始----python数字图像处理--:环境安装与配置
  11. 牛比的表格处理模块tablib
  12. 【转】javascript Object使用Array的方法
  13. [完美解决,亲测有效] 无法访问你试图使用的功能所在的网络位置--软件安装一半,退出后重新安装其他软件一直弹出某个安装程序的问题
  14. 关于判断单峰数组的几种方法
  15. H5标签 marquee 滚动字幕
  16. 抓住暴涨点,通达信洗盘回调介入指标公式图解
  17. 爬点今日头条街拍美女。。。
  18. 数据结构 队列顺序储存 医院叫号系统
  19. html5 骰子滚动,CSS3画一个滚动的骰子
  20. Web测试中定位bug方法

热门文章

  1. Codeforces 1167E 尺取法
  2. Nodejs windows的安装
  3. 丹佛机场行李系统Postmortem
  4. 在JavaScript中使用json.js:Ajax项目之POST请求(异步)
  5. 软件设计中架构和框架的区别
  6. 小熊的人生回忆(八)
  7. JAVA8新特性Optional和Stream和Localdate用法
  8. Java数学工具类MathUtil
  9. python代码去马赛克_十行python代码教你如何去除万恶的,如s一样的马赛克
  10. mysql分布式数据库架构_MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程...