1. 几点概念
1)集群:是一组独立的计算机系统构成一个松耦合的多处理器系统,他们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。
2) 会话亲和:表示来自同一会话的所有请求都由相同的 Tomcat 实例来处理,这种情况下,如果 Tomcat 实例或者所执行的服务器机器失效,也会丧失 Servlet 的会话数据。即使在集群系统中执行更多的 Tomcat 实例,也永远不会复制会话数据。这样是提高集群性能的一种方案,但不具备有容错能力了。
3)会话复制:当一个 Tomcat 实例宕掉时,由于至少还有另一个 Tomcat 实例保有一份会话状态数据,因而数据不会丧失。Tomcat 中的集群原理是通过组播的方式进行节点的查找并使用 TCP 连接进行会话的复制。对每个请求的处理,Tomcat 都会进行会话复制,复制后的会话将会慢慢变得庞大。使用会话复制的,性能会有所降低。
2. 需要解决的问题
1)单点故障: 实现多应用服务器之前的 session 共享 -> 一台服务器崩溃,另外一台服务器可以继续支持
2)应用服务器压力分解:用 apache 或者 nginx 都可以做负载均衡
3)实现并行计算
![](/qrcode.jpg)
3. 常用的负载均衡技术
1)基于 DNS 的负载均衡
2)方向代理负载均衡(如 Apache + JK2 + Tomcat 这种方式)
3)基于 NAT (Network Address Translation)的负载均衡机制
4. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 这句,用来接收 AJP 协议。protocol 连接器使用的协议,支持 http 和 AJP。AJP 专用于 tomcat 和 apache 建立通信的,在 httpd 反向代理用户请求至 tomcat 时使用。
5. 搭建步骤:(没有实际操作,故暂时省略,待补充)
6. 缺点
1)必须在同一种中间件之间完成,例如tomcat与tomcat
2)session 复制带来的性能损失快速增加,特别是当 session 中保存了较大的对象,而且对象变化较快时,性能下降更加显著,会大量消耗系统性能。这种特性使得 web 应用的水平扩展受到限制
3)session 内容通过广播同步给成员,会造成网络流量瓶颈
总结:其实无论是分布式,数据缓存,还是负载均衡,都是为了改善网站的性能瓶颈,在网站源码不做优化的情况下,负载均衡可以说是最直接的手段了。其实,这样主要是为了用户分流,也就是说把所有用户的访问压力分散到多台服务器上,也可以分散到多个 tomcat 里,如果一台服务器装多个 tomcat,那么即使负载均衡性能也提升不了太多,但是可以提高稳定性,即容错性。当其中一个主 tomcat 宕掉,其他的 tomcat 也可以补上,因为 tomcat 之间实现了 session 共享。待 tomcat 服务器修复后再次启动,就会自动拷贝所有 session 数据,然后加入集群,这样就可以不间断的提供服务。如果要真正从本质上提升性能,必须要分布到多台服务器。