公司业务经过长期发展,有了很大突破,已
经实现盈利,现公司要求加强技术架构应用功
能和安全性以及开始向企业应用、移动APP等
领域延伸,此时原来开发web服务的php语言
已经不适应新的场景,需要上java技术架构,
现要求你根据公司需要,实现基于java平台的
web应用服务选型、搭建、实现和应用,此时
你如何选择?
1 实现企业级常见的架构 LNMT
LNMT:Linux Nginx MySQL Tomcat
Client(http) -->nginx(reverse proxy)(http)àtomcat(http connector)
在nginx中
Location / {
Proxy_pass http://web1:8080;
}
Location ~*\.(jsp|do)$ {
Proxy_pass http://web2:8080
}
2 实现LNMT集群服务
Nginx 可进行反向代理供用户访问
在http与server之间
Upstream tomcat_cluster {
#ip_hash;
Server 172.17.253.216:8080 weight=1;
Server 172.17.254.97:8080 weight=1;
}
3 实现LNMT的会话保持
-
session sticky
基于source_ip nginx:ip_hash haproxy :source lvs:sh
基于cookie: nginx:sticky haproxy:cookie
-
session cluster :delta session manager
(3)session server:redis(store) 持久存储,memcache(cache)
4 基于tomcat集群会话保持
DeltaManager 会话管理器是Tomcat默认的集群会话管理器,它主要用于集群中各个节点之间的会话状态的同步维护。
集群增量会话管理器的职责是将某个节点的会话改变同步到集群内其他的成员节点上,它属于全节点复制模式。所谓全节点复制就是指集群中某个节点的状态变化后需要同步到集群中剩余的节点,非全节点方式可能只是同步到其中某个或若干个节点。
在集群中全节点会话复制的一个大致步骤如图所示,客户端发起一个请求,假设通过一定的负载均衡设备分发策阅分到其中一个节点node1,如果还未存在session对象的web容器会创建一个会话对象,接着执行一些逻辑处理,在对客户端响应之前有个重要的事情就是把session对象同步到集群服务其他节点上。最后在响应客户端,当客户端第二次发起请求时,假如分发到node3节点上,由于同步了node1的session会话,所以在执行逻辑并不会取不到session的值,如果删除某个会话对象,则要同时通知其他节点把相应会话删除,如果修改了某个会话的某些属性也同样要更新到其他节点的会话中。
5 基于tomcat集群会话保持配置
1 cluster 配置:
Cluster(集群,族),如果你要配置Tomcat集群,则需要使用此节点
ClassName 表示Tomcat集群时,之间的相互传递信息使用那个类来实现信息之间的传递
Channelsendoption 可以设置为2 4 8 10 每个数字代表一种方法
2 = Channel.SEND_OPTIONS_USE_ACK(确认发送)
4 = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送)
8 = Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送)
在异步模式下,可以通过加上确认发送(Acknowledge)来提高可靠性,此时channelsendoption设为10
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
2.Manager介绍
Manger对象用于实现HTTP会话管理的功能,Tomcat中有5种Manger的实现:
(1).StandardManager
Tomcat6的默认会话管理器,用于非集群环境中对单个处于运行状态的Tomcat实例会话
进行管理。当Tomcat关闭时,这些会话相关的数据会被写入磁盘上的一个名叫
SESSION.ser的文件,并在Tomcat下次启动时读取此文件。
(2).PersistentManager
当一个会话长时间处于空闲状态时会被写入到swap会话对象,这对于内存资源比较吃紧
的应用环境来说比较有用。
(3).DeltaManager
用于Tomcat集群的会话管理器,它通过将改变了会话数据同步给集群中的其它节点实现
会话复制。这种实现会将所有会话的改变同步给集群中的每一个节点,也是在集群环境中
用得最多的一种实现方式。
(4).BackupManager
用于Tomcat集群的会话管理器,与DeltaManager不同的是,某节点会话的改变只会同
步给集群中的另一个而非所有节点。
3、Manager配置
className-指定实现org.apache.catalina.ha.ClusterManager接口的类,信息之间的管
理
expireSessionsOnShutdown-设置为true时,一个节点关闭,将导致集群下的所有
Session失效
notifyListenersOnReplication-集群下节点间的Session复制、删除操作,是否通知
session listeners
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>