论坛首页 Java企业应用论坛

Venus: 简单、高性能、高并发 java开源remoting框架

浏览 33238 次
该帖已经被评为良好帖
作者 正文
   发表时间:2011-12-02  
异步回调这块东西有些意思,其他的东西没有亮点
0 请登录后投票
   发表时间:2011-12-02  
ITeye有一段时间没看到开源了,支持一把。
你说提供可选择性服务数据缓存,没明白什么意思,能说明一下吗?
我觉得有几点可以提高的地方。

应该提供压缩的功能,对于大数据的网络传输很有帮助。

对于无返回值调用,应该通通异步,没必要同步。对于有返回值也应该支持异步,把返回值放到Future里返回,由客户端控制什么时候等待取值。

在你的例子里没看到对象参数怎么传,估计是自动对象序列化了,应该支持自定义序列化,性能要求高的地方是无法忍受序列化的慢,另外以后对C#和ActionScript的通讯也会方便。

还有就是配置和annotation多了点,必须要用spring吗?
0 请登录后投票
   发表时间:2011-12-02  
现在如果出个新的框架,基本上大家更关注的是“在已有框架的情况下,这个新框架有什么新的特点?它能提供更便捷的服务吗?它和已有框架的比较如何?”,我相信如果这文章能回答这些问题,人气必然大增。
0 请登录后投票
   发表时间:2011-12-03  
spring其实可以完全不依赖的,主要考虑目前大部分人使用spring的情况

这个框架主要特定,在小数据量的情况下  性能非常高,目前系列化协议采用 json、bson,该框架提供了性能测试工具。


即将实现的:
提供类似ESB的 服务总线,基于该总线可以在上面路由你的服务包括不同的版本、不同参数等的路由,还可以写一些script提供全新的服务。

目前python 客户端、c/c++客户端都会投入研发




他暂时提供 TCP  自定义协议。


0 请登录后投票
   发表时间:2011-12-03  
关注两个问题
1、中间数据格式是怎么定义的
2、serialization性能怎么样
0 请登录后投票
   发表时间:2011-12-03  
@endpoint @service 呵呵,我也是这么做的

request -> service -> endpoint
0 请登录后投票
   发表时间:2011-12-03   最后修改:2011-12-05

[quote="kimmking"]关注两个问题 1、中间数据格式是怎么定义的 2、serialization性能怎么样[/quote]

1、中间数据格式? 指的是申明东西?

2、序列化 一个采用 fastjson,还有一个bson。性能可以从alibaba的fastjson的相关资料可以看 bson的性能更好。

整体性能大伙可以从下面的表格可以参阅一下:

 

测试环境

1、客户机硬件信息

IP=10.241.14.41  
cpu processor count: 8
model name    : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
cpu MHz         : 1596.000
cache size      : 4096 KB
memory 8G
硬盘 忽略
网络 1000M


2、服务端硬件信息

IP=10.241.14.40  
cpu processor count: 8
model name    : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
cpu MHz         : 1596.000
cache size      : 4096 KB
memory 8G
硬盘 忽略
网络 1000M


3、软件信息

     
JDK java version "1.6.0"
OpenJDK  Runtime Environment (build 1.6.0-b09)
OpenJDK 64-Bit Server VM (build 1.6.0-b09, mixed mode)
 
服务端框架:venus venus  1.2.0  
测试客户端工具 venus-benchmark 1.2.0

jvm参数:-server -Xmx2g -Xms2g -XX:PermSize=128m -Xss128k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC 

 

 

4、测试对象结构,采用json描述

Hello数据结构
{
  "hello":{
      "name":"name",
      "greeting":"这儿放测试的主要数据内容",
      "age":1,
      "cost":1.0,
      "map":{
         "name":"hello",
         "hello":"hello world!!",
         "date":"2011-11-30",
         "testing":0
      }
  }
}
 

测试场景:

客户端发送Hello对象到服务端,服务端返回该hello对象给客户端,进行下面不同数据量进行测试:

