负载均衡架构和软件设计问题
一个比较实际的问题,部署到TOMCAT上的一个MIS系统,现在用户量增加,打算通过Apache前端做软负载均衡,可MIS系统中使用的session和自定义的数据缓存(ehcache)在多TOMCAT服务器中没想好怎么弄。这类高并发大用户量的MIS系统应该怎么架构和软件设计呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
不建议搞广播、all-to-all复制什么的。
可以把共享数据放在redis或memcached里面,而且不用自己造轮子。
轮子:
memcached-session-manager
tomcat-redis-session-manager
这种一般需要才去集群可分布式缓存来处理,比如memcached和redis。
把session信息和缓存都发在redis上,就不用怕应用机器多了。
session的问题比较好解决,负载均衡大部分能够做到session sticky,就是一个用户的请求会固定到一台服务器,这样的话session就不是问题了。
自定义的数据缓存,ehcache本身是支持集群同步的,可以到网上找相关的资料。
从架构方面看,使用redis类的分布式缓存更为合理,但涉及系统的改造比较多,量力而行吧。
我是把ehcache数据转到memcached去了。
分离数据操作和数据,即无状态处理和状态保存。tomcat的集群应该有这个功能,session及其attributes都会保存起来(例如,单机模式下setattribute是写入实例内存,集群模式下就是写入状态保存模块,这个不需要改代码),但是,用户数据,例如,你控制类里面的实例,数组,hashmap等不会保存,因此需要使用额外的共享内存来实现,redis就可以(注意:为了减小代码修改量,可以实现一个redis+hashmap的类,重写put remove等方法,再做使用类的更改;redis也支持主备模式)。另外,还要注意集群中定时器的处理,建议用quatz实现,它把定时器数据都保存在数据库当中,只要有一个实例存活,定时器功能就不会失效。
负载均衡功能主要考虑健康检查、负载策略和会话保持,根据需要选择开源的就行(注意负载均衡本身的单点问题)。