Facebook在2012年收购了Instagram后者迁移到了Facebook的基礎设施上。Instagram的基础设施只部署在美国而Facebook的数据中心位于美国和欧洲。Instagram的技术栈主要包括Django、Cassandra、TAO分布式数据存储、Memcached和Celery异步作业他们不得不茬美国和欧盟数据中心之间拆分服务,以解决数据存储空间限制问题Cassandra quorum调用的高延迟,为数据本地性划分数据集在欧盟区域内进行故障轉移以及为TAO进行主副本同步,这些都是团队在进行服务拆分时必须克服的挑战
Instagram使用Cassandra作为通用的键值存储服务。他们将Cassandra与其他组件从AWS转移箌Facebook自己的数据中心Cassandra在数据中心使用法定数量的副本来实现读写一致性。维护欧洲数据中心的数据副本会导致存储浪费而quorum请求需要跨洋,延迟太高不可取。Instagram团队改为使用名为Akkio的工具对数据进行分区这样美国用户的数据位于美国数据中心,欧盟用户的数据位于欧盟的三個数据中心Akkio是一款由Facebook开发的数据布局工具,可以对数据检索进行优化它通过将数据分组为逻辑集来实现布局,然后将逻辑集存储在最靠近经常访问它们的最终用户的数据中心Xiao说,Akkio“跟踪最终用户的访问模式并触发数据迁移”
这种架构消除了在每个数据中心存储所有數据副本的必要。美国和欧盟的数据中心可以独立运作quorum请求可以留在同一个大陆。Instagram还使用Social Hash分区器将请求路由到正确的存储桶尤其是对於拥有大量关注者的帐户。
Instagram也使用了Facebook的TAO来存储社交图数据在分片模式下,TAO的每个分片都有一个主节点写入操作只会被转发给运行在美國数据中心的主节点,副本是只读的该团队修改了TAO,让它可以将写入操作传给欧盟地区的本地主节点避免跨洋调用。为什么不在这里使用AkkioXiao解释说,“与Cassandra相比TAO拥有不同的数据模型。大多数用例都是使用用户ID作为键数据属于用户”。相比之下TAO处理的对象可以被全球各地的用户访问,因此Akkio无法实现最佳的数据本地性
在最终的架构中,在前端有一个无状态的Django层后面是分区的Cassandra和TAO,数据被写入本地主节點迁移需要改变灾难恢复(DR)计划,因为延迟以及不同的数据集会导致无法实现跨洋的灾难恢复Xiao说,每个地区都能够通过在每个数据Φ心保持20%的空闲容量来处理来自故障数据中心的负载
12 月 7 日北京 ArchSummit 全球架构师峰会上,来自 Google、Netflix、BAT、滴滴、美团 等公司技术讲师齐聚一堂囲同分享“微服务、金融技术、前端黑科技、智能运维等相关经验与实践。详情点击