【问题标题】:IBM Cloud Code Engine: Stateful Apps and Sticky Sessions, Scaling IssuesIBM Cloud Code Engine:有状态应用程序和粘性会话、扩展问题
【发布时间】:2021-05-24 19:48:33
【问题描述】:

我在 stackoverflow 上的第一篇文章;来了!

我刚刚发现了 IBM Code Engine,很高兴尝试一下!这个周末我尝试部署我的 docker 映像,尽管我在缩放方面遇到了一些问题。在讨论扩展问题之前,我一般对 IBM Cloud Code Engine 有一些疑问,并考虑到我的交互式应用程序:

  1. 有状态应用程序:我要部署的应用程序是有状态的。 IBM Cloud Code Engine 是否支持开箱即用的有状态应用程序?
  2. Sticky Sessions:由于我的应用程序是有状态的,因此目标是让用户及其所有相关操作保持在同一个容器中。例如,如果用户在 @987654321 @ 并单击执行服务器端代码的按钮我不希望该代码在container 2 中执行;它应该在container 1。 IBM Cloud Code Engine 是否支持开箱即用?
  3. 临时存储:我在文档中看到可以设置临时存储(即磁盘空间),但我看不到在控制台中修改它的能力。我错过了什么吗?或者,更多的 vCPU 和内存是否意味着更多的磁盘?我个人更喜欢容器注册表的 CLI,以及代码引擎本身的控制台。

请注意,无论每个实例的并发是 1 个还是多个用户,我都有这些问题。

缩放注意事项: 我成功部署了我的应用程序,它看起来符合预期。但是,作为唯一的用户,我看到运行多个实例而不是一个(2 个,有时是 3 个实例)。当我打开另一个浏览器并以另一个用户身份登录时,同样的事情发生了。运行所需实例的两倍或三倍。有人可以建议吗?回到我上面的问题,我希望与应用交互不会触发额外的实例。

如果有帮助,我可以提供一个简单的 Dockerfile 和应用代码。

【问题讨论】:

    标签: ibm-cloud stateful ibm-cloud-code-engine


    【解决方案1】:
    1. 一般来说答案是肯定的,尽管这取决于您如何定义有状态以及将状态存储在何处。示例:可以将状态存储在 COS/S3 存储桶中,暂时不存储在 NFS 挂载中
    2. 很遗憾没有。底层的 Knative OSS 技术尚不支持粘性会话,尽管开源社区正在开发它,因此它可能即将推出。
    3. UI 目前不支持此功能,但在 CLI 中,您可以将 ibmcloud ce app create --ephemeral-storage 指定为参数
    4. 缩放:这取决于您如何定义缩放标准。创建应用程序时,您可以在 Runtime settings 部分指定并发值。这决定了一个实例将并行处理多少线程/请求的值。如果该值设置为 1,并且您打开了三个浏览器选项卡发送请求,代码引擎将扩展到(至少)三个实例(例如,当扩展目标是计算容量的 70% 时,我们将旋转到 4 )。如果该值设置为 100,则一个实例将处理 100 个并行请求,并且只有在收到 101 个请求时才会发生横向扩展。它与发送这些请求的用户数量无关。

    【讨论】:

    • 感谢您的快速回复和明确的澄清;这就说得通了。快速跟进 (2),因为如果应用程序状态驻留在存储桶中,我担心应用程序运行时和响应能力。如果 min instances = 0max instances = 1 服务器上的应用程序状态会以有限的方式工作吗? (包括使用本地文件系统)即设置实例 vCPU 和内存以处理估计的请求量。在这样的设置中,是否可以安全地说所有请求都保留在同一个容器中?如果是这样,考虑到缩放到 0 的功能仍然有好处,因此只需在应用运行时付费。
    • 只有在您的容器目前几乎从未缩小规模的情况下才会如此。如果它按比例缩小,则该特定容器会保留一些 TIMEOUT 值,但随后会被丢弃。当之后有新请求到达时,容器将从头开始重新创建,因此会丢失文件系统中的状态信息,因为它会得到一个新的临时文件系统。
    • 本教程展示了如何将数据库支持的 Web 应用程序部署到代码引擎。用户必须进行身份验证,并且该状态存储在会话 cookie 中。所有其他信息都保存在数据库中。我正在使用比例为零 cloud.ibm.com/docs/… 运行它
    • 澄清一下,我只关心状态数据保存(而不是混合请求)在请求期间。我在远程存储桶中有持久存储,计划是在应用程序加载时(建立连接时)提取状态信息,并在整个会话期间定期保存到该存储桶。因此,状态信息不会丢失,并且会在下次用户会话开始时再次提取(我有身份验证)。是否可以安全地说如果 min instances = 0 & max instances = 1 那么所有请求都保留在同一个容器中,文件系统可以使用,& scale=0 当有 0 个请求时是否安全?
    猜你喜欢
    • 2018-07-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2018-12-07
    • 2017-06-02
    • 2012-02-01
    相关资源
    最近更新 更多