论坛首页 Java企业应用论坛

Apache Mina 如何做负载均衡(讨论)

浏览 11039 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-06-14  
Apache Mina 如何做负载均衡,或是集群,
memcahce?
terracotta?
还是代理?
还是没有找到现成成熟的解决方案?
大家 是否有思路?
   发表时间:2013-06-16  
是不是可以更详细的描述下场景,比如:为什么要做负载均衡,负载均衡有没有业务方面的约束?
0 请登录后投票
   发表时间:2013-06-18  
用mina建的服务端,客户端做连接,服务器做了双机,但不知道mina如何做集群。能让A机死掉的时候,B机能正常工作,但mina又是socket,A与B机的IP又是不一样的。
0 请登录后投票
   发表时间:2013-06-18  
Load balance 估计不好做,  这种 tcp 长连接的一般是做 HA, 配置多个 ip 当其中一个检测到有问题时自动切换到另一个 standby server.
0 请登录后投票
   发表时间:2013-06-18  
musing84 写道
用mina建的服务端,客户端做连接,服务器做了双机,但不知道mina如何做集群。能让A机死掉的时候,B机能正常工作,但mina又是socket,A与B机的IP又是不一样的。


如果是要做双机的话,可以考虑A和B之间配置一个虚拟共享IP(使用VCS或者RoseHA可以实现)。这样当A挂掉时,共享IP切换到B,对客户端而言只与一个共享IP地址通信,但需要重新建TCP连接。

至于A和B的状态如何保持一致,需要业务层考虑。比如:A收到消息后,抄送给B;或者A和B使用同一个数据库(数据库的可靠性由数据库考虑)。

不清楚mina是否支持类似的功能,印象中没有看到相关的代码。希望对你有所帮助。
0 请登录后投票
   发表时间:2013-06-20  
我也一直在思索这个问题。 
要自己用NIO框架开发服务端,一般很多数据都在内存中处理,
集群需要解决内存中的数据如何共享。

用terracotta,做基于JVM的集群?  但是这货不是开源的,还是收费的,而且效率如何也不得而知?  有用过的人可以来现身说法。

memcahced ? 虽然有原子操作,但是在类似内存中复杂的,遍历集合,等等其他操作,估计就实现不了了。

所以恳请大神都出来,说说解决办法。
0 请登录后投票
   发表时间:2013-06-20  
Kanepan 写道
我也一直在思索这个问题。 
要自己用NIO框架开发服务端,一般很多数据都在内存中处理,
集群需要解决内存中的数据如何共享。

用terracotta,做基于JVM的集群?  但是这货不是开源的,还是收费的,而且效率如何也不得而知?  有用过的人可以来现身说法。

memcahced ? 虽然有原子操作,但是在类似内存中复杂的,遍历集合,等等其他操作,估计就实现不了了。

所以恳请大神都出来,说说解决办法。



不太明白你们认为的“负载均衡”是什么含义。在我看来,不管用terracotta还是业务层做消息抄送,都只能算HA,或者叫双机,算不上负载均衡吧。(除非是那种读写分离似的负载均衡。)

一般要做负载均衡,还是要根据一定的规则把消息分担到不同的主机去处理,比如,根据原IP、用户ID或者其他什么规则。毕竟负载均衡的前提还是单个主机出现性能或者吞吐量瓶颈了,需要多台主机来并行处理。这种情况下,多台主机的内存状态应该是不一样的。
0 请登录后投票
   发表时间:2013-06-21  
tsinan 写道
Kanepan 写道
我也一直在思索这个问题。 
要自己用NIO框架开发服务端,一般很多数据都在内存中处理,
集群需要解决内存中的数据如何共享。

用terracotta,做基于JVM的集群?  但是这货不是开源的,还是收费的,而且效率如何也不得而知?  有用过的人可以来现身说法。

memcahced ? 虽然有原子操作,但是在类似内存中复杂的,遍历集合,等等其他操作,估计就实现不了了。

所以恳请大神都出来,说说解决办法。



不太明白你们认为的“负载均衡”是什么含义。在我看来,不管用terracotta还是业务层做消息抄送,都只能算HA,或者叫双机,算不上负载均衡吧。(除非是那种读写分离似的负载均衡。)

一般要做负载均衡,还是要根据一定的规则把消息分担到不同的主机去处理,比如,根据原IP、用户ID或者其他什么规则。毕竟负载均衡的前提还是单个主机出现性能或者吞吐量瓶颈了,需要多台主机来并行处理。这种情况下,多台主机的内存状态应该是不一样的。



负载均衡,不是LVS 可以解决了吗?  LZ的意思应该就是要HA, HA的前提是要把共享内存解决了, 举个例子,几台WEB服务,比如SESSION放在memcached里,一台机器挂了,不影响用户session验证问题。
0 请登录后投票
   发表时间:2013-07-01  
Kanepan 写道
tsinan 写道
Kanepan 写道
我也一直在思索这个问题。 
要自己用NIO框架开发服务端,一般很多数据都在内存中处理,
集群需要解决内存中的数据如何共享。

用terracotta,做基于JVM的集群?  但是这货不是开源的,还是收费的,而且效率如何也不得而知?  有用过的人可以来现身说法。

memcahced ? 虽然有原子操作,但是在类似内存中复杂的,遍历集合,等等其他操作,估计就实现不了了。

所以恳请大神都出来,说说解决办法。



不太明白你们认为的“负载均衡”是什么含义。在我看来,不管用terracotta还是业务层做消息抄送,都只能算HA,或者叫双机,算不上负载均衡吧。(除非是那种读写分离似的负载均衡。)

一般要做负载均衡,还是要根据一定的规则把消息分担到不同的主机去处理,比如,根据原IP、用户ID或者其他什么规则。毕竟负载均衡的前提还是单个主机出现性能或者吞吐量瓶颈了,需要多台主机来并行处理。这种情况下,多台主机的内存状态应该是不一样的。



负载均衡,不是LVS 可以解决了吗?  LZ的意思应该就是要HA, HA的前提是要把共享内存解决了, 举个例子,几台WEB服务,比如SESSION放在memcached里,一台机器挂了,不影响用户session验证问题。


  其实我想要的问题比较简单,能解决当A机挂掉后,B机正常,原来连接A机的会主动连接到B上面来,正常工作。内存解决自然是最好,但因为是socket长连接,所以平常的内存我感觉可能不行,因为目标IP都不一样,就算SESSION存在,也不一定能正常工作。
   谢谢tsinan的指点
0 请登录后投票
   发表时间:2013-12-05  
能不能把 IoSession放到 memcached 中, 这样切换服务器就不会丢失链接了呢
0 请登录后投票
论坛首页 Java企业应用版

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