SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
CAジャーナルクラブ
TAO: Facebook s Distributed
Data Store for the Social Graph
2014/12/19
山田 直行
今回取り上げる論文・資料
TAO: Facebook's Distributed Data Store for the Social
Graph ¦ Publications ¦ Research at Facebook

https://research.facebook.com/publications/
161988287341248/tao-facebook-s-distributed-data-
store-for-the-social-graph/
TAO: The power of the graph

https://www.facebook.com/notes/facebook-engineering/
tao-the-power-of-the-graph/10151525983993920
TAO: Facebook s Distributed Data Store for the Social
Graph ¦ USENIX

https://www.usenix.org/conference/atc13/technical-
sessions/presentation/bronson
課題意識と狙い
ソーシャルグラフのデータを、大規模なトラフィック
上で、リアルタイムに取得する方法について、
Facebookの事例から考える
データストアの設計として、永続化データレイヤーと、
キャッシュレイヤーを作るのは一般的だが、そのキャッ
シュレイヤー自体がデータモデルを持つという、変わっ
た構成について
目次
- Abstract
- 1. Introduction
- 2. Background
- 3. TAO Data Model and API
- 4. TAO Architecture
- 5. Implementation
- 6. Consistency and Fault Tolerance
- 7. Production Workload
- 8. Performance
- 9. Related Work
- 10. Conclusion
Abstract
TAOというデータストアについて取り上げる
Facebookのサービスでソーシャルグラフのデータを
取得するのに実際に用いられている
地理的に分散しており、かつFacebookのワークロー
ドを捌くのに十分なパフォーマンス

- 10億read/秒、100万Write/秒
memcacheをただのキャッシュとしてではなく、
データモデルに組み入れる形で使っている
1. Introduction
TAOができる以前は、MySQLをデータストアとして
memcacheをキャッシュとして使う一般的な構成に
していた( lookaside cache )
TAOはMySQLを永続化データストアとして使いつつ、
memcacheのレイヤーがグラフデータベースとして
機能するのが特徴
必要最小限のAPIを持つ
AvailabilityとPer-machine Efficiencyを重視して、
Strong Consistencyを妥協している
2. Background
Facebookはそれぞれのユーザーに対して、各個人に
カスタマイズした内容を、かつプライバシー設定も考
慮したうえで表示内容を動的に生成する必要がある
この動的生成するデータをあらかじめ用意しておくの
は不可能なので、都度ソーシャルグラフを取得してコ
ンテンツを組み立てるためread処理が圧倒的に重要
効率的で、可用性が高く、スケールする必要がある
2.1 Serving the Graph from Memcache
Memcacheをlookasideキャッシュとして使うことの問題
点について

- PHPコードがキャッシュの一部
Inefficient edge lists

- 単純なKey-ValueストアはEdgeを扱うのに非効率
Distributed control logic

- client side(PHP側)にロジックがある
Expensive read-after-write consistency

- MySQLのmaster/slave構成を前提にするとコストが高い

2.2 TAO s Goal
TAOは複数のリージョンにまたがったデータベース
として、絶えず変化するグラフデータのnodeとedge
を高いパフォーマンスで取得することができる
READにパフォーマンス最適化
基本的にはデータは最新のものを取得できるが、古い
データを読んでしまうことも一部許容する
これはFacebookをはじめとしたソーシャルネット
ワークサービスの要件に適合する
3. TAO Data Model and API
people , action ,
relationships をnode
とedgeで表現
右図のような、
Facebookでよくあるよ
うなフィードの生成と表
示について考える
3.1 Objects and Associations
Object = node

- ユーザー、場所、チェックイン、コメントなど
Assoc. (Association) = edge

- 友だち関係、「いいね!」、タグ付けなど
3.2 Object API
idをキーにしたCRUD(Create, Read, Update,
Delete)機能
Field(Value)の一部に対してのみUpdateをかける
ことも可能
3.3 Association API
edgeの多くは双方向

- 友だち関係のように、相互に対称なもの

- 許可している←→されているのように非対称なもの
atypeはinverse-typeを持ち、対になっている
Associationを1つの操作で扱えるようにしている
3.4 Association Query API
Association List という単位
でデータをクエリする
AliceのCheckinに関するコメ
ント最新50件

→assoc_range
GG Bridgeに対するChekin数

→ assoc_count
GG BridgeのCheckIn履歴を
取得

