SlideShare a Scribd company logo
ドリコムライブラリ大公開
  gussan@Drecom Co., Ltd.
        #megurorails




                            Copyright © Drecom Co., Ltd.
提供




     Copyright © Drecom Co., Ltd.
自己紹介

• @gussan          ※顔出しNG

• ソーシャルゲーム基盤開発本部
• アーキテクト
• ミドルウェア選定・ライブラリ開発等

               Copyright © Drecom Co., Ltd.
※大公開と言いつつ、
 本日紹介するのは、
 一つになります。。


        Copyright © Drecom Co., Ltd.
activerecord-turntable
http://github.com/drecom/activerecord-turntable

                本日公開!



                                     Copyright © Drecom Co., Ltd.
アジェンダ
• 概要
• 機能説明
• デモ
• Edgeの話
• 終わりに
             Copyright © Drecom Co., Ltd.
activerecord-turntable
         概要


                 Copyright © Drecom Co., Ltd.
activerecord-turntable
http://github.com/drecom/activerecord-turntable



  • ActiveRecord Sharding Plugin
  • Railsアプリをスケールさせる
  • 長いので ターンテーブル と呼びます

                                    Copyright © Drecom Co., Ltd.
Shardingって何よ
• 水平分散
• 例) ブログサービスならブログ毎にDB
 を分ける            App
     blog_id=1         blog_id=3

        DB1      DB2       DB3


                        Copyright © Drecom Co., Ltd.
既存のSharding
• Spider for MySQL
 • ソーシャルゲームとの相性
 • Railsとの相性
 • 今はかなり改善されているはず
• Octopus, DataFabric, db_charmer
 • DBアクセスするコード殆どに手を入れなけれ
   ばいけない

                          Copyright © Drecom Co., Ltd.
既存Shardingの痛み

• DBアクセスするコード全てに何かしら
 対応が必要

• => 対応漏れが発生しやすい
• => 対応に時間がかかる

                   Copyright © Drecom Co., Ltd.
activerecord-turntable

• Sharding導入時の痛みを軽減
 • アプリケーションコードに入り込ま
  ない

 • Shardingを意識しなくても8割方動
  く


                   Copyright © Drecom Co., Ltd.
何をやるのか

• 分散定義に従って、クエリ情報から
 キーを元にModelが接続するShardを
 Clusterから自動的に選択することによ
 り、Shardingを実現するplugin



                 Copyright © Drecom Co., Ltd.
図解
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.
サーバ構成例

Master    App     Sequencer


                    Cluster
Shard1   Shard2   Shard3




                      Copyright © Drecom Co., Ltd.
用語
• Shard = データが保存されるノード
• Cluster = 同じデータを保存するShard
 の塊

• Sequencer = 採番DB
• Master = 通常のdatabase.ymlで指定
 するDB。schema情報が取得される。

                       Copyright © Drecom Co., Ltd.
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, :id
end

               +
 分散設定ファイル turntable.yml
 接続設定ファイル database.yml



                           Copyright © Drecom Co., Ltd.
分散定義

• mysqlのpartitioning
• どの値をキーにして、どの値ならば、
 どのDBに保存するかを設定として書く

• 分散アルゴリズムはpluggable

                       Copyright © Drecom Co., Ltd.
機能
• 分散定義
• 自動クエリ分散
• 採番機能
• DB分散トランザクション
• Migration, Rake task拡張など
                         Copyright © Drecom Co., Ltd.
自動クエリ分散
# on Octopus
User.using(:xxx).where(id: 10)
# on db_charmer
User.shard_for(10).where(id: 10)
# on turntable
User.where(id: 10)




                             Copyright © Drecom Co., Ltd.
自動クエリ分散

• 分散定義に従い、クエリを必要な
 shardに振り分けて結果をmerge

• 内部的にはconnection_poolを置き換
 えてクエリを盗み見

• 対応できないクエリもある
                     Copyright © Drecom Co., Ltd.
機能
• 分散定義
• 自動クエリ分散
• 採番機能
• DB分散トランザクション
• Migration, Rake task拡張など
                             Copyright © Drecom Co., Ltd.
採番機能

class User < ActiveRecord::Base
  turntable :user_cluster, :id
  sequencer
end




                           Copyright © Drecom Co., Ltd.
採番機能
# on Octopus
Octopus.using(:shard1) do
  User.create(name: "hoge")
end
# on db_charmer
User.shard_for(10).create(name: "hoge")
# on turntable
User.create(name: "hoge")


                                Copyright © Drecom Co., Ltd.
採番機能

