架构设计(五):有状态服务和无状态服务

news2024/9/27 19:26:30

架构设计(五):有状态服务和无状态服务

作者:Grey

原文地址:

博客园:架构设计(五):有状态服务和无状态服务

CSDN:架构设计(五):有状态服务和无状态服务

无状态的服务

在横向扩展服务的过程中,将状态(例如用户会话数据)从服务中移出并将会话数据存储在持久性存储介质中,如关系型数据库或 NoSQL。集群中的每个服务都可以从数据库中访问状态数据。这就是所谓的无状态服务。架构如下

img

有状态的服务

和无状态服务不一样,有状态的服务从一个请求到下一个请求都会记住客户数据(状态)。而无状态服务器不保留任何状态信息,架构如下

img

上图中,如果使用有状态服务,用户1的状态数据(比如:会话数据和资料图片)都存储在Server 1中。如果这是一个验证用户身份的服务,为了验证用户1,请求必须被发送到 Server 1 上。如果请求被发送到其他服务器,如 Server 2,认证将失败,因为 Server 2 不包含用户 A 的会话数据。同样地,来自用户2的所有请求必须被路由到 Server 2;来自用户3的所有请求必须被发送到 Server 3。

这就会导致一个问题:来自同一个客户端的每个请求都必须被路由到同一个服务器。虽然可以通过负载均衡器的粘性会话来完成这个功能,但是这增加系统复杂度和开销。使用这种方法,在增加或删除服务的时候比较困难。

使用无状态服务,来自用户的请求可以被发送到任何服务节点,这些服务节点从共享数据存储中获取状态数据。状态数据被存储在共享数据存储中。无状态系统更简单、更稳健、可扩展。

无状态服务中的共享数据存储可以是一个关系型数据库、Memcached/Redis、NoSQL等。选择 NoSQL 数据存储是因为它很容易扩展。可以实现自动缩放(根据流量负载自动添加或删除服务)。在状态数据被单独存放在一个共享存储以后,通过根据流量负载添加或删除服务,可以很容易地实现网络层的自动扩展。

参考资料

System Design Interview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97278.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

批量查询搜狗收录,查询结果不准是什么原因

网站的收录情况是常用的技术手段,会影响到网站的流量和展现量,想要获得一个好的收录就必须重视原创内容,因为网站的收录直接影响力搜索引擎的关键词排名。 网站收录信息如何批量查询? 以搜狗收录为例: 1、打开SEO综合…

17 CPP面向对象编程

