同样沈主席分享,分别从如何保证Session一致性、主从、主主一直、缓存一致以及时间问题待分享的冗余数据的一致性、多库事务的一致性、库存扣减的一致性、消息时序的一致性进行讨论。
单机部署必然不会出现保证一致性的系统设计,一致意味着至少大于等于2台服务节点,才有必要考虑双机数据一致的问题。数据多种类型,如上提到的session数据、db集群数据、缓存与db的数据。从具体到抽象,先分别看看各种数据类型在保证一致性方面的经典方式,再通而总之,看看各数据保证一致性是否有通用的设计思路。
Session一致性
多个web服务,nginx请求分发默认是轮训方式,若用户1访问若web1,而后续访问将请求分发到web2上,则导致web2上无用户session信息,系统提示请重新登录系统。接着web3、web4同理从而导致用户不断重新登入。
那多web节点间如何保证session数据共享且一致呢?
方案一、同步
Tomcat支持session共享的配置,百度一搜N多解决方案,tomcat自带的session共享配置,或是tomcat依赖redis实现session共享配置。
优点:代码0侵入,无需改动任何代码
缺点:若集群扩容不断增加节点,则导致同步实例越来越多,增加扩容成本。
方案二、端
将session信息不存到web server上,而是存到端上即浏览器中。这就使得使用同一浏览器进行用户请求到不论哪台web&#x