• ARは一意なサロゲートキーが前提
• 分散環境下で一意なIDを振る仕組み
• 採番方法自体はpluggable
• mysql上に採番テーブルを作っている

                 Copyright © Drecom Co., Ltd.
機能
• 分散定義
• 自動クエリ分散
• 採番機能
• 分散トランザクション
• Migration, Rake task拡張など
                             Copyright © Drecom Co., Ltd.
分散トランザクション

User.shards_transaction([user1, user2]) do
  ....
  user1.save!
  user2.save!
end




                                Copyright © Drecom Co., Ltd.
分散トランザクション
• 複数のDBを同時に操作する
• 例) User間でアイテムの受け渡し等
• XAトランザクションではなく通常の
 transactionをネストしているだけ

• 操作するobjをまとめて渡す
                   Copyright © Drecom Co., Ltd.
機能
• 分散定義
• 自動クエリ分散
• 採番機能
• 分散トランザクション
• Migration, Rake task拡張など

                             Copyright © Drecom Co., Ltd.
Migration & Rake tasks

• Migration毎にどのshardを操作するか
 を指定できる。

• db:create, db:dropなどが全ての
 shardにも同時実行される

• その他, README参照
                        Copyright © Drecom Co., Ltd.
できないこと

• has_many :throughやhabtmで制限あり
 例) Friend関係など

• DBをまたがったJOIN、ORDER BYなど。
• できないことは設計とロジックで吸収

                          Copyright © Drecom Co., Ltd.
デモ



     Copyright © Drecom Co., Ltd.
内部構造
• connection_poolをproxyオブジェクトに
 置き換え

• ARel or SQLを受け取ったら値をbind
• SQLをparseして対象shardにクエリ送信
• 結果をmergeして返す
                       Copyright © Drecom Co., Ltd.
Edgeのお話



          Copyright © Drecom Co., Ltd.
AR Edgeのお話

• ActiveRecord::Model
 • 継承でもmixinでもARが使える
 • AR::Baseの中身はAR::Coreへ
• IdentityMapなくなった

                      Copyright © Drecom Co., Ltd.
turntableの将来

• turntableはRails 4.0にも対応予定
• 参照分散等、多様な構成に対応
• 拡張容易にしたい

                        Copyright © Drecom Co., Ltd.
最後に

• activerecord-turntableを使うこと
 で、ActiveRecord上で楽にSharding
 を実現することができます。

• 他のORMで実装して頂ける方緩募

                         Copyright © Drecom Co., Ltd.
合わせて読みたい




http://www.slideshare.net/drecom/ss-11667563



                                  Copyright © Drecom Co., Ltd.
ご清聴ありがとうございました。

           activerecord-turntable
http://github.com/drecom/activerecord-turntable



   エンジニア大募集中


                                    Copyright © Drecom Co., Ltd.

More Related Content

PPTX
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
PDF
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
PDF
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
PDF
MySQL 8.0で憶えておいてほしいこと
PDF
AWSでDockerを扱うためのベストプラクティス
PDF
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
PDF
Apache NiFi の紹介 #streamctjp
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
MySQL 8.0で憶えておいてほしいこと
AWSでDockerを扱うためのベストプラクティス
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Apache NiFi の紹介 #streamctjp

What's hot (20)

PPTX
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
PDF
Akkaとは。アクターモデル とは。
PDF
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
PDF
分散トレーシング技術について(Open tracingやjaeger)
PPTX
はじめてのElasticsearchクラスタ
PPTX
KubernetesでGPUクラスタを管理したい
PDF
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
PPTX
地理分散DBについて
PDF
【Interop Tokyo 2018】 Telemetryの匠が解説~オープン技術を用いたマイクロバースト検知の最前線~
PDF
20200811 AWS Black Belt Online Seminar CloudEndure
PDF
SRv6 study
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
"SRv6の現状と展望" ENOG53@上越
PDF
普通の人でもわかる Paxos
PDF
DynamoDBを導入した話
PDF
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
PDF
Dockerfile を書くためのベストプラクティス解説編
PDF
해외 사례로 보는 Billing for OpenStack Solution
PDF
オンプレML基盤on Kubernetes パネルディスカッション
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
Akkaとは。アクターモデル とは。
誰でもできるスマートシティ向けOSS : FIWAREのはじめかた
分散トレーシング技術について(Open tracingやjaeger)
はじめてのElasticsearchクラスタ
KubernetesでGPUクラスタを管理したい
20180801 AWS Black Belt Online Seminar Amazon QuickSight アップデート
地理分散DBについて
【Interop Tokyo 2018】 Telemetryの匠が解説~オープン技術を用いたマイクロバースト検知の最前線~
20200811 AWS Black Belt Online Seminar CloudEndure
SRv6 study
コンテナ未経験新人が学ぶコンテナ技術入門
"SRv6の現状と展望" ENOG53@上越
普通の人でもわかる Paxos
DynamoDBを導入した話
オンプレミスからクラウドへ:Oracle Databaseの移行ベストプラクティスを解説 (Oracle Cloudウェビナーシリーズ: 2021年2月18日)
Dockerfile を書くためのベストプラクティス解説編
해외 사례로 보는 Billing for OpenStack Solution
オンプレML基盤on Kubernetes パネルディスカッション
Ad

