访问多实例Opencpu中的会话文件夹资源

时间:2018-04-25 12:54:14

标签: r opencpu scalable

我有一个包含我的包的Opencpu服务器。该软件包包含一个生成绘图图像的功能。当我通过Opencpu向此函数发送POST请求时,我得到会话ID作为响应,其反过来实际上是包含资源的Opencpu服务器上的文件夹,image是一个。我将此图像URL(由Opencpu服务器提供)传递给我的应用程序,并使用它来创建PDF报告。

现在,我通过创建包含我的包的Opencpu的多个实例来扩展整个场景。实例位于Load Balancer之后。当我这样做时,我得到图像网址。当我的应用程序使用此图像URL时,可能找不到它,因为现在请求可能已经转到Opencpu的另一个实例。

如何解决此问题?我现在做的一件事是将图像上传到某个公共实例并将相应的路径返回给应用程序。但那太过分了。

感谢。

1 个答案:

答案 0 :(得分:1)

负载平衡总是有点复杂,所以如果可能,它就是 更容易移动到更大的服务器。大多数(云)提供商提供具有许多核心和100GB + RAM的(虚拟)实例,这将允许您 支持很多用户。

如果你真的需要负载平衡,有几种方法。 一种方法是将ocpu服务器上的 ocpu-store 目录映射到 共享的NSF服务器。默认情况下,opencpu存储所有会话 服务器上的/tmp/ocpu-store目录。您可以通过设置来设置不同的位置 tmpdir中的/etc/opencpu/server.conf选项。有一个示例配置文件,用于在服务器的/etc/opencpu/server.conf.d/ec2.conf.disabled中设置tmpdir(重命名为激活)。

如果您不想设置NSF服务器,则更简单的方法是 配置您的负载均衡器始终将特定客户端发送到 特别是后端。例如,如果您使用nginx,则可以设置load balancing method to ip-hash

显然,此方法要求客户端在会话期间不更改IP地址。和 只有当客户从变体连接时才会生效 的IP地址。