PowerPoint プレゼンテーション

Similar documents
10年オンプレで運用したmixiをAWSに移行した10の理由

スライド 1

Nintendo Switch(TM)向け プッシュ通知システム 「NPNS」

AWS Deck Template

データマネジメントを取り巻く IT の課題 大規模データの実践的活用に向けて レッドハット株式会社 Senior Solution Architect and Cloud Evangelist 中井悦司 2012/04/13 version1.0

スライド 1

PowerPoint プレゼンテーション

スライド 1

【Cosminexus V9】クラウドサービスプラットフォーム Cosminexus

更新履歴 Document No. Date Comments 次 D JP 2017/05/01 初版 1. 概要 はじめに 情報源 A10 Lightning Application Delivery Service(ADS) 導 構成 動作概要 構築概要 2. 事

PowerPoint プレゼンテーション

INDEX Demo の目的 ゴール Scenario 1: 自動化 Scenario 2: 効率化 2

DMM における会員基盤プラットフォームへのAWS導入から活用事例の紹介

PowerPoint プレゼンテーション

Web 環境におけるレイヤー別負荷の 2 違い DB サーバ AP サーバ 後ろのレイヤーほど負荷が高く ボトルネックになりやすい

PowerPoint プレゼンテーション

平成20年度成果報告書

ナビタイムサービスにおける、Amazon ECS を活用したシステム移行 ~『乗換NAVITIME』での移行事例 ~

各プール内で作成される仮想マシンの台数は 実際の利用者数の状況を観て調整しているが どのプールも の間で設定している また 各プールで使用するデータストアについては 容量が 6TByte のものを8つ用意し 2 つを事務系仮想マシン用のプール 残り 6 つを研究系仮想マシン用のプール

SRA OSS, Inc. のご紹介 1999 年より PostgreSQL サポートを中心に OSS ビジネスを開始 2005 年に現在の形に至る 主なビジネス PostgreSQL, Zabbix などの OSS のサポート コンサルティング 導入構築 PowerGres ファミリーの開発 販売

PowerPoint プレゼンテーション

PowerPoint_template_v1.3.pptx / パワーポイントテンプレート

AWSにおけるデータベース・サービスの活用

Microsoft PowerPoint - CloudBasic-6-cloudservices2.pptx

スライド 1

Automation for Everyone <デモ で実感できる、組織全体で活用できるAnsible Tower>

スライド 1

PostgreSQL による クラスタ構成の可能性 SRA OSS, Inc. 日本支社 取締役支社長 石井達夫

Enterprise Cloud + 紹介資料

モンスターストライクの信頼性を支えるSREの組織化について

AWS Deck Template

アジェンダ はクラウド上でも十分使えます 1. の概要 とは の導入事例 で利用される構成 2. をクラウドで使う クラウドサービスの分類 Amazon Web Services による構成例 2

データベースの近代化:シンプルなクロスプラットフォーム、最小のダウンタイムで実現するクラウド移行

Microsoft PowerPoint VIOPS.ppt

PowerPoint プレゼンテーション

技術レポート 1)QuiX 端末認証と HP IceWall SSO の連携 2)QuiX 端末認証と XenApp の連携 3)QuiX 端末認証 RADIUS オプションと APRESIA の連携 Ver 1.1 Copyright (C) 2012 Base Technology, Inc.

p _

スライド 1

2014 年電子情報通信学会総合大会ネットワークシステム B DNS ラウンドロビンと OpenFlow スイッチを用いた省電力法 Electric Power Reduc8on by DNS round- robin with OpenFlow switches 池田賢斗, 後藤滋樹

PowerPoint Presentation

Microsoft PowerPoint - 4-MySQL50_JDBC_failover.ppt

SinfonexIDaaS機能概要書

スライド 1

スライド 1

延命セキュリティ製品 製品名お客様の想定対象 OS McAfee Embedded Control 特定の業務で利用する物理 PC 仮想 PC や Server 2003 Server 2003 ホワイトリスト型 Trend Micro Safe Lock 特定の業務で利用するスタンドアロン PC

