Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails “工人”;“迪诺”;在AWS弹性豆茎_Ruby On Rails_Amazon Web Services_Amazon Elastic Beanstalk - Fatal编程技术网

Ruby on rails “工人”;“迪诺”;在AWS弹性豆茎

Ruby on rails “工人”;“迪诺”;在AWS弹性豆茎,ruby-on-rails,amazon-web-services,amazon-elastic-beanstalk,Ruby On Rails,Amazon Web Services,Amazon Elastic Beanstalk,AmazonWeb服务现在在其弹性Beanstalk中有一个工作层。但是,它仍然让我们困惑,我们来自于工人迪诺时代 作为比较,在Heroku中,可以为web和worker分别配置两个Dyno(类似于处理器?)。web将为任何请求工作,并将正常超时15秒。因此,如果您有一个持续时间超过该时间的请求,那么您的请求将只是超时,尽管本身并没有终止。在这种情况下,您应该使用worker,web dyno应该每分钟(可能)访问端点几次,以检查是否有任何结果返回给用户。要制作worker或web dyno,只

AmazonWeb服务现在在其弹性Beanstalk中有一个工作层。但是,它仍然让我们困惑,我们来自于工人迪诺时代

作为比较,在Heroku中,可以为web和worker分别配置两个Dyno(类似于处理器?)。web将为任何请求工作,并将正常超时15秒。因此,如果您有一个持续时间超过该时间的请求,那么您的请求将只是超时,尽管本身并没有终止。在这种情况下,您应该使用worker,web dyno应该每分钟(可能)访问端点几次,以检查是否有任何结果返回给用户。要制作worker或web dyno,只需滑动滑块即可。有时,您可能需要一个Procfile。但这并没有什么新奇的东西,也没有什么真正困难的东西,也没有什么令人困惑的东西

在AWS EBS(Elastic Beanstalk)中,从第1天开始您点击eb init,您将被询问它是标准还是工作者。当你达到标准时,似乎没有办法让你也成为一名工人


在我们的情况下,worker和标准web位于一个应用程序下。那么,我们如何为worker和standard使用EBS实例呢。我们的工人正在使用sidekiq和redis。请在这方面向我们提供指导或帮助。

AWS Elastic Beanstalk有两种类型的环境-Web层和工作层

Web层环境适用于Web应用程序—http/https请求处理。在负载平衡器后面有一个或多个EC2实例。您可以根据需要获得其他资源,如数据库。您可以选择您想要的平台,例如Ruby、Python、Java、Node.js、PHP、Docker

工作环境用于异步消息处理。创建工作环境时,没有负载平衡器。所有EC2实例都在自动缩放组中。所有这些实例都运行一个守护进程,该守护进程轮询单个SQS队列中的消息。当守护进程从SQS队列中提取消息时,守护进程将在localhost:80上发送HTTP Post请求。您可以配置端口,但重要的是守护进程将消息作为HTTP请求发布到本地主机上。您的worker应用程序实际上是一个web应用程序,它接收post请求并处理消息。成功处理消息后,worker守护进程期望在localhost上运行的web应用程序返回HTTP 200 OK响应。然后,守护进程从SQS队列中删除消息。您可以为任何平台编写worker应用程序,就像标准web服务器应用程序一样—Ruby、Python、Java、Node.js、PHP、Docker

基于我对您用例的理解,我建议创建两个弹性Beanstalk环境—一个标准环境和一个工作环境。标准web服务器接收HTTP请求并同步处理它们。此环境将相关数据放入SQS队列中。第二个环境是一个工作进程,在此环境中运行的守护进程轮询此SQS队列以获取消息。第二个环境是不向internet开放的web应用程序。worker守护进程将消息作为HTTP请求发布到您的worker环境。因此,您可以使用第二个辅助环境异步处理长时间运行的工作负载

使用worker环境,您可以使用自己的队列,或者Elastic Beanstalk可以为您生成队列。您可以根据需要配置消息可见性超时、http连接等参数,也可以使用默认值

以下是一些可能对您有用的链接:

这符合你的要求吗?如果您还有其他问题,请告诉我

更新

您需要在两个位置上载源代码—一个用于worker环境,另一个用于web服务器环境。如果有人从零开始,那么他们可能有两个独立的代码基。但我认为在您的情况下,我认为在两个环境之间共享一个代码库应该是非常好的。假设您的web请求到达'/register',那么应用程序中的register()方法可以将消息发布到SQS队列,并通过HTTP请求完成。现在,您的工作环境将轮询SQS队列,并通过本地主机上的HTTP将消息发布到URL“/async\u register”,该URL将在应用程序中调用方法async\u register(),并执行异步处理。这两种方法可以存在于同一源代码包中,工作环境和web服务器环境都可以共享该源代码包。worker和web服务器采用的代码路径将不同,因此web服务器环境将调用register(),而worker环境将调用async_register()方法

另一个警告是,本地主机上的工作进程守护进程发送的HTTP请求将包含HTTP头-“用户代理”:“aws sqsd/1.1”。阅读更多。因此,在web应用程序中,您可以使用一个侦听器在“/register”上发布请求,并根据此标头是否存在,在内部调用register()或async_register()方法

另外,我认为如果您想在两个环境之间共享代码库,您可以只在一个地方上载代码库。您的环境按逻辑分组到应用程序中。因此,您可以使用单个应用程序。您可以使用“CreateApplicationVersion”API调用将源代码上载到此应用程序。假设您上载了一个标签为“v1”的应用程序版本。现在,您可以在同一应用程序下创建工作环境和web服务器环境。创建环境时,需要提供要部署到环境的版本。在这种情况下,您可以将v1部署到这两种环境。因此,您将为两个环境共享相同的源代码。当您有一个新版本“v2”时。您上载此版本,然后对bo执行更新