SlideShare a Scribd company logo
1 of 27
Download to read offline
Rails における

コネクション数と

シャーディングのお話
株式会社 Aiming
エンジニア 土井 英範
About: 土井 英範
• 株式会社 Aiming

開発グループマネージャー

リードソフトウェアエンジニア
• エンジニアになって10年弱
• かかわったゲームタイトル

4本くらいクライアントからサーバまで
全般を経験してきた
• コンシューマゲーム、ブラウザゲーム、ス
マホのゲーム
• サーバ・クライアントプログラム
Rubyist 編
Active Record
水平分割したい
水平分割したい
•際限なく増えていくレコード
•インデックスサイズの増加
•ユーザー増加に伴うクエリ回数の増加
•クエリ性能の低下
User Table
User Table 1 User Table 2 User Table 3
分割基準
Range (ID: 1∼100, 101∼200 …)

List (CountryCode: JP, US …)
Hash ( ID mod 3 )
一つのテーブルを特定のルールで
複数のDBに分散する
↓分割↓
Q. ActiveRecord で

水平分割ってできるの?
A. 一筋縄にはいかない
Active Record の

コネクションスイッチング
•establish_connection 

というメソッドがありますが
•能動的に接続を確立するためのものではなく

実際の接続は行わない
•指定されたクラスをキーに (クラス・メソッド)

コネクションプールを作成するだけのもの
establish_connection の挙動
•クラス定義の段階で指定するため

スイッチングの用途に使えない
•安直に呼び出して切り替えるのも危険
class User < ActiveRecord::Base
establish_connection :user_db # database.yml で定義されているとする
…
end
水平分割するための

Gem があります
水平分割に利用できる Gem
•octopus
•https://github.com/tchandy/octopus
•昔ある有名な Gem
•@user = User.using(:shard1).find_by_name( Joao")
•こんな書き方ができる
水平分割に利用できる Gem
•ActiveRecord::Turntable
•https://github.com/drecom/activerecord-turntable
•高機能
•シャード間で ActiveRecord の id をキーとして分散できる
•自動的にどのシャードでクエリを投げる必要があるかを解決
してくれる
水平分割に利用できる Gem
•Sengiri
•https://github.com/mewlist/sengiri
•ActiveRecordの挙動にあまり手をいれない作り
•低機能、シンプル
•土井の自作
ActiveRecord と

コネクション数の話
too many
connections
見積もり方法
•プロセスベースのサーバならスレッド数は 基本 1
•※コード内に Ruby スレッド処理などがない前提
• Passenger ※Enterprise版だと Thread モデルも可能らしい
•Unicorn
•スレッドベースのサーバ
•Puma (ワーカープロセスも複数設定できる)
見積もり方法
•サーバ台数 x プロセス数 x スレッド数
•20台 x 5 process x 2 thread
• = 200 connection
その他
•管理ツールからのコネクション
•バッチ処理・キュー処理からのコネク
ション
•これらも忘れずに接続数として見積もっ
ておく
database.yml
•pool: 5
•プールサイズの設定はスレッドを利用する
際の設定
•unicorn, passenger などのプロセスベー
スのサーバだと1 process に付き 1
connection
水平分割した時の話
•Multi-DB アクセスする場合
•基本的に全てのDBにコネクションが張られると考
えたほうが良い
•5分割したら5つのDBに接続を張る可能性がある
•各 Gem でどのような実装になっているかは未確認
•※Sengiriはつなぎっぱなしになっちゃいます
DB1 DB2 DB3 DB4 DB5
イメージ
web web
admin bat
コネクション数が増加すると
•MySQLの場合
•http://dev.mysql.com/doc/refman/5.6/ja/thread-
pool-plugin.html
http://www.oracle.com/technetwork/jp/ondemand/database/mysql/mysql-perftun-1484759-ja.pdf
コネクションプーリングの回避
•activerecord-refresh_connection
•https://github.com/sonots/activerecord-refresh_connection
•ardisconnector
•https://github.com/mewlist/ardisconnector
•自作 sengiri と連動
コネクションは切断した
ほうが良いか?
•結論
•RDB側のスレッドプーリングが使えるならコネクション
数の増加については気にする必要は無いのかもしれない
•最大コネクション数は上限を常に意識した設定を行う

More Related Content

What's hot

Famo.usはもう試したかい?
Famo.usはもう試したかい?Famo.usはもう試したかい?
Famo.usはもう試したかい?lion-man
 
大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側KLab株式会社
 
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現gree_tech
 
AmazonのDNSサービス Amazon Route 53の使いかたと裏側
AmazonのDNSサービス Amazon Route 53の使いかたと裏側AmazonのDNSサービス Amazon Route 53の使いかたと裏側
AmazonのDNSサービス Amazon Route 53の使いかたと裏側Yasuhiro Araki, Ph.D
 
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep DiveAmazon Web Services Japan
 
Expectation for cloudSearch
Expectation for cloudSearchExpectation for cloudSearch
Expectation for cloudSearchMinoru Osuka
 
DB Tech Showcase 大阪: Amazon DynamoDB Deep Dive
DB Tech Showcase 大阪: Amazon DynamoDB Deep DiveDB Tech Showcase 大阪: Amazon DynamoDB Deep Dive
DB Tech Showcase 大阪: Amazon DynamoDB Deep DiveKenta Yasukawa
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計sairoutine
 
201910 azure seminar
201910 azure seminar201910 azure seminar
201910 azure seminarSAKURUG co.
 
Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)Amazon Web Services Japan
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術Satoshi Yamafuji
 
20150129 cross2015 cloudsearch
20150129 cross2015 cloudsearch20150129 cross2015 cloudsearch
20150129 cross2015 cloudsearchYoshinori Fujiwara
 
AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料Rasmus Ekman
 

