状态和无状态--2种服务器架构之间的比较

2023-05-16

        对服务器程序来说,有两个基本假设十分重要,究竟服务器是基于状态请求还是无状态请求。状态化的判断是指两个来自相同发起者的请求在服务器端是否具备上下文关系。如果是状态化请求,那么服务器端一般都要保存请求的相关信息,每个请求可以默认地使用以前的请求信息。而无状态请求则不行,服务器端所能够处理的过程,他的处理信息必须全部来自于请求所携带的信息以及其他服务器端自身所保存的、并且可以被所有请求所使用的公共信息。
        无状态的服务器程序,最著名的就是WEB服务器。每次HTTP请求和以前都没有啥关系,只是获取目标URI。得到目标内容之后,这次连接就被杀死,没有任何痕迹。在后来的发展进程中,逐渐在无状态化的过程中,加入状态化的信息,比如COOKIE。服务端在响应客户端的请求的时候,会向客户端推送一个COOKIE,这个COOKIE记录服务端上面的一些信息。客户端在后续的请求中,可以携带这个COOKIE,服务端可以根据这个COOKIE判断这个请求的上下文关系。COOKIE的存在,是无状态化向状态化的一个过渡手段,他通过外部扩展手段,COOKIE来维护上下文关系。
        状态化的服务器有更广阔的应用范围,比如MSN、网络游戏等服务器。他在服务端维护每个连接的状态信息,服务端在接收到每个连接的发送的请求时,可以从本地存储的信息来重现上下文关系。这样,客户端可以很容易使用缺省的信息,服务端也可以很容易地进行状态管理。比如说,当一个用户登录后,服务端可以根据用户名获取他的生日等先前的注册信息;而且在后续的处理中,服务端也很容易找到这个用户的历史信息。
        状态化服务器在功能实现方面具有更加强大的优势,但由于他需要维护大量的信息和状态,在性能方面要稍逊于无状态服务器。无状态服务器在处理简单服务方面有优势,但复杂功能方面有很多弊端,比如,用无状态服务器来实现即时通讯服务器,将会是场恶梦。

        这些年,在金融软件行业发展,对这些行业软件的开发倍感古怪。原来是一家资讯公司,虽然是行业垄断地位,但是他们的技术架构倒没有什么特别之处,只能说很一般。最近在一家交易软件公司,也是行业垄断地位,技术架构极其古怪,倒值得说道和探讨。
        交易软件的所有架构的理论基础是基于无状态假设,主要分为3个层次:
        1、虚拟网络。这是最底层的基于架构,在原有的TCP/IP网络上构建了一个虚拟的TCP/UDP网络,这个概念和VPN很像。但也有很多不同。比如虚拟网络上的节点和节点所接入的实体是按数字化的标识来区别。
        2、业务中心。在虚拟网络上,建立一个业务逻辑中心,管理所有的业务逻辑单元。这个中心本身不处理业务逻辑,而是一个业务逻辑的管理器。
        3、业务单元。这个组件是专门实现各个业务逻辑的单元。业务单元本身是建立在业务中心的基础上。本身具有一定的独立性,但主要功能还是被绑定在业务中心上。业务中心相当于他的容器。
        这3个层次之间消息传输都是无状态的,当客户端从虚拟网络上发起一个请求之后,这个请求在整个传输过程中,都被认为是携带了完整的信息。这样的处理有个好处,允许传输层次进行负载均衡,自由路由,为虚拟网络的建设提供了很大的弹性。
        在业务中心和业务单元之间也是这样的。他们之间的关系借鉴了MQ的架构。每个消息都是一个完整的、独立的处理单位。这种架构由于耦合性低,所以实现难度比较低,错误发生的概率也改善很多。但从另外一方面来说,要获取信息的难度却加大了。比如一个业务逻辑想知道哪些客户端在线,几乎是不可能的事情。
        由于客户端之间的状态是不可知的。所以主动推送需要十分复杂的过程才能实现。不能简单地做到主动推送,轮询就成为主要的手段。当轮询被频繁地使用之后,系统的实时性就无法保证了。

        当然,我在这里不是为了对状态化和无状态化的服务器要分个三六九等,实际上他们都有自己适用的范围。但各个觉得,只要状态化的服务器的技术风险能够被克服,应该具备更广阔的前景,应该是个未来的发展方向。从交易软件的架构,我还是认为他是个比较成功的应用,毕竟是得到事实的检验。但在具体过程中遇到的很多问题,还是和他的无状态假设有关。感觉这种架构是将错误发生的时间和地点给延后了,而不是消灭。
        在这种系统中,状态化依然是最好的架构,但是难度是同样巨大。期待中...。努力实现他。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

