集群
说到集群首先给人的第一感觉是一大堆的服务器,其实这种想法是片面的,集群是指多台服务器上部署同一个业务,通俗说就是同一件事多个人来干。谈到集群就不得不说分布式。分布式是为了解决业务的高耦合性产生,将一个宠大的任务拆分成多个子任务部署在不同服务器上,这就是分布式。
Session
由于HTTP协议是无状态的,浏览器的每一次访问对于服务器来说都是第一次访问,服务器就好像得了阿兹海默症(健忘症)。为了解决这个问题,Cookie和Session两兄弟应运而生。
用户访问Web服务器后,服务器生成了Session并将唯一标识符(SessionID)存放在客户端Cookie中,下次浏览器发出请求就会携带Cookie,服务器根据Cookie中的SessionID就去找对应的Session,找到了则代表会话成功。
集群部署时Session会出什么问题?
因为Session默认是存储在服务器端的,而集群部署时用户的请求可能会被定向至不同的节点服务器上,所以可能第一次访问时保存了会话状态,第二次访问又被定向到其它节点(其它节点上并没有此用户的Session信息)上导致会话状态丢失!
如何解决集群环境下的Session同步问题?
解决这个问题,大家只要确保所有节点服务器共用Session即可,方案有以下几种供大家选择:
1、粘性Session
同一个用户的请求分配到同一台服务器(通过一致性HASH算法实现),这样始终在这台服务器上寻找Session,称为粘性Session。
2、Session复制
将所有节点服务器上的Session保持同步复制状态,任何一台节点上产生新的Session都复制到其它节点服务器。
3、Session共享
将Session放在统一的地方集中管理(如:Session入库、存入Redis等),然后所有节点服务器统统从这个地方存取Session即可。
以上这几种解决方案应用最广的就是Session共享机制,既可解决Session同步问题又无需担心数据丢失。
以上就是偶的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流~偶是科技领域创作者,十年互联网从业经验,偶了解更多科技知识!