→assoc_get
4. TAO Architecture
TAOの、複数のレイヤーの集計からなる構造について
説明し、それをどうスケールさせているのか説明する
TAOは2つのCaching Layerと1つのStorage Layer
から構成される
4.1 Storage Layer
永続化ストレージレイヤーはMySQL
データはシャードに分割され、複数のサーバーにまた
がって分散配置される
Objectはあるシャードにアサインされたらずっとそ
こに保存される
Associationはid1のObjectが属するシャードに保存
される
4.2 Caching Layer
Tierといわれる複数のキャッシュサーバーの集合とい
う単位で管理される
それぞれのTierはTAOのどのクエリについても応答
できるように作られている
各キャッシュサーバーにクエリが飛んだとき、キャッ
シュサーバーは自分自身でデータを返せないときは他
のキャッシュサーバー/データベースに問い合わせる
機構を持つ
4.3 Client Communication Stack
1つのFacebookページを表示するのに、数百の
Object/Associationをクエリするのは珍しくない
Client Stackとしては Scaling Memcache at
Facebook で述べられているシステムと共用してい
る
ただしTAOのほうはデータベースを参照しにいくケー
スがあるため、レイテンシは高い。そのため順序関係
なくレスポンスしていくプロトコルにしている
4.4 Leaders and Followers
Tierは、Leader Tier(各リージョンに1つだけ存在)
とFollower Tier(複数存在)の2つに分けられる
Follower Tierは、クライアントからのリクエストを
受け付ける。自身で結果を戻せない場合には、Leader
にリクエストをフォワードして結果を取得してクライ
アントに返す
Leader Tierは各Followerからのリクエストを受けて
Read/Writeを行う。Leaderが直接クライアントのリ
クエストを受けることはない
4.5 Scaling Geographically
Readは同一Region内で完結する
WriteはMaster RegionのLeaderに集約される
5. Implementation
前章では、TAOがいかにして大量のデータとクエリ
を捌くためにサーバーを使っているかを述べた
本章ではより細部の、パフォーマンスとストレージ効
率の最適化について述べる
5.1 Caching Servers
TAOのキャッシュサーバーは Scaling Memcache at
Facebook で述べられている仕組みをベースに、
memcacheのslab allocatorの仕組みを用いて管理して
いる
さらに、Object/Associationごとの生存期間を個別に
最適化するため、RAM全体をarenaといわれるゾーン
別に分けて管理している(例えばCheckinのキャッシュ
は短くてよいがFriendのキャッシュは長め、など)
Countなどの固定長のアイテムは、ポインタを持つのが
オーバーヘッドなので直接データを持つようにしている
5.2 MySQL Mapping
データはシャードという単位に分割されている
シャード=MySQLの1データベース
Objectテーブル、Associationテーブルの2つのテー
ブルがあり、各データはシリアライズされて data カ
ラムに格納される
Association Countの結果を格納するテーブルなど、
いくつかのカスタムテーブルがある
5.3 Cache Sharding and Hot Spots
ShardはTier内にConsistent Hashingにもとづいて
配置されるが、それだけだと使われる頻度の高いデー
タとそうでないものでLoadの偏りが生じる
ShardはCloneしてさらに分散配置して偏りを解消さ
せている
特によく参照されるデータについては、クライアント
サイドに小さなキャッシュを持ち、キャッシュサーバー
へのアクセスを不要にして高速化を図っている
5.4 High-Degree Objects
Objectによっては6000以上のAssociationを持つた
め、全てをキャッシュはしていない。そのままクエリ
をしたのではMySQLを参照しにいくリクエストが増
えてしまう
それに対応するため、

- assoc_countを用いて逆のedgeをたどることによ
りキャッシュにヒットさせる

- 逆のedgeも同様に多くのAssociationがある場合、

Association create time > Object create time と
いう条件をつけてクエリする
6. Consistency and Fault Tolerance
TAOの最重要な要件は可用性とパフォーマンス
仮に一部のリクエストがFailしてもページの表示はし
なければならない
本章では、TAOの平常時の一貫性モデルと、Failした
場合に一貫性をどのように犠牲にしているかを説明す
る
6.1 Consistency
Object/Associationは結果整合性
同一Tier内では、read-after-writeの整合性がある
キャッシュの変更は常に安全に適用できるとは限らな
いため、バージョン番号を付与して整合性を担保
criticalにマークされたリクエスト(認証など)は必
ずMasterDBを参照しにいく
6.2 Failure Detection and Handling
Database failures

- masterダウン時にはslave昇格

- slaveダウン時にはLeaderにフォワード
Leader failures