memcached 方式 (No Replication) 認証情報は ログインした tomcat と設定された各 memcached サーバーに認証情報を分割し振り分けて保管する memcached の方系がダウンした場合は ログインしたことのあるサーバーへのアクセスでは tomcat に認証情報

WEBサービス超入門 mask.key

PowerPoint プレゼンテーション

ETOS 画面の Web 化 / 帳票印刷のオープン化体験お試し変換サービスのご紹介 ACOS-4 システムの業務改善提案

Presentation Template Koji Komatsu

Zabbix で PostgreSQL を監視! pg_monz のご紹介 Zabbix Conference Japan 年 11 月 20 日 SRA OSS, Inc. 日本支社マーケティング部

PowerPoint プレゼンテーション

新バージョン! Zabbix 2.2 と検証結果のご紹介 SRA OSS, Inc. 日本支社山本博之 Copyright 2013 SRA OSS, Inc. Japan All rights reserved. 1

Microsoft Word - JP-AppLabs-MySQL_Update.doc

今さら聞けない!? Oracle入門 ~前編~

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

D. Amazon EC2 のインスタンスストアボリュームへ 1 時間ごとに DB のバックアップ取得を行うと共に Amazon S3 に 5 分ごとのトランザクションログを保管する 正解 = C 会社のマーケティング担当ディレクターから " 何気ない親切 " と思われる善行を目にしたら 80 文字

Microsoft PowerPoint - AWS紹介-VIOPS2 [互換モード]

版 HinemosVM クラウド管理機能のご紹介 NTT データ先端技術株式会社 2019 NTT DATA INTELLILINK Corporation

Oracle Cloud Adapter for Oracle RightNow Cloud Service

Mobile Access簡易設定ガイド

クラウド開発者のためのCloud Design Pattern 入門

PowerPoint Presentation

<4D F736F F F696E74202D E656D6F73837D836C815B C B CC90DA91B182CC8E DD82F0979D89F082B582E682A F38DFC E >

WebOTX V6 JDBCアプリケーションのトラブルシューティング(JDBCデータソース)

Apache Arrow 須藤功平株式会社クリアコード RubyData Tokyo Meetup Apache Arrow Powered by Rabbit 2.2.2

2ACL DC NTMobile ID ACL(Access Control List) DC Direction Request DC ID Access Check Request DC ACL Access Check Access Check Access Check Response DC

セミナースライド

目次 1. はじめに SSL 通信を使用する上での課題 SSL アクセラレーターによる解決 SSL アクセラレーターの導入例 SSL アクセラレーターの効果... 6 富士通の SSL アクセラレーター装置のラインナップ... 8

Windows GPO のスクリプトと Cisco NAC 相互運用性

スライド 1

OSS Mtg

セッション概要抜粋 フィーチャーフォンからスマートフォンへ 携帯 WEBコンテンツからソーシャルゲームへ オンプレミスからAWSへ ソーシャルゲームの事例を元に AWSのポイントや苦労した点なども赤裸々に語ります コンテンツの変化にバンダイナムコゲームスがどう適応してきたのかをお伝えします ハードル

スライド 1

バッチ処理にバインド変数はもうやめません? バッチ処理にバインド変数はもうやめません?

Incapsula を選択する理由 高速かつ高コストパフォーマンスのスケーラビリティを実現するクラウド ベースのロードバランサ アプリケーション パフォーマンスを向上させ サーバ負荷を軽減する最適なトラフィック配分 クライアント クラシフィケーションによるボットの特定および標的のリルート 簡単な D

よくある問題を解決する~ 5 分でそのままつかえるソリューション by AWS ソリューションズビルダチーム

2017/8/2 HP SiteScope software 監視機能対応表 この監視機能対応表は HP SiteScope software v11.33) に対応しています モニタ モニタ説明 モニタ説明 SiteScope for Windows SiteScope for Linux ネット

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

<4D F736F F D FC8E448FEE95F1837C815B835E838B C8F92E88B608F912E646F63>

V8_教育テキスト.dot

mysql56_load_r2

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

Leveraging Cloud Computing to launch Python apps

