最近在面试有遇到,面试官这么一个问题,两台服务器如何保证一台服务器崩了,切换到另外一台服务器,用户的登录信息等一些常用的信息可以直接使用,不会丢失的,为这两台服务器设计一个高可用的方案。
对于一个5年以上的程序员,高可用概念不会陌生,一般在互联网公司都非常常见的架构。对于这个问题,面试官意图就是想考察一下你对服务器部署方面的能力。
对于上面的问题,保证切换服务器,用户登录信息及常用的信息不会丢失,继续可以访问。这个问题对于单机系统来说,这些数据存储到我们的session中去就可以,Session没有失效,用户操作都可以看到操作过往数据。对于多台服务器集群我们需要怎么解决。
我想到以下几个方案
方案一、新增一台Session服务器,全局管理session
利用独立部署一台Session服务器用于全局管理Session,应用服务每次读写Session,都需要访问Session服务器,如果session服务器存在,应用服务器从session服务获取数据
全局Session服务器,可以建立在目前常见的Redis 、Memcached的基础进行数据的封装,让其符合session存储和访问请求。
方案二:应用服务器的Session同步复制
对于集群的应用服务器实现同步Session对象,任何一台服务器宕机都不会影响到Session对象的访问,当前服务器只要从本地获取Session数据就可以。
缺点:当规模较大的时候,大量的session同步操作会占用太多的服务器内存及网络资源,系统会不堪重负。
方案三:通过本地cookie存储session对象
利用浏览器支持cookie记录session的对象简单,只要浏览器不清理cookie,session数据都存在,可用性高,并且支持服务器线性伸缩。
缺点:cookie存储数据大小受到限制,每次请求都会自动带上cookie影响访问性能。
对于上面的方案,我们也可以设计成组合方式,在用户端,我们可以采用Cookie存储用户登录基础信息,服务器端,我们采用全局的session服务器的方式,用于存储一些常用的操作数据。
上面是我的一些初步的思路,你有更好的高可用的方案,可以与我交流。