在亚马逊 EC2 上托管 Web 站点

  • Charles Humble
  • 宋玮

2008 年 2 月 28 日

话题:JavaDevOps语言 & 开发

基于剑桥大学的Xen 虚拟化技术,亚马逊的弹性计算云(Elastic Computer Cloud——EC2)是一个允许用户按需创建、启动、停止基于 Linux 的服务器实例的计算服务。每个虚拟机实例是一个虚拟的私有服务器,它在启动时通过 DHCP 获取一个 IP 地址。虚拟机镜像——亚马逊称之为 Amazon Machine Images(AMIs),可以像 VMware 的虚拟设备那样被存档和传输,因此开发者可以安装一个所需软件的初始实例并快速将其部署到许多虚拟服务器上。

InfoQ 的上一篇文章着眼于该服务对于开发团队的吸引力,如 Oracle 的 Coherance 团队,他们在短期内需要大量计算能力。该服务的灵活性还使其对那些基于 Web 的创业企业具有很强的吸引力:因为不需要购买昂贵的硬件,你没有前期投入,运行成本相当的低,而且你可以在你的 Linux 实例上安装任何想装的软件。通过在需要的时候启动或停止额外的实例,使得该服务可以很方便地适应流量模式的变化。最后,该服务有知名的亚马逊做强力后盾,它有着交付高伸缩性、健壮性的 Web 基础架构的业绩。尽管这样,缺少 SLA(Service Level Agreement——服务水平协定)仍造成了采用 EC2 的巨大障碍,有一些企业不愿意将其数据或关键业务委托到 EC2 上。

还有实际的问题需要克服。比如虚拟服务器使用 DHCP 获取地址的本质意味着服务器每次启动 IP 地址都会改变。其结果是,在停机之后,Web 站点需要更新其 DNS 入口——这一过程可能需要花费高达 96 个小时才能完成。为解决这一问题,亚马逊推荐使用动态 DNS 解决方案,如 DynDNS,在最近一篇博客文章中,Codesta 的 Oliver Chan 提供了如何为 EC2 设置 DynDNS 的细节。

相同的博客还为那些考虑使用 EC2 服务的开发者提供了一些其他有用的线索:

  1. “在花费太多时间配置和定制 AMI 之前,一开始先找一个适合你需求的现成的 AMI,这样你就不必后面的旅途中重复同样的工作了。检查一下亚马逊资源中心上的公用 AMI 列表,可能会找到适合你需求的东西”
  2. “当使用‘ec2-bundle-vol’命令打包你自己的镜像时,使用‘-d’标志以确保你指定了一个干净的目录,否则将同一镜像打包两次会因为临时文件冲突而导致错误发生。”
  3. “当在你的镜像上工作时,注意主驱动器 / 分区(系统文件放在这儿)只有十分有限的容量(我们的情况是 10GB)。因此当要处理大的文件 / 目录时使用‘/mnt’,它有超过 100GB 的空间。”
  4. “如果机器停止了,除了那些最后一次你执行‘ec2-bundle-vol’备份了的数据,你所有的数据都将丢失。”

随着 EC2 持续增强,使开发者能更容易的使用该服务的开源工具和类库正不断涌现。其中一个这样的项目是,构建在 Chris Richardson 的 EC2Deploy 之上的Cloud Tools,它由以下几部分组成:

  • EC2Deploy 框架——一个基于 Groovy 的框架,用于把 Java EE 应用部署到 Amazon EC2。
  • 被配置运行 Tomcat 及与 EC2Deploy 一起工作的 AMI。
  • 一个 Maven 插件,使用 EC2Deploy 往 EC2 上部署 Web 应用。

Cloud Tools 仍然处于开发阶段,但是为开发者在几分钟之内上手并运行在 EC2 上提供了一种方法。

查看英文原文:Hosting a Web Site on Amazon's EC2

JavaDevOps语言 & 开发