【问题标题】:Detemining if a webapp is stateless确定 web api 是否是无状态的
【发布时间】:2017-05-31 02:15:58
【问题描述】:

在前任开发人员离职后,我最近接手了内部网络应用的开发工作。

待办事项清单上的一件事是在服务器上实现多个进程,使用 PM2 似乎很容易实现。

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

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

我相当肯定后端是这样编写的,以便我们从前端传递我们需要的信息,并且只对传递的信息采取行动。

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

【问题讨论】:

    标签: angularjs node.js hapijs stateless


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在这种情况下,无状态意味着 Hapi 服务器不应该在 api 请求之间保持任何状态。在典型设置中,您可能有数据库、api 服务器和客户端(网络浏览器)。当客户端向您的 api 发出请求时,如果它所做的只是执行一些逻辑,在数据库上执行事务,然后将结果返回给客户端,那么您可以说 api 服务器是“无状态的”。

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

      要关注的两个主要领域是会话数据和 websocket。会话数据需要存储在进程外,即存储在数据库或内存存储(如 Redis)中。 Websocket 需要启用所谓的“粘性会话”,以便它们与集群一起工作。我自己不必这样做,但是有一个节点模块 sticky-session 可以执行大部分工作。

      【讨论】:

      • 我是这么想的,而且我很确定 API 是无状态的,但是知道将焦点放在哪里可以使任务易于管理
      【解决方案3】:

      您需要与您的 PM 澄清这一点。 根据定义,没有网站是真正无状态的(缓存)。 一旦你有任何会话或身份验证,你就会再次获得状态。

      只要您不想删除最有用的功能,就忘掉 $scope/LocalStorage 吧。如果没有进一步说明,这很可能是 BS 要求。

      【讨论】:

      • 小团队。没有PM可以咨询。由于 Sergey 提到的原因,无状态要求来自 PM2。只是想弄清楚我需要确保设计的哪些方面是无状态的,所以我不会去追逐鹅
      • 嗯,这是一个不同的故事和一个有效的要求。我将 PM2 误解为 Project Manager 2(就像您在谈论不同的人一样)。对此感到抱歉。如果您使用的是 sql 数据库,您可以开始考虑是否应该将一些操作包装到事务中。
      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2020-11-10
      • 1970-01-01
      • 2011-01-17
      相关资源
      最近更新 更多