背景
这次做的这个项目并发还真是挺高,单表一天产生百万条记录不在话下。结果导致运行过程中经常丢失数据,卡、慢等。开来终于要搞一次负载均衡了,之前实验学习了不少,但是没有在项目中实际用过,因为并发量不大,没有意义。负载后主要解决session共享问题,项目组小伙挺懂的,采用memcache解决。
tomcat 采用memcache共享session 非常简单,只需考个jar,修改个xml文件基本可以。但是在windows下倒腾几天无果,没成功。网上教程也基本是linux的,应该是此项功能在linux下可使用。但是迁移linux时间较长,还不知道是否有其它问题,所以最后采用redis解决了。以下简单说下知识点,算是纪念。
知识点
MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用 Value(Tomcat 阀)对Request进行跟踪。Request请求到来时,从memcached加载session,Request请求结束时,将tomcat session更新至memcached,以达到session共享之目的, 支持 sticky 和 non-sticky 模式。
Sticky 模式:tomcat session 为 主session, memcached 为备 session。Request请求到来时, 从memcached加载备 session到 tomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。
Non-Sticky模式:tomcat session 为 中转session, memcached1 为主 sessionmemcached 2 为备session。Request请求到来时,从memcached 2加载备 session 到 tomcat,(当 容器 中还是没有session 则从memcached1加载主 session 到 tomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat session更新至主memcached1和备memcached2,并且清除tomcat session 。以达到主备同步之目的。