论坛首页 Java企业应用论坛

看看mina和memcached的联姻(适合不同语言客户端,高并发?)

浏览 33305 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-07-31  
ahuaxuan 写道
bingobird 写道

最后那个性能非常关键,之前我们做过测试,cache型的存取1K的数据耗时在0.7ms,而且与数据包大小呈线性关系。楼主的0.2ms不知是在哪个场景下(请求答应报文大小?)

很显然,我这里出来的是并发之后的结果,并不是单次请求的结果,如果1ms内有5个请求都过来,每个请求实际的请求时间是1ms,那么也就是说1ms之后,5个请求都返回了,所以,平均下来一个请求就是0.2ms了


你说的cache型存取用的是什么cache,是local cache还是memcached之类内,而且你这个数据是怎么看出来的,单线程计算平均还是通过jprofile之类的内,如果是后者,那么你这个测试结果就是不准确的,jprofile在测试的时候速度会降低很多


0.7ms是采用memcache在多线程情况下的处理能力(pc),测试结果是通过简单地压力测试取平均值的做法。即每秒处理1400左右的请求(包长1k)。当报文长度为100字节,每秒处理数也会上升到1w。
因此我对ahuaxuan测试用例中的报文长度比较关心。如果0.2ms是基于100字节以上的报文交换,那还是不错的。
0 请登录后投票
   发表时间:2008-08-25  
我的理解是你想向外部提供一个统一的接口,但外部直接依赖memcached,如果可以改变外部依赖,你就不用在中间弄个server,而是把应用逻辑交给apps(可能你的app有很多,所以做一个server前端转发)。如果是这样的话,长连接体现在哪?你实现的这个server是长连接的?
不知道理解的对不对?
0 请登录后投票
   发表时间:2008-09-07  
楼主的方案真的不错

用memcached屏蔽语言的差异,用mina实现高速的资源传输---变相的完成了一个从多语言支持和底层传输的改装,确实很好

但是我最近也读过多次内存数据库,尤其是memcachedb(memcached 和 berkeley database结合体),是否是更佳方案?这个方案我没有去实施,仅仅拿来征求对比的建议
0 请登录后投票
   发表时间:2008-09-07  
client->minaserver->memcached
楼主的意思是:用minaserver封装成一个业务组件的server,专门用来做业务逻辑处理的一个各个app共用的业务组件?
0 请登录后投票
   发表时间:2008-09-07  
如果都是java应用的话,我觉得用nio的通道更高效,目前对nio的有效封装有EJOE,大伙儿如果有兴趣可以去看看!
0 请登录后投票
   发表时间:2008-11-20  
做个初步的了解还不错。
0 请登录后投票
   发表时间:2009-03-05  
ssnake 写道
memcached没有接触过,所以不是很明白楼主这种机制的用处何在。
不过这段时间做的一个项目里面遇到一个问题,大概的场景是这样的,由于客户端太多,因此我在服务端之前加了LVS来做负载均衡,但是这样就遇到了一个问题,客户端连到哪台服务器不是固定的,同时又有另外一个应用(同一个系统内的应用,但不是服务端)需要发消息给客户端,这个应用与各个服务端之间是通过MQ队列来通信的,每次它需要发消息给客户端,就发一个消息到队列里面,每个服务端都阻塞等待队列上消息的到达,因此应用发出来的消息被哪个服务端取到是随机的,但某个服务端取到消息之后,会先检查自己本机上的连接会话表,检查相应的客户端是否连接到本机,如果没有,就需要将消息转发给其他服务端。
最后实现的时候采用了Sun的Shoal来实现分布式的连接会话表,每次在本机的会话表插入记录的时候,会同时在Shoal维持的分布式缓存中插入相应的一条记录,当服务端在本机上的会话表中查不到相应的客户端时,会到Shoal维持的分布式缓存中去查找记录,若是找到记录,则将消息发给客户端当前连接到的那台服务端。

不知道大家有没有用过Shoal?我之所以用它,是因为它是Sun的Glassfish服务器的集群的实现基础,感觉应该性能不会太差,不过在网上貌似找不到测试评论,目前我自己也没有对Shoal的分布式缓存的性能做过测试。
刚搜了一下memcached的资料,感觉memcached也可以用在我上面的解决方案中用来替代Shoal。有没有什么资料对比过memcached和Shoal?

另外,对于我遇到的这个问题,我总感觉我这种解决方案不是太好,不知各位有没有遇到过相类似的场景,有没有什么更好的解决方案呢?




很久的老帖子了,刚才不小心翻到,忍不住要发言,虽然现在时过境迁,已经无效了。
你遇到的这种需求其实与网络底层协议是一致的,譬如局域网的广播机制。
这本质上是个寻址问题,在IP协议里就要解决。
方案如下:发送消息的应用主动推送到所有服务器,服务器接收到消息后比对自己的连接表,如果不存在对应客户则马上丢弃信息,有则响应一下。就这么简单。
0 请登录后投票
论坛首页 Java企业应用版

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