GCE 和 AWS 的简单比较

Google Compute Engine(GCE)是 Google 云服务的一部分,和 Google App Engine(GAE)不同,GCE 提供了完整的虚拟机服务,而不是单纯的程序运行环境。GAE 一直被人诟病的是它移植难度高,很多开发者担心一旦入了 GAE 的门就很难再出去了,于是 GAE 一直推广不开。和 Amazon Web Service(AWS)如日中天的现在,Google 也无奈地跟风推出了 GCE 服务。

本博客使用 GCE 差不多也有一个月了,这里总结一下两者各种的优点和缺点。

网络架构

数据中心:AWS 在亚太有四个主要的数据中心:东京、新加坡、悉尼和北京,另外还有八个次级数据中心(Edge Location,主要用于 CDN 和 DNS)。相比之下,GCE 在亚洲只是一个数据中心,位于台湾彰化县。在美国和欧洲,AWS 对于 GCE 也处于同样的压倒性优势。AWS 在南美有一个数据中心,而 GCE 则完全没有。

DNS:AWS 支持分区域 DNS,即可以设置在亚洲地区解析到亚洲的 IP,在美洲地区解析美洲的 IP。GCE 只支持普通的 DNS 设置。

静态 IP:AWS 和 GCE 都支持静态 IP 绑定。除了分区域的 IP 地址之外,GCE 有一个功能称为全球 IP 中转,它可以使用一个不限定区域的 IP 地址来指向任意区域的机器,用于容灾。而 AWS 中必须在不同的区域使用各自独立的 IP,一旦某个区域的虚拟机全挂,就无法通过 IP(反向代理)把流量导向其它区域,只能修改 DNS。

跨区域备份:GCE 中的硬件备份(Snapshot)可以在所有区域中共享,网页中即可操作;而在 AWS 中则需要通过命令行方式手工复制。

分组路由:两者都提供了虚拟机分组,并可自定义组内的路由。

防火墙:两者都支持端口和协议限制,比如对于普通网站来说,只开放 80 和 443 端口,用于保护主机不被攻击。

虚拟机硬件

主机类型:标准类型,GCE 的 N1 和 AWS 的 M3 几乎一模一样,应该是 GCE 直接照抄了。两者也同时提供了临时测试的机型,f1-micro、g1-small(AWS)和 t2.micro 和 t2.small,配置也几乎一模一样。

SSD 硬盘:两者都支持 SSD 硬盘,在创建主机的时候可选。AWS 的 SSD 分为“通用 SSD”和“针对 IO 优化的 SSD”两种,而 GCE 的 SSD 还在试用阶段,并且不是每一个数据中心都提供了 SSD 支持。

虚拟机软件

官方操作系统:AWS 提供了 AmazonLinux,它是 RHEL 的分支,由 AWS 官方维护,另外还提供了对 Windows Server 2003 / 2008 / 2012、RHEL 6 / 7、SUSE 11 / 12 的支持。GCE 则没有定制系统,它支持 CentOS 6 / 7、Debian 7、RHEL 6 / 7、SUSE 11 / 12、Windows Server 2008 R2 等。

第三方操作系统:AWS 支持其它组织创建并公开的第三方系统镜像(AMI),基本上所有主流的 Linux 发行版(和主要软件,如 Oracle)都能在其中找到,无须自己安装。而 GCE 尚未开放这一功能。在 GCE 中,你可以创建一个镜像,但只能自己使用,无法分享。

数据存储及分发

数据存储:两者都有,Google Cloud 中称为 Cloud Storage,AWS 中称为 S3。概念也基本一样。AWS 还额外提供了廉价的 Glacier 存储服务,用于长期存放不经常改动的数据。

CDN:两者都有,Google Cloud Storage 自带 CDN 功能,AWS 中由 CloudFront 提供。

布署和管理

命令行:AWS 和 GCE 都提供了命令行工具,用于操作远程的主机和设置。

布署:AWS 中有 Elastic Beanstalk 和 CodeDeploy 可以用来布署机器,而 GCE 中目前只有 Startup Script 来配置机器。感觉 AWS 更成熟一点。

远程登录:两者都开放远程登录功能,视操作系统不同而不同,SSH(Linux)或 RDP(Windows)。GCE 额外提供了网页版的 SSH,无需 SSH 帐号即可登录,比 AWS 方便。

安全

