SlideShare a Scribd company logo
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Mobageを支える
November 11th, 2014
!
Naotoshi Seo @sonots

DeNA Co., Ltd.
Rubyの技術
~複数DB編~
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
2
自己紹介
・瀬尾 直利 @sonots
・DeNA, Co., Ltd
・インフラの Dev
・Rubyist
・OSS 活動家
・Fluentd コミッタ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
背景
3
!
Perl の会社と名高いこの DeNA でも
Ruby (on Rails) のプロジェクトが立ち
上がり始めている
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
インフラ要件の壁
4
!
• ホットデプロイ
• カスタムフォーマットのロガー
• デプロイサーバでビルドした gem を web
サーバにアプリコードと共に撒く
• 社内 rubygems ミラー
• Q4M 非同期ジョブキュー
• プロファイリングツール、調査ツール
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
複数DB対応
5
!
• Rails で複数DBに対応する必要性
• 冗長化・高速化
• 既存のインフラの仕組みにのっかる必要性
• 今回はここに特化した話
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
目次
6
!
• DB接続を都度接続に
• クライアントサイドDNSキャッシュ
• DBパスワード一元管理
• DBスキーマ一元管理ツール
• 複数DB接続
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
DB接続を都度接続にすべし
7
要件1
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
DeNAでの複数DB構成
8
!
• MySQL: Master/Slave
• DNSラウンドロビンでSlaveを振り分ける
• MHA で Master の高可用化
• DNS サーバには MyDNS を使用
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Slave 1
MySQL
Slave 2
MySQL
Slave 3
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.4
10.1.1.2
sample_r
1回目
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 2 | 1 | sample_r | 10.1.1.2 | 100 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
2回目
Slave参照: DNSラウンドロビン
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Slave 1
MySQL
Slave 2
MySQL
Slave 3
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.4
2回目
Slave参照: 永続接続
ずっとココ!!
ダメ!
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 2 | 1 | sample_r | 10.1.1.2 | 100 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Slave 1
MySQL
Slave 2
MySQL
Slave 3
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.4
10.1.1.3sample_r
2回目
Slave参照: 都度接続
1/3 の確率
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 2 | 1 | sample_r | 10.1.1.2 | 100 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
Good
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Slave 2
MySQL
Slave 3
MySQL
Master 1
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.1
10.1.1.4
sample_w
MHA
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 1 | 1 | sample_w | 10.1.1.1 | 100 |
| 2 | 1 | sample_r | 10.1.1.2 | 100 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
MySQL
Slave 1
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Slave 2
MySQL
Slave 3
MySQL
Master 1
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.1
10.1.1.4
sample_w
MHA
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 1 | 1 | sample_w | 10.1.1.1 | 100 |
| 2 | 1 | sample_w | 10.1.1.2 | 100 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
MySQL
Master 2
再接続 or
都度接続
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
DBWeb
DBを再起動
restart
再接続 or
都度接続
※ ただし、ActiveRecord の reconnect は正しく動かなかったり
※ そのため、アプリの再起動が必要だったりして、ツライ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Slave 1
MySQL
Slave 2
MySQL
Slave 3
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.4
Slaveダウン検知(check_slave)
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 2 | 1 | sample_r | 10.1.1.2 | 100 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
10.1.1.3sample_r
再接続 or
都度接続
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
すべて都度接続で解決
16
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
しかしActiveRecord
には都度接続オプションがない
17
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
18
なんだってーーーΩΩΩ
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
作りました
19
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
activerecord-
refresh_connection
20
Rack レイヤーでリクエスト毎に接続を切るやつ
1行追加でおk
# config/application.rb
class Application < Rails::Application
config.middleware.swap ActiveRecord::ConnectionAdapters::ConnectionManagement,
"ActiveRecord::ConnectionAdapters::RefreshConnectionManagement"
end
https://github.com/sonots/activerecord-refresh_connection
http://blog.livedoor.jp/sonots/archives/38797925.html
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
クライアントDNSキャッシュ
21
要件2
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
クライアントDNSキャッシュ
22
!
• ruby 実装
• キャッシュしないと名前解決遅い
• 重み0なmasterへのfallback
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Slave 1
MySQL
Slave 2
MySQL
Slave 3
MySQL
Master 1
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.1
10.1.1.4
テーブルを
キャッシュ
select
DNSキャッシュ
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 1 | 1 | sample_w | 10.1.1.1 | 100 |
| 2 | 1 | sample_r | 10.1.1.2 | 100 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
10.1.1.2
ファイルに落とす
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
MySQL
Master 2
MySQL
Slave 2
MySQL
Slave 3
MyDNS
Web
10.1.1.2
10.1.1.3
10.1.1.4
重み0へのfallback
| id | zone | name | data | aux |
|----|------|----------|----------|-----|
| 1 | 1 | sample_w | 10.1.1.1 | 100 |
| 2 | 1 | sample_w | 10.1.1.2 | 0 |
| 3 | 1 | sample_r | 10.1.1.3 | 100 |
| 4 | 1 | sample_r | 10.1.1.4 | 100 |
MySQL
Master 1
10.1.1.1
weight:100
weight: 0
DNSプロトコルで引くと重み0のエントリが見えない。
Unbound などのDNSキャッシュを使えない。
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
ResolverMyDNS
25
resolver = ResolverMyDNS.new(
zone: 'mobage.local',!
cache_dir: "cache_dir/",!
host: 'localhost',!
username: 'root',!
passowrd: nil,!
database: 'mydns',!
)!
resolver.get_server 'foo.mobage.local'
#=> 10.1.1.10
MyDNSのテーブルエントリをクライアントサイド
でキャッシュして名前解決するやつ
@Spring_MT
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
26
@ryopeko
これアプリコード内でIPアドレス取得
して establish_connection に渡
す必要あるけど、めんどいよね?
そうすな∼
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
ResolverReplace
27
resolver = ResolverMyDNS.new(...)!
# Resolver を resolver_mydns にすげかえる!
ResolverReplace.load_plugin('mysql2')!
ResolverReplace.register!(!
getaddress: resolver.method(&:get_server),!
getaddresses: resolver.method(:get_server_list),!
error_class: ResolverMyDNS::Error,!
)
Rubyの名前解決を挿げ替えるやつ
https://github.com/sonots/resolver_replace
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
ResolverReplace
28
!
• ぶっちゃけると ruby が持っている
resolv-replace のパクリ
• resolv-replace は ruby の名前解決を
libc から Resolv クラスに置き換えるやつ
• 任意のクラスに置き換えられるように拡張
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
ResolverMyDNS
欲しい人???
29
ResolverReplace は
OSS になってる
https://github.com/sonots/resolver_replace
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
DBパスワード管理
30
要件3
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
DeNAでのDBパスワード管理
31
!
• yaml で一元管理(インフラ管理. アプリ毎に管
理させない)
• DBIx::DBHResolver という perl モジュール
を通して取得する
• stage, sandbox など環境毎にパスワードが違
うが、同じコードで取得できる
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
dbhresolver
32
!
• 既存の yaml を処理して ActiveRecord が受け
取る形式で吐き出してくれる ruby gem
production:
<<: *default
<%= dbh.connect_spec('SAMPLE_R') %>
sample_r_production:
<<: *default
<%= dbh.connect_spec('SAMPLE_R') %>
sample_w_production:
<<: *default
<%= dbh.connect_spec('SAMPLE_W') %>
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
マイグレーション
33
要件4
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
DeNAでのスキーマ管理
34
!
• git レポジトリで一元管理(インフラ管理. アプリ
毎に管理させない)
• SQL::Translator::Diff という perl モ
ジュールを使って実際のDBスキーマとの diff を
とった alter 文を作ってもらいマイグレーション
• ruby である必要はないのでそのまま利用
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
複数DB接続
35
要件5
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
複数DB接続
36
!
• read/write 用モデルそれぞれ作ってゴ
リゴリ実装することもできる
• が、良い仕組みを使って実装を楽にしたい
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
37
ク社どうやってるの?
octopus辛みありそう...
switch_pointという
のがあってだな @sora_h
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
完全に実用段階!!!
38
SwitchPoint
詳しくはeagletmt先生の資料をご参照ください
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
SwitchPoint
39
SwitchPoint.configure do |config|
config.define_switch_point :db1,
readable: :db1_readonly,
writable: :db1_writable,
config.define_switch_point :db2,
readonly: :db2_readonly
end
 
