Amazon web services 启动和关闭适用于AWS ECS或Kubernetes的实例?

Amazon web services 启动和关闭适用于AWS ECS或Kubernetes的实例?,amazon-web-services,docker,amazon-ec2,kubernetes,amazon-ecs,Amazon Web Services,Docker,Amazon Ec2,Kubernetes,Amazon Ecs,我正在尝试创建某种网络基础设施,并一直在关注亚马逊ECS和Kubernetes。然而,我不太确定这些系统是否符合我的实际要求,或者我是否将它们扭曲成其他东西。如果我能描述一下我手头的任务,有人能验证一下Amazon ECS或Kubernetes是否真的会在这方面帮助我,这是正确的思考方式吗 我试图做的是在AWS实例上按需处理单个任务。我的意思是,我有一个资源密集型应用程序,我想在云中运行,并处理用户提交的一大块数据。我想提交一个将在应用程序上处理这些数据的文件,让EC2实例启动,处理数据,将结果

我正在尝试创建某种网络基础设施,并一直在关注亚马逊ECS和Kubernetes。然而,我不太确定这些系统是否符合我的实际要求,或者我是否将它们扭曲成其他东西。如果我能描述一下我手头的任务,有人能验证一下Amazon ECS或Kubernetes是否真的会在这方面帮助我,这是正确的思考方式吗

我试图做的是在AWS实例上按需处理单个任务。我的意思是,我有一个资源密集型应用程序,我想在云中运行,并处理用户提交的一大块数据。我想提交一个将在应用程序上处理这些数据的文件,让EC2实例启动,处理数据,将结果上传到S3,然后关闭EC2实例

我已经使用简单的队列服务EC2和Lambda为这个问题准备了一个功能强大的解决方案。但我想知道ECS或Kubernetes会让这更简单吗?我一直在看ECS文档,它似乎不太关心启动和关闭实例。它似乎希望有一个持续运行的实例,然后docker映像作为要运行的任务提供给它。是否可以配置Amazon ECS,以便在没有任务运行时自动关闭所有实例

此外,我也不明白我将如何提交要处理的特定数据块。看起来Amazon ECS中定义的“任务”实际上对应于一个Docker容器,而不是Docker容器将处理什么样的数据。对吗?因此,我仍然需要通过简单队列服务或其他方式将要处理的数据提供给实例吗?然后使用Lambda轮询这些队列,看看它们是否应该向ECS提交任务


这是我目前对这一点的天真理解,如果有人能帮助我更好地理解我所描述的事情,或者为我指出更好的思考方法,我将不胜感激。

这是一个复杂的问题,要获得一个好的答案,许多细节取决于您所在领域/系统的确切要求。因此,以下信息基于您给出的非常高级别的描述

ECS、kubernetes等的许多功能都是为了允许分布式应用程序充当单一服务,并且具有水平可扩展性、可升级性和可维护性。这意味着它有助于统一服务接口、负载平衡、服务可靠性、零停机维护、根据需求(或其他指标)上下扩展工作节点的数量等

下面介绍了kubernetes(它比AWS ECS更通用)用例解决方案的高级思想

因此,对于您的用例,您可以设置一个运行分布式事件队列的kubernetes集群,例如ApachePulsar集群,以及一个正在发送队列事件以进行处理的应用程序集群。您的应用程序集群大小可以根据队列中未处理事件的数量自动扩展()。集群基础设施将配置为根据计划的POD数量(POD在基础设施上的保留容量)自动扩展

您必须确保应用程序可以在容器中以无状态形式运行

我看到的当前解决方案的主要好处是云提供商的独立性,以及运行集装箱化系统的一些一般好处:1。不必担心EC2实例在工作负载的操作系统依赖性方面的精确设置。2.能够将处理应用程序作为单个服务进行寻址。3.可能提高可靠性,例如在出现错误的情况下

关于你的确切问题:

如果没有正在运行的任务,是否可以配置Amazon ECS 是否自动关闭所有实例

这里的关键字是自动缩放。请注意,有两个级别的缩放:1。基础架构扩展(EC2实例的数量)和应用程序服务扩展(部署的应用程序容器/任务的数量)。ECS基础架构扩展基于EC2自动扩展组。有关更多信息,请参阅。有关应用程序服务扩展和无服务器ECS(Fargate)的信息,请参阅

此外,我不明白我将如何提交一份具体的报告 要处理的数据块。它看起来像中定义的“任务” Amazon ECS实际上相当于一个Docker容器,而不是太多 Docker容器将处理什么样的数据。对吗

ECS中的“”描述了如何部署一个或多个docker容器,以及其环境/限制应该是什么。任务是在“服务”中运行的单个实例,服务本身可以部署单个或多个任务。类似的概念是kubernetes中的Pod和服务/部署

那么我还需要将要处理的数据输入到 通过简单队列服务的实例,还是其他?然后使用Lambda进行轮询 这些队列是否应该向ECS提交任务


队列总是有助于将服务请求与处理分离,并确保不会丢失请求。如果您的应用程序服务集群能够提供服务接口并以可靠的方式直接处理传入的请求,则不需要使用该接口。但是,如果您的应用程序集群必须频繁地放大/缩小,这可能会影响其可靠处理的能力。

恕我直言,这个问题似乎有点宽泛。确切的问题是什么?它读起来有点像“做x的最佳方式是什么?”类型的问题,这导致答案主要基于观点。你能把它缩小一点或细分一点吗?例如ECS任务定义等。顺便说一句,您当前的解决方案似乎合理。谢谢。这有助于我更好地理解。通过阅读文档,我发现