Breacher
2023-01-20 23:10:09 +08:00
假设有一个后端 HTTP API 应用,应用可以有 N 个实例,这些实例是使用同样的应用程序配置、彼此等价的、能够随时互相替代,这 N 个实例作为一个整体对外提供服务,共同处理用户的请求。假设某个时刻有用户 A 发起的请求 request1 由实例 instance1 处理了,用户 A 的后续请求 request2, request3, ... requestN 能够由任意一个实例完成,而不是非得是 instance1 。
要做到这样,实例们就不能把数据保存在实例进程的内存、本地磁盘或者本地文件,如果非要把数据保存在实例进程的内存、本地磁盘或者本地文件,那么在保存在某个特定实例的数据就无法由其他实例获取到,这个实例也就是有状态了,因为后续所有依赖这个数据的请求都得要来到这一个特定实例而不能是其他实例。最典型的状态数据就是用户的登录态 了,一般把登录态存储在一个所有实例都能访问到的存储组件中,比如 MySQL/Redis ,这样子,就用户登录态功能而已,这个应用就是无状态的,因为所有实例都是去 MySQL/Redis 获取登录态,它们都能获取到。