Suche senden
Hochladen
30days album / MySQL Casual Talk #3
•
0 gefällt mir
•
2,320 views
Ryo Kuroda
Folgen
Technologie
Melden
Teilen
Melden
Teilen
1 von 78
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
Masahiko Sawada
pg_bigmと類似度検索
pg_bigmと類似度検索
Masahiko Sawada
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
Kosuke Kida
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
Kosuke Kida
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
NTT DATA OSS Professional Services
CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDB
Akihiro Kuwano
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
Ryuji Tamagawa
ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例
知教 本間
Empfohlen
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
Masahiko Sawada
pg_bigmと類似度検索
pg_bigmと類似度検索
Masahiko Sawada
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
商用DBからPostgreSQLへ まず知っておいて欲しいまとめ
Kosuke Kida
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
[OSC2016沖縄]商用DBからPostgreSQLへの移行入門
Kosuke Kida
JSONBはPostgreSQL9.5でいかに改善されたのか
JSONBはPostgreSQL9.5でいかに改善されたのか
NTT DATA OSS Professional Services
CyberAgentにおけるMongoDB
CyberAgentにおけるMongoDB
Akihiro Kuwano
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
RDB経験者に送るMongoDBの勘所(db tech showcase tokyo 2013)
Ryuji Tamagawa
ソーシャルゲームログ解析基盤のMongoDB活用事例
ソーシャルゲームログ解析基盤のMongoDB活用事例
知教 本間
日本語:Mongo dbに於けるシャーディングについて
日本語:Mongo dbに於けるシャーディングについて
ippei_suzuki
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
HTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリ
Yossy Taka
MongoDBざっくり解説
MongoDBざっくり解説
知教 本間
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
Soudai Sone
Mongo dbを半年ちょっと運用してみた
Mongo dbを半年ちょっと運用してみた
htty_hasumi
Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信
Yossy Taka
Mongo dbを知ろう
Mongo dbを知ろう
CROOZ, inc.
Cassandra v0.6-siryou
Cassandra v0.6-siryou
あしたのオープンソース研究所
初めてのMongo db
初めてのMongo db
Ryuji Tamagawa
MongoDB3.2の紹介
MongoDB3.2の紹介
Tetsutaro Watanabe
Fluentd and MySQL
Fluentd and MySQL
SATOSHI TAGOMORI
PostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada
NoSQLデータベースと位置情報
NoSQLデータベースと位置情報
Koji Ichiwaki
PHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストア
Takuya Sato
[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用
Kosuke Kida
Postgre sqlから見るnosql
Postgre sqlから見るnosql
Soudai Sone
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
Yoshikazu Suganuma
30days Album の裏側 + 表側
30days Album の裏側 + 表側
Kensuke Nagae
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
インフラの話
インフラの話
Tomohiro Ikeda
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
Weitere ähnliche Inhalte
Was ist angesagt?
日本語:Mongo dbに於けるシャーディングについて
日本語:Mongo dbに於けるシャーディングについて
ippei_suzuki
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
HTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリ
Yossy Taka
MongoDBざっくり解説
MongoDBざっくり解説
知教 本間
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
Soudai Sone
Mongo dbを半年ちょっと運用してみた
Mongo dbを半年ちょっと運用してみた
htty_hasumi
Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信
Yossy Taka
Mongo dbを知ろう
Mongo dbを知ろう
CROOZ, inc.
Cassandra v0.6-siryou
Cassandra v0.6-siryou
あしたのオープンソース研究所
初めてのMongo db
初めてのMongo db
Ryuji Tamagawa
MongoDB3.2の紹介
MongoDB3.2の紹介
Tetsutaro Watanabe
Fluentd and MySQL
Fluentd and MySQL
SATOSHI TAGOMORI
PostgreSQLでスケールアウト
PostgreSQLでスケールアウト
Masahiko Sawada
NoSQLデータベースと位置情報
NoSQLデータベースと位置情報
Koji Ichiwaki
PHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストア
Takuya Sato
[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用
Kosuke Kida
Postgre sqlから見るnosql
Postgre sqlから見るnosql
Soudai Sone
Was ist angesagt?
(17)
日本語:Mongo dbに於けるシャーディングについて
日本語:Mongo dbに於けるシャーディングについて
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
HTML5 Local Storageを利用したメモ帳アプリ
HTML5 Local Storageを利用したメモ帳アプリ
MongoDBざっくり解説
MongoDBざっくり解説
知って得するWebで便利なpostgre sqlの3つの機能
知って得するWebで便利なpostgre sqlの3つの機能
Mongo dbを半年ちょっと運用してみた
Mongo dbを半年ちょっと運用してみた
Ajax非同期通信によるサーバー通信
Ajax非同期通信によるサーバー通信
Mongo dbを知ろう
Mongo dbを知ろう
Cassandra v0.6-siryou
Cassandra v0.6-siryou
初めてのMongo db
初めてのMongo db
MongoDB3.2の紹介
MongoDB3.2の紹介
Fluentd and MySQL
Fluentd and MySQL
PostgreSQLでスケールアウト
PostgreSQLでスケールアウト
NoSQLデータベースと位置情報
NoSQLデータベースと位置情報
PHPとMongoDBで学ぶ次世代データストア
PHPとMongoDBで学ぶ次世代データストア
[Postgre sql9.4新機能]レプリケーション・スロットの活用
[Postgre sql9.4新機能]レプリケーション・スロットの活用
Postgre sqlから見るnosql
Postgre sqlから見るnosql
Ähnlich wie 30days album / MySQL Casual Talk #3
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
Yoshikazu Suganuma
30days Album の裏側 + 表側
30days Album の裏側 + 表側
Kensuke Nagae
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Go Sueyoshi (a.k.a sue445)
インフラの話
インフラの話
Tomohiro Ikeda
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
Ohyama Masanori
MBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごと
Insight Technology, Inc.
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
よしだ あつし
Scaling
Scaling
Kazuho Oku
ヤフーを支えるフラッシュストレージ
ヤフーを支えるフラッシュストレージ
Yahoo!デベロッパーネットワーク
YJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組み
Yahoo!デベロッパーネットワーク
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
infinite_loop
Mongo dbを知ろう devlove関西
Mongo dbを知ろう devlove関西
Ryuji Tamagawa
D23 SSDで挑むOracle超高速化と信頼性の両立 by Yuu Morinaka
D23 SSDで挑むOracle超高速化と信頼性の両立 by Yuu Morinaka
Insight Technology, Inc.
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
Akihiro Kuwano
徹底検証!Drbd 8.4 with 高速半導体ストレージ
徹底検証!Drbd 8.4 with 高速半導体ストレージ
株式会社サードウェア
NTT Com at Cloudian seminar 2012
NTT Com at Cloudian seminar 2012
CLOUDIAN KK
楽天のプライベートクラウドを支えるフラッシュストレージ
楽天のプライベートクラウドを支えるフラッシュストレージ
Rakuten Group, Inc.
hbstudy25 劇的ビフォーアフター
hbstudy25 劇的ビフォーアフター
semind
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
Tatsumi Akinori
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
Ähnlich wie 30days album / MySQL Casual Talk #3
(20)
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
データサイズ2ペタ ソネット・メディア・ネットワークスでのImpala活用とHadoop運用
30days Album の裏側 + 表側
30days Album の裏側 + 表側
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
Resemaraを支えた技術 フライングゲットガチャの舞台裏 #ksgstudy #ドリコム
インフラの話
インフラの話
PostgreSQLによるデータ分析ことはじめ
PostgreSQLによるデータ分析ことはじめ
MBAAで覚えるDBREの大事なおしごと
MBAAで覚えるDBREの大事なおしごと
Next GAE Heroku を使って 3分でRailsアプリをリリース
Next GAE Heroku を使って 3分でRailsアプリをリリース
Scaling
Scaling
ヤフーを支えるフラッシュストレージ
ヤフーを支えるフラッシュストレージ
YJTC18 A-1 データセンタネットワークの取り組み
YJTC18 A-1 データセンタネットワークの取り組み
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
PHP+MySQLを使ったスケーラブルなソーシャルゲーム開発
Mongo dbを知ろう devlove関西
Mongo dbを知ろう devlove関西
D23 SSDで挑むOracle超高速化と信頼性の両立 by Yuu Morinaka
D23 SSDで挑むOracle超高速化と信頼性の両立 by Yuu Morinaka
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
徹底検証!Drbd 8.4 with 高速半導体ストレージ
徹底検証!Drbd 8.4 with 高速半導体ストレージ
NTT Com at Cloudian seminar 2012
NTT Com at Cloudian seminar 2012
楽天のプライベートクラウドを支えるフラッシュストレージ
楽天のプライベートクラウドを支えるフラッシュストレージ
hbstudy25 劇的ビフォーアフター
hbstudy25 劇的ビフォーアフター
PGXのレスポンスとリソース消費
PGXのレスポンスとリソース消費
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Kürzlich hochgeladen
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Kürzlich hochgeladen
(10)
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
30days album / MySQL Casual Talk #3
1.
こんな僕でも 一億枚さばけた 30days albumインフラ成長の歴史 2012.4.19 MySQL
Casual Talk #3 Ryo Kuroda @lamanotrama
2.
自己紹介 ● 株式会社 paperboy&co. ●
インフラエンジニア
3.
今日は30days Albumの話
4.
サービス紹介 ● http://30d.jp ● 2008年4月
~ ● 写真共有・保存サービス ○ 期間限定(30日)オンラインアルバム ○ 合言葉で共有(閲覧、投稿) ● 2009年12月 ~ ● 容量無制限オンラインフォトストレージ
5.
登録枚数 ● 最近累計登録枚数が1億枚を超えました ● 2012.4.19現在
108,491,796枚 ● 容量 202TByte
6.
何が「こんな僕でも」なのか 前職 ● ホスティング会社サバ管 ● 台数はそこそこ ●
2000台位かな ● 皆さん等しくそれなりに使えればOKな世界
7.
なにそれ? ● パフォーマンスチューニング? ● HA? ●
スケーラビリティ? (*別のスキルは必要です)
8.
そんな自分が 2年半前に入社していきなり30days Albumのイン フラメイン担当に。 色々あったけど、サービス、インフラと共に成長さ せて頂き、1億枚を捌けるようになりました。
9.
最初にごめんなさい MySQLの話が少ないです。。。 割とセオリー通りの運用しかしてないので、エクス トリームな話を期待されるとちょっとあれです。
10.
本題開始
11.
まず当時の構成
12.
2008~2009年頃の構成 全体概要 リバース プロキシ (Perlbal) リバース プロキシ (Perlbal) ストレージ API (lighttpd Catalyst) ストレージ API (lighttpd Catalyst) ストレージ (Mogilefs) ストレージ (Mogilefs) Webアプリ (lighttpd + Rails) Webアプリ (lighttpd + Rails) 非同期 ジョブAPI (lighttpd Catalyst) 非同期 ジョブAPI (lighttpd Catalyst) ジョブ サーバー (Gearman TheSchwar tz) ジョブ サーバー (Gearman TheSchwalt z) データベー ス (MySQL) データベー ス (MySQL)
13.
画像周りの仕組み Perlbal ストレージAPI トラッカー (mogilefsd) トラッカーDB (MySQL) ストレージ ノード (mogstored)
14.
MySQLをつかってるところ リバース プロキシ (Perlbal) リバース プロキシ (Perlbal) ストレージ API (lighttpd Catalyst) ストレージ API (lighttpd Catalyst) ストレージ (Mogilefs) ストレージ (Mogilefs) Webアプリ (lighttpd + Rails) Webアプリ (lighttpd + Rails) 非同期 ジョブAPI (lighttpd Catalyst) 非同期 ジョブAPI (lighttpd Catalyst) ジョブ サーバー (Gearman TheSchwar tz) ジョブ サーバー (Gearman TheSchwalt z) データベー ス (MySQL) データベー ス (MySQL) 1. days 2. storage_api 3.
mogilefs
15.
1. days アプリケーション用 ● 写真、アルバムの論理データ ●
誰々さんの、どのアルバムの… ● 保存期限 ● カメラの種類 ● Exif
16.
2. storage_api storage_api用 ● 全てのMogileFSオブジェクトへのAPI層 ○
アプリケーション、JOBワーカとMogileFSへの橋渡し ○ HTTP GET/PUTで画像の出し入れ ● ファイルのメタデータを管理 ○ content-type, content-length ● サービス種別を管理 ○ 30days、logpi、puboo
17.
3. mogilefs MogileFS用 ● オブジェクトの物理的な場所 ○
device ○ host ● オブジェクトの複製、再配置の為のジョブキュー
18.
他にもジョブサーバ(TheSchwartz)のジョ ブキュー用や、顧客管理用DBがあります が、今回は端折ります。
19.
全て画像絡み 扱う枚数が増えればDBの負荷も上がる ● 管理枚数 ● 閲覧数 ●
アップロードペース
20.
より詳しくは アーキテクチャの詳細は過去のスライドをご覧下さ い。 ● 関西オープン2008 http://www.slideshare.net/mizzy/2008-30days-album- presentation ● YAPC::Asia
Tokyo 2010 http://www.slideshare.net/kyanny/inside-30days- albumlaterstory-5452817 今日あまり触れないDB周り以外の苦労話も入って ます。
21.
2008年 ~ 2009年 安定期
22.
平和な時代 とにかく平和。dbサーバのメモリを2GBから4GBに 増やしたくらい。 やること無い。このサービス楽だわー。 (実はなにをやるべきか知らないだけ。)
23.
2010年 春 夏 兆候
24.
だんだんもっさりしてきた とりあえず各種コンポーネントを追加。 ● storageノードに別のroleを組み合わせ ○ storage_api ○
job worker
25.
storage006.30d.jp storage003.30d.jp storage002.30d.jp 今まで1ホスト1 role (puppetのマニフェスト上)
だったのを storage001.30d.jp ストレージ (Mogilefs) ……
26.
storage003.30d.jp storage002.30d.jp storage006.30d.jp storage005.30d.jp storage004.30d.jp 1ホストに複数roleを割り当てて余剰リソースを活用 非同期 ジョブAPI (lighttpd Catalyst) ジョブ サーバー (Gearman TheSchwar tz) ストレージ (Mogilefs) ストレージ API (lighttpd Catalyst) storage001.30d.jp ストレージ (Mogilefs) ストレージ API (lighttpd Catalyst)
27.
DBおもくね? ● いよいよDBがボテルネックになってきたぽい ● 付け焼刃の対応でヘタうつ とりあえずチューニングで乗り越えようとして OOM起こしたり。 とはいうものの、この辺でようやくパラメータチュー ニングのセオリー等をある程度体で学び始める。 やるべきとこも見えてきた。
28.
days dbにindexを追加 ● Maatkitマジ便利(って刺身さんがいってた) ○
mk-query-profiler ○ mk-query-digest ○ 刺身さんのYAPC資料 ● アルバム、ライブラリの表示レスポンスはある程 度改善 ● アップロードや画像変換の処理遅延は引き続き 悪化 この辺でアップロードペース(容量増加ペース)がグ
29.
ストレージ容量グラフ
30.
● 週末には 500GB/日 ○
2009年段階では多くて200GB ● 枚数にして 10万枚/日 ● 容量追加が間に合わない ● 空間効率が悪い ● ベンダー製はコストが…
31.
自作サーバー登場
32.
MP100 ● 高集積 ○ 2U ○
2TB * 7 ● 低コスト ○ ひみつ ● H/W好きで詳しい人がいた ○ マサキパワー100(kg)
33.
入れ物のめどはたったが… ● jobの処理は相変わらず詰まる ● 特に夜間のピークタイムがきつい
34.
● 写真をアップロードしても表示までに時間がか かる ● 画像を回転しても返事がない ●
まとめてダウンロード用のアーカイブファイル作 成がいつまで経っても終わらない
35.
● よくよくDB観察するとstorage_apiがテーブル ロックしまくってる ● 実はMyISAMだった ○
実はあまり気にしたこともなかった これによって ● jobワーカがサーバ性能通りの働きを発揮出来 ない ● 参照クエリもレスポンスが悪化し閲覧にも影響
36.
この部分ね リバース プロキシ (Perlbal) リバース プロキシ (Perlbal) ストレージ API (lighttpd Catalyst) ストレージ API (lighttpd Catalyst) ストレージ (Mogilefs) ストレージ (Mogilefs) Webアプリ (lighttpd + Rails) Webアプリ (lighttpd + Rails) 非同期 ジョブAPI (lighttpd Catalyst) 非同期 ジョブAPI (lighttpd Catalyst) ジョブ サーバー (Gearman TheSchwar tz) ジョブ サーバー (Gearman TheSchwalt z) データベー ス (MySQL) データベー ス (MySQL) 2. storage_api
37.
2010年 秋 メンテナンス大会
38.
サーバ追加してDBを分離 サーバを追加して、アプリケーション用と、その他 のstorage用のDBを分離。
39.
● 新サーバにはSSDを採用 ● 当然storage_apiはinnodb化 ●
ついでにdays、mogilefsはinnodb file per table化
40.
Before mysql1.30d.jp (master) mysql2.30d.jp (slave) days storage_api mogilefs job_queue days storage_api mogilefs job_queue InnoDB MyISAM
41.
After mysql1.30d.jp (master) mysql2.30d.jp (slave) days db001.30d.jp (master) storage_api mogilefs job_queue days storage_api mogilefs job_queue
42.
slaveの構成 諸事情により新サーバ用のslaveサーバを用意出 来なかったので、days DB用slaveサーバに相乗 り。 mysqld_multiは使わなかった ● なんだかんだで別々の方が扱いやすい ●
わりとすぐに分離する予定だった ● puppetで構成管理するので都合が良かった
43.
mysqld.second initスクリプト、my.cnfを調整して2つのmysqldを起 動。 別のmy.cnfと、それを使うラッパースクリプトを作 成して運用。 ● /etc/my.cnf.second ● /var/lib/mysql.second ●
/etc/init.d/mysqld.second ● /usr/local/bin/mysql.second ● /usr/local/bin/mysqldump.second
44.
puppet 30daysのシステムはわりと隅々までpuppetで構 成管理されています。 mysqlサーバのmanifest関して、もともと一台を扱 うようにしかデザインされていなかったので、作成 しなおしました。
45.
base class 共通のリソース等
46.
各データベース用class 各DBの固有情報
47.
node定義 サーバのroleとして定義
48.
puppetの話終わり 実際にはこれほど綺麗ではなく、こうしないとダメだ な思うところも有るのですが、 重要なのは、システムのあるべき状態をバージョン 管理できて、開発者とも情報を共有出来るところに あります。 極端な話、実際にサーバに適用するかどうかは別 としても導入する価値はあるともいます。
49.
この後、 ● days DBに更にindex追加 ●
appサーバ群もリプレースにより強化 ● 内部ネットワークのギガ化 等も行い、過去最高の状態。 すごく早いよ!
50.
~ 2011年 夏 2度目の安定期
51.
2度目の安定期 少しずつ手を入れながら平和な日々が続く。 ● 相乗りだったslaveも新サーバを追加して、別々 に ● railsの動作環境を
Lighttpd+FastCGI から Apache+Passenger に変更 ○ パフォーマンスアップ、省リソース的にはあんまり効果無 し。安定はした。 ● jobサーバ群をリプレースして強化
52.
2011年 秋 days史上最大のピンチ
53.
急に重くな(った気がす)る ● ぎりぎりアラート来ない程度の高負荷 ● 昨年のテコ入れの効果を過信 更に…
54.
予想を大幅に上回るアップロードペース
55.
昨年同時期の数倍 ● 週末の増量ペースが 1TB~2TB/日 ●
枚数にして~28万枚 ● 例の如くそのほとんどが夜間に集中 ● 9月のシルバーウィークの影響もあるとは言え、 これは正直想定外だった appサーバ、days DBがどちらもH/W性能の限界 (storage周りのDBは去年のSSD化で超余裕)。 ピーク時にアプリケーションサーバがまったく捌き きれず、断続的にダウンする有様。
56.
非同期 ジョブAPI (lighttpd Catalyst) 非同期 ジョブAPI (lighttpd Catalyst) ストレージ API (lighttpd Catalyst) この部分がまじやばい リバース プロキシ (Perlbal) リバース プロキシ (Perlbal) ストレージ API (lighttpd Catalyst) ストレージ (Mogilefs) ストレージ (Mogilefs) ジョブ サーバー (Gearman TheSchwar tz) ジョブ サーバー (Gearman TheSchwalt z) データベー ス (MySQL) データベー ス (MySQL) 1. days Webアプリ (Passenger + Rails) Webアプリ (Passenger + Rails)
57.
さてどうする ● apache、passengerのチューニングでごまかし ごまかし ● staticファイルのサーブをnginxに変更 ●
days DBにindexを足すが、目立った効果はな し ● サーバを発注したが、納品は数週間後 数週間はもたんよね。
58.
YAPC::Asia フォトスポンサー 2週間後に開催されるYAPC::Asia 2011
のオフィ シャルフォトスポンサーにご指名して頂いていた。 このままだと絶対にDisられる。というか申し 訳ない。 とりあえず見れないのはやばい。見るだけでもなん とかしなくては。
59.
EC2 を使おう! アルバム閲覧を含む一部GETリクエストをEC2へ 流して、凌ぐのだ。それしかない。 システムのサブセットをEC2上にオリャっと構築。
60.
EC2を使ったシステム構成 DC AWS 静的 コンテンツ 更新 参照のみ リバース プロキシ (Perlbal) ストレージ API (lighttpd Catalyst) 静的 コンテンツ サーバ (nginx) Webアプリ (Passenger + Rails) セッション サーバ (Kyoto Tycoon) セッション サーバ (Kyoto Tycoon) Webアプリ (Passenger + Rails) 写真データ データベー ス (MySQL) マスター データベー ス (MySQL) 子スレーブ データベー ス (MySQL) 孫スレーブ ELB データベー ス (MySQL) スレーブ
61.
孫slaveが必要だった理由 ● masterが限界なので子slaveを増やしたくない ● 子slaveなインスタンスがいくつか兼任してたの で出来るだけ落としたくない ○
ldapサーバ ○ puppetサーバ ○ セッションストレージ(kyototycoon) ● だが、DBのスケールアップ(ダウン)は柔軟に行 いたい。
62.
子slaveはxtrabackupで作成(1) 1. EC2インスタンスに別ディスク(EBS)をmountし とく mount -t
ext3 /dev/sdf /tmp/mysql 2. DC側のslaveからxtrabackupで直接データ転 送 innobackupex --user root --password=xxxx --slave-info --stream=tar4ibd --defaults-file=/etc/my.cnf /tmp/mysql | gzip -c |
63.
子slaveはxtrabackupで作成(2) 1. EC2側のslaveで差分ログ当てる innobackupex --apply-log
--ibbackup=xtrabckup_51 /tmp/mysql 2. データ差し替え mv /var/lib/mysql{,.bak}; mkdir /var/lib/mysql umount /tmp/mysql; mount /dev/sdf/ /var/lib/mysql chown -R mysql. /var/lib/mysql 3. mysqld 立ちあげてxtrabackup_slave_info の 内容で change master 実行
64.
master > 子slave間はSSL(1) 1.
CA証明書、証明書、秘密鍵を作成 2. master側で設置、設定 [mysqld] ssl-ca = /var/lib/mysql/ca-cert.pem ssl-cert = /var/lib/mysq/server-cert.pem ssl-key = /var/lib/mysql/server-key.pm
65.
master > 子slave間はSSL(2) 1.
slave側にも同様に証明書を設置 2. ssl有効化 CHANGE MASTER TO MASTER_SSL = 1 MASTER_SSL_CA = '/var/lib/mysql/server-cert.pem'; 3. 実際にやりとりを確認 tcpdump -nxX -s 1000 port 3306
66.
孫slaveはEBSスナップショットで(1) slaveのdata_dirは別disk(EBS)なので、スナップ ショットから簡単につくれた。 1. slaveで ○ stop
slave io_thread ○ mysqld stop ○ my.cnf に log_slave_update 追記 2. EBSスナップショット作成 3. スナップショットからEBSを複製 4. slave で ○ mysqld start
67.
孫slaveはEBSスナップショットで(2) 孫slaveで 1. 複製したEBSをmount 2. mysqld
start 3. stop slave; reset slave 4. change master 5. slave start 楽だ。
68.
セッションストレージ MemcachedからKyoto Tycoonに変更 ● dual
master ● memagentを使ってactive、backup構成に ○ DCのクライアント(rails、perlbal)は ■ DC上のをactive、 ■ EC2上のをbackupとして指定 ○ EC2のクライアントはその逆 ● データは暗号化
69.
DCとEC2のセッション共有(with memagent) app001 app002
app201 DC AWS ここ Perlbal Perlbal Rails mem agent KT Rails Rails KT mem agent mem agent
70.
memagentが一週間に一度なぜか落ちるので、後 にこの構成は止めました。 レイテンシも転送量も実は気にする程ではなかっ たので、実質問題はなかったです。 haproxyを使ってリベンジしようと思ってますが、 rubyのmemcache-clientの仕様がネックで難航 中。
71.
危機を乗り越えた ● とりあえず閲覧に関しては安定 ● アプロードもDC側で専念出来るのでマシに ●
知る限りではDisりもなし
72.
サーバが納品される その後、待ちにまったサーバが納品され、 先ずはAppサーバを増強。 これが大きな間違い。 ● appがリクエスト受けまくるがDB反応なし ● appサチる 急いで、DBサーバもリプレースしました…
73.
平和がもどった システム安定後、ゆっくりと ● mysql5.1から5.5にバーションアップ ● ファイルフォーマットをbarracudaに変更 ●
フロントのプロキシをperlbalからnginxに変更 ○ perlbalが無くなったわけではなくnginxからperlbalとrails に振り分ける形 ○ perlbalは画像に対する認証も行なっているので簡単に は置き換えできない 等を行って更に安定し、めでたく一億枚を超えまし た。 めでたしめでたし。
74.
2008~2009年頃の構成 全体概要 リバース プロキシ (Perlbal) リバース プロキシ (Perlbal) ストレージ API (lighttpd Catalyst) ストレージ API (lighttpd Catalyst) ストレージ (Mogilefs) ストレージ (Mogilefs) Webアプリ (lighttpd + Rails) Webアプリ (lighttpd + Rails) 非同期 ジョブAPI (lighttpd Catalyst) 非同期 ジョブAPI (lighttpd Catalyst) ジョブ サーバー (Gearman TheSchwar tz) ジョブ サーバー (Gearman TheSchwalt z) データベー ス (MySQL) データベー ス (MySQL)
75.
2012年現在の構成 全体概要 リバース プロキシ (Perlbal) リバース プロキシ (Perlbal) ストレージ API (lighttpd Catalyst) ストレージ API (lighttpd Catalyst) ストレージ (Mogilefs) ストレージ (Mogilefs) Webアプリ (Passenger + Rails) Webアプリ (Pasesnger + Rails) 非同期 ジョブAPI (lighttpd Catalyst) 非同期 ジョブAPI (lighttpd Catalyst) ジョブ サーバー (Gearman TheSchwart z) ジョブ サーバー (Gearman TheSchwalt z) データベー ス (MySQL) データベー ス (MySQL) フロント リバース プロキシ (Nginx) フロント リバース プロキシ (Nginx) AWS サブセット
76.
まとめ ● 実は成長してないのかもしれない ● 忙しくてもパフォーマンス監視だけは忘れずに ●
SSDマジ強い ● (特に)足場であるDBは早めの増強を
77.
質問あるかな
78.
ご静聴有難うござ いました。
Jetzt herunterladen