帐号管理:GCE 中的项目(Project)绑定了管理员的 GMail 帐号,并且可以添加更多的 GMail 帐号做为管理员。AWS 中也类似。

主机监控:AWS 提供了 CloudWatch 来监控虚拟机的状态,并且在发生问题时可以发邮件通知或采取一些自动化措施,比如自动升级主机性能。GCE 中暂时还没有相应的功能。

费用

免费额度:AWS 对每张信用卡提供了一年的免费额度,可以使用 micro 类型的主机。GCE 没有类似的设定。

标准费用:以最便宜的标准机型来说,AWS 在亚洲地区的费用是每小时 $0.101,GCE 是 $0.069。

打折费用:GCE 中用满一个月可自动获得七折优惠,即所支付的费用直接降 30%;AWS 则需要事先购买一年或三年的套餐,折扣也在五折到七折左右。另外 AWS 还提供了低价的 Spot Instance 可供临时需要。

总体而言,从生态环境的完整度来说,AWS 有着巨大的优势,GCE 还需要一点时间才可以追上。但是,如果你的需求已经能被 GCE 满足,那么 GCE 的操作方便、价格低廉则比较有吸引力。

在 EC2 中安装 Apache 2.4、PHP 5.5 和 MySQL 5.5 并运行 WordPress

0 前言

在更换主机的同时,我顺便也升级了一下软件。之前使用的是 Apache 2.2 + PHP 5.3.5,没有 MySQL。Apache 2.2 依然是世界上使用最多的网络服务器,只不过它已经很老了,目前已停止新功能的开发,只进行安全更新。只是它一直都运行地很好,多数网站都没有动力去升级,以至于已经推出了 2 年的 Apache 2.4 目前还只有 3.5% 的使用率。同样,由于 PHP 5.3 到 5.4 有一些不兼容的更新,使得 PHP 5.4+ 也普及得比较慢。

新版本的使用人数少,相关的问题解答和文档也相应较少,这里就记录一下我的升级步骤,或许对其他人也有帮助。本文针对 EC2 中的 Amazon Linux(基于 Fedora),如果你使用的是其它的 Linux 发行版,部分命令需要相应更改。

1 安装和配置 Apache

1.1 安装 Apache

1.1.1 安装 SSL 模块(可选)

如果你的站点不需要 HTTPS,可以不装。