PowerPoint プレゼンテーション

<4D F736F F D208DCC91F088C48C8F955D89BF8F915F8DA196E5504A>

久原本家グループ本社

Rmenuフレームワーク

Microsoft PowerPoint - AS400オープン化概説(要約).ppt

Startup_on_AWS_usecases_StartupDay

レーベルゲート音楽配信プラットフォームと AWS Snowball を利用したデータ移行

ングにその条件をセットします そうすれば Amazon EC2 インスタンスが 2 つ未満になったことを検出すると 自動的に必要な数の EC2 インスタンスをオートスケーリンググループに追加します もう一つの例をあげましょう もしインスタンスのどれか一つのレイテンシーが 15 分間にわたって 4 秒

X-MON 3.2.0

Arcserve Replication/High Availability 製品の仕組み

SpringSecurity

TFTP serverの実装

CloudnPaaS提案書

サーババンドル版ライセンス NX7700x シリーズ Express5800 シリーズのサーバと同時に購入することで パッケージ製品よりも安価 に導入することのできるライセンスも提供しています ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよ

PowerPoint Presentation

untitled

Transcription:

大規模環境における Ruby on Rails on AWS での最適化事例 ~ 200ms 100ms への歩み ~ 2018/06/01 AWS Summit 2018 株式会社アカツキエンジニア長井昭裕 1

自己紹介 長井昭裕 (Akihiro Nagai) 経歴: 2016年にアカツキに入社 モバイルゲームの インフラ構築 運用(AWS, GCP), サーバサイドアプリケーション開発(Rails), 開発環境整備, 分析基盤構築, その他諸々を担当 趣味は (2017年実績 318食/年) 2

とある日のバージョンアップ バージョンアップ 平均レスポンスタイム 200ms 100ms! 3

4

モバイルゲームのサーバサイドにおいて いかにしてこのような高速化を実現し その結果どのようなメリットがあったかご紹介いたします 5

アジェンダ 高速化の意義 モバイルゲームにおけるサーバサイドの役割 インフラ構成 大規模環境下でのRuby on Rails 高速化事例 まとめ 6

高速化の意義 7

我々はなぜ高速化するのか レスポンスタイムの高速化はいかなる場合も正義 UXの向上 ストレス低減 定着率の改善 インフラの高集約化 キャパシティの増加 低コスト化 高速化はユーザ プロバイダともにメリットがある 8

モバイルゲーム運用中頻出のアクセススパイク requests/min キャンペーン & イベント開始 新しいイベントのオープンやキャンペーン開始とともに ユーザが急増するといった現象は日常茶飯事 高速化によるキャパシティ担保は使命 9

今回の高速化のターゲット 運用開始して数年経つモバイルゲームのサーバサイドアプリケーション Webフレームワークとして Ruby on Rails を採用 AWS 上で動作 (EC2 + RDS + Elasticache 等を利用 ) 一般的な高速化はやりつくされている N+1クエリの撲滅 DBからの大量レコード取得回避 DBへの適切なindex 設計...etc 10

Ruby on Rails 非常に有名な Web フレームワーク 高い生産性と柔軟性を持つ スモールスタートできるためスタートアップでの採用が多い 反面 一般に大規模環境向けではない 高速ではないと言われている Ruby on Rails を用いたシステムが AWS 上で大規模にスケールアウトし かつ高速に動作することが可能であることをお伝えします 11

モバイルゲームにおけるサーバサイドの役割 12

モバイルゲームにおけるサーバサイドの役割 APIサーバとして動作 クライアントへのゲームデータ返却 - 現在チャレンジ可能なイベント一覧 & イベントの内容 ゲームロジックの計算 - ログインボーナスやミッションの達成条件判定 ユーザデータの管理 - イベントの達成状況管理 - ユーザの所持アイテム管理 etc ユーザが何かアクションをする度にサーバサイドとの通信が必要 レスポンスタイムの長短はUXに大きく関わる 13

