SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
高負荷サービスを改善した軌跡
Engineer LT #2 サーバーサイド
〜Webサービスの裏側〜
株式会社U-NEXT
R&D部
秋穂 賢
JavaやGolangを使ったサーバAPI開発
作品やエピソードなどのメタデータを管理する
システムがメイン担当
自己紹介
氏名 秋穂 賢(あきほ すぐる) @ken-aio
所属 株式会社U-NEXT R&D部
仕事
高負荷とは
今日のLTでお話しする高負荷を定義します
✖
突発的に発生する負荷
e.g.)
- ゲームなどのイベントで急激に上昇する負荷
○
恒常的に比較的高いアクセス数がある負荷
e.g.)
- U-NEXTなどのVODサイト
こんな感じ
○ 夜間帯にピークを迎えて明け方が一番少ない
○ 土日や台風、雨の日は普段よりアクセスが多くな
る傾向
○ システムの歴史
○ 地道な改善
○ Varnish
○ アーキテクチャの再考
○ 脱MySQL
○ 今後の展望
目次
○ 2015年01月 U-NEXTへ入社
○ 2015年10月 Videoサービスリニューアル
□ 時間がない中のカオスな開発
□ 地道な改善が大きな効果
○ 2019年01月 Bookサービスリニューアル
□ Videoの反省を活かした構成変更
○ 2019年12月 脱MySQL
○ 202x年xx月 アーキテクチャの一新
歴史
地道な改善とVarnish
2015年当時の
サーバシステム構成
JSON API
2015年当時の
サーバシステム構成
N+1
N+1
Slow
Query
Slow Query
exists -> in
作品
- ワンピース
- こち亀
エピソード
- 1話
- 2話
…
1 N
ワンピースの商品をください
商品
- 見放題
- ポイント
…
1 N
select * from
product
where exists (
select * from episode where episode.id = product.episode_id
and exists (
select * from sakuhin where sakuhin.id = episode.sakuhin_id
and sakuhin.code = ‘SID0042235’ – ワンピース
)
)
Slow Query
exists -> in
作品
- ワンピース
- こち亀
エピソード
- 1話
- 2話
…
1 N
商品
- 見放題
- ポイント
…
1 N
select * from
product
where exists (
select * from episode where episode.id = product.episode_id
and exists (
select * from sakuhin where sakuhin.id = episode.sakuhin_id
and sakuhin.code = ‘SID0042235’ – ワンピース
)
)
Slow Query
exists -> in
作品
- ワンピース
- こち亀
エピソード
- 1話
- 2話
…
1 N
商品
- 見放題
- ポイント
…
1 N
3000ms
select * from
product
where product.episode_id in (
select id from episode where episode.id = product.episode_id
and episode.sakuhin_id (
select id from sakuhin where sakuhin.id = episode.sakuhin_id
and sakuhin.code = ‘SID0042235’ – ワンピース
)
)
Slow Query
exists -> in
作品
- ワンピース
- こち亀
エピソード
- 1話
- 2話
…
1 N
商品
- 見放題
- ポイント
…
1 N
50ms
○ existsの内側が絞り込めていて、外側が絞り込まれ
ていない状態
□ 激しいSlow Query
○ existsの場合に外側から実行される
○ Inを使うことで内側から実行されるようになる
○ 結果、SQLで大きな改善に
○ 「当社比100倍」のキーワードで改善
Slow Query
exists -> in
○ 重いSQLの結果はRedisにキャッシュ
○ MySQLに入っているマスターデータの一部は
Java起動時にメモリにキャッシュ
○ N+1 QueryやN+1のAPIリクエストをバッチロー
ド/リクエストに
○ システム負荷の高いサービス仕様をPOと話し
て別の仕様に変更
その他改善
地道な改善の結果
負荷要因によるサービス障害の頻度が下がる
APMを利用
Varnish
BFF
(PHP)
Varnish Java API
1000ms
1000ms
初回リクエスト
BFF
(PHP)
Varnish Java API
1~10ms
2回目以降のリクエスト
キャッシュにあれば
バックエンドリクエスト
にいかない
サービス特性上、Varnishがフィットした
(VODのメタデータはマスターデータの塊)
アーキテクチャ変更
○ それから数年後にBookリニューアルのPJ
○ BFF → バックエンドAPIで並列呼び出しをしたい
ケースが多々
○ BFFがPHPで言語的に並列呼び出しがやりづ
らかった
□ それでもある程度はやっていた
○ もっと並列実行が得意なものを使いたい
Bookリニューアル
BFFレイヤーにGolangを採用
どこにいれるか
BFF
(PHP)
Varnish Java API
セッション管理やさ
まざまなリクエスト
フィルターがある
varnishは引き続き
活かしたい
どこにいれるか
BFF
(PHP)
Varnish Java API
セッション管理やさ
まざまなリクエスト
フィルターがある
varnishは引き続き
活かしたい
ここか!
どこにいれるか
BFF
(PHP)
Varnish Java API
Golang
○ 平均ResponseTimeが大幅に改善
○ アプリケーションの構成も変えて保守性も向上
(静的型の恩恵も大きい)
□ PHPはUnitTestがないがgolangではUnitTestも導入
もう一つ
ここが重い
(データが多い)
○ ユーザ情報を格納していたMySQLがとにかく
重い
□ 特に視聴履歴のデータは爆発
○ Bookリニューアルのタイミングで別のソリュー
ションないか探した
○ 色々と試行錯誤した結果(詳細省略)
Cassandraをユーザ情報のDBとして利用
脱MySQL
part 1
○ NoSQLデータベースでインスタンスを追加する
とリニアにスケールするシステム
○ Netflixでも大々的に採用されていた
○ U-NEXTでも採用することに
○ ただし、結果整合性やNoSQL独自の仕組みで
使いづらい部分も多々ある
Cassandra
結果
パフォーマンス向上し、Cassandra起因での障
害なく安定稼働
○ BookはCassandraを採用してある程度うまく
いった
○ 一方、VideoはMySQLのまま
○ そこで、MySQL互換のNewSQLであるTiDB
を採用
脱MySQL
part2
TiDB
引用: https://docs.pingcap.com/ja/tidb/stable/tidb-architecture
CNCF卒業
○ いくつかMySQLのSQLを修正したが、基本的にア
プリケーションは何も変えずにMySQLからTiDBに
切り替えが完了
□ ユーザ情報を格納するDBに外部キーが少なく、テーブル間
の関連が少なかったことが大きい
○ MySQLよりパフォーマンス、安定性が向上
○ なにより使い慣れたMySQL周辺ツールが使えるメ
リットは大きい
脱MySQL
part2
TiDBがU-NEXTの実質標準に
さらにその先へ
○ 色々改善をしてきたけど、メタデータ管理は
MySQLのまま
—----------------------------------
○ あたらしい世界はGraphDBやTiDB
□ サービスではMySQLは利用しない
○ BFFはGraphQL(node)を採用
○ サーバ間通信はgRPCを採用
○ デプロイはk8s
○ 絶賛開発中
マイクロサービス
を進める
最後に
U-NEXTでは人材を募集しています
映画やアニメが好きなひと
エンターテイメントが好きなひと
配信プラットフォームに興味のあるひと
技術的なことが好きなひと
一緒に仕事をしましょう
https://careers.unext.co.jp/ja
ご静聴ありがとうございました

