什么是申请状态?

set*_*thu 10 migration state virtual-machine

这是一个非常普遍的问题.我对术语状态有点困惑.我想知道人们对"申请状态"的意思是什么?他们为什么称webserver为"无状态",数据库为"有状态"?

在实时迁移期间将VM内存从一台计算机移动到另一台计算机时,如何传输应用程序(在VM中)的状态.

传输系统的内存,缓存和寄存器值是否足以传输正在运行的应用程序的状态?

sar*_*old 16

你肯定问了一口 - 很不幸的是,在很多不同的背景下使用了" "一词,但每一个都是对这个词的有效用法.

  • 申请状态

    应用程序的状态大致是其内存的全部内容.这可能是一个难以理解的概念,直到你看到像Erlang的服务器循环这样东西,它明确地将一个变量中的应用程序的所有状态从一个函数的调用传递到下一个.在更"正常"的编程语言中,程序的"状态"是它的全局变量,静态变量,堆上分配的对象,堆栈上分配的对象,寄存器,打开文件描述符和文件偏移,开放网络套接字和相关联内核缓冲区等等.

    您实际上可以保存该状态并在其他地方继续执行该过程.用于Linux 的BLCR检查点工具就是这样做的.(虽然这是一项非常罕见的任务.)

  • 协议的状态

    协议的状态是一种不同的含义 - HTTP请求的无状态意味着每个Web浏览器与Web服务器的通信基本上从头开始 - 每个cookie都在两个方向上重新传输,试图"伪造"一些为了用户的利益,"会话"的数量.服务器不会跨任何请求为任何给定客户端打开任何资源 - 每个资源都从头开始.

    网络文件系统也可能是无状态的(早期版本的NFS)或有状态的(较新版本的NFS).早期版本假定读取,写入或元数据控制的每个单独的数据包将在它到达时提交,并且每次从文件中需要特定字节时,它将被重新请求.这使得服务器非常简单 - 它们可以执行客户端数据包告诉他们要做的事情,如果服务器重新启动或路由器消失,则不需要付出任何努力使服务器和客户端恢复一致性.但是,这对性能不利 - 每个客户每天都要求数百或数千次静态数据.因此,较新版本的NFS允许客户端上的一些数据缓存,以及服务器和客户端之间的持久文件句柄,服务器必须跟踪连接的客户端的状态 - 反之亦然:客户端也有知道他们对服务器的承诺.

    一个状态防火墙将跟踪活动的TCP会话.它知道系统管理员希望允许通过哪些会话,因此它会专门查找这些初始数据包.设置会话后,它会将已建立的连接作为自己权限的实体进行跟踪.(这是以前无状态防火墙的真正进步,它们将数据包隔离开来 - 以前防火墙上的规则集更容易实现相同级别的功能,但允许通过太多的假装会话已经激活的恶意数据包. )


Jas*_*ham 6

应用程序状态只是应用程序所在的状态,涉及程序正在执行的位置以及为应用程序存储的内存。网络是“无状态的”,这意味着每次重新加载页面时,不会保留该页面先前版本的任何信息。必须从服务器重新发送所有信息才能显示该页面。

从技术上讲,浏览器通过利用缓存和 cookie 等技术来解决网络的无状态性。