写点什么

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:572050
用户头像

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

关注

评论 1 条评论

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

送你一个造梦机器,然后入眠「幻想短篇 12/28」

道伟

28天写作

招投标挖坑、防坑指南

tob 招标 投标

谈谈统计学正态分布阈值原理在数据分析工作中的运用

vivo互联网技术

大数据 正态分布 核心

产品经理-第一周作业

LLL777

张小龙关于微信十年的产品思考 | 视频号 28 天 (13)

赵新龙

28天写作

如何成为分享高手(上)

熊斌

个人成长 28天写作

uni-app的发展和应用

anyRTC开发者

uni-app 音视频 WebRTC sdk 安卓

绩效管理,上下同心者胜(四 完结篇)

一笑

管理 绩效 28天写作

C2C场外交易系统APP开发|C2C场外交易软件开发

系统开发

迟到的年度总结-数据的人生

松子(李博源)

大数据 数据中台 总结 年度总结

【总结】产品经理训练营 | 01 认识产品经理

阿席达卡。

透过现象看本质:Java类动态加载和热替换

华为云开发者联盟

Java JVM 插件 类加载器 热替换

Soul 学习笔记---数据同步 websocket 连接建立过程分析(五)

fightingting

Soul网关

第一章作业(2021-1-19)

邓嘉华

详解MySQL执行事务的语法和流程

华为云开发者联盟

MySQL 数据库 事务 服务器 SQL语法

交易所APP系统软件开发案例

系统开发

20 行代码:Serverless 架构下用 Python 轻松搞定图像分类和预测

阿里巴巴云原生

人工智能 机器学习 深度学习 Serverless 云原生

“数据库网络故障”愁坏了头,五种方法带你解难题

华为云开发者联盟

数据库 数据 GaussDB 网络故障 丢包

SpringCloud 从入门到精通 13---Nacos集群搭建

Felix

豆瓣9.5分,它是Scala领域当之无愧的王者之作!

博文视点Broadview

scala 编程语言 豆瓣高分

产品经理岗位招聘分析

Nemo

产品经理训练营第一章作业

阿波

Soul 网关实践 05|sofa服务&SpringCloud服务接入网关

哼干嘛

时间是最大的变量

石君

时间 28天写作

项目管理全史(持续更新)

Ian哥

28天写作

花一分钟体验大数据任务调度系统 - Apache DolphinScheduler 第一个官方 Docker 镜像

代立冬

大数据 workflow 任务编排

[讨论]几个能有效应对 35 岁危机的办法

穿甲兵

成年人最渴望的奖励就是成功 Jan 20, 2021

王泰

28天写作

两万字长文总结,梳理 Java 入门进阶那些事

程序员小跃

Java redis 架构 后端 面向对象编程

智汇华云 | ArcherOS Stack利旧FC-SAN存储

华云数据

存储

NanoDet:这是个小于4M超轻量目标检测模型

华为云开发者联盟

PyTorch 目标检测 yolo nanodet

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