1. Tomcat 集群能带来什么
1.1 提高服务的性能, 并发能力以及高可用性
一般一台机器部署一个 Tomcat, 因为部署多个有资源共享瓶颈 (比如内存网卡磁盘 I/O 等), 所以一般进行隔离
一台 TomcatHTTP 线程池是有限的, 根据机器性能, 那么两台很可能可承载的 HTTP 线程就是 2 倍
Ngix 下挂了多个 Tomcat, 当 Tomcat1 挂掉时, 可以把这个节点从 ngix 负载均衡 Tomcat 集群的配置中摘掉, ngix 还会达到可用的 Tomcat 服务器上, 并不影响我们提供的服务
1.2 提供项目架构的横向扩展能力
假设有一台服务器, 通过不断升级他的内存 CPU 加固态硬盘 etc, 这种属于纵向提高机器的配置来达到提高 Tmcat 所提供服务的性能, 随着硬件不断提高, 成本是指数级上升的
比如天猫平时访问量不太多, 到双十一时就可以通过 Tomcat 集群做到横向扩展, 只需要添加 Tomcat 节点即可 (根据实际数据和历史数据进行评估)
2. Tomcat 集群实现原理
通过 Nginx 负载均衡进行请求转发
3. 一, 二期架构对比
一期架构
"想当然" 的二期结构
问题:
session 登录信息存储及读取无法共享问题
服务器定时任务并发的问题
eg. 当订单没有付款, 超时时, 多个 Tomcat 会同时启动定时任务, 一起去读取 sql 然后判断订单, 对于逻辑过于复杂的业务就会造成线上数据错乱, 数据出现竞争关系, 难以排查出问题
...
所以并不是随意加 Tomcat 即可
解决方案
可采用 nginx ip hash policy(单纯解决登录问题)
优点: 可以不改变现有技术架构, 直接实现横向扩展 (省事)
根据请求的 ip, 对 ip 进行 hash 取模, hash 后分配到指定服务器
来源: http://www.jianshu.com/p/92fe842b654a