Amazon AWS使用体验

近几个月来简单体验了Amazon AWS大部分服务,现在分享一下使用感受。 Amazon EC2 从各方面来看,EC2应该算是Amazon的王牌产品。EC2功能全面,它可以在数分钟内launch一个实例,可以(理论上)自动提升/降低机器性能配置,可以绑定EBS成为具有高可用性特质的计算核心,可以摇身一变成为ELB成为一个load balancer。这些功能非常实用,特别适合针对国外市场且快速增长的小网站,可以在前期完全不受机器约束。 EC2机器的内核在申请时指定,有很多选择,如果有闲心,还可以做一个自己专用的,我们没用这个功能,实在太繁琐了。EC2提供了完全的root权限,可以随意安装软件,由于EC2一般带有足够的硬盘空间(Large Instance就自带850GB磁盘空间),装个mysql当数据库机器也完全没有问题。 EC2最大优势是灵活,最大劣势则是性能。EC2的IO性能欠佳,当EC2机器作为mysql数据库时,系统吞吐量只能到3~10 MB/s,相比而言,在同样数据同样程序条件下,使用真实机器则能轻松达到30MB/s。EC2的CPU是多个实例共享的,一般stolen的CPU都在10%左右,对于nginx+php-cgi这样的组合,EC2高端配置也不太能撑住压力,总是CPU吃紧。 虽说EC2劣势明显,但由于互联网应用一般都很容易做到水平扩展,它的灵活性可以很大程度缓解这个劣势,不会有太大问题。不过最终我们还是放弃了EC2,主要因为今年5月Amazon云计算服务出了大量的事故,仅5月头两周,在同一个机房就出了5起大事故,我们在3起事故中受影响,每次都很不幸的都是单点EC2出问题,最长的一次在高峰期中断了6个小时服务,损失巨大。最郁闷的是,到了5月下旬,有一台跑数据库的EC2机器莫名奇妙磁盘损坏,还有一台莫名其妙的无法ssh,让我们感觉越来越不靠谱,于是决定逃离。云计算的可用性始终值得担心。 EC2的价格相对传统IDC要贵不少,按高端机器High-Memory Double Extra Large每小时1.2US$来算,每月就要花864US$,再加上流量费,很容易达到每台服务器1000US$的水平。 Amazon RDS RDS是一种数据库托管服务,通过RDS toolkit可以很方便的创建RDS实例并立即使用。据Amazon帮助文档说,RDS的数据库软件维护、升级、优化的工作全部由Amazon负责,用户只需要使用功能即可。 可惜,RDS纯粹是一个看起来很美的东西。首先是RDS为了同时支持异构的数据库,牺牲了很多灵活性,例如,因为无法访问RDS的物理机器或存储空间,使得跑着mysql的RDS实例连记录slow log都成了难事,更别说什么err log,出了问题只能一抹瞎。如果要获取bi/bo这样的数据需要使用专用的RDS toolkit完成,很难集成到现成的监控工具里去。其次,RDS底层使用的是类似于EBS的网络存储,其IO性能差到一个令人发指的地步。一个很感性的数据是:使用RDS Double Extra Large DB Instance跑mysql时慢查询占1%,同样数据转到EC2 High-Memory Double Extra Large实例后慢查询降为0.01%。最让人无语的是RDS价格高于同等配置的EC2+EBS价格,每小时都贵超过0.3US$,相当于贵25%,省下来的钱用来雇专业运维人员绰绰有余,而且RDS功能和灵活性还远弱于后者,不怕折腾但怕花钱的人不建议选择RDS。 如果执意要使用RDS,那么一定要注意RDS没有固定IP,每次重启实例(或过一段时间)都会变,程序连接的时候最好写域名,当然,这会损失性能。此外,RDS可用性也没宣传的那么高,我们5月最先挂的就是RDS实例,一挂就是好几个小时。 Amazon S3 S3是少有的看上去物美价廉的东西,只需要花几美元就可以拿到几十GB空间,对一般的互联网应用来说绰绰有余。 S3提供丰富的API和工具上传文件。对firefox用户来说,有一个专门的S3扩展可用,可直接上传本地文件。还有一个s3curl.pl工具,可以用命令行传任意文件,可以方便的做到自动化。 S3存储的文件可以直接通过域名从外网访问,不过比较郁闷的是文件尾部不能带“?“,一切基于文件名后面加随机串的避免缓存的做法都会失效。 Amazon CloudFront CloudFront是一种CDN,它的访问速度据称不错,我们并没有实际使用过。 我们不使用CloudFront主要是因为很难控制文件在CloudFront中失效。根据我们的程序结构,我们需要在静态文件后面加version信息强制用户在必要时更新到最新版,现在由于CloudFront既不能手动invalidate某个文件,也不能保证CloudFront上缓存的文件及时更新(可能更新会花24小时),我们需要修改现在的策略才能使用到它。 CloudFront是根据用户所在网络来收费的,对于国内,CloudFront使用的是香港价格,贵于美洲和欧洲,不太划算。对于欧美市场,我也不清楚欧美CDN的价格究竟如何,无法比较。CloudFront在欧美的流量费用与EC2相同,不过由于没有按小时计的租费,总体价格会比EC2提供静态文件服务便宜很多。 Amazon CloudWatch CloudWatch是一个性能数据监视器,对于这个东西我只能说太小儿科了,没看出来有什么实际的用处。一旦开启CloudWatch,Amazon就会帮忙收集开启了这个服务的instance数据,包括CPU和IO信息等。可惜,数据精度不高(大概是几分钟一次统计),数字也只是个大概值,能看的数据也很少,无论对入门者还是高手来说,都不能带来太多价值。 CloudWatch看上去比较好的是可以配合EC2/EBS/Load Balancer toolkit做一些auto scale的事情,自动提升/降低EC2/EBS参数,还可以(理论上)自动launch新实例。这些东西我们都没尝试过,有兴趣的同学可以试试。 CloudWatch价格不贵,一台机器就只用0.1US$而已,不过一般还是不建议开,装一个其他监控软件更靠谱。 Amazon Premiun Support Premiun [...]