Weitere ähnliche Inhalte

Ähnlich wie Engineer LT #2 高負荷サービスを改善した軌跡

JAWSUG名古屋 AWS勉強会 20180309
JAWSUG名古屋 AWS勉強会 20180309JAWSUG名古屋 AWS勉強会 20180309
JAWSUG名古屋 AWS勉強会 20180309陽平 山口
 
Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介Daisuke Taniwaki
 
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...Insight Technology, Inc.
 
インフラ・サーバ技術の Days of Future Past
インフラ・サーバ技術の Days of Future Pastインフラ・サーバ技術の Days of Future Past
インフラ・サーバ技術の Days of Future PastShohei Kobayashi
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14swkagami
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化Takuya ASADA
 
MySQL Technology Cafe #12 待望の!MDS HA先行レビュー
MySQL Technology Cafe #12 待望の!MDS HA先行レビューMySQL Technology Cafe #12 待望の!MDS HA先行レビュー
MySQL Technology Cafe #12 待望の!MDS HA先行レビューオラクルエンジニア通信
 
【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...
【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...
【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...Hinemos
 
SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)Kohei KaiGai
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸Takahiro Iwase
 
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月VirtualTech Japan Inc.
 
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)さくらインターネット株式会社
 
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugJAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugYasuhiro Matsuo
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Weibo Corporation
 
将来必要となるエンジニアのスキルについて考える Ver3
将来必要となるエンジニアのスキルについて考える Ver3将来必要となるエンジニアのスキルについて考える Ver3
将来必要となるエンジニアのスキルについて考える Ver3Hiroshi Oyamada
 
2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdf2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdfNaotaka Saito
 
トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9Treasure Data, Inc.
 
ウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニングウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニングYasuhiro Onishi
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャHaruto Otake
 

Ähnlich wie Engineer LT #2 高負荷サービスを改善した軌跡 (20)

JAWSUG名古屋 AWS勉強会 20180309
JAWSUG名古屋 AWS勉強会 20180309JAWSUG名古屋 AWS勉強会 20180309
JAWSUG名古屋 AWS勉強会 20180309
 
JAWSUG 20180413
JAWSUG 20180413JAWSUG 20180413
JAWSUG 20180413
 
Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介Reactive Workflow Argo Eventsの紹介
Reactive Workflow Argo Eventsの紹介
 
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...
[db tech showcase Tokyo 2016] D13: NVMeフラッシュストレージを用いた高性能高拡張高可用なデータベースシステムの実現方...
 
インフラ・サーバ技術の Days of Future Past
インフラ・サーバ技術の Days of Future Pastインフラ・サーバ技術の Days of Future Past
インフラ・サーバ技術の Days of Future Past
 
kagami_comput2016_14
kagami_comput2016_14kagami_comput2016_14
kagami_comput2016_14
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
MySQL Technology Cafe #12 待望の!MDS HA先行レビュー
MySQL Technology Cafe #12 待望の!MDS HA先行レビューMySQL Technology Cafe #12 待望の!MDS HA先行レビュー
MySQL Technology Cafe #12 待望の!MDS HA先行レビュー
 
【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...
【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...
【Hinemos World 2013】B-4:Hinemosに新機能ストレージバックアップオプションが登場!(株式会社アトミテック/デル・ソフトウェア株...
 
SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)SQL+GPU+SSD=∞ (Japanese)
SQL+GPU+SSD=∞ (Japanese)
 
20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸20120317 IT系勉強会 in 神戸
20120317 IT系勉強会 in 神戸
 
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
GMOインターネットにおけるOpenStack Swiftのサービス化とその利用事例のご紹介 - OpenStack最新情報セミナー 2015年2月
 
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
○ヶ月でできた!?さくらのクラウド開発秘話(【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話)
 
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsugJAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
JAWS目黒 EC2チューニングTips #jawsmeguro #jawsug
 
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜Wot2015 微博平台护城河-构建高效的防御体系-王关胜
Wot2015 微博平台护城河-构建高效的防御体系-王关胜
 
将来必要となるエンジニアのスキルについて考える Ver3
将来必要となるエンジニアのスキルについて考える Ver3将来必要となるエンジニアのスキルについて考える Ver3
将来必要となるエンジニアのスキルについて考える Ver3
 
2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdf2022_1210_WordpressMeetup.pdf
2022_1210_WordpressMeetup.pdf
 
トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9
 
ウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニングウェブアプリケーションのパフォーマンスチューニング
ウェブアプリケーションのパフォーマンスチューニング
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャ
 

Mehr von 賢 秋穂

技術キャッチアップのための「頑張らない副業」という選択
技術キャッチアップのための「頑張らない副業」という選択技術キャッチアップのための「頑張らない副業」という選択
技術キャッチアップのための「頑張らない副業」という選択賢 秋穂
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側賢 秋穂
 
Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-
Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-
Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-賢 秋穂
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-賢 秋穂
 
ガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツールガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツール賢 秋穂
 
cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法賢 秋穂
 
Amandaを使ってバックアップ管理を一元化
Amandaを使ってバックアップ管理を一元化Amandaを使ってバックアップ管理を一元化
Amandaを使ってバックアップ管理を一元化賢 秋穂
 

Mehr von 賢 秋穂 (7)

技術キャッチアップのための「頑張らない副業」という選択
技術キャッチアップのための「頑張らない副業」という選択技術キャッチアップのための「頑張らない副業」という選択
技術キャッチアップのための「頑張らない副業」という選択
 
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
 
Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-
Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-
Chefのエンタープライズ事例 ossミドルウェアスタックishigakiテンプレートにおける事例-
 
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
テスト駆動インフラ構築-Chefとserverspecを使ったインフラ自動化のすすめ-
 
ガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツールガチ(?)対決!OSSのジョブ管理ツール
ガチ(?)対決!OSSのジョブ管理ツール
 
cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法cronからjobschedulerにマイグレーションする方法
cronからjobschedulerにマイグレーションする方法
 
Amandaを使ってバックアップ管理を一元化
Amandaを使ってバックアップ管理を一元化Amandaを使ってバックアップ管理を一元化
Amandaを使ってバックアップ管理を一元化
 

Engineer LT #2 高負荷サービスを改善した軌跡