每日读书:分布式环境下的session管理
互联网应用中,系统一般划分为三个层次:应用层、服务层、数据库层。
为保证应用层的高并发、高可用性,同时为实现根据当前用户量可伸缩的增加或减少应用服务器的目的,应用层内所有应用服务器应该是均等的,用户应该是无状态的,无状态的用户才可实现在多个服务器上无缝切换。当遇到单个服务器宕机时可以通过均衡策略将用户请求导向到其他可用的服务器内而不用担心用户数据的丢失,保证服务的可持续性。但是用户进行业务操作,不可避免需要存储一些用户的数据,如购物车内的商品信息,用户的登录信息。那么我们在负载均衡的集群环境下该如何处理用户的数据呢?有如下四种方式:
1、session复制
说明:用户session在所有应用服务器中复制,保证任何一个服务均可提供服务。
优点:适用于小型网站架构,无需特殊实现,对程序破坏性小,只需要配置应用服务器提供session复制功能
缺点:浪费内存。
2、session绑定
说明:根据某种策略保证同一个用户前后访问的都是同一台应用服务器,也叫做粘性session
优点:无需特殊实现,只需要配置负载均衡服务器
缺点:降低了系统可用性,当任何一个应用服务器宕机时,该服务器上的所有用户都将无法访问。
3、cookie替代
说明:将存放在服务器端的session内的用户数据缓存到本地磁盘中,每次请求时携带本地cookie内信息
优点:
缺点:由于每次请求均需携带cookie内数据,增加通信带宽,降低访问效率。
4、session管理服务器
说明:使用单独的session管理服务器完成所有用户信息的缓存,通过使用分布式缓存或数据库技术来保证服务的高可用高并发
优点:高可用,高并发
缺点:需要提供独立的session访问模块,增加了开发成本。