php 如何实现无状态化,服务无状态化设计分析
什么是无状态化设计?
服务的无状态化就是冗余部署的多个服务模块(进程),使其完全对等。也就是部署多个相同服务,请求到任一服务的处理结果是一样的。这些模块不存储业务的上下文信息,比如session、登录、业务上下文相关的信息。只会根据每次请求携带的数据进行相应的业务处理。
实质这些业务相关的信息是会存放在统一的一个地方,比如缓存、es等等。
目的
1.快速扩容
2.弹性扩容
具体案例实践
用户Session数据
登录的基本信息,登录后的基本信息:用户凭证,AES、JWT进行加密等。
由于业务量大,需要部署多台服务器构成应用集群,这时候请求一般经过DNS,进入网关层,通过负载均衡算法,分配到不同的服务上,业务的上下文数据在不同的服务器上,是无法同步的。因此我们做无状态化设计,考虑的就是用户的session数据如何存放。
用户session数据存放:
1. 网关层
2. redis集群
3. 外部存储
分析
直接存放在网关层
直接存放在网关层的话,就是类似一个单点登录的,这时候网关层是有状态的。单点,不高可用,有状态,不太好。
image
优化:
做集群,同步数据,全量。
特点:
1.保证高可用。
2.有状态化
image
这时候还是有状态,如果其中一台机器挂了,还未同步到另外两台,信息还是会丢失。同时,还要解决复杂的全量同步数据问题。
用户Session数据存储在客户端
满足:
高可用
网关层可以无状态化
Session可能会丢失
image
存储在外部(redis)
用户Session数据外部存储
特点:
网关无状态化
Session数据可以保持高可用,比如redis,使用其高可用的策略
image
类似使用redis做分片以及集群。
php 如何实现无状态化,服务无状态化设计分析相关推荐
- 注册表 关闭打印机服务器,Win7系统添加打印机无Print Spooler服务无注册表解决方法...
win764位系统刚装几天发现笔记本无法安装虚拟打印机,因为我经常使用PDF打印,比如cutePDF打印机.开始搜索各种经验,发现都无法解决问题, 总有各种疏漏,在此总结一下,供自己回顾,同时希望能惠 ...
- 鸿蒙OS原子化服务卡片原理和架构分析
引言 2021年6月2日晚间,华为在HarmonyOS 2系统及全场景新品发布会上正式推出了服务卡片,颠覆了人们对APP信息展示的认知,引起了行业内的极大关注,本文是对HarmonyOS服务卡片的原理 ...
- 容器化与无状态微服务等
写在前面: 本来不想太多转载东西,但这篇文章写的极有章法,把一些核心的东西,来龙去脉表达的很清晰,可见作者是个一线的优秀技术人员.特转到此处,谢谢作者.. ====================== ...
- 有状态服务 无状态服务
一.定义: 无状态服务:就是没有特殊状态的服务,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务端所需要的所有参数(服务端自身不存储跟请求相关的任何数据,不包括数据库存储信息) 有状态服务 ...
- 状态服务器与无状态服务器(要点)
对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧是指两个来自相同发起者的请求在服务器端是否具备上下文关系.如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用 ...
- 内网集群 无法通信_记一次集群内无可用http服务问题排查
记一次集群内无可用http服务问题排查 1.摘要 前一阵子发现服务会有偶发的服务不可用的情况,记录一下这个问题的排查过程. 现象是这样的:每天到了某个时间点,就会出现服务不稳定的情况,偶发接口调不通. ...
- (3) ebj学习:有状态bean和无状态bean区别
1 区别 有状态bean : 客户端通过JNDI访问有状态bean, 服务端new该bean,并返回该代理对象 有状态bean : 客户端通过JNDI访问有状态bean, 服务端该bean是单例模式, ...
- mysql有状态无状态_k8s statefulSet 有状态应用和无状态应用区别
一.定义: 无状态服务:就是没有特殊状态的服务,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务端所需要的所有参数(服务端自身不存储跟请求相关的任何数据,不包括数据库存储信息) 有状态服务 ...
- EJB3.0框架实例----区分有状态bean和无状态bean
1.通过这个例子可以区分,有状态bean和无状态bean中的数据会不会混淆; 2.一种取巧的做法是:在建立的客户端的工程上右键,选择build path--->把服 务端的EJB工程导入的,新建 ...
最新文章
- python执行提示包找不到的问题
- 《中国人工智能学会通讯》——2.13 医疗服务机器人综述
- delphi 折叠代码 快捷键_我收藏的几个更快搬砖的vscode快捷键
- 谁拿了最多奖学金pascal程序
- 细水长flow之NICE:流模型的基本概念与实现
- 关于生sql中的空值
- 打开非遗文化新呈现方式 三七互娱“非遗广州红”游园会即将开幕
- 重庆科技学院计算机专业好吗,重庆科技学院什么专业好
- 常见的SQL面试题:经典50例
- 使用动软.net代码生成器生成数据库文档
- 计算机启动硬盘引导过程,如何重建mbr|硬盘重建主引导记录(mbr)步骤
- 基于ssm+vue的综合项目 健康体检管理系统-第十章-权限控制、图形报表
- 【历史上的今天】1 月 23 日:现代集成电路雏形;JDK 1.0 发布;数学大师诞生
- 凌祯excel课程_她1篇Excel教程超10万人在学,想教你Excel入门到高阶,10倍提升工作效率!...
- 互联网产品推广分为哪些阶段?
- 王者荣耀4.4日服务器维护,王者荣耀:4.4全天停服更新,只为响应全国性“悼念活动”!...
- 陈老师给你介绍半导体功率器件知识大汇总
- 使用QSS美化PyQt5界面,分享4套超赞皮肤和QSS专用编辑器!
- UNITY与Mac⭐一、在苹果电脑上配置 Unity 安卓环境的教程
- SQL_TRACE的作用
热门文章
- linux安装tomcat_【零基础学云计算】详述Linux系统中Tomcat部署及优化
- Charles学习(三)之使用Map local代理本地静态资源以及配置网页代理在Mac模拟器调试iOS客户端...
- EducationalCodeforcesRound62(Div. 2)(A-D题解)
- node.js 下载安装及gitbook环境安装、搭建
- 使界面里的组件更圆滑
- Android测试(二)——drozer使用
- 2016/07/11 常用正则表达式大全 (转)
- 字节 字符 utf-8 unicode 以及提交表单验证字符长度 .......
- 2015年10月15日学习html基础笔记
- javascript 的默认对象