activerecord-turntable

6,208 views

Published on

Published in: Technology
0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,208
On SlideShare
0
From Embeds
0
Number of Embeds
416
Actions
Shares
0
Downloads
25
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • 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.

    ×