状态和无状态--2种服务器架构之间的比较 的相关文章

  • 解决Failed to download metadata for repo ‘AppStream’

    原贴 xff1a https www cnblogs com EthanWong p 15932675 html 在CentOS 8 上执行命令 sudo yum update 时报错 xff1a span class token punc
  • WebView自动H5缓存-清除缓存ios

    iOS的Webview加载HTML时会自动缓存JS CSS等文件 xff0c 当下次加载HTML时会根据请求的缓存策略是否使用缓存本地的JS和CSS xff0c 如果本地有缓存 xff0c 那么直接返回本地资源 判断是否过期 xff1b 如
  • 小样本学习论文阅读 | Confess: A framework for single source cross-domain few-shot learning, ICLR 2022 poster

    1 motivation 目前的方法在源域和目标域存在较大域间偏差时实用性较差 本文认为 xff1a 1 无监督学习可以缓解监督崩溃问题 xff0c 并且训练得到的模型可以更好地推广到目标域中 2 因为源数据集和目标数据集之间存在很大差异
  • 将VMDK格式的镜像转成qcow2

    将VMDK格式的镜像转成qcow2格式 1 我们要通过Linux虚拟机进行格式转化工作 在虚拟机中创建单文件可以提取出来VMDK格式 这是我自己的虚拟机创建出来的文件 2 我们找到我们创建好的虚拟机 通过我们远程连接工具进行上传到我们要转为
  • 如何做好一个项目经理

    第一部分 xff1a 软件项目经理的要求 首先是一个管理者 xff0c 其次熟悉某些工具 xff0c 某几种语言 xff0c 行业背景 xff0c 项目管理技能 软件项目经理面临的恶劣环境 xff0c 我们绝大部分软件企业运行在相对混乱的状
  • Cortex-M3利用SVC中断调用系统服务的例子

    SVC xff08 系统服务调用 xff0c 亦简称系统调用 xff09 和PendSV xff08 可悬起系统调用 xff09 xff0c 它们多用在上了操作系统的软件开发中 SVC用于产生系统函数的调用请求 例如 xff0c 操作系统通
  • Nginx + Tomcat + HTTPS极速配置

    由于最近在学习微信小程序开发 xff0c 所以在阿里云申请了一个免费的https证书 xff0c 这个证书申请起来十分简单 xff0c 大约十几分钟就好 所以不再赘述 更多信息可以访问我的个人网站 xff1a https www cjluz
  • Keil uVision5软件的操作与编写基础(入门)

    目录 x1f46c 一 如何新建一个空白文档 x1f46c 二 程序编写 x1f46c 三 编译程序 Keil uVision5是一款编写单片机程序的必备软件 其图标为 xff1a 一 如何新建一个空白文档 1 打开Keil uVision
  • 【工作笔记】Mysql写入报错:Incorrect datetime value: ‘1970-01-01 08:00:00‘

    在写入Mysql的timestamp格式列时 xff0c 将默认时间赋值为1970 01 01 08 00 00 xff1a new Timestamp 0L 此时报错 xff1a Incorrect datetime value 39 1
  • 【人脸识别】L2_Softmax Loss详解

    论文题目 xff1a L2 constrained Softmax Loss for Discriminative Face Verification 论文地址 xff1a https arxiv org pdf 1703 09507 pd
  • JS 常见的 6 种继承方式

    JS 常见的 6 种继承方式 第一种 xff1a 原型链继承 原型链继承是比较常见的继承方式之一 xff0c 其中涉及的构造函数 原型和实例 xff0c 三者之间存在着一定的关系 xff0c 即每一个构造函数都有一个原型对象 xff0c 原
  • MapReduce编程小案例.9th—join算法

    MapReduce编程小案例 9th join算法 数据 xff1a 有订单数据 xff1a order001 u001 order002 u001 order003 u005 order004 u002 order005 u003 ord
  • centos7 安装qt6,安装失败

    Error during installation process qt qt6 624 gcc 64 Could not find the required QmakeOutputInstallerKey qt qt6 624 gcc 6
  • ubuntu安装chrome浏览器

    1 xff09 使用自带的firefox打开 Google Chrome 网络浏览器 点击下载 xff0c 在linux下 xff0c 下载google chrome stable current amd64 deb 2 进入下载目录 su
  • maven xsd文件

    lt xml version 61 34 1 0 34 gt lt xs schema xmlns xs 61 34 http www w3 org 2001 XMLSchema 34 elementFormDefault 61 34 qu
  • 一个电子发烧友的程序员成长之路

    回想起高考已经是7年前的事情了 xff0c 一直想在毕业之际记忆记录一下7年的历程 xff0c 懒惰始终占据着我的整个身躯 看到这个征文活动 xff0c 让我有点想提笔记录的冲动了 1 邂逅 一直在想该用什么样的语言来将我对电子制作发烧程度
  • AI与医学辅助诊断

    人工智能一词越来越频繁的出现在日常生活中 一种事物的时髦 xff0c 必然有其背后的原因 而对于这样一个大的话题 xff0c 从整体上来叙述总显得有些不接地气 作为跟AI沾过一些边的博主将以自己接触的方面来发表一点看法 首先介绍一下 xff
  • 最优传输理论与计算 ——雷娜 顾险峰 【新书发布】

    缘起 1995年秋季 第二作者刚刚来到哈佛大学开始攻读计算机科学领域的博士学位 并在数学系学习丘成桐先生的微分拓扑课程 同时在麻省理工学院人工智能实验室学习Berthold Horn教授的机器人视觉课程 Horn教授提倡从物理的角度来理解视
  • 1.2.6 Linux distributions

    鸟哥的Linux私房菜 基础学习篇 xff08 第三版 xff09 第1章Linux是什么 xff0c 本章介绍为何Linux可以免除专利软件之争 xff0c 并且了解到Linux为何可以同时在个人计算机与大型主机上面大放光彩 本节为大家介
  • 全球40个免费电子图书馆网址~收藏

    中文 中图在线 xff08 提供 3600 种国外期刊的查阅服务 xff09 http cnplinker cnpeak com 国家哲学社会科学文献中心 xff08 提供 2039 种中文期刊 xff0c 7898 种外文期刊 xff09

