飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

Instagram 如何跨大洋拆分有状态服务

  • 2018-12-01
  • 本文字数:1321 字

    阅读完需:约 4 分钟

Instagram如何跨大洋拆分有状态服务

在最近举行的 Large Installation System Administration(LISA)2018 大会上,Instagram 产品工程师 Sherry Xiao 解释了他们的团队如何将 Instagram 服务分散在美国和欧洲的数据中心。他们使用了 Facebook 工程团队的工具,在有状态服务(Cassandra 和 TAO)中解决了数据本地性(locality)问题。


Facebook 在 2012 年收购了 Instagram,后者迁移到了 Facebook 的基础设施上。Instagram 的基础设施只部署在美国,而 Facebook 的数据中心位于美国和欧洲。Instagram 的技术栈主要包括 Django、Cassandra、TAO 分布式数据存储、Memcached 和 Celery 异步作业。他们不得不在美国和欧盟数据中心之间拆分服务,以解决数据存储空间限制问题。Cassandra quorum 调用的高延迟,为数据本地性划分数据集,在欧盟区域内进行故障转移以及为 TAO 进行主副本同步,这些都是团队在进行服务拆分时必须克服的挑战。



图片来源——https://www.youtube.com/watch?v=2GInt9E3vrU


Instagram 使用 Cassandra 作为通用的键值存储服务。他们将 Cassandra 与其他组件从 AWS 转移到 Facebook 自己的数据中心。Cassandra 在数据中心使用法定数量的副本来实现读写一致性。维护欧洲数据中心的数据副本会导致存储浪费,而 quorum 请求需要跨洋,延迟太高,不可取。Instagram 团队改为使用名为 Akkio 的工具对数据进行分区,这样美国用户的数据位于美国数据中心,欧盟用户的数据位于欧盟的三个数据中心。Akkio 是一款由 Facebook 开发的数据布局工具,可以对数据检索进行优化。它通过将数据分组为逻辑集来实现布局,然后将逻辑集存储在最靠近经常访问它们的最终用户的数据中心。Xiao 说,Akkio“跟踪最终用户的访问模式并触发数据迁移”。


这种架构消除了在每个数据中心存储所有数据副本的必要。美国和欧盟的数据中心可以独立运作,quorum 请求可以留在同一个大陆。Instagram 还使用 Social Hash 分区器将请求路由到正确的存储桶,尤其是对于拥有大量关注者的帐户。


Instagram 也使用了 Facebook 的 TAO 来存储社交图数据。在分片模式下,TAO 的每个分片都有一个主节点。写入操作只会被转发给运行在美国数据中心的主节点,副本是只读的。该团队修改了 TAO,让它可以将写入操作传给欧盟地区的本地主节点,避免跨洋调用。为什么不在这里使用 Akkio?Xiao 解释说,“与 Cassandra 相比,TAO 拥有不同的数据模型。大多数用例都是使用用户 ID 作为键,数据属于用户”。相比之下,TAO 处理的对象可以被全球各地的用户访问,因此 Akkio 无法实现最佳的数据本地性。


在最终的架构中,在前端有一个无状态的 Django 层,后面是分区的 Cassandra 和 TAO,数据被写入本地主节点。迁移需要改变灾难恢复(DR)计划,因为延迟以及不同的数据集会导致无法实现跨洋的灾难恢复。Xiao 说,每个地区都能够通过在每个数据中心保持 20%的空闲容量来处理来自故障数据中心的负载。


查看英文原文:https://www.infoq.com/news/2018/11/instagram-across-continents

相关推荐


12 月 7 日北京 ArchSummit 全球架构师峰会上,来自 Google、Netflix、BAT、滴滴、美团 等公司技术讲师齐聚一堂,共同分享“微服务、金融技术、前端黑科技、智能运维等相关经验与实践。详情点击 https://bj2018.archsummit.com/schedule


2018-12-01 13:572079
用户头像

发布了 731 篇内容, 共 459.6 次阅读, 收获喜欢 2004 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

Java中的super和this关键字详解

共饮一杯无

Java 10月月更 super和this关键字

HashMap源码分析(六)

知识浅谈

hashmap 10月月更

热门探讨:为何数字化转型的企业,大都“死”在了黎明前夕?

优秀

数字化转型

面试官:数据库加了唯一索引,就不会有重复数据了吗???

小小怪下士

Java MySQL 程序员

【网络安全篇】--HTML基础(预计学习时间:30分钟)从此以后不迷糊~

贤鱼很忙

html 前端 10月月更

Python列表和元组有什么区别

芥末拌个饭吧

后端 python 3.5+ 10月月更

vue-router学习-1

Studying_swz

前端 10月月更

牛客刷题系列之初阶版(自守数,返回小于 N 的质数个数,第一个只出现一次的字符)

雪芙花

c c++ 10月月更

openGemini内核源码正式对外开源

华为云开发者联盟

数据库 物联网 华为云 企业号十月 PK 榜

Vue的开发模式与webpack🔥

渔戈

前端 Vue3 10月月更

以指标驱动业务决策,Kyligence 亮相 Gartner IT Symposium/Xpo™ 峰会

Kyligence

数据分析 指标中台 OLAP技术

Go语言入门—06切片

良猿

Go golang 后端 10月月更

详解Native Memory Tracking 追踪区域分析

华为云开发者联盟

开发 华为云 企业号十月 PK 榜

基于Ernie-3.0 CAIL2019法研杯要素识别多标签分类任务

汀丶人工智能

nlp

【网络安全篇】JavaSript基础内容大全

贤鱼很忙

10月月更

复杂场景数据处理的 OLTP 与 OLAP 融合实践

NebulaGraph

数据库 知识图谱

2022年第六届数据质量管理国际峰会重磅开启

数据质量管理智库

数据 数据隐私 数据安全 峰会 数据质量

你真的了解过Vue的组件化开发吗🔥

渔戈

前端 Vue3 10月月更

全彩LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

一种基于柔性事务的分布式事务解决方案设计探究

京东科技开发者

编程 分布式事务 事务 事务回滚 柔性事务

【高并发】深度解析ScheduledThreadPoolExecutor类的源代码

冰河

并发编程 多线程 高并发 协程 异步编程

技术分享 | 测试开发工程师必读经典好书清单,抽奖赠书送福利!

霍格沃兹测试开发学社

校招面试真题 | 显式等待与隐式等待的区别?与强制等待的方式分别是什么,有什么区别?

霍格沃兹测试开发学社

牛客刷题系列之进阶版(搜索旋转排序数组,链表内指定区间反转)

雪芙花

c c++ 10月月更

升级全新网络方案,给你低成本、高性能的裸金属体验

华为云开发者联盟

云计算 后端 华为云 云服务器 企业号十月 PK 榜

【kafka运维】Topic的生产和消费运维脚本

石臻臻的杂货铺

kafka kafka运维 10月月更

7 步保障 Kubernetes 集群安全

SEAL安全

Kubernetes 云原生 Kubernetes 集群 企业号十月 PK 榜 审计日志

记一个“奇葩”需求的实现

甜点cc

JavaScript 前端 Element UI 10月月更

C++精通之路:红黑树

雪芙花

c c++ 10月月更

你真的了解v-model吗🔥

渔戈

前端 Vue3 10月月更

《Go语言学习路线图》让你少踩坑,高效学,Let’s Go!

王中阳Go

golang 学习方法 技术专题合集 10月月更 “程”风破浪的开发者

Instagram如何跨大洋拆分有状态服务_架构_Hrishikesh Barua_InfoQ精选文章