amazon-web-services - AWS ECS 服务内存或 CPU 要求的经验法则
问题描述
我正在使用 AWS ECS 部署我的网站。现在我想知道——
- 是否有任何经验法则或任何方法来确定服务的内存或 CPU 大小?
- 或者有什么方法可以确定集群的EC2系列实例?
- 使用 Fargate 而不是 EC2 是否更好地节省成本?
- 在 AWS ECS 中使用自动缩放的更好方法是什么?
我有两个任务定义 -
- 提供 html、css、JS 的 Web 服务器(前端服务器)
- 微服务(后端服务器)
解决方案
实际运行具有一些代表性负载的服务。使用top (1) 之类的工具进行观察,它可以告诉您实际内存使用情况(在 中
top
,查找rss
或rsz
列)和 CPU 利用率。任何给定服务的资源利用率都非常依赖于语言选择、运行时、负载、并发性、算法决策、数据库约束……而且确实没有经验法则。匹配您实际测量的资源利用率、一些假设的部署计划和AWS EC2 实例类型列表。如果您有 4 个服务,每个服务需要 1 个完整的 CPU 内核和 1 GB 的 RAM,并且您希望每个服务运行 3 个副本,那么您总共需要 12 个内核和 12 GB 的 RAM;如果您希望将其分布在 3 个主机上,则 3x c5.xlarge 实例可为您提供 12 个内核和 24 GB 的 RAM。
一般来说,托管的 AWS 服务并不比自己在裸 EC2 实例上运行相同的服务便宜。对于 Fargate,它按CPU 小时和 GB 小时计费,用于计划任务。在撰写本文时,我上面描述的假设工作量将花费大约 0.54 美元/小时
us-east-1
;对于EC2 按需使用,3 个 c5.xlarge 实例的费用为每小时 0.51 美元(如果您能够承诺购买预留实例,这将变得更便宜)。如果您的工作负载非常突发,则调度和取消调度 ECS 任务可能比 EC2 实例更容易,并且 Fargate 定价模型可能更适合您。ECS 文档有一个关于设置 CloudWatch 和自动扩展组以自动扩展集群的教程。缩小规模有点棘手(您需要将实例设置为 drain,等待任务实际移动,然后取消配置它)。
如果您处于全 AWS 环境中,请考虑直接在 S3 中托管静态内容。这可能比运行专用服务器更便宜且更易于管理。
推荐阅读
- c++ - C++ 避免动态内存分配
- c - 为什么我会抛出未处理的异常:读取访问冲突
- swift - 为什么在 Swift 中两个不同的数组字面量彼此相等?
- python - 有没有办法从嵌套字典中访问一个值并根据搜索列表更新同一个字典中的值?
- r - 在 R 中以 3D 形式绘制单纯形
- arrays - 2D VBA 数组的移位元素
- amazon-web-services - 如何编写 terraform 代码来为过多的数据库连接创建 aws_cloudwatch_metric_alarm?
- javascript - 在 React Native v.5 中导航离开某个屏幕时,如何隐藏底部选项卡导航器?
- r - 改变 R 中 svars 包生成的 ggplot 中的美学
- ruby - 如何添加尊重字母顺序的生成器