class Book1 < ActiveRecord::Base
use_switch_point :db1
end
 
class Book2 < ActiveRecord::Base
use_switch_point :db2
end
https://github.com/eagletmt/switch_point
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
Adminsbar
40
http://admins.bar/3/
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
まとめ 複数DB編
41
!
• DB接続を都度接続に
• activerecord_refresh_connection
• クライアントサイドDNSキャッシュ
• resolver_mydns / resolver_replace
• DBパスワード一元管理
• DBスキーマ一元管理ツール
• 複数DB対応
• switch_point
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
その他インフラ要件の壁
42
!
• ホットデプロイ
• カスタムフォーマットのロガー
• デプロイサーバでビルドした gem を web
サーバにアプリコードと共に撒く
• 社内 rubygems ミラー
• Q4M 非同期ジョブ
• プロファイリングツール、調査ツール
Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved.
We're hiring!!
43

More Related Content

What's hot (20)

単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
 
(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014
(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014
(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014
Amazon Web Services
 
[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCache[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCache
Amazon Web Services Japan
 
Best Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWSBest Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWS
Amazon Web Services Japan
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
Hitachi, Ltd. OSS Solution Center.
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
オラクルエンジニア通信
 
Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!
Etsuji Nakai
 
AWS Black Belt Online Seminar Elastic Load Balancing
AWS Black Belt Online Seminar Elastic Load BalancingAWS Black Belt Online Seminar Elastic Load Balancing
AWS Black Belt Online Seminar Elastic Load Balancing
Amazon Web Services Japan
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
 
もう怖くない。実例で学ぶAwsでのサイジングと料金計算
もう怖くない。実例で学ぶAwsでのサイジングと料金計算もう怖くない。実例で学ぶAwsでのサイジングと料金計算
もう怖くない。実例で学ぶAwsでのサイジングと料金計算
Takuya Tachibana
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
AWSのセキュリティについて
AWSのセキュリティについてAWSのセキュリティについて
AWSのセキュリティについて
Yasuhiro Horiuchi
 
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Web Services Japan
 
AWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリAWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリ
Amazon Web Services Japan
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada
 
DataGuard体験記
DataGuard体験記DataGuard体験記
DataGuard体験記
Shinnosuke Akita
 
20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM 20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM
Amazon Web Services Japan
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
Amazon Web Services Japan
 
DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所
hdais
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
AdvancedTechNight
 
(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014
(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014
(SPOT301) AWS Innovation at Scale | AWS re:Invent 2014
Amazon Web Services
 
[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCache[AWSマイスターシリーズ] Amazon ElastiCache
[AWSマイスターシリーズ] Amazon ElastiCache
Amazon Web Services Japan
 
Best Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWSBest Practices for Running PostgreSQL on AWS
Best Practices for Running PostgreSQL on AWS
Amazon Web Services Japan
 
Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!Linux女子部 firewalld徹底入門!
Linux女子部 firewalld徹底入門!
Etsuji Nakai
 
AWS Black Belt Online Seminar Elastic Load Balancing
AWS Black Belt Online Seminar Elastic Load BalancingAWS Black Belt Online Seminar Elastic Load Balancing
AWS Black Belt Online Seminar Elastic Load Balancing
Amazon Web Services Japan
 
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
 
もう怖くない。実例で学ぶAwsでのサイジングと料金計算
もう怖くない。実例で学ぶAwsでのサイジングと料金計算もう怖くない。実例で学ぶAwsでのサイジングと料金計算
もう怖くない。実例で学ぶAwsでのサイジングと料金計算
Takuya Tachibana
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
AWSのセキュリティについて
AWSのセキュリティについてAWSのセキュリティについて
AWSのセキュリティについて
Yasuhiro Horiuchi
 
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Web Services Japan
 
AWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリAWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリ
Amazon Web Services Japan
 
PostgreSQLでスケールアウト
PostgreSQLでスケールアウトPostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada
 
20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM 20190723 AWS Black Belt Online Seminar AWS CloudHSM
20190723 AWS Black Belt Online Seminar AWS CloudHSM
Amazon Web Services Japan
 
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理
NTT DATA Technology & Innovation
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
Amazon Web Services Japan
 
DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所
hdais
 

Viewers also liked (20)

HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
Naotoshi Seo
 
データベース技術の羅針盤
データベース技術の羅針盤データベース技術の羅針盤
データベース技術の羅針盤
Yoshinori Matsunobu
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Ruby
dena_study
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子
Yasuko Ohba
 
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークさくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
emasaka
 
GoBoLinuxを試した
GoBoLinuxを試したGoBoLinuxを試した
GoBoLinuxを試した
emasaka
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
Naotoshi Seo
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
 
Touhou Project on JavaScript
Touhou Project on JavaScriptTouhou Project on JavaScript
Touhou Project on JavaScript
sairoutine
 
JS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲームJS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
sairoutine
 
Mithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワークMithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワーク
sairoutine
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
dena_study
 
Next Generation Web Application Architecture
Next Generation Web Application ArchitectureNext Generation Web Application Architecture
Next Generation Web Application Architecture
Koji SHIMADA
 
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
masaaki komori
 
new Objctive-C literal syntax
new Objctive-C literal syntaxnew Objctive-C literal syntax
new Objctive-C literal syntax
Wataru Kimura
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
 
Rubyはとても「人間的」
Rubyはとても「人間的」Rubyはとても「人間的」
Rubyはとても「人間的」
Kazuhiro Serizawa
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzsh
Hideaki Miyake
 
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
HTTP/2 でリバプロするだけでグラフツールを 高速化できた話
Naotoshi Seo
 
データベース技術の羅針盤
データベース技術の羅針盤データベース技術の羅針盤
データベース技術の羅針盤
Yoshinori Matsunobu
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Ruby
dena_study
 
Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)Railsチュートリアルの歩き方 (第4版)
Railsチュートリアルの歩き方 (第4版)
Yohei Yasukawa
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子
Yasuko Ohba
 
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークさくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
emasaka
 
GoBoLinuxを試した
GoBoLinuxを試したGoBoLinuxを試した
GoBoLinuxを試した
emasaka
 
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
ぼくのかんがえた Itamae/Serverspec 構成フレームワーク 〜 Kondate 〜
Naotoshi Seo
 
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコムResemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
 
Touhou Project on JavaScript
Touhou Project on JavaScriptTouhou Project on JavaScript
Touhou Project on JavaScript
sairoutine
 
JS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲームJS と Canvas で作るシューティングゲーム
JS と Canvas で作るシューティングゲーム
sairoutine
 
Mithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワークMithril - 軽量/高速なMVCフレームワーク
Mithril - 軽量/高速なMVCフレームワーク
sairoutine
 
ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装ガールアックス:リアルタイム通信処理の効率的な実装
ガールアックス:リアルタイム通信処理の効率的な実装
dena_study
 
Next Generation Web Application Architecture
Next Generation Web Application ArchitectureNext Generation Web Application Architecture
Next Generation Web Application Architecture
Koji SHIMADA
 
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
masaaki komori
 
new Objctive-C literal syntax
new Objctive-C literal syntaxnew Objctive-C literal syntax
new Objctive-C literal syntax
Wataru Kimura
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
Masahiro Nagano
 
Rubyはとても「人間的」
Rubyはとても「人間的」Rubyはとても「人間的」
Rubyはとても「人間的」
Kazuhiro Serizawa
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzsh
Hideaki Miyake
 

Similar to Mobage を支える Ruby の技術 ~ 複数DB編 ~ (20)

Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
oshiro_seiya
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合
hiboma
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdb
Naotoshi Seo
 
Ansible npstudy-shtsuchi
Ansible npstudy-shtsuchiAnsible npstudy-shtsuchi
Ansible npstudy-shtsuchi
Shishio Tsuchiya
 
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかコンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのか
gree_tech
 
SQL Server 2016 R Services + Microsoft R Server 技術資料
SQL Server 2016 R Services + Microsoft R Server 技術資料SQL Server 2016 R Services + Microsoft R Server 技術資料
SQL Server 2016 R Services + Microsoft R Server 技術資料
Koichiro Sasaki
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
Takashi SAKAGUCHI
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
Masahito Zembutsu
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
 
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理するRoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理する
aktsk
 
NATS on VCAP
NATS on VCAPNATS on VCAP
NATS on VCAP
Katsunori Kawaguchi
 
Dapr on Kubernetes
Dapr on KubernetesDapr on Kubernetes
Dapr on Kubernetes
Shiho ASA
 
Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方Amazon ElastiCacheのはじめ方
Amazon ElastiCacheのはじめ方
Amazon Web Services Japan
 
【ヒカラボ】RDS for MySQL → Aurora
【ヒカラボ】RDS for MySQL → Aurora【ヒカラボ】RDS for MySQL → Aurora
【ヒカラボ】RDS for MySQL → Aurora
Yuki Kanazawa
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
 
HDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsHDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
Cloudera Japan
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~
Takashi Honda
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
oshiro_seiya
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
 
Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築Step by stepで学ぶTerraformによる監視付きAWS構築
Step by stepで学ぶTerraformによる監視付きAWS構築
Yo Takezawa
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合
hiboma
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdb
Naotoshi Seo
 
コンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのかコンテナ時代にインフラエンジニアは何をするのか
コンテナ時代にインフラエンジニアは何をするのか
gree_tech
 
SQL Server 2016 R Services + Microsoft R Server 技術資料
SQL Server 2016 R Services + Microsoft R Server 技術資料SQL Server 2016 R Services + Microsoft R Server 技術資料
SQL Server 2016 R Services + Microsoft R Server 技術資料
Koichiro Sasaki
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
Masahito Zembutsu
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
Shigeru UCHIYAMA
 
RoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理するRoRとAWSで100,000Req/Minを処理する
RoRとAWSで100,000Req/Minを処理する
aktsk
 
Dapr on Kubernetes
Dapr on KubernetesDapr on Kubernetes
Dapr on Kubernetes
Shiho ASA
 
【ヒカラボ】RDS for MySQL → Aurora
【ヒカラボ】RDS for MySQL → Aurora【ヒカラボ】RDS for MySQL → Aurora
【ヒカラボ】RDS for MySQL → Aurora
Yuki Kanazawa
 
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
 
HDFS Supportaiblity Improvements
HDFS Supportaiblity ImprovementsHDFS Supportaiblity Improvements
HDFS Supportaiblity Improvements
Cloudera Japan
 
AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~AutoScale×ゲーム ~運用効率化への取り組み~
AutoScale×ゲーム ~運用効率化への取り組み~
Takashi Honda
 

More from Naotoshi Seo (11)

Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014
Naotoshi Seo
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415
Naotoshi Seo
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfra
Naotoshi Seo
 
Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3
Naotoshi Seo
 
Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013
Naotoshi Seo
 
Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531
Naotoshi Seo
 
Fluentdcasual 02-haikanko
Fluentdcasual 02-haikankoFluentdcasual 02-haikanko
Fluentdcasual 02-haikanko
Naotoshi Seo
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
Naotoshi Seo
 
Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014Fluentd Hacking Guide at RubyKaigi 2014
Fluentd Hacking Guide at RubyKaigi 2014
Naotoshi Seo
 
Sinatra Pattern 20130415
Sinatra Pattern 20130415Sinatra Pattern 20130415
Sinatra Pattern 20130415
Naotoshi Seo
 
Serf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfraSerf という Orchestration ツール #immutableinfra
Serf という Orchestration ツール #immutableinfra
Naotoshi Seo
 
Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3Shadow Server on Fluentd at Fluentd Casual Talks #3
Shadow Server on Fluentd at Fluentd Casual Talks #3
Naotoshi Seo
 
Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013Is ruby logger thread(process)-safe? at RubyConf 2013
Is ruby logger thread(process)-safe? at RubyConf 2013
Naotoshi Seo
 
Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531Haikanko rubykaigi 20130531
Haikanko rubykaigi 20130531
Naotoshi Seo
 
Fluentdcasual 02-haikanko
Fluentdcasual 02-haikankoFluentdcasual 02-haikanko
Fluentdcasual 02-haikanko
Naotoshi Seo
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
Naotoshi Seo
 

Recently uploaded (13)

ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
 
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
周 小渕
 
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
 
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
Matsushita Laboratory
 
ドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptx
ドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptxドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptx
ドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptx
ssuserfcafd1
 
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
 
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
 
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
harmonylab
 
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
 
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
 
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストでKSY賞を貰って、さらに、文化庁メディア芸術祭で審査員推薦作品に選ばれてしまった件〜自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
 
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
NTT DATA Technology & Innovation
 
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
ビットコインテストネットでの送金体験付きビットコイン・ブロックチェーン勉強会資料
周 小渕
 
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
 
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
第1回日本理学療法推論学会学術大会での発表資料(2025年3月2日 高橋可奈恵)
Matsushita Laboratory
 
ドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptx
ドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptxドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptx
ドメインモデリング基本編①~全体の流れ2025_02_27社内向け開催.pptx
ssuserfcafd1
 
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
 
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
 
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
【卒業論文】深層学習によるログ異常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
 
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
【卒業論文】LLMを用いたMulti-Agent-Debateにおける反論の効果に関する研究
harmonylab
 
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
 
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
 
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
 

Mobage を支える Ruby の技術 ~ 複数DB編 ~

  • 1. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Mobageを支える November 11th, 2014 ! Naotoshi Seo @sonots
 DeNA Co., Ltd. Rubyの技術 ~複数DB編~
  • 2. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 2 自己紹介 ・瀬尾 直利 @sonots ・DeNA, Co., Ltd ・インフラの Dev ・Rubyist ・OSS 活動家 ・Fluentd コミッタ
  • 3. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 背景 3 ! Perl の会社と名高いこの DeNA でも Ruby (on Rails) のプロジェクトが立ち 上がり始めている
  • 4. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. インフラ要件の壁 4 ! • ホットデプロイ • カスタムフォーマットのロガー • デプロイサーバでビルドした gem を web サーバにアプリコードと共に撒く • 社内 rubygems ミラー • Q4M 非同期ジョブキュー • プロファイリングツール、調査ツール
  • 5. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 複数DB対応 5 ! • Rails で複数DBに対応する必要性 • 冗長化・高速化 • 既存のインフラの仕組みにのっかる必要性 • 今回はここに特化した話
  • 6. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 目次 6 ! • DB接続を都度接続に • クライアントサイドDNSキャッシュ • DBパスワード一元管理 • DBスキーマ一元管理ツール • 複数DB接続
  • 7. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. DB接続を都度接続にすべし 7 要件1
  • 8. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. DeNAでの複数DB構成 8 ! • MySQL: Master/Slave • DNSラウンドロビンでSlaveを振り分ける • MHA で Master の高可用化 • DNS サーバには MyDNS を使用
  • 9. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Slave 1 MySQL Slave 2 MySQL Slave 3 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.4 10.1.1.2 sample_r 1回目 | id | zone | name | data | aux | |----|------|----------|----------|-----| | 2 | 1 | sample_r | 10.1.1.2 | 100 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 | 2回目 Slave参照: DNSラウンドロビン
  • 10. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Slave 1 MySQL Slave 2 MySQL Slave 3 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.4 2回目 Slave参照: 永続接続 ずっとココ!! ダメ! | id | zone | name | data | aux | |----|------|----------|----------|-----| | 2 | 1 | sample_r | 10.1.1.2 | 100 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 |
  • 11. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Slave 1 MySQL Slave 2 MySQL Slave 3 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.4 10.1.1.3sample_r 2回目 Slave参照: 都度接続 1/3 の確率 | id | zone | name | data | aux | |----|------|----------|----------|-----| | 2 | 1 | sample_r | 10.1.1.2 | 100 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 | Good
  • 12. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Slave 2 MySQL Slave 3 MySQL Master 1 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.1 10.1.1.4 sample_w MHA | id | zone | name | data | aux | |----|------|----------|----------|-----| | 1 | 1 | sample_w | 10.1.1.1 | 100 | | 2 | 1 | sample_r | 10.1.1.2 | 100 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 | MySQL Slave 1
  • 13. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Slave 2 MySQL Slave 3 MySQL Master 1 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.1 10.1.1.4 sample_w MHA | id | zone | name | data | aux | |----|------|----------|----------|-----| | 1 | 1 | sample_w | 10.1.1.1 | 100 | | 2 | 1 | sample_w | 10.1.1.2 | 100 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 | MySQL Master 2 再接続 or 都度接続
  • 14. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. DBWeb DBを再起動 restart 再接続 or 都度接続 ※ ただし、ActiveRecord の reconnect は正しく動かなかったり ※ そのため、アプリの再起動が必要だったりして、ツライ
  • 15. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Slave 1 MySQL Slave 2 MySQL Slave 3 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.4 Slaveダウン検知(check_slave) | id | zone | name | data | aux | |----|------|----------|----------|-----| | 2 | 1 | sample_r | 10.1.1.2 | 100 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 | 10.1.1.3sample_r 再接続 or 都度接続
  • 16. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. すべて都度接続で解決 16
  • 17. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. しかしActiveRecord には都度接続オプションがない 17
  • 18. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 18 なんだってーーーΩΩΩ
  • 19. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 作りました 19
  • 20. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. activerecord- refresh_connection 20 Rack レイヤーでリクエスト毎に接続を切るやつ 1行追加でおk # config/application.rb class Application < Rails::Application config.middleware.swap ActiveRecord::ConnectionAdapters::ConnectionManagement, "ActiveRecord::ConnectionAdapters::RefreshConnectionManagement" end https://github.com/sonots/activerecord-refresh_connection http://blog.livedoor.jp/sonots/archives/38797925.html
  • 21. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. クライアントDNSキャッシュ 21 要件2
  • 22. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. クライアントDNSキャッシュ 22 ! • ruby 実装 • キャッシュしないと名前解決遅い • 重み0なmasterへのfallback
  • 23. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Slave 1 MySQL Slave 2 MySQL Slave 3 MySQL Master 1 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.1 10.1.1.4 テーブルを キャッシュ select DNSキャッシュ | id | zone | name | data | aux | |----|------|----------|----------|-----| | 1 | 1 | sample_w | 10.1.1.1 | 100 | | 2 | 1 | sample_r | 10.1.1.2 | 100 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 | 10.1.1.2 ファイルに落とす
  • 24. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. MySQL Master 2 MySQL Slave 2 MySQL Slave 3 MyDNS Web 10.1.1.2 10.1.1.3 10.1.1.4 重み0へのfallback | id | zone | name | data | aux | |----|------|----------|----------|-----| | 1 | 1 | sample_w | 10.1.1.1 | 100 | | 2 | 1 | sample_w | 10.1.1.2 | 0 | | 3 | 1 | sample_r | 10.1.1.3 | 100 | | 4 | 1 | sample_r | 10.1.1.4 | 100 | MySQL Master 1 10.1.1.1 weight:100 weight: 0 DNSプロトコルで引くと重み0のエントリが見えない。 Unbound などのDNSキャッシュを使えない。
  • 25. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ResolverMyDNS 25 resolver = ResolverMyDNS.new( zone: 'mobage.local',! cache_dir: "cache_dir/",! host: 'localhost',! username: 'root',! passowrd: nil,! database: 'mydns',! )! resolver.get_server 'foo.mobage.local' #=> 10.1.1.10 MyDNSのテーブルエントリをクライアントサイド でキャッシュして名前解決するやつ @Spring_MT
  • 26. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 26 @ryopeko これアプリコード内でIPアドレス取得 して establish_connection に渡 す必要あるけど、めんどいよね? そうすな∼
  • 27. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ResolverReplace 27 resolver = ResolverMyDNS.new(...)! # Resolver を resolver_mydns にすげかえる! ResolverReplace.load_plugin('mysql2')! ResolverReplace.register!(! getaddress: resolver.method(&:get_server),! getaddresses: resolver.method(:get_server_list),! error_class: ResolverMyDNS::Error,! ) Rubyの名前解決を挿げ替えるやつ https://github.com/sonots/resolver_replace
  • 28. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ResolverReplace 28 ! • ぶっちゃけると ruby が持っている resolv-replace のパクリ • resolv-replace は ruby の名前解決を libc から Resolv クラスに置き換えるやつ • 任意のクラスに置き換えられるように拡張
  • 29. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. ResolverMyDNS 欲しい人??? 29 ResolverReplace は OSS になってる https://github.com/sonots/resolver_replace
  • 30. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. DBパスワード管理 30 要件3
  • 31. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. DeNAでのDBパスワード管理 31 ! • yaml で一元管理(インフラ管理. アプリ毎に管 理させない) • DBIx::DBHResolver という perl モジュール を通して取得する • stage, sandbox など環境毎にパスワードが違 うが、同じコードで取得できる
  • 32. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. dbhresolver 32 ! • 既存の yaml を処理して ActiveRecord が受け 取る形式で吐き出してくれる ruby gem production: <<: *default <%= dbh.connect_spec('SAMPLE_R') %> sample_r_production: <<: *default <%= dbh.connect_spec('SAMPLE_R') %> sample_w_production: <<: *default <%= dbh.connect_spec('SAMPLE_W') %>
  • 33. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. マイグレーション 33 要件4
  • 34. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. DeNAでのスキーマ管理 34 ! • git レポジトリで一元管理(インフラ管理. アプリ 毎に管理させない) • SQL::Translator::Diff という perl モ ジュールを使って実際のDBスキーマとの diff を とった alter 文を作ってもらいマイグレーション • ruby である必要はないのでそのまま利用
  • 35. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 複数DB接続 35 要件5
  • 36. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 複数DB接続 36 ! • read/write 用モデルそれぞれ作ってゴ リゴリ実装することもできる • が、良い仕組みを使って実装を楽にしたい
  • 37. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 37 ク社どうやってるの? octopus辛みありそう... switch_pointという のがあってだな @sora_h
  • 38. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. 完全に実用段階!!! 38 SwitchPoint 詳しくはeagletmt先生の資料をご参照ください
  • 39. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. SwitchPoint 39 SwitchPoint.configure do |config| config.define_switch_point :db1, readable: :db1_readonly, writable: :db1_writable, config.define_switch_point :db2, readonly: :db2_readonly end   class Book1 < ActiveRecord::Base use_switch_point :db1 end   class Book2 < ActiveRecord::Base use_switch_point :db2 end https://github.com/eagletmt/switch_point
  • 40. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. Adminsbar 40 http://admins.bar/3/
  • 41. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. まとめ 複数DB編 41 ! • DB接続を都度接続に • activerecord_refresh_connection • クライアントサイドDNSキャッシュ • resolver_mydns / resolver_replace • DBパスワード一元管理 • DBスキーマ一元管理ツール • 複数DB対応 • switch_point
  • 42. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. その他インフラ要件の壁 42 ! • ホットデプロイ • カスタムフォーマットのロガー • デプロイサーバでビルドした gem を web サーバにアプリコードと共に撒く • 社内 rubygems ミラー • Q4M 非同期ジョブ • プロファイリングツール、調査ツール
  • 43. Copyright (C) 2014 DeNA Co.,Ltd. All Rights Reserved. We're hiring!! 43