モバイルゲームのサーバサイド高速化における技術的課題 ユーザデータが大量である - ユーザが持つキャラクタ数百体 & キャラクタの育成状態 - イベント数百個のクリア状況...etc ゲームロジックが複雑である - このイベントは 別のイベントA,Bをクリアしていないと挑戦不可 - このミッションは特定のキャラクタを編成し かつ特定のアイテムを使用した場合にのみ達成...etc Write intensive な特性である - アイテムの取得 経験値の獲得...etc 逐一書き込みが発生 - キャッシュを並べてスケールアウトといった戦略は採りづらい 高速化は一筋縄ではいかない 14

インフラ構成 15

インフラ構成 Load Balancer Auto Scaling group EC2 RDS (Aurora) RDS (MySQL) Elasticache Elasticache Master Read Replicas Shard01 ShardXX Master DB User DB Memcached Redis 16

インフラ構成: 各データストアの役割 Load Balancer EC2 Auto Scaling group イベント情報等の ゲームデータを格納 ユーザが所持してい るアイテム等の ユーザ資産を格納 RDS (Aurora) Master セッションや レスポンスキャッシュ等 揮発して問題ないデータ RDS (MySQL) Read Replicas Master DB Shard01 ランキングや永続化 したいキャッシュ等 Elasticache Elasticache ShardXX User DB Memcached Redis 17

インフラ構成: スケールアウト戦略 Master DB (RDS Aurora MySQL) Load Balancer Read Replica を増やすことで スケールアウト Read intensive な特性 EC2 Auto Scaling group RDS (Aurora) Master RDS (MySQL) Read Replicas Master DB Shard01 Elasticache Elasticache ShardXX User DB Memcached Redis 18

インフラ構成: スケールアウト戦略 User DB (RDS MySQL Multi-AZ) 水平分割 Load Balancer Write intensive な特性 異なる種類のユーザ情報間でJoin したいため 1ユーザの情報は EC2 Auto Scaling group 1shard内に収める RDS (Aurora) Master RDS (MySQL) Read Replicas Master DB Shard01 Elasticache Elasticache ShardXX User DB Memcached Redis 19

インフラ構成: スケールアウト戦略 Cache (Elasticache Memcached / Redis) 垂直 水平分割 Load Balancer 用途別キャッシュクラスタ コンシステントハッシュ法での EC2 Auto Scaling group RDS (Aurora) Master key分散 キャパシティを担保 RDS (MySQL) Read Replicas Master DB Shard01 Elasticache Elasticache ShardXX User DB Memcached Redis 20

インフラ構成 : 規模 数十万 ~ 百数十万 rpm Load Balancer Auto Scaling group EC2 c4.8xlarge * 数十台 r4.8xlarge * 数台 r4.4xlarge * 数十台 m4.2xlarge, r3.xlarge 混在数十台 RDS (Aurora) RDS (MySQL) Elasticache Elasticache Master Read Replicas Shard01 ShardXX Master DB User DB Memcached Redis 21

高速化の実践 22

今回の高速化のターゲット ( 再掲 ) 運用開始して数年経つモバイルゲームのサーバサイドアプリケーション Webフレームワークとして Ruby on Rails を採用 AWS 上で動作 (EC2 + RDS + Elasticache 等を利用 ) 一般的な高速化はやりつくされている N+1クエリの撲滅 DBからの大量レコード取得回避 DBへの適切なindex 設計...etc 23

高速化①: ActiveRecordの実行時間短縮 ActiveRecord は Rails が 採用しているRuby製ORM ~30ms AZ間の通信 オーバヘッドでした ~15ms 24

EC2 RDS 間の通信距離 Load Balancer Auto Scaling group EC2 RDS (Aurora) RDS (MySQL) Elasticache Elasticache Master Read Replicas Shard01 ShardXX Master DB User DB Memcached Redis 25

異なるAZ間の通信距離 AWSデザインパターンとして 対障害性担保のため 複数AZにインスタンスを配置 することが推奨されている しかし 異なるAZ間のRTTは 同一AZ内のものより数倍大きい 約0.2ms 十数回 約2.5ms 十数回 ActiveRecordを使っていると 1トランザクション内で複数の クエリを発行することになるため この差は無視できないものとなる Read Replicas AZ ap-northeast-1a AZ ap-northeast-1c 26

