Azure Container Instances vs. AWS Fargate


【编者的话】本文主要针对 Azure Container Instances 与 AWS Fargate 在启动、配置等方面的复杂性,使用的难易程度及价格维度进行了对比,可以让读者可以更加立体地对两个服务有一个直观的了解。

在刚刚过去的 AWS re:Invent 2017 大会上,AWS 发布了全新的容器服务 Fargate。Fargate 以无集群、无服务的形式运行容器。 AWS 将 Fargate 加入到了用来管理 Kubernetes 集群的 EKS之中,到2018年才会在部分地区开放注册。

AWS 好像在追赶微软的 Azure。在过去几个月中,Azure 在预览版中发布了 Azure Container Instances(ACI),并且在 Azure Container Service 中包含了管理 Kubernetes(及 DC/OS)的功能。

Fargate 是一个全新的服务,而且目前仅在美国东部地区可用,但将其与 Azure Container Instances 比较一番仍着实有趣,因为它们看似有着相同的目标受众和价值。但不要被表象所迷惑,事实证明两者完全不同。

入门

我们先来看看两个服务从零开始(这里的从零开始意味着你拥有一个具有相应权限的 AWS 和 Azure 帐户)是否可以轻松地启动一个容器,并向 Internet 发布一个简单的网页。

Azure Container Instances 启动及运行

ACI 没有真正的可视化设置向导或 GUI。幸运地是 Azure CLI 很优雅,运行一个容器也很简单:两条 bash 命令就能搞定。
  • 创建资源组
  • 创建容器实例


az group create --name timACI --location eastus
az container create --name simpleservice --image magneticio/simpleservice:1.0.0 --resource-group timACI --ip-address public --port 3000
az container show --name simpleservice --resource-group timACI
Name           ResourceGroup    ProvisioningState    Image                           IP:ports             CPU/Memory       OsType    Location
-------------  ---------------  -------------------  ------------------------------  -------------------  ---------------  --------  ----------
simpleservice  timACI           Succeeded            magneticio/simpleservice:1.0.0  52.191.116.216:3000  1.0 core/1.5 gb  Linux     eastus

执行完两条命令后,使用 az container show 便可以看到服务在 52.191.116.216:3000 已经可用。
01.png

Fargate 启动及运行

根据 AWS 所述,Fargate “允许运行容器而不必管理服务器或集群”。但是,运行 Fargate 容器的第一步是创建一个集群,虽然创建集群很快,也不需要管理,但还是少不了创建这一步。

一般来说,在 Fargate 上配置一个运行的容器要比在 ACI 上要复杂得多, 需要使用 AWS GUI 执行以下步骤,其中每个步骤都包含大量选项以及下拉框和输入。
  • 创建一个集群
  • 创建一个任务
  • 创建一个容器
  • 在已创建的集群中创建服务,类型选择 Fargate,选择 VPC、子网、安全组等,确保选择“自动分配公网 IP”,负载均衡四选一:无、应用、经典或网络负载均衡器。
  • 选择自动扩容,可跳过


显然 Fargate 已经完全嵌入到目前 Amazon Elastic Container Service(ECS)的服务中了。实际上你需要选择 Fargate 作为“启动类型”,而不是 EC2 版本。
02.png

这就意味着 Fargate 配置灵活且包含 ECS 的附属功能,在我看来,AWS ECS 的配置很麻烦,虽然这不是什么大问题。

完成上述设置后,仪表板会通知我们容器正在运行。但是,在哪里可以找到它呢?这让我一阵好找:UI 中没有任何入口,并且在 AWS CLI 中根据描述调用之后结果中也没有任何信息。事实证明,你必须先导航到任务的 ENI(弹性网络接口),然后到标准的 EC2 控制台才行,其中列出了公共 IPv4 地址。

最初的尝试没有得到响应。将端口3000添加到与 ENI 相连的安全组解决了这个问题。
03.png

注意:上述完整的设置可以使用 AWS CLI 完成,请参阅 AWS’s own write

使用

现在容器启动了,让我们看下可以干点儿什么。

Azure Container Instances

ACI 没有真正的 GUI,只有一个只读屏幕显示正在运行的容器,出于某种原因称之为“容器组”。这意味着你要使用 Azure CLI 与 ACI 进行交互,实际可以进行的操作有限:
az container [-h] {show,logs,list,delete,create} 