- Leaderの一貫性を復旧しようと試みる、復活するまでは古いデー
タを返す
Refill and invalidation failures

- ディスクのキューに保存
Follower failures

- バックアップのFollowerが対応
等々
7. Production Workload
TAOはFacebook全体で1つのインスタンスのみ存在
さまざまなソーシャルグラフを1つのシステムで扱え
ることは、運用コスト・サーバーキャパシティプラン
ニング・高速な開発などにおいてさまざまなメリット
がある
TAOほどのスケールで実現しているグラフデータス
トアは他に例が無い
FacebookでのProduction環境におけるデータや
ワークロードの傾向についての説明
readはwriteよりもはるかに多い
多くのedgeに対するクエリの結果は空
クエリの頻度や、nodeのつながり、データサイズ等
にはロングテールの傾向がある
8. Performance
「可用性」「Followerのキャパシティ」「キャッシュ
ヒットレートとレイテンシ」「レプリケーションのラ
グ」「フェイルオーバー」のそれぞれについて
FacebookのProduction環境での実測値を示してい
る
9. Related Work
Eventual Consistency(結果整合性)

- read-after-write consistencyは結果整合性の一種
地理的に分散したデータストア

- Coda file system

- Megastore

- Spanner(Google)
分散ハッシュテーブルとKey-Valueシステム

- Amazon Dynamo

- Voldemort(LinkedIn)
階層構造のネットワーク接続(Leader and Follower)

- Akamaiのコンテンツキャッシュ
構造化ストレージ(RelationalDBでないもの)

- Bigtable(Google)

- PNUTS(Yahoo!)

- SimpleDB(Amazon)

- HBase(Apache)

- Redis
グラフDB

- Neo4J

- FlockDB(Twitter)
より進んだグラフDBの操作API

- PEGASUS

- Pig Latin(Yahoo!)

- Pregel(Google)

10. Conclusion
Facebookでのチャレンジについて述べた。高いス
ループット、低いレイテンシでの、変更頻度の高いデー
タに対するクエリをどう実現するか
Facebookのソーシャルグラフをどうデータモデルに
落としこんでいるか解説した
TAOという、地理的に分散した、ソーシャルグラフ
データをクエリできるシステムについて説明した
キャッシュと永続化のレイヤーが分かれていることで、
独立してデザインでき、スケールしやすく、運用も楽
になった
その一方、効率と一貫性に関するトレードオフもある
TAOのAPIやデータモデルは、Facebookのアプリ
ケーション開発者にも利用してもらうことができてい
る

Mais conteúdo relacionado

Mais de Naoyuki Yamada

Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Naoyuki Yamada
 
Adtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フローAdtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フロー
Naoyuki Yamada
 
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
Naoyuki Yamada
 
株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発
Naoyuki Yamada
 
Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2
Naoyuki Yamada
 
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作るJAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
Naoyuki Yamada
 
社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門
Naoyuki Yamada
 
Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"
Naoyuki Yamada
 

Mais de Naoyuki Yamada (12)

Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
Elasticsearch勉強会第8回 ElasticsearchとKibanaで実現する 30億req/dayのリアルタイム分析
 
Adtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フローAdtech College#7 GitHubを中心とした開発フロー
Adtech College#7 GitHubを中心とした開発フロー
 
ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回ElasticSearch勉強会 第6回
ElasticSearch勉強会 第6回
 
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale DatasetsCAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
CAジャーナルクラブ Dremel: Interactive Analysis of Web-Scale Datasets
 
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
ADTECH COLLEGE #2 近い将来、開発責任者になるあなたへ
 
株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発株式会社サイバーエージェント アドテクスタジオの技術と開発
株式会社サイバーエージェント アドテクスタジオの技術と開発
 
Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2Functional Programming in Scala Reading #2
Functional Programming in Scala Reading #2
 
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまでCode for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
Code for Japan 勉強会 Vol.1 CKAN入門 プロジェクトのFork、デプロイ、CIまで
 
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作るJAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
 
社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門社内勉強会:ソーシャルゲームのデータベース設計入門
社内勉強会:ソーシャルゲームのデータベース設計入門
 
Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"Social Web Japan Vol.3 "Social Application and their support services"
Social Web Japan Vol.3 "Social Application and their support services"
 
ソーシャルアプリ業界を構成する中間サービスたち
ソーシャルアプリ業界を構成する中間サービスたちソーシャルアプリ業界を構成する中間サービスたち
ソーシャルアプリ業界を構成する中間サービスたち
 

CAジャーナルクラブ TAO: Facebook’s Distributed Data Store for the Social Graph