Chris Fregly,前 Netflix 流平台工程师、 AWS 认证解决方案架构师和fluxcapacitor.com的负责人。
灵感来自Simone Brunozzi最近在旧金山AWS聚会上的演讲,并从我的最近一些Fluxcapacitor.com咨询业务收集,编辑了10个有用的时间及性能节省方案:
1. 查询 AWS 资源元数据
不记得您的 c1.xlarge 集群的EBS优化 IO 吞吐量吗?单一PUT的 S3 对象大小限制又是多少?Awsnow.info可以解决你所有关于AWS资源元数据的问题。对集成awsnow.info与您的应用程序感兴趣吗?很幸运,这里为你准备了一个REST API。
注:这些是默认软限制,会因账户而异。
2. 驯服你的S3 bucket
用一个CLI命令删除整个S3存储桶:
aws s3 rb s3://<bucket-name> --force
Recursively copy a local directory to S3:
aws s3 cp<local-dir-name> s3://<bucket-name> --region <region-name> --recursive
3. 理解AWS跨区域依赖性
从今年夏天早些时候的PagerDuty宕机博文显示一个有趣的跨区域依赖,它违反了关于AWS 区域隔离的传统思维。
摘要:us-west-1和us-west-2区域之间的北加州共同对等点故障,导致2个同步的AZ(每个在不同区域中运行)丢失,那些依靠此部署配置的东西,像HA、quorum(比如在PagerDuty示例中的ZooKeeper),同时丢失的还有在2013年4月13日这86分钟的负载均衡。
4. 使用 ZFS 与 EBS
不约而至的两个美味
在每个AWS文档中,EBS卷每年故障率(AFR)的预期值在0.1-0.5%之间,而商用硬盘的AFR在 4%左右,其中失败是卷的完全丢失。
为了保护自己免受这种风险(虽然很小),你可以使用RAIDZ配置将ZFS中的多个EBS卷集合起来。虽然相对无证,Chip Schweiss有一个很好的博文,有一些有用的脚本,详细介绍了这个话题。
5. 给你的RDS磁盘添加条纹以提高性能
有简单的小技巧使你的 MySQL 和 Oracle RDS 实例性能最大化。首先,尽可能小的给实例规划尺寸。然后,以5GB的增量慢慢增加你的存储,每个增量将创建一个额外的磁盘条纹,这将增加IO和减少寻道时间。
这一点,和许多其它优化技巧一样,可以在前 AWS 工程师的reddit页面 IAMA 找到。
6. 避免吵闹的邻居
在任何像AWS的多租户、非专用、虚拟化的环境,,你一定会体验到CPU受吵闹邻居的影响,也就是CPU Steal。CPU Steal是你的一位虚拟化客户非自愿地等待另一位客户正在使用物理主机CPU的时间百分比.
当使用基于EBS的EC2实例,你可以通过简单的停止和启动实例来逃离嘈杂的环境。你需要确保在它重新启动之前,你的运行状况检查策略不会终止该实例。对S3 支持的 EC2 实例来说,唯一的选择是要结束/发布一个新实例。
你可以通过选择较大的 EC2 实例类型避免吵闹的邻居。更大的虚拟化客户实例需要更多的物理主机资源,因此主机可以支持更少的整体租户。租户始终都是平等的实例类型。t1.micro非常嘈杂且有突发性,类似于老大学宿舍上铺的室友。
然而,,避免吵闹的邻居最有效的方法是是额外支付专用的EC2 实例.。记得专用的实例的费用吗?我们的朋友 awsnow.info 会告诉你答案。
7. 采用CloudFormation
AWS开发了一个称作CloudFormer的工具,允许你为你现有的 AWS 资源创建CloudFormation模板,此工具和CloudFormation本身一样巧妙和神秘。
CloudFormation模板的维护并不容易,但是,你可以在你的模板资源上使用类似#include的宏指令将每个资源的片段拼凑成一个完整的模板。这有利于模板的重用和片段注释。
通过Evan Brown的文章了解到,新的统一的AWS CLI已支持CloudFormation模板。
另一个项目troposphere,可以达到类似的效果。在这里,Peter Sankauskas在关于AWS的解答中描述了这一项目。
值得注意的是,,CloudFormation最近添加了对Virtual Private Cloud(VPS)的支持。
8. 避免为你的工作负载使用差的CPU架构
不同的CPU架构对某些工作负载启用更好的性能,这取决于NUMA特性、高速缓存大小、芯数、硬件线程数量、GPU等等.
像 AWS 的虚拟化的环境不能保证特定的 CPU 体系结构,AWS数据中心的物理软件基本上每天都会有更新。us-east-1,AWS最古老的区域之一, 包含几种不同类型的CPU——AMD Opteron、Intel Xeon和Intel Sandy Bridge。
如果您的工作负荷对这种物理 CPU 体系结构敏感,最好在启动(Linux 上的cat/proc/cpuinfo)时对此进行检测,以便重新启动/终止该实例。如果你对成本敏感,您可以运行该实例 55 分钟,然后终止它。用AWS,无论哪种方式你最少支付一小时的费用。
9. 一开始就使用Virtual Private Cloud(VPC)
VPC 现在是大部分地区新帐户的默认配置。改装一个非 VPC 环境来使用 VPC 是非常耗时的任务——特别是在大型部署中有很多的安全组件。
目前没有针对非 VPC 安全组(只入)和 VPC 安全组(入和出)的迁移路径。事实上,正是因为这种缺乏安全组迁移,Netflix仍在运行非 VPC。
另一个好处是,VPC启用 ELB作为专用子网之后的中间层负载平衡器。非VPC情况下,ELBs 是公开的。
一个常见的配置是使用ELB与HAProxy来启用更多细粒度控制负载平衡算法,因为 ELB 的是黑盒,可以比预计更有附着力。
值得一提的是,网络地址转换(NAT)实例在 VPC 中其实就是对专用硬件设备(单一 ASIC芯片)执行端口地址转换 (PAT)的EC2实例。
10. 在达到预期峰值之前预热和自动横向扩展您的 AWS 资源
ELBs——与其他 AWS 黑盒资源,如NAT、3、DynamoDB、Glacier和Beanstalk,都是由EC2 实例组成,就像您的自定义应用程序。
这些实例就像您的应用程序那样需要自动缩放。在AWS之前尚无自动完成的方法。
默认情况下,基于流量,亚马逊会尽力自动最佳化,但是,在预期峰值之前通知他们进行预热和资源配置总是最好的选择。
演示资源配置中的差异,以下是对高流量、预热和预配置ELB 的Netflix使用挖掘:
请注意,返回的 8 ELB 实例。此外还要注意双协议,启用了 IPv6。
下一步,下面是低流量、使用默认ELB的FluxCapacitor场景一览:
注意只有 2 个ELB 实例返回。
再次,这些都是ELB的组成实例,而不是ELB之后的实例。