服务无状态化设计分析

什么是无状态化设计?

服务的无状态化就是冗余部署的多个服务模块(进程),使其完全对等。也就是部署多个相同服务,请求到任一服务的处理结果是一样的。这些模块不存储业务的上下文信息,比如session、登录、业务上下文相关的信息。只会根据每次请求携带的数据进行相应的业务处理。

实质这些业务相关的信息是会存放在统一的一个地方,比如缓存、es等等。

目的

1.快速扩容

2.弹性扩容

具体案例实践

  1. 用户Session数据

登录的基本信息,登录后的基本信息:用户凭证,AES、JWT进行加密等。
由于业务量大,需要部署多台服务器构成应用集群,这时候请求一般经过DNS,进入网关层,通过负载均衡算法,分配到不同的服务上,业务的上下文数据在不同的服务器上,是无法同步的。因此我们做无状态化设计,考虑的就是用户的session数据如何存放。

用户session数据存放:

1. 网关层
2. redis集群
3. 外部存储

分析

直接存放在网关层

直接存放在网关层的话,就是类似一个单点登录的,这时候网关层是有状态的。单点,不高可用,有状态,不太好。


image

优化:

做集群,同步数据,全量。

特点:

1.保证高可用。

2.有状态化

image

这时候还是有状态,如果其中一台机器挂了,还未同步到另外两台,信息还是会丢失。同时,还要解决复杂的全量同步数据问题。

用户Session数据存储在客户端

满足:

  1. 高可用
  2. 网关层可以无状态化
  3. Session可能会丢失
image

存储在外部(redis)

用户Session数据外部存储

特点:

  1. 网关无状态化
  2. Session数据可以保持高可用,比如redis,使用其高可用的策略
image

类似使用redis做分片以及集群。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 ·大型网站软件系统的特点 ·大型网站架构演化发展历程 ·初始阶段的网站架构 ·需求/解决问题 ·架构 ·应用...
    zhyang0918阅读 7,599评论 0 16
  • APIGateway(APIGW/API网关),顾名思义,是出现在系统边界上的一个面向API的、串行集中式的强管控...
    零一间阅读 11,350评论 2 56
  • 1.abstract class 和interface 有什么区别? 抽象类可以有构造方法 接口不行 抽象类可以有...
    sunnysans阅读 4,350评论 0 1
  • 我家先生的优点有很多,请接招: 1、聪明,智商高。 2、尊重我,凡事跟我有商有量。 3、善良,有爱心。 4、孝敬长...
    滟遇阅读 721评论 0 0
  • 有时突然思索,会发现,自己不是自己发展而来,而是每个别人影响了我。 我小学默默无闻,来了个新的数学老师,五年级,廖...
    撕如风阅读 5,265评论 0 0