没有停止,没有挂起,没有扩容,没有指标,没有更新,没有卷/磁盘挂载,啥都没有,倒是可以查看日志。事实上,没有伸缩,就像同一容器启动多个版本的负载均衡一样,即使在这个服务的 MVP 形式中,也是一个很大的不足。

因此,ACI 看起来像是集成完善的 Azure 大陆上的一座岛屿,我敢打赌,微软正在着力开发负载平衡解决方案比如 volume mounting。

Fargate

如前所述,Fargate 设置比 ACI 复杂得多。但是越过这些荆棘之后,你就会拥有一个非常灵活且支持良好的容器平台,同时基本上包含了 ECS 的所有功能:
  • 停止,启动,伸缩,自动伸缩,调度等
  • 负载均衡
  • 安全组,IAM,角色等
  • VPC,子网,ENI,公共IP,卷等
  • 集成的 CPU 和内存使用指标


可能如你所料,尽管 AWS 有把 Fargate 当做独立服务的意思,实际上 Fargate 并不是一个独立的 AWS 服务:Fargate 是 ECS 上不同的容器运行时。在日常使用中,你使用的是 ECS 而不是 Fargate。

性能

警告:这是个非深入的“性能测试”。实际上大部分是一个网络吞吐量测试。但是,我很好奇,在简单的性能测试上,两个服务是否存在任何明显和巨大的差异。

测试用例是提供简单页面的 Node.JS Hapi 应用程序。运行 Apache Bench Benchmark,发起1000次请求,每10次请求中超过5个并发,结果如下:
ACI      Fargate
Requests per second (#/sec):     43.34      45.54
Time per request (ms):         118.083     109.797
99% (ms):                          371      276

结果非常接近,连接时间也很短。

价格

两种服务使用的定价模式很相似,主要花费的计算方式:

时间 * 容器数 * 内存大小 * CPU数

每创建一个容器,ACI 收取 0.0025 美元的“创建请求”成本。这种模式与基于资源的按次付费模式在一定程度上让人分不清楚,但对大部分人来说,这不是个大问题。Fargate 容器的最小收费单位是分钟。

举个例子:一个月(30天)内每天创建5个单核、2GB 的容器实例。每个实例的持续运行时间是10分钟(600秒)。Fargate 不提供1个vCPU、1GB的组合。1个vCPU容器的最小容量为2GB。

一个月的成本如下:
  • Azure Container Instances:3.75 美元
  • AWS Fargate:1.90 美元


你可以在 Google 表格中查看上述示例的计算结果,调整数据来进行价格比较。

注意:此计算仅针对给定服务的定价,并将 Azure 内核等价于 AWS vCPU。此外,AWS 会提示你添加其他付费服务,如负载平衡器以获得“完整的软件包”。

结论

通过这次比较,我原以为这两个服务是非常相似的,但并非如此。在目前的版本中,两种产品的使用情况大不相同。

Azure Container Instances 非常像 Requestbin 或 JsFiddle 这样的服务。一个快速简单的沙盒,用于运行类 Heroku 服务的容器:一条bash命令,容器服务就上线了。我非常喜欢这种模式,我从来没有如此快速的将容器上线到互联网。对于如 Ngrok 这种服务来说,这种方式可能比本地 Docker 实例还要快。在原型设计、与客户进行远程工作或者需要在聚会、会议中快速演示时,我会使用 ACI。

正如 AWS 所描述的,Fargate 是 ECS 和之后的 EKS 中的一项技术。这意味着它位于 DC/OS 和 Kubernetes 空间中,并包含其中功能。如前所述,你每天都使用的不是 Fargate,它在后台管理ECS 集群。

Azure Container Instances 总结

  • 在 Azure 生态系统中看似独立的解决方案
  • 10秒启动,0 配置
  • 就像 Heroku 的轻量级版本或 JsFiddle 容器


AWS Fargate 总结

  • 处处集成到现有的 AWS 和 ECS 生态系统中
  • 配置繁琐
  • 将完全支持实际环境中的大型部署


原文链接:Azure Container Instances vs. AWS Fargate(翻译:李加庆

0 个评论

要回复文章请先登录注册