随机推荐

  • 【docker】WSL+docker_desktop+GPU配置环境失败

    尝试windows下使用docker desktop安装深度学习的GPU环境 xff0c 结果很失败 xff0c GPU调用不了 我一共尝试两种方式调用GPU 第一种是新版本WSL2直接支持 xff0c 下载一个Nvidia官方的docke
  • public,private,protected 常见区别

    1 作用域public private protected 以及不写时的区别 答 xff1a 不写时默认为default 区别 作用域当前类 同一package子孙类其他packagepublic protected default pri
  • NETCONF协议netopeer软件安装与环境搭建

    NETCONF协议netopeer软件安装与环境搭建 目录 NETCONF协议netopeer软件安装与环境搭建 目录简介相关网站参考准备工作手动编译安装部份依赖包手动编译netopeer启动与验证 简介 最近工作涉及一些NETCONF协议
  • centos7 vnc黑屏解决办法

    手动安装的dbus与系统dbus冲突 xff0c 导致vnc启动黑屏 解决办法如下 xff1a 通过命令 find name 34 dbus daemon 34 查找安装的dbus 其中 usr bin dbus daemon 是系统自带的
  • OVS常用命令与使用总结

    OVS常用命令与使用总结 说明 在平时使用ovs中 xff0c 经常用到的ovs命令 xff0c 参数 xff0c 与举例总结 xff0c 持续更新中 进程启动 1 先准备ovs的工作目录 xff0c 数据库存储路径等 mkdir p et
  • 故障容忍分布式协调框架 Atomix

    Atomix 详细介绍 Atomix 是 JAVA8 的故障容忍分布式协调框架 Fault tolerant distributed coordination framework for Java 8 主要特性 xff1a list 可靠
  • 极几何,本质矩阵,基础矩阵,单应矩阵,相机投影矩阵

    什么是三角化 xff1f 三角化就是下图的红字部分 xff1a K和K 分别为两个相机的内参矩阵 什么是极几何 xff1f 极几何描述了同一场景或者物体在两个视点图像间的对应关系 下图中的O1和O2分别是两个相机的光心 xff0c 即摄像机
  • vncserver Cannot establish any listening sockets - Make sure an X server isn‘t already running(EE)

    说明vnc按顺序想要打开的可视化界面端口已被占用 xff0c 可以使用ps ef grep X命令查看一下进程里已经打开的图形化界面 xff08 有些是其他用户已打开的vnc xff0c 有些是系统默认已启用的图形界面 xff0c 不要随意
  • 如何处理linux Ubuntu网络不通的问题

    ubuntu 网络图标不见的问题解决方案 xff08 即无法联网解决方案 xff09 尝试以下操作 xff1a sudo service network manager stop sudo rm var lib NetworkManager
  • UCOSII学习---五、任务通信之信号量

    一 xff1a 信号量的理解 xff1a 信号量的本质是数据操作锁 xff0c 它本身不具有数据交换的功能 xff0c 而是通过控制其他的通信资源 xff08 文件 xff0c 外部设备 xff09 来实现进程间通信 xff0c 它本身只是
  • Python添加或去掉百分号

    数据 xff1a import pandas testing as tm data 61 tm makeDataFrame data 61 data iloc 5 示例数据 xff1a A B C D 6EBYVo9iQi span cla
  • MxNet(GPU版本)安装及相关配置(CUDA,CuDNN,Graphviz,d2l,虚拟环境配置)及最终建议

    深度学习框架MxNet配置 xff08 GPU版本 xff09 1 对应镜像 xff1a https mirrors aliyun com pypi simple mxnet 找到与自己电脑Python版本对应 xff08 命令行使用pyt
  • Kali Linux使用(含VMVare station player安装教程)

    VMware Workstation Player下载及安装配置 1 官方下载地址 xff1a VMvare Workstation Player 2 安装 xff1a 基本一路点 xff0c 需要注意的地方就是后面弄好了要重启一下 xff
  • 那些提升效率的tips(不定期更新中...)

    电脑插了网线可以上网却显示无internet 打开设备管理器 xff08 找不到在控制面板中搜索 设备管理器 xff09 找到网络适配器 选择网卡驱动程序 xff0c 先禁用设备再开启设备 xff08 重启 xff09 用MarkDownl
  • cmake的一个编译报错

    在一台新搭建的服务器上执行cmake的时候 xff0c 报了如下错误 xff1a cmake The C compiler identification is unknown The CXX compiler identification
  • 名词解释专用链接

    算法相关 xff1a 主元素 设T 1 n 是一个含有n个元素的数组 当 i T i 61 x gt n 2 xff0c 时称元素x是数组T的主元素 例如 xff0c T 61 1 1 1 2 5 5 1 1 1 1 xff0c T中有10
  • 微服务讲堂--【4】风洞系统

    一 系统特性 风洞是以人工的方式产生并且控制气流 xff0c 用来模拟飞行器周围气体的流动情况 xff0c 并可测量气流对飞行器的作用效果以及观察物理现象的实验设备 这个定义来自百度百科 xff0c 微服务和飞行器压根就搭不上边 xff0c
  • 微服务讲堂--【5】系统自举

    这里的 系统自举 借用了操作系统的概念 在操作系统启动之前 xff0c 计算机要先加载自举程序 xff0c 再由自举程序加载操作系统的启动程序 整个详细过程不在这里描述 xff0c 可以在网络查阅相关资料 为什么要在微服务系统中特别提及系统
  • 微服务讲堂--【6】系统稳定性

    稳定性 xff0c 通常是以可靠性来衡量 xff0c 即我们常说的几个9 xff0c 这个主题在之前各个系列文章中已经提到过 xff0c 本来没有打算单独写一篇 前几天一个老同事在群里发出一个灵魂之问 xff0c 如何解决生产环境更新系统后
  • 状态和无状态--2种服务器架构之间的比较

    对服务器程序来说 xff0c 有两个基本假设十分重要 xff0c 究竟服务器是基于状态请求还是无状态请求 状态化的判断是指两个来自相同发起者的请求在服务器端是否具备上下文关系 如果是状态化请求 xff0c 那么服务器端一般都要保存请求的相关