Similar to activerecord-turntable (20)

PDF
ソーシャルアプリを分析してみた
PDF
20120409 aws meister-reloaded-dynamo-db
PDF
0730 bp study#35発表資料
PDF
ログ解析を支えるNoSQLの技術
PDF
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
PDF
スマートニュースの世界展開を支えるログ解析基盤
PDF
RDS詳細 -ほぼ週刊AWSマイスターシリーズ第8回-
PDF
20110517 okuyama ソーシャルメディアが育てた技術勉強会
PDF
Apache Drill を利用した実データの分析
PDF
MongoDBざっくり解説
PDF
Ruby with AWS DynamoDB
PDF
Flume cassandra real time log processing (日本語)
PDF
InfoTalk springbreak_2012
KEY
実録!Railsのはまりポイント10選
PDF
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
PPTX
Windows Azure 基盤を支えるテクノロジー
PPTX
PDF
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
PDF
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
PPTX
“D” は何のD ?
ソーシャルアプリを分析してみた
20120409 aws meister-reloaded-dynamo-db
0730 bp study#35発表資料
ログ解析を支えるNoSQLの技術
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
スマートニュースの世界展開を支えるログ解析基盤
RDS詳細 -ほぼ週刊AWSマイスターシリーズ第8回-
20110517 okuyama ソーシャルメディアが育てた技術勉強会
Apache Drill を利用した実データの分析
MongoDBざっくり解説
Ruby with AWS DynamoDB
Flume cassandra real time log processing (日本語)
InfoTalk springbreak_2012
実録!Railsのはまりポイント10選
DBP-009_クラウドで実現するスケーラブルなデータ ウェアハウス Azure SQL Data Warehouse 解説
Windows Azure 基盤を支えるテクノロジー
クラウド時代における分散Webシステムの構成とスケーリング #seccamp
モバイルゲームの「大規模な開発」かつ「高頻度の更新」を実現するための開発環境整備の取り組み
“D” は何のD ?
Ad

More from Drecom Co., Ltd. (20)

PDF
コンテナで始める柔軟な AWS Lambda 生活
PDF
サービスのインシデントを解決するには.pdf
PPTX
ドリコムサマージョブ報告 by 佐々木 誠治
PPTX
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
PDF
HTML5 ゲームフレームワーク開発について
PDF
「AROW」お披露目(導入編)
PDF
「AROW」お披露目(実用編)
PDF
AROW の紹介 〜概要編〜
PDF
AROW の紹介 〜実践編〜
PDF
rails-developers-meetup-day4
PDF
html5conf2018-sponsor-session
PPTX
DApps のユーザ認証に web3.eth.personal.sign を使おう!
PPTX
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
PPTX
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
PDF
今月のレッツゴー陰陽師!
PDF
位置情報を常に取得するのはつらいよ
PDF
カンバンと朝会とわたくし
PDF
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
PDF
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
PDF
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…
コンテナで始める柔軟な AWS Lambda 生活
サービスのインシデントを解決するには.pdf
ドリコムサマージョブ報告 by 佐々木 誠治
DRECOM Summer Internship 2019 成果発表 by 鹿内 裕介
HTML5 ゲームフレームワーク開発について
「AROW」お披露目(導入編)
「AROW」お披露目(実用編)
AROW の紹介 〜概要編〜
AROW の紹介 〜実践編〜
rails-developers-meetup-day4
html5conf2018-sponsor-session
DApps のユーザ認証に web3.eth.personal.sign を使おう!
3Dリアルマップを用いたモバイルゲーム開発における課題とその解決方法
LoveChainのスマートコントラクトを見てみよう & 非中央集権なトークンのカタチ
今月のレッツゴー陰陽師!
位置情報を常に取得するのはつらいよ
カンバンと朝会とわたくし
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 IoT向け汎用protocol MQTTのリアルタイムゲーム通信利用と実装、そして未来へ…

activerecord-turntable

Editor's Notes