Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
DMM動画の可用性を支えるConsul
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
tinoji
December 17, 2018
Programming
2.8k
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
570
ちょっと冷や汗かいたけどAWS MediaLiveは最高!って話
tinoji
1
430
Other Decks in Programming
See All in Programming
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
210
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
KiroのSpecで「五目並べ」を作ってみる
satoshi256kbyte
1
300
The Rails Doctrine Decade
koic
2
410
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
140
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
4.4k
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
320
Heart of Swift Concurrency
koher
0
1.1k
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
7
5.1k
mrbgem 三角測量 開発
ogom
0
130
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
200
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
710
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
450
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
600
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
380
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.の商標です。