Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Ryo Kuroda
15,166 views
MogileFSをバックエンドとしたPrivate S3の作り方
第3回ペパボテックカンファレンス
Engineering
◦
Read more
10
Save
Share
Embed
Embed presentation
Download
Downloaded 19 times
1
/ 70
2
/ 70
3
/ 70
4
/ 70
5
/ 70
6
/ 70
7
/ 70
8
/ 70
9
/ 70
10
/ 70
11
/ 70
12
/ 70
13
/ 70
14
/ 70
15
/ 70
16
/ 70
17
/ 70
18
/ 70
19
/ 70
20
/ 70
21
/ 70
22
/ 70
23
/ 70
24
/ 70
25
/ 70
26
/ 70
27
/ 70
28
/ 70
29
/ 70
30
/ 70
31
/ 70
32
/ 70
33
/ 70
34
/ 70
35
/ 70
36
/ 70
37
/ 70
38
/ 70
39
/ 70
40
/ 70
41
/ 70
42
/ 70
43
/ 70
44
/ 70
45
/ 70
46
/ 70
47
/ 70
48
/ 70
49
/ 70
50
/ 70
51
/ 70
52
/ 70
53
/ 70
54
/ 70
55
/ 70
56
/ 70
57
/ 70
58
/ 70
59
/ 70
60
/ 70
61
/ 70
62
/ 70
63
/ 70
64
/ 70
65
/ 70
66
/ 70
67
/ 70
68
/ 70
69
/ 70
70
/ 70
More Related Content
PDF
TIME_WAITに関する話
by
Takanori Sejima
PDF
Oss貢献超入門
by
Michihito Shigemura
PDF
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
by
hiboma
PDF
30歳過ぎてもエンジニアでいるためにやったこと
by
onozaty
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
PPTX
トランザクションの設計と進化
by
Kumazaki Hiroki
PDF
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
by
NTT DATA Technology & Innovation
PDF
あなたが知らない リレーショナルモデル
by
Mikiya Okuno
TIME_WAITに関する話
by
Takanori Sejima
Oss貢献超入門
by
Michihito Shigemura
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
by
hiboma
30歳過ぎてもエンジニアでいるためにやったこと
by
onozaty
ヤフー社内でやってるMySQLチューニングセミナー大公開
by
Yahoo!デベロッパーネットワーク
トランザクションの設計と進化
by
Kumazaki Hiroki
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
by
NTT DATA Technology & Innovation
あなたが知らない リレーショナルモデル
by
Mikiya Okuno
What's hot
PDF
DynamoDBの初心者に伝えたい初めて触るときの勘所
by
Ryo Sasaki
PDF
異次元のグラフデータベースNeo4j
by
昌桓 李
PDF
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
by
Insight Technology, Inc.
PDF
あなたの知らないPostgreSQL監視の世界
by
Yoshinori Nakanishi
PDF
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
PPTX
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
by
Tadahiro Ishisaka
PPTX
MongoDBが遅いときの切り分け方法
by
Tetsutaro Watanabe
PPTX
グラフ構造のデータモデルをPower BIで可視化してみた
by
CData Software Japan
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PDF
RDF Semantic Graph「RDF 超入門」
by
オラクルエンジニア通信
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
by
NTT DATA Technology & Innovation
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
PDF
こわくない Git
by
Kota Saito
PDF
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
by
Amazon Web Services Japan
PDF
CRDT in 15 minutes
by
Shingo Omura
PDF
Scalaのコンパイルを3倍速くした話
by
tod esking
PPTX
Topological sort
by
HCPC: 北海道大学競技プログラミングサークル
PPTX
WiredTigerを詳しく説明
by
Tetsutaro Watanabe
PPTX
やってはいけない空振りDelete
by
Yu Yamada
DynamoDBの初心者に伝えたい初めて触るときの勘所
by
Ryo Sasaki
異次元のグラフデータベースNeo4j
by
昌桓 李
[C33] 24時間365日「本当に」止まらないデータベースシステムの導入 ~AlwaysOn+Qシステムで完全無停止運用~ by Nobuyuki Sa...
by
Insight Technology, Inc.
あなたの知らないPostgreSQL監視の世界
by
Yoshinori Nakanishi
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
by
infinite_loop
関数型・オブジェクト指向宗教戦争に疲れたなたに送るGo言語入門
by
Tadahiro Ishisaka
MongoDBが遅いときの切り分け方法
by
Tetsutaro Watanabe
グラフ構造のデータモデルをPower BIで可視化してみた
by
CData Software Japan
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
マイクロにしすぎた結果がこれだよ!
by
mosa siru
RDF Semantic Graph「RDF 超入門」
by
オラクルエンジニア通信
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
by
NTT DATA Technology & Innovation
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
by
Y Watanabe
こわくない Git
by
Kota Saito
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
by
Amazon Web Services Japan
CRDT in 15 minutes
by
Shingo Omura
Scalaのコンパイルを3倍速くした話
by
tod esking
Topological sort
by
HCPC: 北海道大学競技プログラミングサークル
WiredTigerを詳しく説明
by
Tetsutaro Watanabe
やってはいけない空振りDelete
by
Yu Yamada
MogileFSをバックエンドとしたPrivate S3の作り方
1.
GMO Pepabo, Inc. Ryo
kuroda @lamanotrama 2015/08/29 第3回ペパボテックカンファレンス MogileFS をバックエンドとした Private S3の作り方
2.
黒田 良 @lamanotrama >
技術基盤チーム > インフラ担当
3.
前半 (自分) • 全体アーキテクチャ •
インフラ 後半 (@hiboma) • APIアプリケーション
4.
前半アジェンダ > 何故Private S3? >
アーキテクチャ > 大規模MogileFSの運用 > Gatewayの仕組み > データインポート
5.
何故Private S3
6.
全社的にサービスインフラを オンプレミスから Private Cloud(Open Stack)に移行
8.
課題
9.
静的コンテンツの保存、配信 > 主に画像 > 容量がそれなりに大きい >
各サービスがそれぞれ違った仕組みで独自に構築している > Nyah(IaaS)上に各サービスが再構築するのは非効率 > 可用性 > スケーラビリティ > 構築、運用コスト → 求められる大統一オブジェクトストレージサービス
10.
ペパボのオブジェクト ストレージと言えば
11.
30days Album
12.
30days Album > 2008年リリース >
大規模分散オブジェクトストレージ > perl製のMogileFSを使用 > 総容量: 750TB > 累計オブジェクト数: 22億
13.
高いデータ耐久性、稼働率 > 7年間でデータロストは一回(4個) > (不幸なレア条件が重なったため。鋭意シス テム改善中!) >
計画メンテを除いたサービスダウンは ほぼ無い > (以前は不安定な時期もありました)
14.
vs OpenStack Swift OpenStackにもオブジェクトストレージを提供するコンポー ネントはあるが… >
大規模分散オブジェクトストレージを安定運用するのは甘 くない > 30days AlbumのMogileFSは十分に安定している 最初からS3互換APIを備えているというメリットはあるが、 長い目でみるとそこの開発コストは十分相殺されると考えた。
15.
vs AWS S3 フルマネージドのS3でいいじゃん? >
容量や転送量のコスト面でオンプレの方が明ら かに優位 > 同程度の規模だと容量課金のみで数百万円/月 > 長年のノウハウ蓄積によってMogileFSの運用 コストはかなり下がった
16.
名称 ペパボストレージ
17.
名称 ペパボストレージ Bayt
19.
アーキテクチャ
20.
30days
21.
30days + Bayt
22.
Bayt ① ②
23.
1. gateway > Nginx
+ ngx_mruby > インターネット、インターナルからリク エストを受ける > http(s)://<bucket_name>.hitmitsu.no.domain/ > http://bayt.30d.lan/<bucket_name>/ > apiにproxy > apiだけでは出来ないあれこれ(後ほど)
24.
2. api > Rails
+ Unicorn > mogilefsd、メタデータdbとのや りとり > 詳細は後半で
25.
この2つを作れば 基本的にはOK
26.
と、その前に 既存システムコンポーネントの 強化、安定化
27.
安定稼働しているとはいえ、全社的 に使うには心もとない部分もある
28.
メトリクスの充実化、可視化
29.
storageサーバの高集積化 自作サーバ期など、紆余曲折を経て 今は/dev/sdarまであるみっしり筐体がメイン
30.
DB(MySQL)サーバのリプレース > 2台→3台 (総入れ替え) >
MySQL5.1→MySQL5.5 > MHA導入 短時間のダウンタイムを許容できるなら2台 でもいけなくはない。 が、メンテナンス性がとにかく悪い。
31.
mogilefsdクラスタの強化 負荷が高くなるのは明白なのでスペッ クアップ&台数++
32.
問題発生
33.
mogilefsdがスケールしない mogilefsdはマスタープロセスからワーカ を生やすpreforkモデル _ mogilefsd _ mogilefsd
[monitor] _ mogilefsd [replicate] _ mogilefsd [replicate] _ mogilefsd [replicate] _ mogilefsd [replicate] _ mogilefsd [queryworker] _ mogilefsd [queryworker] _ mogilefsd [fsck] _ mogilefsd [fsck] _ mogilefsd [reaper] _ mogilefsd [delete] …
34.
mogilefsdがスケールしない 子が少ないうちは大丈夫
35.
mogilefsdがスケールしない 増やすと親が子からのメッセージに応答し なくなる(約700プロセスを境に) ❌ ❌ ❌
36.
mogilefsdがスケールしない スループットが大幅に低下。 困った。 ❌ ❌ ❌
37.
mogilefsdがスケールしない 親に気合をいれてみた。 renice -20 -p
親 ❌ ❌ ❌
38.
mogilefsdがスケールしない 元気でた。
39.
副作用 mogilefsdサーバがコンスタントに高負荷で 落ちる。 1. 稀に子の調子がわるくなり、親から殺される 2. 新しく生まれた子は-20の子なので-20 3.
過負荷で不安定になる 4. 更に子が死ぬ 5. -20っ子がモリモリ増える 6. もう無理
40.
過剰なやる気
41.
mogilefsd起動直後と、その後もこ まめにcronで親子のnice値の面倒を みることで解決。 (もうちょい綺麗になんとかしたい…)
42.
DB刺さる問題 1. MySQL5.5化以来、コンスタントにDBが刺さる (デッドロック) 2. 負荷がじりじり上がる 3.
MHAマネージャからのヘルスチェックがコケて、 自動でマスターフェイルオーバー 4. 復旧 入れててよかったMHA…とか言ってる場合ではない。
43.
雑に解決 > クエリの実行計画が変わったことで、元々使わ れていなかったindexが使われるようになった ことが原因 > mogilefs.file_to_replicate
nexttry > 要らんからdrop 色々調査、検証したけど長くなるので省略…
44.
既存の画像配信の品質向上 Bayt GWの仕組みと共通するため、まずは既存(30days)の画像配信周り (Nginx)の改善。 > Keep
Alive (client - nginx - unicorn) > Last-Modifiedヘッダ取り回しのバグ修正 > TLSオプティマイズ > upstream、reproxyのフォールバック設定見直し > storage(WebDAV)サーバのメモリバッファ上限引き上げ、worker数の調整 等などで、 30%程度高速化。レスポンスタイム、スループットの安定化。 @cubicdaiya さんの資料が大変参考になりました。 https://speakerdeck.com/cubicdaiya/nginxfalsepahuomansutiyuningu
45.
gateway
46.
(再度構成図)
47.
実URLへのreproxy処理 gw api storage
48.
実URLへのreproxy処理 GET http://mybucket.domain/a/b.jpg GET http://192.168.1.3/a/b.jpg Host:
mybucket.domain gw api storage
49.
実URLへのreproxy処理 X-Accel-Redirect: /reproxy X-Reproxy-URL: http://192.168.1.4/dev1/123.fid http://192.168.1.6/dev8/123.fid gw api storage
50.
実URLへのreproxy処理 gw api storage GET http://192.168.1.4/dev1/123.fid
51.
実URLへのreproxy処理 gw api storage ❌
52.
実URLへのreproxy処理 gw api storage GET http://192.168.1.6/dev8/123.fid
53.
実URLへのreproxy処理 gw api storage
54.
1. apiへproxy
55.
2. 内部リダイレクトとproxy
56.
3. 2つ目のURLへフォールバック
57.
ややこしいけど便利
58.
apiに届かなかった場合のエラードキュメント S3互換にしないとクライアントで困る。 bodyだけでなくstatus codeも。
59.
ngx_mruby の活用
60.
Serverヘッダ変更 Server: Bayt で帰ってくるとかっこいい。 (add_headerディレクティブでは変更できない)
61.
リクエストUUID(ぽいもの)の発行 Railsまで届かなかった場合でもclient、gw、apiでユ ニークなリクエストIDを共有する為にgwで発行。
62.
apiでHMAC認証をskipさせるヘッダを付与 特定の条件を満たすリクエスト > internalリクエスト > 認証未対応のクライアントからの特定バケットへのリクエスト (S3とは関係ないBayt独自仕様)
63.
ngx_mrubyのオーバーヘッド ほぼ無い(実質的に問題にならない) リクエストトータル で掛かった時間 (mrubyの処理が介 在しない)upstream へのリクエストのみ で掛かった時間
64.
太らない 活発な開発。劇的改善。@matsumotory ++ (スパイクはNginxと関係ないバッチ処理によるもの) ngx_mruby v1.12.14
65.
既存データの import
66.
S3互換なので > 既存のS3クライアント実装をそのままつ かえる > 某サービスの場合だと画像サーバ上のデー タpathをそのまま
s3cmd sync
67.
DBメンテ祭り import検証中に発覚した問題への対応。 > ETag(md5値)保存用のカラム追加 > インデックスの追加 >
path(object key)カラムのサイズを255→512に変更 > pathをcase sensitiveにする為にcollationを変更 約9億レコードのテーブルへのALTERで最長25時間。 MHAのオンラインマスター切り替えを利用したメンテナンスで 全てサービスダウンタイムは無し。
68.
粛々とインポート、移行 > 適当な単位でCDNからのOrigin指 定を切り替え > 3TB、1億オブジェクトを移行済 絶賛安定稼働中
69.
今後 > 全サービスのデータを移行 > マルチロケーション(DC)化 >
ディザスタリカバリ > サービスエンドポイントの冗長化 > 動的画像リサイズ機能 > URLパス、クエリパターンで動的にリサイズ、 配信
70.
以上。後半に続く。 API編 by @hiboma
Download