背景介绍:
本人目前就职于中国电信旗下第三方支付公司--甜橙金融的信息技术部客户平台,该平台负载管理公司近2亿用户的个人信息与鉴权凭证,并提供相关的接口能力。我主要负责该平台的需求分析与设计工作。
甜橙金融通过自主研发,经过一段时间的积累,目前主要业务已经运行在第三代基础技术平台。该平台采用分布式架构,主要中间件选型包括Dubbo,Zookeeper,Kafka,Redis集群等。目前在公司每年一次百万商户参与的525营销活动中,平台能很好的支撑爆点活动中海量用户的高并发请求。
本文中分享的分布式系统下登录会话控制系统,在活动中支撑的日均接口调用量峰值已达4亿余次。
目录
在移动应用场景中,为了兼顾用户体验与安全性,很少有应用需要用户每次使用App时都进行一次登录密码的输入和校验操作。大部分应用都通过各种各样的形式如手势登录,指纹登录,甚至免登录的方式降低用户进入App的门槛。在分布式集群系统中,如何实现免登录,又能让服务端安全快捷的标识客户端,这个对会话控制系统的设计提出了不小的挑战。
解决问题,从最简单的开始,首先让我们了解一下什么是会话。
一.会话是什么?
用户在使用我们的服务时,要使用一个功能,往往在客户端和我们的服务端中间需要进行多次的通讯和交互。这里一个用户和服务端系统进行交互通讯的过程就叫做一次会话。而http协议本身是无状态的,即服务端每次都会响应客户端的请求,但是不会记得是哪一个客户端发起的请求。为了识别不同的请求是否来自同一客户,引用HTTP会话机制,即:多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(Session)。
举个例子:用户登录一个App,需要输入一次登录密码完成登录,登录完成以后进去App里面使用功能,到用户主动退出App可以看作一次会话。从用户登录到退出的过程中,用户可能在App里面做很多操作,在客户端和服务端的这么多次交互中,怎么确定一直是同一个用户呢, 基于Cookie和Session的会话控制机制就是解决这个问题。
Cookie和Session,简而言之Cookie是存储在客户端中的数据,我们通过Cookie来跟踪与存储用户数据。Session是将用户的会话数据存储在服务端。通过比对cookie和Session中的数据来完成会话控制。详细的Cookie和Session的区别和联系网上介绍的文章很多,这里不再赘述。今天主要介绍一下分布式系统下的Session的保存问题。