勉強会資料 distribution
TRANSCRIPT
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
自己紹介
名前: 上原 正裕 (うえはら まさひろ)
プロジェクト担当:
立ち上げの PL
現在はサーバエンジニア
KLabとの関係:協力会社
- 2 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
担当プロジェクト
- 3 -
● スマホ向けリズムゲーム
● 今年で5年目に突入
● ユーザ数2100万ダウンロード突破
● テレビCMもやってる
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
5年間で経験したプロジェクトの問題
● スケジュールタイト
● 人が足りない
● 運用の不便さ
● サーバ負荷
● 人間関係
- 4 -
サーバ負荷
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
サーバ負荷について
● サーバ負荷とは○ サーバのリソースを使い切ることによる遅延
- 5 -
DB
WEB WEB
DB
IMDB
redis
memchached
WEB WEB
CPUファイルIOネットワーク
帯域
CPUファイルIO
ロードバランサー
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
プロジェクトのボトルネック
- 6 -
DB
WEB WEB WEB WEB
メインDB
クラウドサービス
IMDB
redis
memchached
ファイルIO
ロードバランサー
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
ボトルネックについて
● 平常時は問題なし
● ピーク時に問題発生○ メンテナンス開け
○ 日をまたぐ0:00
● DBのIOで遅延が発生
- 7 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
負荷対策計画の前提条件
● IOの問題を解決するため書き込みを極力減らす
● ユーザ増加に対しての対策
● 無理のないスケジュールで開発
● 障害のリスクをさげる
● DBの分割
- 10 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
DB分割とは
● DB分割とは○ 物理DB分割により処理を分散する
○ 種類
■ 垂直分割
● テーブル単位で別DBに分割
■ 水平分割
● 同じテーブル別DBに分割
- 11 -
テーブル1テーブル2テーブル3 テーブル1
テーブル3
テーブル2
テーブル1テーブル2テーブル3
テーブル1テーブル2テーブル3
テーブル1テーブル2テーブル3
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
実施内容
- 12 -
● DB書き込みの削減
● スケールアウトする仕組み作り○ webはすでにスケールアウト可能
○ ユーザデータの水平分割を実施
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
水平分割
- 13 -
● 最近のシステムでは当たり前
● KLabでは当時水平分割の仕組みはなかった
● DSASというオンプレミスの環境のスペックが良かった
● KLabで初めての水平分割
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
負荷対策実行計画
● すぐにできる対応○ 書き込みの削減
● 水平分割 1期○ ユーザテーブルの一部水平分割
● 水平分割 2期○ 残ったユーザテーブルの水平分割
- 14 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
行動履歴データとは
● 行動履歴データとは○ ユーザの動向の履歴
● 使い道○ ユーザの調査
● 性質○ サービス上では不要
○ ディレイデータで十分
○ 大量の出力
- 16 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
行動履歴データのファイル出力
- 17 -
DB
WEB WEB WEB WEB
メインDB
行動履歴 行動履歴 行動履歴 行動履歴
行動履歴データ
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
結果
● 書き込み処理は大きく削減された
● 想定以上のユーザの増加でIO問題が再発
● 水平分割にはまだ時間がかかる
● さらにすぐにできる対策が求められた
- 18 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
垂直分割について
● 大きな仕組みの変更は不要
● 接続情報の追加だけ
● 水平分割の対象で使用頻度の高い報酬履歴テーブルを対象とした
● 報酬履歴とは○ ユーザの取得したアイテムの履歴
○ 最大2週間閲覧可能
- 20 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
履歴データの垂直分割
- 21 -
DB 垂直分割
WEB WEB WEB WEB
メインDB
行動履歴データ
報酬履歴
書き込み
書き込み
読み込み
読み込み
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
水平分割 理想像
- 23 -
現状: 理想:
DB 垂直分割
全ユーザ共有ユーザデータ
行動履歴データ
報酬履歴
DB 垂直分割
水平分割
ユーザデータ
行動履歴データ
全ユーザ共有
ユーザデータ
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
水平分割 1期
- 24 -
DB 垂直分割
DB構成
メインDB
行動履歴データ
一部ユーザデータ全ユーザ共有
2期ユーザデータ
水平分割
報酬履歴1期ユーザデータ Empty
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
水平分割 2期
- 25 -
DB 垂直分割
その他データ
行動履歴データ
全ユーザ共有2期ユーザデータ
水平分割
報酬履歴1期ユーザデータ 1期ユーザデータ
2期ユーザデータ
2期ユーザデータ
ユーザデータ ユーザデータ
全ユーザ共有
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
水平分割のメンテナンス時間
● 1期
● 2期
- 26 -
4時間 (160万ユーザ)
3時間 (250万ユーザ)
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
オンプレミス移管
● DSAS環境に相乗り
● DBのスペックはクラウドサービスの3倍以上の性能
● DBのバージョンアップ
● IOの問題は解決
- 28 -
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
その後
- 29 -
● ユーザ数
○ 400万 → 2100万
● webサーバのスケールアウト
○ 34 → 50
● DBサーバのスケールアウト
○ 全ユーザ共有1台○ ユーザDB 3台 → 5台○ 行動履歴 DB1台
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
負荷対策の期間
負荷対策の履歴
- 30 -
2013/06末
2013/09頭
2013/12中
2014/04頭
2014/07中
行動履歴ファイル出力
DB垂直分割
水平分割1期
水平分割2期
オンプレミス移管
負荷問題がない期間
約2年
2016/07頭高負荷
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
2016/07/05
- 31 -
● 大型メジャーアップの対応
● メンテナンス明けで大障害
● この日は不運が重なる
Copyright(C) 2017 Sep10, Inc. All rights Reserved.
まとめ
- 33 -
● 難しく見えるスケールアウトの仕組みもシンプルに対応
● 状況によってアプローチの仕方が変わってくる
● 未来を見据えて対応していると恩恵を受けるときがきます