Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DMM動画の可用性を支えるConsul
Search
tinoji
December 17, 2018
Programming
1
2.4k
DMM動画の可用性を支えるConsul
第4回 HashiCorp User Group Meetupの登壇資料
https://hashicorp.connpass.com/event/110653/
tinoji
December 17, 2018
Tweet
Share
More Decks by tinoji
See All by tinoji
VODのディザスタリカバリをAWSで考えてみる
tinoji
0
460
ちょっと冷や汗かいたけどAWS MediaLiveは最高!って話
tinoji
1
350
Other Decks in Programming
See All in Programming
Fixstars高速化コンテスト2024準優勝解法
eijirou
0
190
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
380
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
28
6.1k
HTML/CSS超絶浅い説明
yuki0329
0
200
Amazon Nova Reelの可能性
hideg
0
240
DevFest - Serverless 101 with Google Cloud Functions
tunmise
0
140
ペアーズでの、Langfuseを中心とした評価ドリブンなリリースサイクルのご紹介
fukubaka0825
1
160
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
330
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
12
5.9k
ISUCON14感想戦で85万点まで頑張ってみた
ponyo877
1
770
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
450
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
2.1k
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
590
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
4 Signs Your Business is Dying
shpigford
182
22k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Visualization
eitanlees
146
15k
The Cost Of JavaScript in 2023
addyosmani
47
7.2k
The World Runs on Bad Software
bkeepers
PRO
66
11k
Fireside Chat
paigeccino
34
3.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
Transcript
DMM動画の可用性を支えるConsul DMM.com 動画配信事業部 菊地 弘晃 @第4回 HashiCorp User Group Meetup
(2018/12/17)
いきなりで恐縮ですが みなさんに質問が・・・
Consul
こんさる vs. こんする問題
※当日、会場の皆さんに挙手して頂いたら、 ほぼ満場一致で「こんさる」でした
動画配信事業部 配信基盤スクラムチーム 菊地 弘晃 ͖ͪ͘ͻΖ͖͋ C V 菊地 弘晃 T
E A M @_tinoji ピチピチの新卒2年目(アラサー)。X線の研究をして ましたが、飽きたのでエンジニアになりました。 仕事ではGoとLuaを書くことが多いです。二郎系と 温泉とラジオとHashiCorpが好き。 ࣗ ݾ հ Who am I
動画配信事業部 ←わかる 配信基盤スクラムチーム ←わからん 「スクラム」って部分が 妙にダサい
% . . ಈ ը ͷ α ʔ Ϗ ε
Our Services http://www.dmm.com/digital/
規模的には・・・ トラフィック: 200Gbps超 再生数(VOD): 年間 4億超
% . . ಈ ը ͷ α ʔ Ϗ ε
Our Services
再生ボタンポチーをしてから動画を見終わるまで のシステムを担っているチームです
࠶ ੜ 6 3 - Streaming URL まぁよくある話ですね(白目) 再生ボタンポチーの後、まず最初に行われるのが「再生URLの生成」。 ユーザーの購入情報などをもとに、どのコンテンツをどのデバイスでどんな画質で再生するのか等
を決定し、適切なURLを生成します。 この処理、いわゆるモノリシックでビッグなシステムの中の1ライブラリが行っていました。
• 各サービスの機能にURL生成機能が密結合。 • ライブラリは動画サービス以外でも使用されている。 • バージョン管理も各サービスで行っており、 修正時にはそれぞれの担当部署がデプロイする必要あり。 ࠶ ੜ 6
3 - Streaming URL
シンプルにつらい・・・ので、
今年リプレイスされました オウンドメディアで 記事を書きました〜 https://inside.dmm.com/entry/2018/10/17/create-playurl
Ϧ ϓ Ϩ Π ε Replacing
Ϧ ϓ Ϩ Π ε Replacing st-apiというのが新システムの 名前です
新システム(st-api)に 最も求められるものは?
高可用性
VODの再生数は年間 4億2千万
最も多いときで分間 4000再生
再生URLが生成できない = 当然、再生できない
st-apiが1分間死ぬ = 最大4000再生に影響が出る
やばい(やばい) どうやって高可用性を 実現しよう?
Consulの用途 その1
ߴ Մ ༻ ੑ High Availability 高可用性をどうやって実現しよう? (以下DNS-RRで負荷分散する前提で話しています) 少しでも異常があるノードは速やかにサービスアウトしてほしい (当然リカバリ時には自動でサービスインしてほしい)
=> APIでDNS in/outが可能で、かつ信頼性の高いRoute53をパブリックDNSに使うことに!
ࢮ ׆ ࢹ Health Check Route53にもヘルスチェック機能はあるが、HTTP, HTTPS, TCPに限られる =>
可用性を高めるために、もっと細かい監視・制御がしたい・・・ 特定のミドルウェアの死活監視、DBとの疎通チェック etc… 死活監視は別のなにかで行い、フェイル/リカバーをフックしてRoute53のAPIを叩けたらいいなぁ
・・・ɾɾɾɾ
・・・Consul!!
$ P O T V M Ͱ % / 4
Γ ସ ͑ Update DNS by Consul ɾservice.json ɾwatch.json ɾ(PͰॻ͍ͨ$-*πʔϧ TUBQJʹ%#ͱͷૄ௨ΛؚΊͨεςʔλενΣοΫ༻"1*Λ࡞ɻ ͜ΕΛୟ͍ͯϔϧενΣοΫɻ ˢͷαʔϏεΛࢹ͠ɺมԽ͕͋ͬͨ߹ˣͷπʔϧΛ࣮ߦɻ 3PVUFͷ"1*Λୟ͍ͯ%/4Λߋ৽͢Δɻ ҟৗͷ͋ΔϊʔυαʔϏεΞτ͞ΕΔɻ ϊʔυՃ࣌ʹ$POTVM,74Ͱ%/4ొର֎ϦετΛ࡞ɻ ಈ࡞ݕূྃ·ͰύϒϦοΫ%/4ొΛߦΘͳ͍Α͏ʹ͍ͯ͠Δɻ "services": [ { "name": “st-api", "checks": [ { "id": "hoge", "name": “foo", “http": “εςʔλενΣοΫAPI”
ɾservice.json ɾwatch.json ɾ(PͰॻ͍ͨ$-*πʔϧ TUBQJʹ%#ͱͷૄ௨ΛؚΊͨεςʔλενΣοΫ༻"1*Λ࡞ɻ ͜ΕΛୟ͍ͯϔϧενΣοΫɻ ˢͷαʔϏεΛࢹ͠ɺมԽ͕͋ͬͨ߹ˣͷπʔϧΛ࣮ߦɻ 3PVUFͷ"1*Λୟ͍ͯ%/4Λߋ৽͢Δɻ ҟৗͷ͋ΔϊʔυαʔϏεΞτ͞ΕΔɻ ϊʔυՃ࣌ʹ$POTVM,74Ͱ%/4ొର֎ϦετΛ࡞ɻ ಈ࡞ݕূྃ·ͰύϒϦοΫ%/4ొΛߦΘͳ͍Α͏ʹ͍ͯ͠Δɻ
“watches”: [ { “type”: “service”, “service”: “st-api”, “handler_type”: “script”, “args”: [(GoͷπʔϧΛ࣮ߦ)] }, …(ͦͷଞͷwatch) ] $ P O T V M Ͱ % / 4 Γ ସ ͑ Update DNS by Consul
st-api自体の高可用性は実現できた! (Consulによる細かい監視+Route53でサービスイン・アウト)
DBも高可用じゃないと ダメっすね、、、
Consulの用途 その2
3 F E J T ͷ ϑ Σ Π ϧ
Φ ʔ ό ʔ Failover of Redis st-api master.service.consul slave.service.consul slave.service.consul 接続 Consul DNSを使用 Redis Sentinel
3 F E J T ͷ ϑ Σ Π ϧ
Φ ʔ ό ʔ Failover of Redis st-api master.service.consul slave.service.consul slave.service.consul 接続 Consul DNSを使用 Sentinelによって新しいmasterが選出 Redis Sentinel
st-api slave.service.consul slave.service.consul 3 F E J T ͷ ϑ
Σ Π ϧ Φ ʔ ό ʔ Failover of Redis 死んだRedisに繋いだまま Redis Sentinel master.service.consul
3 F E J T ͷ ϑ Σ Π ϧ
Φ ʔ ό ʔ Failover of Redis 一般的な解決法 (http://tech.gmo-media.jp/post/48748908427/introduce-redis-sentinel) ・LBでどうにかする ・VIPでどうにかする ・DNSでどうにかする ・hostsでどうにかする ・iptablesでどうにかする ・(クライアント側でどうにかする) チームの要求 ConsulのServiceに、masterかslaveかを含めてRegisterしておいた方がUIから見たときに 分かりやすそう。なのでフェイルオーバー時にはServiceの更新も行っておきたい。
3 F E J T ͷ ϑ Σ Π ϧ
Φ ʔ ό ʔ Failover of Redis 一般的な解決法 (http://tech.gmo-media.jp/post/48748908427/introduce-redis-sentinel) ・LBでどうにかする ・VIPでどうにかする ・DNSでどうにかする ・hostsでどうにかする ・iptablesでどうにかする ・(クライアント側でどうにかする) チームの要求 ConsulのServiceに、masterかslaveかを含めてRegisterしておいた方がUIから見たときに 分かりやすそう。なのでフェイルオーバー時にはServiceの更新も行っておきたい。 ← Consul DNSでいけそう
st-api slave.service.consul notification script(※)を利用して Consul DNSを変更 3 F E J
T ͷ ϑ Σ Π ϧ Φ ʔ ό ʔ Failover of Redis ※reconfiguration scriptの方がいいかも Redis Sentinel master.service.consul
st-api slave.service.consul slave.service.consul slave master notification scriptを利用して Consul DNSを変更 3
F E J T ͷ ϑ Σ Π ϧ Φ ʔ ό ʔ Failover of Redis Redis Sentinel master.service.consul
st-api slave.service.consul slave.service.consul master notification scriptを利用して Consul DNSを変更 3 F
E J T ͷ ϑ Σ Π ϧ Φ ʔ ό ʔ Failover of Redis => 30行弱のPythonスクリプトで実現できてしまった 他の方法と比較してもかなりシンプルかも? Redis Sentinel slave master.service.consul
· ͱ Ί Summary 再生URL生成APIを例に、Consulのユースケースを紹介しました〜 ① Conuslで死活監視→Route53のAPIでサービスイン・アウトを制御 細かい監視と柔軟なサービスイン・アウトを実現! ② Redisの自動フェイルオーバー時のmaster再接続
超シンプルなスクリプトで再接続を実装!
DMMの動画サービスの可用性は Consulによって支えられています!!!
Amazon Web Services、"Powered by AWS"ロゴ、およびかかる資料で使用されるその他のAWS商標は、 米国その他の諸国における、Amazon.com, Inc.またはその関連会社の商標です。 本資料で使用されるHashiCorp、Consul及びそのロゴはHashiCorp, Inc.の商標です。