php 如何实现无状态化,服务无状态化设计分析

什么是无状态化设计?

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

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

目的

1.快速扩容

2.弹性扩容

具体案例实践

用户Session数据

登录的基本信息,登录后的基本信息:用户凭证,AES、JWT进行加密等。

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

用户session数据存放:

1. 网关层

2. redis集群

3. 外部存储

分析

直接存放在网关层

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

c79fac664439

image

优化:

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

特点:

1.保证高可用。

2.有状态化

c79fac664439

image

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

用户Session数据存储在客户端

满足:

高可用

网关层可以无状态化

Session可能会丢失

c79fac664439

image

存储在外部(redis)

用户Session数据外部存储

特点:

网关无状态化

Session数据可以保持高可用,比如redis,使用其高可用的策略

c79fac664439

image

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值