Concurrency 不同机器上的Webmachine

Concurrency 不同机器上的Webmachine,concurrency,erlang,scaling,distributed,webmachine,Concurrency,Erlang,Scaling,Distributed,Webmachine,我有一个webmachine REST API服务器在一台机器上运行。由于预期会有更多这台机器无法处理的流量,我需要扩展到其他cpu上的其他节点。有没有一种配置方法 如果不是,这里的正确分配方式是什么,我是否需要通过OTP、兼职员工和主管手动进行分配?生成工作进程并将请求发送到相邻机器的位置 这取决于您的用例。最好的方法是观察你们遇到问题的地方,并做出相应的反应 您可以将应用程序视为三个独立的部分。第一个是REST接口,第二个是业务逻辑(稍后再讨论),第三个是数据本身(资源,我们称之为数据存储,

我有一个webmachine REST API服务器在一台机器上运行。由于预期会有更多这台机器无法处理的流量,我需要扩展到其他cpu上的其他节点。有没有一种配置方法


如果不是,这里的正确分配方式是什么,我是否需要通过OTP、兼职员工和主管手动进行分配?生成工作进程并将请求发送到相邻机器的位置

这取决于您的用例。最好的方法是观察你们遇到问题的地方,并做出相应的反应

您可以将应用程序视为三个独立的部分。第一个是REST接口,第二个是业务逻辑(稍后再讨论),第三个是数据本身(资源,我们称之为数据存储,但它甚至可能只是另一个服务)

资料 这个最简单。我假设您正在为此使用单独的服务(如Riak集群),您可以单独进行扩展。您可以研究的一件事是确保Webmachine和数据存储之间的连接能够根据您的需要进行足够的扩展

接口 如果您的服务器无法处理足够的请求,请在其旁边放置另一个。您可以通过路由器向这两个therm、ans发送请求,因为它们将使用相同的数据存储,所以它们将保持“同步”

基于http的REST假定无状态通信。也就是说,任何两个请求(来自同一个用户或两个不同的用户)都不共享任何资源,可以由不同的应用程序处理(您也不必在您的Webmachine实例之间共享任何内容)

域逻辑 理论上,您不应该在RESTAPI服务器中包含这些内容,但还是让我们稍微讨论一下

您的一些请求可能只需要提供内容,而不需要做更多的工作。您可能正在进行一些计算(比如提供需要生成的统计数据)。您可能正在更新某些资源,这些资源需要在一个位置更改多个数据(可以将其视为事务)。它可能需要更高的计算能力,或状态同步,这将使扩展更加困难

解决这个问题的办法是将其余部分与这种逻辑分开。特别是引入微服务,您可以独立于Webmachine本身进行放大或缩小

在Erlang中,实际上可以引入单独的。在本主题中,可以通过使用(以及在本主题中使用)和工人拉动(例如,我建议在start中使用这种方法,因为它最容易实现,并且由于Erlang的异步特性,它始终可以轻松地移植到外部微服务

PS.系统资源 你还应该检查你的盒子是否能处理这样的流量。最常见的错误之一不是在你的产品中。但是,同样,你应该首先观察这些问题,然后对它们做出反应。在大多数情况下,过早的优化是没有用的

PS2什么和什么时候 您可以使用诸如或更多现成的工具来监控我们的应用程序和系统资源

您可以(应该)使用或之类的工具对应用程序进行压力测试