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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
tinoji
December 17, 2018
Programming
2.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DMM動画の可用性を支えるConsul
第4回 HashiCorp User Group Meetupの登壇資料
https://hashicorp.connpass.com/event/110653/
tinoji
December 17, 2018
More Decks by tinoji
See All by tinoji
VODのディザスタリカバリをAWSで考えてみる
tinoji
0
550
ちょっと冷や汗かいたけどAWS MediaLiveは最高!って話
tinoji
1
420
Other Decks in Programming
See All in Programming
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
2
670
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
330
Inside Stream API
skrb
1
700
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
540
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
540
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
570
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.8k
A2UI という光を覗いてみる
satohjohn
1
130
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
260
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.2k
Featured
See All Featured
Designing Experiences People Love
moore
143
24k
The agentic SEO stack - context over prompts
schlessera
0
820
Abbi's Birthday
coloredviolet
2
8k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
How to build a perfect <img>
jonoalderson
1
5.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
Tell your own story through comics
letsgokoyo
1
950
ラッコキーワード サービス紹介資料
rakko
1
3.6M
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.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.の商標です。