amazon云计算服务初体验

本周第一次实际使用amazon的云计算服务,主要包括Amazon Elastic Compute Cloud (EC2) 和Amazon Relational Database Service (RDS) ,有一些感受先记在这里。 先说说EC2。它很类似网上的虚拟主机服务,拥有root权限,可以完全控制上面的服务,默认拥有一个对外的dns地址,并可以开放80和22端口。 从性能上来说,EC2的表现很不错。从功能上来说,EC2最大的限制就是端口和ip。对于端口,80和22只能满足最基本的web应用,如果要使用自定义端口/协议的socket方式提供服务,恐怕就比较麻烦了。对于ip,默认每个EC2服务器都是动态ip,最安全的方法是用自己的域名做CNAME转发来对外提供服务。有一点需要注意,EC2服务器的外部dns和ip是绑定的,一旦给它换ip,例如为它花钱绑定一个固定ip,它的外部dns也会变,这就需要修改自己域名的CNAME记录。可麻烦就麻烦在EC2实例换了ip后立即就换外部dns,而普通dns缓存则可能会很长,这将造成在换ip的这段时间内服务可能不稳定。为了长治久安,还是一开始就申请一个固定ip会比较稳妥呢。 EC2对外部流量收费,内部不收费,或者在跨区的内部服务器通信时收非常少的费用。EC2服务器单机流量上数十MB/s不成问题,不过随着提供服务的EC2服务多了起来,我们自己搭的load balancer服务器已经有点力不从心,看到EC2有专门的load balancer服务,并且还挺便宜,下周一定试一试。 相比EC2,RDS则非常的不自由,它不能用ssh登录,数据库程序也不能控制版本,还有不少数据库配置不能改。如果在RDS上使用mysql+innodb,那么有不少不爽的地方: innodb_data_file_path配置不能自己控制。RDS会将这个设置为ibdata:10M:autoextend,且不能改,这对高并发的读写会造成问题。 没法在本地以文件方式保存slow log。 无法直观的监控机器性能,只有一些RDS专用的命令行工具能得到一些实时的数据。 无法对操作系统进行进一步调优,甚至都不知道底层跑的是什么操作系统。 不过RDS也有一些好处: 存储空间可以无限增长。就像flickr的相册一样,每月都有一定的增长额度,总存储空间可以无限增加。 数据安全性可以保证,可以方便的制作snapshot和完整备份,备份所花的存储空间只要不大于每月增长额度就完全免费。 amazon会负责数据库软件的安全性,给它及时打补丁。 综合来说,RDS提供的控制手段有限,不太适合对性能有较高要求的应用。从实际是用来看,同样的程序和网络环境之下,Double Extra Large DB Instance上的mysql+innodb明显慢于Double Extra Large EC2上自己安装并优化的mysql+innodb,一个典型的数据是:使用前者,慢查询比例是1%,使用后者,这个比例立即降为0.01%。 放弃RDS也就意味着放弃RDS的各种好处,为了弥补这个不足,可以为EC2申请Amazon Elastic Block Store (EBS) 。EC2+EBS就和RDS没什么两样了,只是管理起来还是有点费神,综合的价格应该和RDS差不多。我这里还没有真正尝试过EC2+EBS的方案,以后等存储出现瓶颈了再说了,现在EC2自带的850G存储绰绰有余。 amazon的服务还是挺让我满意,特别是phone support反应很快速,服务人员也挺专业,挺好。不过我并没有其他云计算服务的使用经验,没有比较,也不清楚amazon云计算在业界究竟出于何种地位,这个以后再慢慢去了解吧。