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
WebRTC配信システムをAWSからオンプレミスに切り替えている話
Search
MATSUURA, yosuke
July 27, 2021
Programming
14
13k
WebRTC配信システムをAWSからオンプレミスに切り替えている話
2021年7月27日 DMM meetup #31 での発表内容です
MATSUURA, yosuke
July 27, 2021
Tweet
Share
More Decks by MATSUURA, yosuke
See All by MATSUURA, yosuke
CircleCIとSchemaSpyを使ったMySQLドキュメントの自動生成
bateleurx
1
860
AWS Keymanagement Serviceを知ろう
bateleurx
0
600
機密情報をKMS+RDS,S3とParameter Storeを使って保存した話
bateleurx
0
3.3k
VAddy導入案内
bateleurx
0
250
0から始まるかもしれない固定長整数をINT型に入れたい
bateleurx
0
1.8k
Other Decks in Programming
See All in Programming
ゼロからの、レトロゲームエンジンの作り方
tokujiros
3
1.1k
Scaling your build logic
antalmonori
1
100
知られざるDMMデータエンジニアの生態 〜かつてツチノコと呼ばれし者〜
takaha4k
1
440
Findy Team+ Awardを受賞したかった!ベストプラクティス応募内容をふりかえり、開発生産性向上もふりかえる / Findy Team Plus Award BestPractice and DPE Retrospective 2024
honyanya
0
140
functionalなアプローチで動的要素を排除する
ryopeko
1
210
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
390
Внедряем бюджетирование, или Как сделать хорошо?
lamodatech
0
940
PHPUnitしか使ってこなかった 一般PHPerがPestに乗り換えた実録
mashirou1234
0
420
return文におけるstd::moveについて
onihusube
1
1.4k
為你自己學 Python
eddie
0
520
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
Adopting Sorbet at Scale
ufuk
74
9.2k
Building a Scalable Design System with Sketch
lauravandoore
460
33k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
How GitHub (no longer) Works
holman
312
140k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
960
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
Transcript
© DMM.com WebRTC配信システムを AWSからオンプレミスに 切り替えている話 DMM meetup #31 DMM.com ITインフラ本部SRE部
松浦庸介 2021年7月27日
© DMM.com 自己紹介 松浦 庸介 2020年5月入社 ITインフラ本部 SRE部所属 WebRTCリアルタイム配信システムの開発運用を担当
© DMM.com WebRTC配信システムを AWSからオンプレミスに 切り替えている話 DMM meetup #31
© DMM.com WebRTC配信システムを AWSからオンプレミスに 切り替えている話 DMM meetup #31
© DMM.com AWSにオンプレミスから?
© DMM.com AWSからオンプレミスに であってます!
© DMM.com WebRTC配信システムの特徴 送信者から送られてくるストリームをリアルタイムで配信 →低遅延性が求められる 送信者と受信者は1:nの関係 →受信トラフィックより送信トラフィックが多い 1送信者あたりの受信者は10人未満が多い →CDNによるトラフィック分散が難しい
© DMM.com ことのはじまり 以前はFlashを使った配信システムを運用していました しかし、Flashは2020年末で完全終了・・・ →そこでWebRTCベースの配信システムへの刷新
© DMM.com 開発当初の懸念 WebRTCという未知の領域に開発は手探り • 使うコーデックは? • どんなソフトウェアを使う? • サーバのスペックは?
• トラフィックはどれくらい発生する? • 何台くらいのサーバが必要? 不確実性が多いためオンプレは使いにくかった →サーバはEC2を選択した
© DMM.com 現在のWebRTCサーバ構成 2021年7月時点で通常用途サーバは下記の構成 EC2: c5.12xlarge × 8台 毎日のピーク送信トラフィック: 約750Mbps/台
ストリーム配信系だとc5aの方が強いんじゃないの? 実は使っているソフトウェアがEPYC系インスタンスではパフォーマン スが出ません
© DMM.com 導入が進むにつれてコストも増える
© DMM.com コストの分析をしてみる WebRTCサーバの稼働が増えるに従い、コストが増えていく なんとかコスト削減ができないだろうか では何がコスト要因なのか? Cost Explorerで調べてみよう ※2021年1月にコストが下がっているのは、サーバをCentOS7から CentOS8に変更した影響
CentOS7でパフォーマンスが劣化するためOSを切り替えた
© DMM.com コストの要因分析
© DMM.com 通信コストが高かった AWS費用のおよそ75%が転送量課金 転送量単価は段階的に安くなり、150TB以上で単価が最も安くなるが、 月間の転送量はその2倍以上あった EC2料金表には「1 か月間のデータ転送量が500TBを超える場合は、お 問い合わせください」とある
© DMM.com
© DMM.com オンプレネットワークの活用 DMMでは自社で対外400Gbpsのネットワークを保有している 契約帯域が大きいので、bpsあたりの単価はかなり安い このリソースを使いたい!
© DMM.com DMMはクラウドにすべて寄せる方針では? そんなことはありません オンプレのほうがよければ、積極的に使っていきます https://www.sbbit.jp/article/cont1/55186 「Tech Visionを受けて、すべてがパブリッククラウドに移行すると誤 解して『自分たちの仕事がなくなる』と考えるメンバーがいました。 『最適なものを選択する』というだけだったのですが、こうした誤解
を解き、しっかりとコミュニケーションをとって正しく理解してもら うことが必要でした」(大久保氏)
© DMM.com オンプレサーバの概要 VMware Integrated OpenStack + NSX-Tによるプライベートクラウド基盤 ベアメタルで払い出してもらう方法もあった しかし手っ取り早いので、プライベートクラウドを採用
スペックもEC2とさほど変わらない EC2(c5.12xlarge) オンプレ ハイパーバイザー nitro VMware CPU Cascade Lake Cascade Lake 1ソケットあたりのコア数(スレッド数) 24(48) 20(40) メモリ 96GB 96GB
© DMM.com 費用試算
© DMM.com 費用試算 サーバのコストはオンプレの方が高かった (Savings Planや保守的な構成見積もりなどによる影響) ただし稼働が安定してくれば、まだ下げられる余地はあり 一方ネットワークコストはオンプレの方が95%安い 合計すると半額以下になる これは移行するしかない!
© DMM.com もちろんクラウドのメリットはある もちろんクラウドの方が適している場合も多い クラウドで調達したときのメリット • サーバの調達が速い • 物理機材の在庫を(あまり)気にせず、APIで追加削除が簡単 稼働当初はスペック想定が難しかったため、サーバの追加削除も多く、
EC2のメリットも大きかった しかし運用が安定してくるとメリットが生かせなくなってきた
© DMM.com アプリ改修の道のり
© DMM.com 切り替えのハードル 配信サーバとAPIが同一VPC内にあることを前提とする実装 • 配信サーバがコールするAPIがInternal ALB配下にある • APIサーバがコールする配信サーバの管理APIが、プライベートIPア ドレス経由でリクエストされている
以下2種類の”API”が登場します。紛らわしいのですがご容赦ください API: 配信サーバが認証時などで使うウェブフックAPI 管理API: 配信ソフトに実装されているコントロール用API
© DMM.com 現在の通信構成 通信がVPC内で完結することが 前提になっている
© DMM.com 二つのアイデア オンプレに配信サーバを構築するにあたり、2種類の構成が考えられる A. Site-to-Site VPNやDirect ConnectでVPCを拡張する B. 配信サーバとAPIの通信をインターネット経由にする
プランBを選択 • 構成がシンプルで、機材の冗⻑化などの考慮もいらない • ネットワーク定額制のベアメタルホスティングなども導入しやすい
© DMM.com 改修のポイント • APIをInternet ALB配下に変更する • 管理APIをnginxでHTTPS終端させ、インターネットから接続できる ようにする •
一度に切り替えるのが難しいため、切替期間中は新旧通信が混在す る
© DMM.com 切替途中の構成
© DMM.com 最終形
© DMM.com 配信サーバの管理API 配信サーバはすでにTCP443でWebSocketやTURN-TCP, TURN-TLS通信 を行っている 管理APIには認証機能がないので、nginxでIPアドレス制限が必要 WebSocketなど一般公開される通信はIPアドレス制限できない TURNと管理APIが同じパスだったため、管理APIのみのIPアドレス制限 ができなかった
→管理APIのHTTPSポートを違うものにした
© DMM.com 切替期間中特有の課題 切り替え中は、API, 管理APIへのアクセスがローカルとグローバル経 由のものが混在し、それぞれ挙動も異なる 配信サーバ管理DBに登録されているIPアドレスがプライベートIPアド レスかどうかで管理APIのURLを変える • プライベートIPアドレス:
http://(private_ip):3000 • グローバルIPアドレス: https://(fqdn):8443
© DMM.com 具体例 ID IPアドレス FQDN 1 10.20.30.40 foo001.example.com 2
192.0.2.1 foo002.example.com データベースには以下のように IPアドレスとFQDNが登録されています。 ID1のサーバはプライベートIPアドレスが、 ID2のサーバはグローバルIPアドレスが登録されています。 プライベートIPアドレスが登録されているの で、管理APIのURLは http://10.20.30.40:3000 グローバルIPアドレスが登録されているので、 管理APIのURLは https://foo002.example.com:8443
© DMM.com ところで・・・ あるIPアドレスがプライベートIPアドレスか判定するのは 結構めんどくさくないですか?特にクラスB(172.16.0.0/12) いくつかやり方はありますが、ロングIPアドレスを使っています
© DMM.com 余談(ロングIPアドレス表記) IPv4アドレスは通常203.0.113.99のように表記しますが、各オクテット を256進数とみなすと、十進数表記に変換可能です。 これがロングIPアドレスです。 先述の例だと203*2563 + 0*2562 +
113*256 + 99 = 3405803875 10.0.0.0/8は167772160(10.0.0.0)〜184549375(10.255.255.255) →CIDR判定が整数の比較演算でできる さらに余談ですがMySQLのserver-idも32bit符号なし整数なので、ロ ングIPアドレスをそのまま使うと設定が便利
© DMM.com 判定のコード例(PHP) /** * プライベートIPか判定してURLを作成する */ private function getServerUrl($ipv4,
$fqdn): string { $iplong = ip2long($ipv4); //PHPの場合ip2longという専用の関数が存在する if (($iplong >= 167772160 && $iplong <= 184549375) || ($iplong >= 2886729728 && $iplong <= 2887778303) || ($iplong >= 3232235520 && $iplong <= 3232301055)) { return $ipv4; } else { return 'https://' . $fqdn; } }
© DMM.com 現在の切替状況は? 現在API改修が絶賛QAテスト中です 来月頭から切替を始めたいな
© DMM.com まとめ リソースが安定していて、通信が多いシステムはオンプレを使うメリ ットが出てくる 一方でAPIサーバのように起動停止しやすいシステムは積極的にクラウ ド(特にコンテナ)に寄せていきたい DMMではオンプレのリソースも潤沢なので、今後も適材適所に使い分 けていきます