简单实用类: 1 类的成员函数可以直接访问该类其它的成员函数 2 类的成员函数可以重载。 3 类指针的用法与结构体指针用法相同 4 类的成员可以是任意数据类型(类中也可以有枚举) 5 可以为类的成员指定缺省值(C11标准&#xff…

Redis基础数据结构源码

1、SDS:动态字符串 src/sds.h:50 struct sdshdr {// 记录buf数组中已使用的字节数,即SDS字符串长度int len;// 记录buf数组中未使用的字节数int free;// 字节数组,用于保存字符串char buf[]; } 杜绝缓冲区溢出。减少修改字符串长度时所需的内…

概率统计·参数估计【区间估计】

置信区间 求解步骤 例 构造一个函数(主要是函数不用依赖未知量只有一个未知量,问μ的置信水平用这个函数,如果σ也未知,就要替换掉这个式子中的σ为S,并且变成服从 t 分布)取上下区间(用2个常数…

邪道方法-字典转字符串以传参字典给多GPU训练的mmseg

文章首发及后续更新:https://mwhls.top/4387.html,无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评,非常感谢! 目录引言 解决方法 引言 我想把字典传参给多GPU训练&#…

CleanMyMac X4.12.2版本功能实用性测评

相信大多数MAC用户都较为了解,Mac虽然有着许多亮点的性能,但是让用户叫苦不迭的还其硬盘空间小的特色,至于很多人因为文件堆积以及软件缓存等,造成系统空间内存不够使用的情况。于是清理工具就成为了大多数MAC用户使用频率较高的实…

他不知道他病了

没时间读书,关注我每天更新一本好书关于作者关于本书核心内容一、如何理解缺乏病识感二、沟通四步策略1.倾听2.同理心3.赞同4.结为伙伴三、如果仍然不接受治疗,怎么办金句关于作者 泽维尔阿玛多是纽约市哥伦比亚大学心理学副教授,全美精神障…

javaSE - StringBuffer 和 StringBuilder(字符串拼接)

前言 StringBuffer 、 StringBuilder、 String 是三种数据类型 首先来回顾下String类的特点: 任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指向而已。通常来讲String的…

Oracle-expdp导出时间变长问题分析

前言: 近期处理了一起expdp导出时间变长的问题,在数据量没有较大增长的情况下,expdp导出时间发生倍数增长,后面分析发现是由于Bug 27634991导致在AMM,ASMM模式下,由于streams pool内存抖动触发了内存收缩,内存收缩的过…

jsp+ssm计算机毕业设计窗户管理系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…

[附源码]Nodejs计算机毕业设计基于社区人员管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

【图像去噪】DCT图像去噪【含GUI Matlab源码 614期】

⛄一、图像去噪及滤波简介 1 图像去噪 1.1 图像噪声定义 噪声是干扰图像视觉效果的重要因素,图像去噪是指减少图像中噪声的过程。噪声分类有三种:加性噪声,乘性噪声和量化噪声。我们用f(x,y)表示图像,g(x,y&#xff0…

基于java+springmvc+mybatis+vue+mysql的戒烟网站

项目介绍 大量研究证据表明,戒烟可降低或消除吸烟导致的健康危害。任何人在任何年龄戒烟均可获益,且戒烟越早、持续时间越长,健康获益就越大。随着时代发展人们对健康也越来越重视,更多的人参与到了戒烟的行列中来,本…

[go]分布式系统之snowflake与锁

文章目录分布式id生成器分布式锁负载均衡go语言在网络服务模块有着得天独厚的优势; https://www.cnblogs.com/thepoy/p/14573822.html中详细介绍了涉及到的分布式相关技术。分布式id生成器 Snowflake(雪花算法),由Twitter提出并开…

六问 Kafka 为啥那么牛

1 Kafka 简介 1.1 Kafka 概述 Kafka 是一个分布式的基于发布/订阅模式的消息队列,依靠其强悍的吞吐量,Kafka 主要应用于大数据实时处理领域。在数据采集、传输、存储的过程中发挥着举足轻重的作用。 Apache Kafka 由 Scala 写成,是由Apache软…

转行IT行业学什么比较好?月薪过万要多久?

学什么,比穿什么衣服的问题更难,因为职业的背后,更多的是抉择而不是选择,选错一件衣服可以重来,而选错一个职业所面对的结果,是非常让人痛苦的。 本文是小编对想转行IT行业的你最真挚的建议。 任何事情&a…

QT5.14.2搭建Android开发环境

项目需求:因项目需求需要使用QT开发功能类似的一个跨平台项目,基于Android系统上运行单机软件。 开发环境:Windows 10 QT5.14.2 搭建步骤: 1、安装Java软件,配置环境变量 java软件安装可以选择默认安装位置,我下载…

KNN学习

学习B站 【什么是KNN(K近邻算法)?【知多少】】 https://www.bilibili.com/video/BV1Ma411F7Y4/?share_sourcecopy_web&vd_sourced928ac2eb2c6b562d9488d15f78dfbf4 什么是KNN NN neural network 并不是 KNN 是k-Nearest Neighbors K 近…

[附源码]Node.js计算机毕业设计孤儿院救助平台Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

jsp+ssm计算机毕业设计大学生就业信息检索系统【附源码】

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: JSPSSM mybatis Maven等等组成,B/S模式 Mave…