原hello对象

  • greeting为1K数据
  • greeting为10k数据
  • greeting为50k数据
  • greeting为100k数据

持续请求:1000,000次*

 

 

 

一:下面是以Json系列化方式进行测试

1、场景一、 greeting为20个字节

不同并发数的相关数据表格:

并发连接数 最小响应时间 最大时间 平均响应时间 TPS(秒) 总耗时  
100 0.158 ms 191.678 ms 0.786 ms 133958 7465 ms  
500 0.173 ms 364.411 ms 3.918 ms 130804 7645 ms  
10000 0.166 ms 2100.256 ms 103.756 ms 98116 10192 ms  


2、场景二、 greeting为1K数据

不同并发数的相关数据表格:

并发连接数 最小响应时间 最大时间 平均响应时间 TPS(秒) 总耗时(ms)  
100 0.249 ms 349.617 ms 1.239 ms 82617 12104 ms  
1000 0.305 ms 618.282 ms 12.906 ms 78431 12750 ms  
10000 0.263 ms 2434.592 ms 144.705 ms 65218 15333 ms  


3、场景三: greeting为10K数据

不同并发数的相关数据表格:

并发连接数 最小响应时间 最大时间 平均响应时间 TPS(秒) 总耗时(ms)  
100 1.492 ms 131.459 ms 9.242 ms 10823 92393 ms  
1000 1.595 ms 3991.638 ms 93.134 ms 10729 93199 ms  
10000 1.734 ms 6434.592 ms 1403.705 ms 9962 95199 ms  

4、场景三: greeting为100K数据 (由于采用Json系列化,在大数据传输下解析非常耗时,因此请求总数修改成10000次,也只做了10跟100并发的测试)

不同并发数的相关数据表格:

并发连接数 最小响应时间 最大时间 平均响应时间 TPS(秒) 总耗时(ms)  
10 17.753 ms 86.833 ms 23.447 ms 426 23456 ms  
100 21.189 ms 2561.557 ms 218.978 ms 465 21479 ms  

 

二 : 以 BSON序列化方式(未完待续)

0 请登录后投票
   发表时间:2011-12-03   最后修改:2011-12-03
zijan 写道
ITeye有一段时间没看到开源了,支持一把。
你说提供可选择性服务数据缓存,没明白什么意思,能说明一下吗?
我觉得有几点可以提高的地方。

应该提供压缩的功能,对于大数据的网络传输很有帮助。

对于无返回值调用,应该通通异步,没必要同步。对于有返回值也应该支持异步,把返回值放到Future里返回,由客户端控制什么时候等待取值。

在你的例子里没看到对象参数怎么传,估计是自动对象序列化了,应该支持自定义序列化,性能要求高的地方是无法忍受序列化的慢,另外以后对C#和ActionScript的通讯也会方便。

还有就是配置和annotation多了点,必须要用spring吗?


压缩未来可以考虑

异步需要返回值,我个人建议采用回调更加方便一点

序列化 目前采用3种,传递的对象参数需要遵循javabean规范。 一些jdk支持的数据结构也支持,比如 list、map等

1、json
2、bson
3、java对象序列化(不建议使用)
0 请登录后投票
   发表时间:2011-12-05  
只是盛大在使用 Spring的remote机能之一而已。

除此之外,SerialRemote机能还有其他,例如HTTPInvoke 同步 JMSInvoke 异步

SerialRemote本来就可以切换序列化机制,传输协议和通讯协议 都应该是可选的。
Spring 只是做了适配而已。

如果在形能上有要求,完全可以自己diy。
0 请登录后投票
   发表时间:2011-12-05  
moshalanye 写道
只是盛大在使用 Spring的remote机能之一而已。

除此之外,SerialRemote机能还有其他,例如HTTPInvoke 同步 JMSInvoke 异步

SerialRemote本来就可以切换序列化机制,传输协议和通讯协议 都应该是可选的。
Spring 只是做了适配而已。

如果在形能上有要求,完全可以自己diy。


Venus并没有 使用 spring的remoting 框架

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics