美文网首页java架构设计专题
服务无状态化设计分析

服务无状态化设计分析

作者: 先生zeng | 来源:发表于2019-09-22 22:15 被阅读0次

    什么是无状态化设计?

    服务的无状态化就是冗余部署的多个服务模块(进程),使其完全对等。也就是部署多个相同服务,请求到任一服务的处理结果是一样的。这些模块不存储业务的上下文信息,比如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做分片以及集群。

    相关文章

      网友评论

        本文标题:服务无状态化设计分析

        本文链接:https://www.haomeiwen.com/subject/naguuctx.html