|
|
51CTO旗下网站
|
|
移动端

Instagram在如何越洋扩展基础设施?

2015年,Instagram将基础设施从一个数据中心扩展到了三个,从三个数据中心扩展到五个很轻松;我们只是增加了复制因子,将数据复制到新的区域;然而当下一个数据中心远在另一个大陆时,扩展起来会更难。

作者:布加迪编译来源:51CTO.com|2018-10-29 09:00

【51CTO.com快译】2014年,Instagram加入Facebook两年后,Instagram的工程团队该将公司的基础设施从亚马逊网络服务(AWS)服务器迁移到了Facebook的数据中心。Facebook在欧美有多个数据中心,但直到最近Instagram才使用美国的数据中心。

Instagram想把基础设施扩展到大洋彼岸的主要原因是,我们在美国已没场地可用。随着服务不断增多,Instagram已到了我们需要考虑利用Facebook建在欧洲的数据中心的地步。另一个好处是:本地数据中心意味着对欧洲用户来说延迟更低,这有望在Instagram上打造更好的用户体验。

2015年,Instagram将基础设施从一个数据中心扩展到了三个,以提供急需的弹性:我们的工程团队不想重蹈2012年AWS灾难的覆辙,当时弗吉尼亚州的一场大风暴导致其近一半的实例瘫痪。从三个数据中心扩展到五个很轻松;我们只是增加了复制因子,将数据复制到新的区域;然而当下一个数据中心远在另一个大陆时,扩展起来会更难。

了解基础设施

基础设施通常可分为两种类型:

  • 无状态服务通常用作计算,根据用户流量进行扩展(按需扩展)。Django Web服务器就是个例子。
  • 有状态服务通常用作存储,必须在数据中心之间保持一致性。比如包括Cassandra和TAO。

每个人都喜欢无状态服务,它们易于部署和扩展,可以随时随地根据需要来启动。事实上,我们还需要像Cassandra这样的有状态服务来存储用户数据。运行带有太多副本的Cassandra不仅增加了维护数据库的复杂性,还浪费了容量,更不用说越洋传输仲裁(quorum)请求有多慢了。

Instagram还使用TAO(面向社交图的分布式数据存储)作为数据存储系统。我们将TAO作为每个分片(shard)的单个主系统(master)来运行,没有任何从属系统(slave)为任何写入请求更新分片。它将所有写入内容转发到分片的主区域。由于所有写入都在位于美国的主区域进行,所以欧洲那边的写入延迟无法忍受。你可能注意到我们的问题反馈基本上是光速。

潜在解决方案

我们能否缩短请求越洋传输的时间(甚至使往返传输消失)?有两种方法可以解决这个问题。

1. 对Cassandra分区

为了防止仲裁请求越洋传输,我们在考虑将数据集分为两部分:Cassandra_EU和Cassandra_US。如果欧洲用户的数据存储在Cassandra_EU分区中,美国用户的数据存储在Cassandra_US分区中,用户的请求就不必远距离传输来获取数据。

比如说,假设美国有五个数据中心,欧盟有三个数据中心。如果我们通过复制当前集群而在欧洲部署Cassandra,复制因子将是8,仲裁请求必须与8个副本中的5个进行联系。

但是如果我们可以找到将数据分成两组的方法,就会有一个复制因子是5的Cassandra_US分区和一个复制因子是3的Cassandra_EU分区,每个分区可独立运行,而不影响其他分区。与此同时,每个分区的仲裁请求能够保持在同一个大陆,因而解决往返传输的延迟问题。

2. TAO仅限于写入到本地

为了缩短TAO写入的延迟,我们可以将所有EU写入限制于本地区域。这在最终用户看来几乎一样。我们向TAO发送写入时,TAO将在本地更新,不会阻止同步向主数据库发送写入;相反,它会在本地区域将写入放到队列中。在写入的本地区域,数据可立即从TAO获取,而在其他区域,数据将在从本地区域传播后可用。这类似今天的常规写入,数据从主区域传播。

虽然不同的服务可能会有不同的瓶颈,但如果致力于减少或消除越洋流量这个想法,我们能逐一解决问题。

经验教训

与每个基础设施项目一样,我们在此过程中汲取了一些重要的经验教训。以下是几个主要的。

  • 别急着搞新项目。开始在新数据中心配置服务器之前,确保你了解为什么需要在新区域部署服务、有什么样的依赖关系以及新区域投入使用时系统会如何运行。此外,别忘了反思灾难恢复计划,并进行必要的改动。
  • 别低估复杂性。总是在你的日程安排中留出足够的时间,因为要犯错误,要找出意外的阻碍因素,要学习你不了解的新的依赖关系。你可能发现自己无意中在重新设计构建基础设施的方式。
  • 明白取舍。成功总是要付出代价。我们对Cassandra数据库进行分区后,通过缩小复制因子,节省了大量存储空间。然而为了确保每个分区仍然准备好面对灾难,我们需要更多的前端Django容量,以接受来自故障区域的流量,因为现在分区无法彼此共享容量了。
  • 耐心一点。在开启欧洲数据中心的过程中,我不记得有多少次我们说过“哦,见鬼!”但事情总是最终得到了解决。可能比你预期的要更久,但要有耐心,整个团队要通力合作,这是超有意思的过程。

原文标题:How Instagram is scaling its infrastructure across the ocean,作者:Sherry Xiao

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【编辑推荐】

  1. 如何给数据中心机柜加把安全锁?
  2. 数据中心开通运营,电气测试人员有问必答
  3. 聚焦数据中心新态势,华为网络能源让生态伙伴看到更美未来
  4. 数据中心存储系统故障了?怎么办!
  5. 边缘计算与数据中心的未来
【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

C# 2005 & .NET 3.0高级编程(第5版)

该书为C#经典名著!是Wrox红皮书中最畅销的品种之一。从第1版开始就名满天下;其第3版被评选为2005年最权威的十大IT图书之一;并荣获“2005...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