确定webapp是否是无状态的

时间:2017-01-16 09:26:13

标签: angularjs node.js hapijs stateless

我最近在上一个开发人员离开后接管了内部网络应用程序的开发。

待办事项列表中的一件事是在服务器上实现多个进程,使用PM2可以相当容易地实现挖掘。

然而 PM2的要求之一是应用程序应该是无状态的,我正在努力完全理解我需要追逐的东西。

基本架构是REST,后端有Node / Hapi,前端有Angular。

我很确定后端是这样编写的,这样我们就可以从前端传递我们需要的信息,并且只对传递的内容采取行动。

我们需要走多远才能走在前端。我们是否需要消除在$ scope中存储客户端信息?我应该关心Chrome开发工具中的本地存储或会话存储中是否有任何内容?

3 个答案:

答案 0 :(得分:1)

PM2要求应用程序无状态,以保证任何请求都以相同的方式处理(例如,具有相同的响应和副作用),无论处理它的工作者(服务器实例)是什么。

因此,您不应该关心前端应用程序。无国籍状态要求不适用于它。

答案 1 :(得分:1)

在此上下文中无状态意味着Hapi服务器不应在api请求之间维持任何状态。在典型的设置中,您可能拥有数据库,api服务器和客户端(Web浏览器)。当客户端向您的api发出请求时,如果所有操作都执行某些逻辑,则在数据库上执行事务,然后将结果返回给客户端,然后您可以说api服务器是“无状态的”' 。

另一方面,如果Hapi服务器将该事务的结果保存在内存中(缓存)以防将来的任何请求请求,那么您将拥有一个“有状态”的状态。如果另一个实例在此期间更新数据库,则可以提供过期信息的服务器。

要关注的两个主要方面是会话数据和websockets。会话数据需要存储在进程外,即在数据库或诸如Redis的内存存储中。 Websockets需要有一个名为“粘性会话”的东西。使他们能够使用群集。不必自己做,但有一个节点模块sticky-session执行大部分工作。

答案 2 :(得分:-1)

您需要与您的PM澄清这一点。 根据定义,没有网站真正无国籍(缓存)。 然后,只要你有任何会话或认证,你就有了状态。

忘记那个$ scope / LocalStorage的东西,只要你不想删除大多数有用的功能。如果没有进一步说明,Mooost可能是BS要求。