同一AZへの優先的なクエリ発行 AWSデザインパターンとして 対障害性担保のため 複数AZにインスタンスを配置 することを推奨している しかし 異なるAZ間のRTTは 同一AZ内のものより数倍大きい 約0.2ms 十数回 約0.2ms 十数回 Read Replicas AZ ap-northeast-1a AZ ap-northeast-1c ActiveRecordを使っていると 1トランザクション内で複数の クエリを発行することになるため この差は無視できないものとなる 可能な限り同一AZにあるDBへ クエリ発行を行うことで レスポンスタイムの高速化を実現 27

同一AZへの優先的なクエリ発行(縮退時) DBの障害が発生した際の再接続先 も同一AZ内のインスタンスにする と 負荷の偏りが生じ 連鎖的な 障害を起こす可能性がある Read Replicas AZ ap-northeast-1a AZ ap-northeast-1c 28

同一AZへの優先的なクエリ発行(縮退時) DBの障害が発生した際の再接続先 も同一AZ内のインスタンスにする と 負荷の偏りが生じ 連鎖的な 障害を起こす可能性がある 負荷の偏りが 発生 同一AZのDBへ 再接続 Read Replicas AZ ap-northeast-1a AZ ap-northeast-1c 29

同一AZへの優先的なクエリ発行(縮退時) DBの障害が発生した際の再接続先 も同一AZ内のインスタンスにする と 負荷の偏りが生じ 連鎖的な 障害を起こす可能性がある 縮退時は同一AZへの優先的な接続 をやめ ランダムでインスタンス を選ぶことで負荷分散をする 縮退時は 負荷分散を優先 Read Replicas AZ ap-northeast-1a AZ ap-northeast-1c 高速化だけでなくシステムの信頼性 を維持することも忘れてはならない 30

同一 AZ への優先的なクエリ発行の結果 平均レスポンスタイム 15ms 短縮! 信頼性も犠牲にしない! ~30ms ~15ms 31

高速化②: Middleware部分の実行時間短縮 Middlewareで妙に 時間がかかっている... DBコネクションの 死活監視が原因でした 32

Rails における DB のコネクション管理 Rails Application logic Request Rails では DB のコネクションをプーリングしており 必要に応じてプールからコネクションが返却される Connection pool 33

RailsにおけるDBのコネクション管理 Request Rails Application logic process check out Rails ではDBのコネクション をプーリングしており 必要に応じてプールから コネクションが返却される check in Connection pool 34

RailsにおけるDBのコネクション管理 Request Rails Application logic process check in check out Connection pool Rails ではDBのコネクション をプーリングしており 必要に応じてプールから コネクションが返却される プールからは生きたコネク ションを返却するため 事前に ping が疎通する ことを確認している コネクションが切れる要因 Failover WaitTimeout どれもレアケース 疎通確認 ping 全リクエスト疎通確認する 必要は無い 35

RailsにおけるDBのコネクション管理 Request Rails Application logic process check in check out Connection pool 最後の疎通確認 から30秒間は ping を抑止する Rails ではDBのコネクション をプーリングしており 必要に応じてプールから コネクションが返却される プールからは生きたコネク ションを返却するため 事前に ping が疎通する ことを確認している コネクションが切れる要因 Failover WaitTimeout どれもレアケース ping 全リクエスト疎通確認する 必要は無い 36

RailsにおけるDBのコネクション管理 Request @大規模環境 Rails デフォルトでは Rails は複数の DBを扱うことができないため Octopusというライブラリを 利用している Application logic process check in check out 実装の関係上 check out 時 すべてのDBに ping を送ってしまう Octopus Connection pool ping Connection pool ping... ping 数十台 37

RailsにおけるDBのコネクション管理 Request @大規模環境 Rails Application logic process check in check out 今回の対策で 不要な ping が 抑止され Octopus Connection pool Connection pool 数ms 数十台 のオーバヘッド の削減に成功 ping ping... ping 数十台 38