What's hot (16)

Famo.usはもう試したかい?
Famo.usはもう試したかい?Famo.usはもう試したかい?
Famo.usはもう試したかい?
 
大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側
 
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
アナザーエデンにおける非同期オートセーブを用いた通信待ちストレスのないゲーム体験の実現
 
Scaling MongoDB on AWS
Scaling MongoDB on AWSScaling MongoDB on AWS
Scaling MongoDB on AWS
 
AmazonのDNSサービス Amazon Route 53の使いかたと裏側
AmazonのDNSサービス Amazon Route 53の使いかたと裏側AmazonのDNSサービス Amazon Route 53の使いかたと裏側
AmazonのDNSサービス Amazon Route 53の使いかたと裏側
 
Let's start ISUCON
Let's start ISUCONLet's start ISUCON
Let's start ISUCON
 
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive
 
Expectation for cloudSearch
Expectation for cloudSearchExpectation for cloudSearch
Expectation for cloudSearch
 
DB Tech Showcase 大阪: Amazon DynamoDB Deep Dive
DB Tech Showcase 大阪: Amazon DynamoDB Deep DiveDB Tech Showcase 大阪: Amazon DynamoDB Deep Dive
DB Tech Showcase 大阪: Amazon DynamoDB Deep Dive
 
ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計ゲームエンジニアのためのデータベース設計
ゲームエンジニアのためのデータベース設計
 
201910 azure seminar
201910 azure seminar201910 azure seminar
201910 azure seminar
 
Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)Amazon Aurora Deep Dive (db tech showcase 2016)
Amazon Aurora Deep Dive (db tech showcase 2016)
 
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
 
20150129 cross2015 cloudsearch
20150129 cross2015 cloudsearch20150129 cross2015 cloudsearch
20150129 cross2015 cloudsearch
 
20120409 aws meister-reloaded-dynamo-db
20120409 aws meister-reloaded-dynamo-db20120409 aws meister-reloaded-dynamo-db
20120409 aws meister-reloaded-dynamo-db
 
AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料AWSでのバースト ― GP2 T2 ご紹介資料
AWSでのバースト ― GP2 T2 ご紹介資料
 

Similar to Aiming飲み会 1-rails における
コネクション数と
シャーディングのお話

ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)Amazon Web Services Japan
 
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例Amazon Web Services Japan
 
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介gree_tech
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャHaruto Otake
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話Tokoroten Nakayama
 
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
 
ネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったことネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったことgree_tech
 
とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例agileware_jp
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with SymfonyAtsuhiro Kubo
 
Amazon dynamo db、cloudant、blockchainの紹介 20160706
Amazon dynamo db、cloudant、blockchainの紹介 20160706Amazon dynamo db、cloudant、blockchainの紹介 20160706
Amazon dynamo db、cloudant、blockchainの紹介 20160706Tsuyoshi Hirayama
 
このService Fabric野郎!!
このService Fabric野郎!!このService Fabric野郎!!
このService Fabric野郎!!Toru Makabe
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Y Watanabe
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京Yuko Mori
 
1_各Atlassian製品の紹介
1_各Atlassian製品の紹介1_各Atlassian製品の紹介
1_各Atlassian製品の紹介Ricksoft
 
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略Yasutomo Uemori
 
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法モノビット エンジン
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀増田 亨
 

Similar to Aiming飲み会 1-rails における
コネクション数と
シャーディングのお話 (20)

ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
 
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
 
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャ
 
ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話ソーシャルゲームにレコメンドエンジンを導入した話
ソーシャルゲームにレコメンドエンジンを導入した話
 
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で作る
 
ネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったことネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったこと
 
BPStudy20121221
BPStudy20121221BPStudy20121221
BPStudy20121221
 
とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例とあるメーカーのRedmine活用事例
とあるメーカーのRedmine活用事例
 
Software Development with Symfony
Software Development with SymfonySoftware Development with Symfony
Software Development with Symfony
 
Amazon dynamo db、cloudant、blockchainの紹介 20160706
Amazon dynamo db、cloudant、blockchainの紹介 20160706Amazon dynamo db、cloudant、blockchainの紹介 20160706
Amazon dynamo db、cloudant、blockchainの紹介 20160706
 
このService Fabric野郎!!
このService Fabric野郎!!このService Fabric野郎!!
このService Fabric野郎!!
 
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
DynamoDB   MyNA・JPUG合同DB勉強会 in 東京DynamoDB   MyNA・JPUG合同DB勉強会 in 東京
DynamoDB MyNA・JPUG合同DB勉強会 in 東京
 
1_各Atlassian製品の紹介
1_各Atlassian製品の紹介1_各Atlassian製品の紹介
1_各Atlassian製品の紹介
 
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
 
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
 
ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀ドメイン駆動設計という仕事の流儀
ドメイン駆動設計という仕事の流儀
 

More from Hidenori Doi

エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10Hidenori Doi
 
Shader Model 3で草を生やす
Shader Model 3で草を生やすShader Model 3で草を生やす
Shader Model 3で草を生やすHidenori Doi
 
Dependency Injectionとは
Dependency InjectionとはDependency Injectionとは
Dependency InjectionとはHidenori Doi
 

More from Hidenori Doi (6)

錯視Lod
錯視Lod錯視Lod
錯視Lod
 
机の高さ
机の高さ机の高さ
机の高さ
 
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
 
Shader Model 3で草を生やす
Shader Model 3で草を生やすShader Model 3で草を生やす
Shader Model 3で草を生やす
 
Dependency Injectionとは
Dependency InjectionとはDependency Injectionとは
Dependency Injectionとは
 
IoC とは
IoC とはIoC とは
IoC とは
 

Aiming飲み会 1-rails における
コネクション数と
シャーディングのお話