1.1.2 安装 Pagespeed 模块(可选)(详细介绍

推荐但不是必需的,Pagespeed 可以极大地提升页面打开速度,只要安装好就可以看到效果,不需要额外配置。

1.2 配置 Apache

Apache 的目录是/etc/httpd,2.4 的目录结构和 2.2 有很大的差别,不建议直接把 2.2 的配置文件直接复制过来,还是重新配置为好:

1.2.1 修改 /etc/httpd/conf/httpd.conf

1.2.2 修改 /etc/httpd/conf.modules.d/00-mpm.conf

1.2.3 新建 /etc/httpd/conf.d/y-common.conf

1.2.4 新建/etc/httpd/conf.d/z-leonax.conf

如果你已经有 vHost 的配置,可以直接复制过来,如果没有,可以按下面的方法创建一个简单的 vHost。vHost 的作用是告诉 Apache 域名和本地文件的对应关系。

2 安装和配置 PHP-FPM

PHP-FPM 是一个 PHP 的运行环境,FPM 全称 FastCGI Process Manager。它相当于一个独立的 PHP 服务器,专门用于解释 PHP 文件。和 Apache 2.2 中的 PHP-Fcgid 不一样的是,PHP-FPM 不再依赖于 Apache。它的性能更好,而且完全兼容 PHP 5.5。

2.1 安装 PHP-FPM

其中 php55-mysqlnd 是 MySQL 的连接库,php55-opcache 是新的 PHP 缓存组件,用于取供之前的 APC。

2.2 配置 PHP-FPM

2.2.1 修改 /etc/php-fpm-5.5.d/www.conf

2.2.2 修改 /etc/php-5.5.d/opcache.ini

2.2.3 修改 /etc/httpd/conf.d/php-5.5.conf

2.2.4 删除 /etc/httpd/conf.modules.d/10-php-5.5.conf

这个文件原本是用来加载 mod_php 模块的,但我们已经改用 PHP-FPM 了,所以就把它删掉。

2.2.5 在 vHost 中添加 PHP-FPM 的Proxy

这段指令让 Apache 把所有的 PHP 文件都交由 PHP-FPM 处理,可以把它写在 vHost 的最后一行。

3 安装和配置 MySQL

3.1 安装 MySQL 5.5

其中 mysql55 是 MySQL 的命令行工具,mysql55-server 是数据库的运行环境。

3.2 配置 MySQL 5.5

3.2.1 修改 /etc/my.cnf

3.2.2 添加新的用户

为了安全起见,新的数据库可以设置一个单独的帐号来访问。帐号出问题也只影响这一个数据库。当然你也可以用 root 直接访问,并跳过这一部分。

3.2.3 把之前 MySQL 的数据导出

如果不需要导入之前的 WordPress 数据,可以跳到 3.2.5。

3.2.4 导入备份的数据

3.2.5 修改 wp-config.php

假设你已经复制好了 WordPress 的源文件,如果还没有的话,请参考附录 5.1。

4 主机配置

4.1 启动各项服务

之后你的 WordPress 博客就可以访问了。

4.2 自动启动各项服务

如果不设置这一步,机器重启之后,各项服务是不会自动启动的。

4.3 把 /tmp 移到 tmpfs (原因

修改 /etc/fstab 文件,在最后添加一行:

4.4 创建 swap 分区

swap 分区是在内存不够用的情况下,把一些进程暂时写到文件中,以达到释放内存的效果。通常来说 t2.micro 的内存够用了,一般用量在 800M 左右,但以防万一,我还是做了一个 swap 分区。以下代码会创建一个 1GB 大小的 swap 文件:

继续修改 /etc/fstab 文件,在最后添加一行:

5 附录

5.1 下载并安装 WordPress

6 更新历史

  • 2014.07.31 初版
  • 2015.12.18 修复一些小错误

主机升级到 AWS 的 t2.micro

亚马逊很厚道,价格实惠量又足。

最近把博客的主机升级到了 AWS 的 t2.micro 机型,现在博客有了更好的性能和更低的成本。当然一定程度上也是不得已而为之。之前我一直在使用 EC2 + RDS 的架构,原因是 EC2 的 t1.micro 的内存太小(613M),不足以同时运行 Apache 和 MySql,于是我就购买了额外的 RDS 服务,RDS 价格有点小贵,大概 $200 一年。当得知 EC2 新的 t2.micro 机型有更大的内存(1G)之后,RDS 首当其充地被弃用了。由于新的 t2.micro 价格比 t1.micro 低,又不是需要 RDS 了,于是博客的成本下降了一大半,现在大约是 $150 一年(东京机房的价格,美国的机房可以降到 $100 以下)。相比之下,专门的 WordPress 主机(如 Bluehost)的动辄 $100、$200 一年的费用,显得非常不值得。

用虚拟主机的术语,EC2 的 t2.micro 提供了以下服务:

  • 1G 内存
  • 至少 8G 存储,无上限,每GB价格$0.12每月。
  • 无限流量,每月最初 1G 免费,之后每 GB $0.2。
  • 无限绑定域名。
  • 无限 MySQL 数据库,容量取决了存储空间大小。
  • 无限绑定邮箱。
  • 免费独立 IP。
  • 不仅支持 cPanel(可自行安装),还可以直接 SSH 到主机上进行管理。
  • 可配置 VPN,无额外费用。

另外值得一提的是,t2.micro 升级了 Burstable Performance 的管理。Burstable Performance 是 EC2 的一项技术,其作用是短期内提升主机的 CPU 性能。由于 EC2 的主机都是虚拟机,平时要和宿主上的其它虚拟机分享 CPU,而 micro 机型一般只有 10% 的额度。EC2 允许 micro 机型短时间内使超过 10% 的 CPU,以应对突发状况,比如瞬间的大流量,这种技术称为 Burstable Performance。在 t1 的时代,Burstable Performance 只有一点点时间,大概一分钟,超过一分钟就会被 EC2 强制减少CPU的使用,非常不人性化。而在 t2 的改进是,Burstable Performance 有了积分(Credit)的概念,如果一段时间内 CPU 的用量很少,就可以攒积分,然后当需要大量使用 CPU 的时候则消耗积分。这样就比 t1 允许更长时候的高频 CPU 使用,使 t2.micro 在实践中更高效。

使用AWS架设WordPress的费用

之前有人问到AWS上架设一个Wordpress博客的费用,这里详细回答一下。

以下费用以AWS的东京节点计算,如果你使用的是美国的节点,费用可以打个9折。

  1. EC2主机,Micro类型。如果只需要Wordpress的话,Micro足够了。三年合约预付费105 USD,另加每小时0.009 USD,折合每年费用114 USD;
  2. RDS MySQL数据库。这个你可以不用,但如果一台EC2机器撑不住博客访问量的话,你可能需要单独的数据库。三年合约预付费105 USD,另外每小时0.013 USD,折合每年费用149 USD;
  3. Route 53,DNS服务,每月费用小于1 USD,折合每年12 USD;
  4. 如果你还需要S3和Cloud Front,以我的经验每个月大约5 USD,折合每年60 USD。当然,我现在是不用了,因为Google Cloud Storage每月费用小于0.5 USD。

所以,如果你只需要EC2(它足够支撑一个日访问量小于1000 PV的博客),你只需要不到120美元一年。如果你使用了全套的AWS服务,那就需要大约350美元一年。

顺便提一句,本站目前使用就是东京的Micro机型,你可以体验一下它的性能。

亚马逊云服务正式进入中国

这是半个月前的新闻了,不过现在写一写也还不算晚。

在 Windows Azure 进入中国半年之后,亚马逊不甘心让微软一支独秀,也跟风进了中国市场。目前还在测试期,仅接受大客户申请,不过相信凭借着 AWS 全球 7 年多的成功经验,努力一下,可以抢在 Windows Azure 之前向公众开放。

大致看了一眼 AWS 中国所支持的服务,和 Windows Azure 中国一样,核心功能基本都支持,包括 EC2、S3、Glacier 和 RDS,但和数据分发有关的服务都没有提到,比如 Route 53 和 Cloud Front。

费用方面,由于刚开始测试,文档还没有来得及更新。不过中国的数据中心的成本并不会比日本、新加坡等地要高,猜测 AWS 中国的费用和美国地区持平。这比起阿里云之类的国内云计算服务来说,没有很大的诱惑力,看来 AWS 中国只能靠服务来赢得客户了。

至于服务质量,本站现在用的就是 AWS,主机放在日本。使用 WebLuker 监控表明,几乎没有停机过,几年之内为数不多的几次停机,都是配置不当造成的。AWS 的稳定性好得没话说。

这些外来的云服务,最终会发展成什么样子,让我们拭目以待吧……

EBS上超高频率的IO写入

这几天注意到我的EC2机器上有非常大量的IO,导致AWS的总体开销增加了很多。比如9月份的帐单中:

I/O requests     120,076,984 IOs     费用$14.41

30天有超过1亿次IO,也就是每秒钟有40几次IO,这个频率也高了一点吧……

于是尝试了以下优化的方法:

  • 把mod_pagespeed的缓存移到/dev/shm中。缓存嘛,无所谓的。
  • 把apached的日志文件也移到了/dev/shm中,反正我也不经常看log。

然后发现IO次数没有明显下降。后来开了iotop监测进程的io,也没有发现明显的异样。

再后来实在没办法的时候,随便尝试了一个优化,把/tmp做成tmpfs,就是在/etc/fstab中添加一行:

然后IO就神奇地降下来了…下图是36小时内EBS的VolumeWriteOps数据,可以看出,把/tmp做成tmpfs后,WriteOps的数量明显下降:

虽然还不知道到底是哪个进程在频繁写入/tmp,不过钱已经省下来了,还算蛮开心的……

Route 53简介

自从把blog转移到AWS之后,就一直在用Route 53了。Route 53是AWS提供的一个DNS服务,主要是给AWS的其它组件如EC2做域名解析。DNS服务几乎每个域名供应商都会提供,比如GoDaddy;另外还有独立的DNS服务如DNSPod。

在使用Route 53的同时,我过一段时间的DNSPod。DNSPod宣称自己的解析速度相当快,但实际测试下来并没有太大的提升,于是还是换回了Route 53。因为使用统一的AWS服务操作起来方便。具体的解析速度大家可以自己测,欢迎压力测试:P

和多数DNS服务一样,Route 53支持的记录类型有:A、AAAA(即IPv6地址)、CNAME、MX、NS、PTR、SOA、SPF、SRV、TXT。另外还支持指向其它Route 53记录的记录,称为“Alias”。

顺便提一句,Route 53的名称来源于DNS服务的端口号(53)。