DBの死活監視抑制の結果 平均レスポンスタイム 50ms短縮 39

ちなみに... この問題は Rails upstream でも議論されていて SpotifyやGroupon でも課題になっているようです https://github.com/rails/rails/pull/27651 40

ここまでの高速化の効果 変更内容同一 AZへの優先的なクエリ発行 DBへの過剰な死活監視抑止計 効果 15ms 50ms 65ms 100ms 削減までの残りは 地道なアプリケーションの最適化 41

アプリケーション最適化 ~100ms ~65ms 42

アプリケーションの最適化 Load Balancer EC2 Auto Scaling group RDS (Aurora) Master キャッシュを 積極的に活用する RDS (MySQL) Read Replicas Master DB Shard01 Elasticache Elasticache ShardXX User DB Memcached Redis 43

高速化事例: フレンド機能の高速化 フレンド機能とは 他ユーザの一部キャラクタを自分のキャラクタ のようにイベントに連れ出せる機能 モバイルゲームではよく見られる 技術的な課題 キャラクタデータを保持しているUserDBは 水平分割されている キャラクタ1体あたりのデータ量が多い 候補としてリストアップするフレンドが多い キャッシュを活用 44

フレンド機能の高速化 Load Balancer 全shardに分散した 他ユーザのキャラクタ情報 にアクセスが必要 EC2 Auto Scaling group RDS (Aurora) Master RDS (MySQL) Read Replicas Master DB Shard01 数十台 User DB Elasticache Elasticache ShardXX Memcached Redis 45

フレンド機能の高速化 Load Balancer フレンド機能として 必要になる情報のみ キャッシュにコピー EC2 Auto Scaling group copy RDS (Aurora) Master RDS (MySQL) Read Replicas Master DB Shard01 数十台 User DB Elasticache Elasticache ShardXX Memcached Redis 46

フレンド機能の高速化 Load Balancer フレンド情報の 読み込みは キャッシュから EC2 Auto Scaling group RDS (Aurora) Master RDS (MySQL) Read Replicas Master DB Shard01 数十台 User DB Elasticache Elasticache ShardXX Memcached Redis 47

フレンド機能の高速化 Load Balancer キャラのレベルアップ等 フレンド機能に必要な変更は キャッシュにも随時反映 EC2 Auto Scaling group RDS (Aurora) Master RDS (MySQL) Read Replicas Master DB Shard01 数十台 Elasticache Elasticache ShardXX 900ms 300ms へ高速化 User DB Memcached Redis 48

高速化の結果 変更内容同一 AZへの優先的なクエリ発行 DBへの過剰な死活監視抑止アプリケーションの最適化計 効果 15ms 50ms 35ms 100ms 約 100ms の平均レスポンスタイム短縮に成功! EC2 の台数が約 2/3 へ 年間数千万円の削減 リージョン間の通信費も約 2/3 に 年間数百万円の削減 より良い UX を提供しながらコスト削減にも成功 これこそが高速化の効果 AWSエンタープライズサポートのおかげです 49

まとめ AWS 上で大規模にスケールアウトした Ruby on Rails アプリケーションの高速化事例について紹介しました 対障害性を犠牲にせず同一 AZ 内の通信を優先的に行う コネクションの死活監視といったミドルウェアレベルでの挙動最適化 インフラの特性を活かしたアプリケーションの最適化 このような最適化を継続していくことで Ruby on Rails の高い生産性 柔軟性を活かしながらも大規模かつ高品質なサービスを コストを抑えながら提供することができます 50

備考 : 使用しているソフトウェア サービスの詳細 種別 Webフレームワーク Ruby on Rails 4.2.10 言語 Ruby 2.3.5 アプリケーションサーバ Unicorn 5.3.1 RDB Sharding ライブラリ Octopus 0.8.4 RDBMS キャッシュ APM Aurora MySQL 5.6.10a MySQL 5.6.35 (RDS) Memcached 1.4.34 (Elasticache) Redis 2.8.24 (Elasticache) NewRelic 51

ご清聴ありがとうございました 52