什么是有状态流动和无国籍?

时间:2014-12-28 19:25:49

标签: architecture

摘自我的架构书:

  

如果需要迁移的软件模块包含运行时状态,则模块的迁移称为有状态移动性

     

如果只需要迁移代码,那就称为无状态   迁移率

此上下文中的运行时状态是什么?有人可以为每个案例举个例子吗?

1 个答案:

答案 0 :(得分:2)

"运行时状态"只是 - 运行时已知的信息。

让我们说你正在运行游戏。如果您有关于服务器内存中每个玩家的信息,并且需要通过同一台服务器路由有关该玩家的请求,那么您的游戏就是有状态的。

如果您在客户端上保留有关玩家状态的信息(希望签名或加密以防止作弊!)并在每次请求时提交该信息,那么您的服务器就是无状态 - 处理过程中需要知道的一切请求是该请求的一部分。

如果您将信息保存在数据库中,这会使水域变得混乱 - 您的系统(其中数据库是组件)是有状态的(数据库包含其状态),但< i>个人服务可能是无国籍的(如果它在每次请求时从数据库中检索所有必要的信息)。

缓存行为使得水域变得混乱 - 正如他们所说的那样,但是表示你不必在服务器之间迁移时需要关心(除了冒一些性能损失的风险)。因此,出于服务移动性的目的,可以选择不将缓存计为状态。