Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
ドリコムライブラリ大公開  gussan@Drecom Co., Ltd.        #megurorails                            Copyright © Drecom Co., Ltd.
提供     Copyright © Drecom Co., Ltd.
自己紹介• @gussan          ※顔出しNG• ソーシャルゲーム基盤開発本部• アーキテクト• ミドルウェア選定・ライブラリ開発等               Copyright © Drecom Co., Ltd.
※大公開と言いつつ、 本日紹介するのは、 一つになります。。        Copyright © Drecom Co., Ltd.
activerecord-turntablehttp://github.com/drecom/activerecord-turntable                本日公開!                                ...
アジェンダ• 概要• 機能説明• デモ• Edgeの話• 終わりに             Copyright © Drecom Co., Ltd.
activerecord-turntable         概要                 Copyright © Drecom Co., Ltd.
activerecord-turntablehttp://github.com/drecom/activerecord-turntable  • ActiveRecord Sharding Plugin  • Railsアプリをスケールさせる ...
Shardingって何よ• 水平分散• 例) ブログサービスならブログ毎にDB を分ける            App     blog_id=1         blog_id=3        DB1      DB2       DB3 ...
既存のSharding• Spider for MySQL • ソーシャルゲームとの相性 • Railsとの相性 • 今はかなり改善されているはず• Octopus, DataFabric, db_charmer • DBアクセスするコード殆ど...
既存Shardingの痛み• DBアクセスするコード全てに何かしら 対応が必要• => 対応漏れが発生しやすい• => 対応に時間がかかる                   Copyright © Drecom Co., Ltd.
activerecord-turntable• Sharding導入時の痛みを軽減 • アプリケーションコードに入り込ま  ない • Shardingを意識しなくても8割方動  く                   Copyright © D...
何をやるのか• 分散定義に従って、クエリ情報から キーを元にModelが接続するShardを Clusterから自動的に選択することによ り、Shardingを実現するplugin                 Copyright © Dre...
図解ActiveRecord::Base      Turntable     AR::Base           AR::Base          Query                Query  ConnectionPool   ...
サーバ構成例Master    App     Sequencer                    ClusterShard1   Shard2   Shard3                      Copyright © Drec...
用語• Shard = データが保存されるノード• Cluster = 同じデータを保存するShard の塊• Sequencer = 採番DB• Master = 通常のdatabase.ymlで指定 するDB。schema情報が取得される。...
activerecord-turntable         機能                 Copyright © Drecom Co., Ltd.
機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など                         Copyright © Drecom Co., Ltd.
機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など                         Copyright © Drecom Co., Ltd.
分散定義class User < ActiveRecord::Base  turntable :user_cluster, :idend               + 分散設定ファイル turntable.yml 接続設定ファイル datab...
分散定義• mysqlのpartitioning• どの値をキーにして、どの値ならば、 どのDBに保存するかを設定として書く• 分散アルゴリズムはpluggable                       Copyright © Dreco...
機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など                         Copyright © Drecom Co., Ltd.
自動クエリ分散# on OctopusUser.using(:xxx).where(id: 10)# on db_charmerUser.shard_for(10).where(id: 10)# on turntableUser.where(i...
自動クエリ分散• 分散定義に従い、クエリを必要な shardに振り分けて結果をmerge• 内部的にはconnection_poolを置き換 えてクエリを盗み見• 対応できないクエリもある                     Copyrig...
機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など                             Copyright © Drecom Co., Ltd.
採番機能class User < ActiveRecord::Base  turntable :user_cluster, :id  sequencerend                           Copyright © Drec...
採番機能# on OctopusOctopus.using(:shard1) do  User.create(name: "hoge")end# on db_charmerUser.shard_for(10).create(name: "hog...
採番機能• ARは一意なサロゲートキーが前提• 分散環境下で一意なIDを振る仕組み• 採番方法自体はpluggable• mysql上に採番テーブルを作っている                 Copyright © Drecom Co., L...
機能• 分散定義• 自動クエリ分散• 採番機能• 分散トランザクション• Migration, Rake task拡張など                             Copyright © Drecom Co., Ltd.
分散トランザクションUser.shards_transaction([user1, user2]) do  ....  user1.save!  user2.save!end                                Cop...
分散トランザクション• 複数のDBを同時に操作する• 例) User間でアイテムの受け渡し等• XAトランザクションではなく通常の transactionをネストしているだけ• 操作するobjをまとめて渡す                   ...
機能• 分散定義• 自動クエリ分散• 採番機能• 分散トランザクション• Migration, Rake task拡張など                             Copyright © Drecom Co., Ltd.
Migration & Rake tasks• Migration毎にどのshardを操作するか を指定できる。• db:create, db:dropなどが全ての shardにも同時実行される• その他, README参照          ...
できないこと• has_many :throughやhabtmで制限あり 例) Friend関係など• DBをまたがったJOIN、ORDER BYなど。• できないことは設計とロジックで吸収                          C...
デモ     Copyright © Drecom Co., Ltd.
内部構造• connection_poolをproxyオブジェクトに 置き換え• ARel or SQLを受け取ったら値をbind• SQLをparseして対象shardにクエリ送信• 結果をmergeして返す                 ...
Edgeのお話          Copyright © Drecom Co., Ltd.
AR Edgeのお話• ActiveRecord::Model • 継承でもmixinでもARが使える • AR::Baseの中身はAR::Coreへ• IdentityMapなくなった                      Copyrig...
turntableの将来• turntableはRails 4.0にも対応予定• 参照分散等、多様な構成に対応• 拡張容易にしたい                        Copyright © Drecom Co., Ltd.
最後に• activerecord-turntableを使うこと で、ActiveRecord上で楽にSharding を実現することができます。• 他のORMで実装して頂ける方緩募                         Copyri...
合わせて読みたいhttp://www.slideshare.net/drecom/ss-11667563                                  Copyright © Drecom Co., Ltd.
ご清聴ありがとうございました。           activerecord-turntablehttp://github.com/drecom/activerecord-turntable   エンジニア大募集中               ...
Upcoming SlideShare
Loading in …5
×

