Swiftype 是一家搜索解决方案提供商,目前已为超过10万个网站和应用程序提供搜索服务。 Oleksiy Kovyrin 是其技术运营部门的负责人。近日,他发表了一篇 博文 ,介绍Swiftype为什么以及如何从EC2切换到真正的服务器。
2012年,Swiftype创建之初选择了Amazon Web Services作为基础设施,因为云容易增加服务器,而又不需要自己管理硬件,并且没有前期成本。遗憾地是,虽然有些服务(如Route53 和S3)非常有用且稳定,但EC2却常常给团队带来困扰。基础设施的可靠性和稳定性决定着他们能否满足客户的性能期望和不间断服务的需求。但在Amazon云上,他们经常会遇到网络问题、VM实例宕机问题、不可预见的性能衰减(可能是由同他们共享硬件的其它应用程序导致的)。这些问题占用了他们大量的时间。因此,他们决定放弃EC2,转而使用真正的硬件。基于以往与托管供应商打交道的经验,他们决定选择SoftLayer。
在迁移之前,他们有大约40个Amazon EC2实例,每周会遇到2到3次严重的问题,有时候每天都遇到。于是,他们决定切换到真正的硬件,并且切换过程不能中断现有服务。为此,他们从以下两个方面做了充分的准备:
Amazon EC2的Virtual Private Cloud(VPC)功能提供了一种连接EC2服务器和另一个私有网络的方法。但是,对于Swiftype的现有实例而言,他们需要停机才能以这种方式实现连接。在经过慎重地考虑和计划之后,他们意识到,真正需要跨数据中心互连的只有MongoDB节点,其它的都可以使用数据中心的本地服务,如Redis集群、搜索服务器、应用程序集群等。这样一来,需要互连的实例数量就相对较少了。因此,他们采用了一种简单但经证明稳定且有效的方式:
接下来是修改应用程序架构,这项工作的前提是深入了解每个组件。Kovyrin指出,对于任意复杂度的基础设施,其迁移都必须有足够的时间和工程师资源,要仔细考虑应用程序和后端服务之间建立的每一个网络连接。该过程主要包含如下步骤:
经过一个多月的努力后,一切准备就绪。他们通过将DNS TTL调至几秒开启切换。在EC2流量已经很少之后,他们停用了旧数据中心,并将剩余的连接转发到新数据中心。由于DNS更新需要时间,这个过程持续了至少一个周的时间。
从EC2切换到真正的硬件之后,发生了以下几个方面的变化:
最后,Kovyrin总结道:
如果你的目标从一开始就是业务构建,并且没有多余的工程师资源消耗在“云税(cloud tax)”上,那么,使用真正的硬件可能是更好的选择。
感谢徐川对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。