论坛首页 Java企业应用论坛

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

浏览 33173 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-07-22  
首先谢谢大家的回帖,该贴质量的提高正式得益于你们的回帖,下面我进一步阐述我的观点

codeutil 写道
已经有现成的jmemcached,也是基于mina:

http://www.thimbleware.com/projects/jmemcached


linzongkao 写道
已经有现成的GMemcached,是基于Grizzly:

http://code.google.com/p/gmemcached/

谢谢两位给出jmemcached和gmemcached的介绍连接,让我们开阔了眼界,但是我的想法不是完全再次实现一个memcached server,因为我觉得这样做意义不大,现有的c版本的memcached 的server已经是非常的优秀了。只不过memcached的server不能适合一些特殊场景,就是我文中提到的那些,所以我并不是实现了一个memcached server,我只是利用memcached的协议而已,这样做的好处是能利用memcached的丰富的周边(比如说现成的多语言客户端)。

cayson 写道
Grizzly 和 mina 感觉都是基于java NIO的网络框架,功能上有些重叠

是的,不要忘记还有我们国产的cindy,如果作者维护积极一点的话,我第一就选cindy

nickcen 写道
感觉就是用nio实现了一个memcache的java client吧。跟多语言一点关系都没有把。

不是,和client一点关系都没有,是server端的事情
0 请登录后投票
   发表时间:2008-07-22  
可以留个联系方式吗,有疑问请教,谢谢
0 请登录后投票
   发表时间:2008-07-22  
memcached没有接触过,所以不是很明白楼主这种机制的用处何在。
不过这段时间做的一个项目里面遇到一个问题,大概的场景是这样的,由于客户端太多,因此我在服务端之前加了LVS来做负载均衡,但是这样就遇到了一个问题,客户端连到哪台服务器不是固定的,同时又有另外一个应用(同一个系统内的应用,但不是服务端)需要发消息给客户端,这个应用与各个服务端之间是通过MQ队列来通信的,每次它需要发消息给客户端,就发一个消息到队列里面,每个服务端都阻塞等待队列上消息的到达,因此应用发出来的消息被哪个服务端取到是随机的,但某个服务端取到消息之后,会先检查自己本机上的连接会话表,检查相应的客户端是否连接到本机,如果没有,就需要将消息转发给其他服务端。
最后实现的时候采用了Sun的Shoal来实现分布式的连接会话表,每次在本机的会话表插入记录的时候,会同时在Shoal维持的分布式缓存中插入相应的一条记录,当服务端在本机上的会话表中查不到相应的客户端时,会到Shoal维持的分布式缓存中去查找记录,若是找到记录,则将消息发给客户端当前连接到的那台服务端。

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

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



0 请登录后投票
   发表时间:2008-07-22  
看你的需求,可以用的东西其实挺多
比如ICE应该也可以实现你这个需求,内部使用也不要钱,也很多客户端
不知道是不是对你需求的理解不够透彻
0 请登录后投票
   发表时间:2008-07-23  
思路不错,在socket上用memcached协议,同时依靠memcached提供的不同客户端,减轻了客户端的负担,但是不知道memcached协议的可靠性怎么样?
0 请登录后投票
   发表时间:2008-07-23  
dennis_zane 写道
nickcen 写道
感觉就是用nio实现了一个memcache的java client吧。跟多语言一点关系都没有把。

是吗?你认真看了吗?

楼主这个思路可以作为WS、REST的替代品,做内部应用(异构同构皆可)间的交互。


多语本来就是memcache自己就能做到的。需要mina掺和吗?

内部应用会有很多异构吗?而且不要把Cache太泛化了,这东西跟WS,REST不是一个概念,不要玩弄概念了。
0 请登录后投票
   发表时间:2008-07-23  
ahuaxuan 写道
首先谢谢大家的回帖,该贴质量的提高正式得益于你们的回帖,下面我进一步阐述我的观点

codeutil 写道
已经有现成的jmemcached,也是基于mina:

http://www.thimbleware.com/projects/jmemcached


linzongkao 写道
已经有现成的GMemcached,是基于Grizzly:

http://code.google.com/p/gmemcached/

谢谢两位给出jmemcached和gmemcached的介绍连接,让我们开阔了眼界,但是我的想法不是完全再次实现一个memcached server,因为我觉得这样做意义不大,现有的c版本的memcached 的server已经是非常的优秀了。只不过memcached的server不能适合一些特殊场景,就是我文中提到的那些,所以我并不是实现了一个memcached server,我只是利用memcached的协议而已,这样做的好处是能利用memcached的丰富的周边(比如说现成的多语言客户端)。

cayson 写道
Grizzly 和 mina 感觉都是基于java NIO的网络框架,功能上有些重叠

是的,不要忘记还有我们国产的cindy,如果作者维护积极一点的话,我第一就选cindy

nickcen 写道
感觉就是用nio实现了一个memcache的java client吧。跟多语言一点关系都没有把。

不是,和client一点关系都没有,是server端的事情


对的,是我看错了,这是服务器端,你用mina实现了一个能响应memcache get请求的server。你的这个server能比memcached的性能好?有report?
0 请登录后投票
   发表时间:2008-07-24  
memcached的java客户端好像可以设置连接池呀!这个连接池里的东西不就是长连接吗?
0 请登录后投票
   发表时间:2008-07-24  
nickcen 写道

对的,是我看错了,这是服务器端,你用mina实现了一个能响应memcache get请求的server。你的这个server能比memcached的性能好?有report?

如果你有兴趣,我当然愿意和你讨论下去,不过前提是你需要理解我在说什么,否则就讨论不到一块儿去了。
引用

首先谢谢大家的回帖,该贴质量的提高正式得益于你们的回帖,下面我进一步阐述我的观点

codeutil 写道
已经有现成的jmemcached,也是基于mina:

http://www.thimbleware.com/projects/jmemcached


linzongkao 写道
已经有现成的GMemcached,是基于Grizzly:

http://code.google.com/p/gmemcached/

谢谢两位给出jmemcached和gmemcached的介绍连接,让我们开阔了眼界,但是我的想法不是完全再次实现一个memcached server,因为我觉得这样做意义不大,现有的c版本的memcached 的server已经是非常的优秀了。只不过memcached的server不能适合一些特殊场景,就是我文中提到的那些,所以我并不是实现了一个 memcached server,我只是利用memcached的协议而已,这样做的好处是能利用memcached的丰富的周边(比如说现成的多语言客户端)。
从我上面这段回帖就已经可以看出,本文并不是要实现一个一摸一样的memcached server,我已经说的很清楚很明了,还要我怎么说。

javaeyename 写道
memcached的java客户端好像可以设置连接池呀!这个连接池里的东西不就是长连接吗?

这篇文章并没有说是开发客户端的东西,跟客户端没有直接联系。

0 请登录后投票
   发表时间:2008-07-24  
nickcen 写道
dennis_zane 写道
nickcen 写道
感觉就是用nio实现了一个memcache的java client吧。跟多语言一点关系都没有把。

是吗?你认真看了吗?

楼主这个思路可以作为WS、REST的替代品,做内部应用(异构同构皆可)间的交互。


多语本来就是memcache自己就能做到的。需要mina掺和吗?

内部应用会有很多异构吗?而且不要把Cache太泛化了,这东西跟WS,REST不是一个概念,不要玩弄概念了。


无语了,您想争论至少搞明白楼主在说什么?太无语了。人家根本不是在说cache,只是借memcached协议这个壳。
12 请登录后投票
论坛首页 Java企业应用版

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