activerecord-turntable

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

activerecord-turntable

  1. 1. ドリコムライブラリ大公開 gussan@Drecom Co., Ltd. #megurorails Copyright © Drecom Co., Ltd.
  2. 2. 提供 Copyright © Drecom Co., Ltd.
  3. 3. 自己紹介• @gussan ※顔出しNG• ソーシャルゲーム基盤開発本部• アーキテクト• ミドルウェア選定・ライブラリ開発等 Copyright © Drecom Co., Ltd.
  4. 4. ※大公開と言いつつ、 本日紹介するのは、 一つになります。。 Copyright © Drecom Co., Ltd.
  5. 5. activerecord-turntablehttp://github.com/drecom/activerecord-turntable 本日公開! Copyright © Drecom Co., Ltd.
  6. 6. アジェンダ• 概要• 機能説明• デモ• Edgeの話• 終わりに Copyright © Drecom Co., Ltd.
  7. 7. activerecord-turntable 概要 Copyright © Drecom Co., Ltd.
  8. 8. activerecord-turntablehttp://github.com/drecom/activerecord-turntable • ActiveRecord Sharding Plugin • Railsアプリをスケールさせる • 長いので ターンテーブル と呼びます Copyright © Drecom Co., Ltd.
  9. 9. Shardingって何よ• 水平分散• 例) ブログサービスならブログ毎にDB を分ける App blog_id=1 blog_id=3 DB1 DB2 DB3 Copyright © Drecom Co., Ltd.
  10. 10. 既存のSharding• Spider for MySQL • ソーシャルゲームとの相性 • Railsとの相性 • 今はかなり改善されているはず• Octopus, DataFabric, db_charmer • DBアクセスするコード殆どに手を入れなけれ ばいけない Copyright © Drecom Co., Ltd.
  11. 11. 既存Shardingの痛み• DBアクセスするコード全てに何かしら 対応が必要• => 対応漏れが発生しやすい• => 対応に時間がかかる Copyright © Drecom Co., Ltd.
  12. 12. activerecord-turntable• Sharding導入時の痛みを軽減 • アプリケーションコードに入り込ま ない • Shardingを意識しなくても8割方動 く Copyright © Drecom Co., Ltd.
  13. 13. 何をやるのか• 分散定義に従って、クエリ情報から キーを元にModelが接続するShardを Clusterから自動的に選択することによ り、Shardingを実現するplugin Copyright © Drecom Co., Ltd.
  14. 14. 図解ActiveRecord::Base Turntable AR::Base AR::Base Query Query ConnectionPool Proxy Connection CP CP CP Conn Conn Conn DB DB DB DB Copyright © Drecom Co., Ltd.
  15. 15. サーバ構成例Master App Sequencer ClusterShard1 Shard2 Shard3 Copyright © Drecom Co., Ltd.
  16. 16. 用語• Shard = データが保存されるノード• Cluster = 同じデータを保存するShard の塊• Sequencer = 採番DB• Master = 通常のdatabase.ymlで指定 するDB。schema情報が取得される。 Copyright © Drecom Co., Ltd.
  17. 17. activerecord-turntable 機能 Copyright © Drecom Co., Ltd.
  18. 18. 機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など Copyright © Drecom Co., Ltd.
  19. 19. 機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など Copyright © Drecom Co., Ltd.
  20. 20. 分散定義class User < ActiveRecord::Base turntable :user_cluster, :idend + 分散設定ファイル turntable.yml 接続設定ファイル database.yml Copyright © Drecom Co., Ltd.
  21. 21. 分散定義• mysqlのpartitioning• どの値をキーにして、どの値ならば、 どのDBに保存するかを設定として書く• 分散アルゴリズムはpluggable Copyright © Drecom Co., Ltd.
  22. 22. 機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など Copyright © Drecom Co., Ltd.
  23. 23. 自動クエリ分散# on OctopusUser.using(:xxx).where(id: 10)# on db_charmerUser.shard_for(10).where(id: 10)# on turntableUser.where(id: 10) Copyright © Drecom Co., Ltd.
  24. 24. 自動クエリ分散• 分散定義に従い、クエリを必要な shardに振り分けて結果をmerge• 内部的にはconnection_poolを置き換 えてクエリを盗み見• 対応できないクエリもある Copyright © Drecom Co., Ltd.
  25. 25. 機能• 分散定義• 自動クエリ分散• 採番機能• DB分散トランザクション• Migration, Rake task拡張など Copyright © Drecom Co., Ltd.
  26. 26. 採番機能class User < ActiveRecord::Base turntable :user_cluster, :id sequencerend Copyright © Drecom Co., Ltd.
  27. 27. 採番機能# on OctopusOctopus.using(:shard1) do User.create(name: "hoge")end# on db_charmerUser.shard_for(10).create(name: "hoge")# on turntableUser.create(name: "hoge") Copyright © Drecom Co., Ltd.
  28. 28. 採番機能• ARは一意なサロゲートキーが前提• 分散環境下で一意なIDを振る仕組み• 採番方法自体はpluggable• mysql上に採番テーブルを作っている Copyright © Drecom Co., Ltd.
  29. 29. 機能• 分散定義• 自動クエリ分散• 採番機能• 分散トランザクション• Migration, Rake task拡張など Copyright © Drecom Co., Ltd.
  30. 30. 分散トランザクションUser.shards_transaction([user1, user2]) do .... user1.save! user2.save!end Copyright © Drecom Co., Ltd.
  31. 31. 分散トランザクション• 複数のDBを同時に操作する• 例) User間でアイテムの受け渡し等• XAトランザクションではなく通常の transactionをネストしているだけ• 操作するobjをまとめて渡す Copyright © Drecom Co., Ltd.
  32. 32. 機能• 分散定義• 自動クエリ分散• 採番機能• 分散トランザクション• Migration, Rake task拡張など Copyright © Drecom Co., Ltd.
  33. 33. Migration & Rake tasks• Migration毎にどのshardを操作するか を指定できる。• db:create, db:dropなどが全ての shardにも同時実行される• その他, README参照 Copyright © Drecom Co., Ltd.
  34. 34. できないこと• has_many :throughやhabtmで制限あり 例) Friend関係など• DBをまたがったJOIN、ORDER BYなど。• できないことは設計とロジックで吸収 Copyright © Drecom Co., Ltd.
  35. 35. デモ Copyright © Drecom Co., Ltd.
  36. 36. 内部構造• connection_poolをproxyオブジェクトに 置き換え• ARel or SQLを受け取ったら値をbind• SQLをparseして対象shardにクエリ送信• 結果をmergeして返す Copyright © Drecom Co., Ltd.
  37. 37. Edgeのお話 Copyright © Drecom Co., Ltd.
  38. 38. AR Edgeのお話• ActiveRecord::Model • 継承でもmixinでもARが使える • AR::Baseの中身はAR::Coreへ• IdentityMapなくなった Copyright © Drecom Co., Ltd.
  39. 39. turntableの将来• turntableはRails 4.0にも対応予定• 参照分散等、多様な構成に対応• 拡張容易にしたい Copyright © Drecom Co., Ltd.
  40. 40. 最後に• activerecord-turntableを使うこと で、ActiveRecord上で楽にSharding を実現することができます。• 他のORMで実装して頂ける方緩募 Copyright © Drecom Co., Ltd.
  41. 41. 合わせて読みたいhttp://www.slideshare.net/drecom/ss-11667563 Copyright © Drecom Co., Ltd.
  42. 42. ご清聴ありがとうございました。 activerecord-turntablehttp://github.com/drecom/activerecord-turntable エンジニア大募集中 Copyright © Drecom Co., Ltd.

    Be the first to comment

    Login to see the comments

  • TakeshiWatanabe2

    Apr. 10, 2012
  • TokyoIncidents

    Apr. 11, 2012
  • sma_so

    Apr. 11, 2012
  • TakahiroKaneko1

    Apr. 12, 2012
  • jun1108

    Jul. 17, 2012
  • KeisukeKadoyama

    Aug. 12, 2012
  • siwamot

    Aug. 27, 2012
  • GedowFather

    Aug. 28, 2012
  • YoshiyukiIeyama

    Mar. 30, 2013
  • TakuyaShiotari

    May. 21, 2013
  • drecom

    Oct. 29, 2013
  • hanabokuro

    Jan. 15, 2014
  • masakazuhayashi37

    Aug. 4, 2014
  • yasunobukusakabe

    May. 22, 2015

Views

Total views

7,605

On Slideshare

0

From embeds

0

Number of embeds

440

Actions

Downloads

25

Shares

0

Comments

0

Likes

14

×