SlideShare a Scribd company logo
Submit Search
Upload
GREE 流!AWS をお得に使う方法
Report
gree_tech
gree_tech
Follow
•
4 likes
•
5,648 views
1
of
73
GREE 流!AWS をお得に使う方法
•
4 likes
•
5,648 views
Download Now
Download to read offline
Report
Technology
AWS Summit Tokyo 2016 Developers Conferenceにて発表した資料です。 http://www.awssummit.tokyo/devcon/index.html
Read more
gree_tech
gree_tech
Follow
Recommended
20220314 Amazon Linux2022 をさわってみた
Masaru Ogura
2.3K views
•
22 slides
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
NTT DATA Technology & Innovation
3.6K views
•
31 slides
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Preferred Networks
2K views
•
47 slides
AKS と ACI を組み合わせて使ってみた
Hideaki Aoyagi
3.1K views
•
23 slides
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
Amazon Web Services Japan
58.1K views
•
73 slides
[社内勉強会]ELBとALBと数万スパイク負荷テスト
Takahiro Moteki
29.4K views
•
72 slides
More Related Content
What's hot
Linux女子部 systemd徹底入門
Etsuji Nakai
137.8K views
•
50 slides
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
56.6K views
•
64 slides
Amazon DynamoDBの紹介と東急ハンズでの活用について
Taiji INOUE
13.5K views
•
30 slides
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
4.2K views
•
36 slides
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
1.6K views
•
37 slides
Docker Compose 徹底解説
Masahito Zembutsu
61.1K views
•
123 slides
What's hot
(20)
Linux女子部 systemd徹底入門
Etsuji Nakai
•
137.8K views
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
•
56.6K views
Amazon DynamoDBの紹介と東急ハンズでの活用について
Taiji INOUE
•
13.5K views
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
•
4.2K views
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
NTT DATA Technology & Innovation
•
1.6K views
Docker Compose 徹底解説
Masahito Zembutsu
•
61.1K views
AWSのログ管理ベストプラクティス
Akihiro Kuwano
•
77.2K views
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
Masahito Zembutsu
•
82.3K views
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
•
8.9K views
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
NTT DATA Technology & Innovation
•
12K views
Gaming on aws 〜ゲームにおけるAWS最新活用術〜
Amazon Web Services Japan
•
5.9K views
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Game Tools & Middleware Forum
•
5.9K views
ぱぱっと理解するSpring Cloudの基本
kazuki kumagai
•
19.8K views
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
•
42.5K views
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
•
140.3K views
Zabbix概論
真乙 九龍
•
8.2K views
AWS X-Rayによるアプリケーションの分析とデバッグ
Amazon Web Services Japan
•
8.3K views
20191009 AWS Black Belt Online Seminar Amazon GameLift
Amazon Web Services Japan
•
5K views
NTTデータ流Infrastructure as Code~ 大規模プロジェクトを通して考え抜いた基盤自動化の新たな姿~(NTTデータ テクノロジーカンフ...
NTT DATA Technology & Innovation
•
10K views
Spanner移行について本気出して考えてみた
techgamecollege
•
1.6K views
Similar to GREE 流!AWS をお得に使う方法
AWS Dev Day Tokyo 2018 | Amazon DynamoDB Backed なテレコムコアシステムを構築・運用してる話
SORACOM,INC
14.9K views
•
65 slides
20180207 AWS blackbelt online seminar Amazon Workspaces
Amazon Web Services Japan
2.2K views
•
75 slides
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
Amazon Web Services Japan
4.9K views
•
75 slides
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
Amazon Web Services Japan
2.1K views
•
49 slides
コスト削減から考えるAWSの効果的な利用方法
Aya Komuro
7.6K views
•
36 slides
Lv1から始めるWebサービスのインフラ構築
伊藤 祐策
70.1K views
•
112 slides
Similar to GREE 流!AWS をお得に使う方法
(20)
AWS Dev Day Tokyo 2018 | Amazon DynamoDB Backed なテレコムコアシステムを構築・運用してる話
SORACOM,INC
•
14.9K views
20180207 AWS blackbelt online seminar Amazon Workspaces
Amazon Web Services Japan
•
2.2K views
AWS Black Belt Online Seminar 2018 Amazon WorkSpaces
Amazon Web Services Japan
•
4.9K views
20161027 hadoop summit Generating Recommendations at Amazon Scale with Apach...
Amazon Web Services Japan
•
2.1K views
コスト削減から考えるAWSの効果的な利用方法
Aya Komuro
•
7.6K views
Lv1から始めるWebサービスのインフラ構築
伊藤 祐策
•
70.1K views
AWS Black Belt Online Seminar 2017 Amazon DynamoDB
Amazon Web Services Japan
•
146.4K views
現場開発者視点で答えるWindows Azure
Keiichi Hashimoto
•
1.8K views
AWS初心者向けWebinar AWSでBig Data活用
Amazon Web Services Japan
•
15.4K views
Amazon Web Services 最新事例集
SORACOM, INC
•
2.6K views
AWSのNoSQL入門
Akihiro Kuwano
•
13.1K views
Amazon Redshift パフォーマンスチューニングテクニックと最新アップデート
Amazon Web Services Japan
•
13.9K views
Modernizing Big Data Workload Using Amazon EMR & AWS Glue
Noritaka Sekiyama
•
918 views
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
Google Cloud Platform - Japan
•
657 views
初心者向け負荷軽減のはなし
Oonishi Takaaki
•
11.6K views
乗り遅れるな!IBMが本気で取り組む新世代クラウドサービスを徹底解説
Kimihiko Kitase
•
1.9K views
HTML5J AWS でできるIoT
Toshiaki Enami
•
2.5K views
AIやマイクロサービスを活用したDynamoDB節約術
gree_tech
•
2.4K views
Amazon Web Services の本気がみたいか !? スピードと高可用性を両立したゲームインフラの構築と事例
Amazon Web Services Japan
•
15.1K views
クラウドTCOの真実
SORACOM, INC
•
12.7K views
More from gree_tech
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
725 views
•
36 slides
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
gree_tech
229 views
•
13 slides
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
gree_tech
1K views
•
18 slides
アプリ起動時間高速化 ~推測するな、計測せよ~
gree_tech
1.9K views
•
84 slides
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech
347 views
•
116 slides
Cloud Spanner をより便利にする運用支援ツールの紹介
gree_tech
680 views
•
31 slides
More from gree_tech
(20)
アナザーエデンPC版リリースへの道のり 〜WFSにおけるマルチプラットフォーム対応の取り組み〜
gree_tech
•
725 views
GREE VR Studio Laboratory「XR-UX Devプロジェクト」の成果紹介
gree_tech
•
229 views
REALITYアバターを様々なメタバースで活躍させてみた - GREE VR Studio Laboratory インターン研究成果発表
gree_tech
•
1K views
アプリ起動時間高速化 ~推測するな、計測せよ~
gree_tech
•
1.9K views
長寿なゲーム事業におけるアプリビルドの効率化
gree_tech
•
347 views
Cloud Spanner をより便利にする運用支援ツールの紹介
gree_tech
•
680 views
WFSにおけるCloud SpannerとGKEを中心としたGCP導入事例の紹介
gree_tech
•
594 views
SINoALICE -シノアリス- Google Cloud Firestoreを用いた観戦機能の実現について
gree_tech
•
626 views
海外展開と負荷試験
gree_tech
•
593 views
翻訳QAでのテスト自動化の取り組み
gree_tech
•
304 views
組み込み開発のテストとゲーム開発のテストの違い
gree_tech
•
571 views
サーバーフレームワークに潜んでる脆弱性検知ツール紹介
gree_tech
•
209 views
データエンジニアとアナリストチーム兼務になった件について
gree_tech
•
308 views
シェアドサービスとしてのデータテクノロジー
gree_tech
•
432 views
「ドキュメント見つからない問題」をなんとかしたい - 横断検索エンジン導入の取り組みについて-
gree_tech
•
1K views
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
gree_tech
•
1.1K views
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
•
691 views
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
gree_tech
•
2.9K views
「やんちゃ、足りてる?」〜ヤンマガWebで挑戦を続ける新入りエンジニア〜
gree_tech
•
395 views
法人向けメタバースプラットフォームの開発の裏側をのぞいてみた(仮)
gree_tech
•
750 views
Recently uploaded
テストコードってすごい.pptx
cistb220msudou
72 views
•
16 slides
01Booster Studio ご紹介資料
ssusere7a2172
209 views
•
19 slides
概念モデリングワークショップ 設計編
Knowledge & Experience
10 views
•
37 slides
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
6 views
•
34 slides
DLゼミ: MobileOne: An Improved One millisecond Mobile Backbone
harmonylab
41 views
•
30 slides
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
208 views
•
33 slides
Recently uploaded
(10)
テストコードってすごい.pptx
cistb220msudou
•
72 views
01Booster Studio ご紹介資料
ssusere7a2172
•
209 views
概念モデリングワークショップ 設計編
Knowledge & Experience
•
10 views
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
Knowledge & Experience
•
6 views
DLゼミ: MobileOne: An Improved One millisecond Mobile Backbone
harmonylab
•
41 views
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
208 views
JJUG CCC.pptx
Kanta Sasaki
•
6 views
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
NTT DATA Technology & Innovation
•
157 views
さくらのひやおろし2023
法林浩之
•
76 views
概念モデリングワークショップ 基礎編
Knowledge & Experience
•
19 views
GREE 流!AWS をお得に使う方法
1.
+ AWS Summit Tokyo 2016 GREE流!AWSをお得に使う方法
2.
メンバー紹介 神谷侑司・今井祐介 ゲームアプリ開発 storageのコスト削減と効率的な利用 籠島啓介
広告システム開発 大量のログをなるべく安く簡単にさばく方法 堀口真司 ゲームインフラ運用 インフラツールもサーバレスで安く
3.
Agenda ・Service & System
Overview ・Amazon DynamoDBの話 ・なぜ導入したのか ・利用するメリット ・コストを抑えつつ利用するには ・開発事例からみるコストを抑えるためのTips ・実際に運用してみて出てきた問題&課題 ・Throttled & Partitions ・コストをおさえながら可用性を上げるには ・Dynamic Dynamo 導入&メリット ・Dynamic Dynamo Tips ・Amazon RDSの話 ・Amazon Auroraを使ってコスト削減
4.
Service Overview ソーシャルゲーム(ネイティブアプリ)
時間帯やイベント期間による負荷の差が大きい web server: 12 ~ 50台 access: 3000 ~ 30000 / min RPG 自分の町を開拓してリソースを獲得しバトルによって得た報酬でプレ イヤーを強くしていく 一週間で数種類のイベントを開催 イベントの種類によって 負荷は異なる
5.
Dynamic Data (Memcached) ELB Dynamic Data RDS
(MySQL) iOS Android PHP Application server (HHVM) Amazon EC2 (Auto scaling) APC cache Dynamic Data (Amazon DynamoDB) DB Async System Overview ... ... Static Data RDS (MySQL) HTTP
6.
System Overview Application Servers Memcached
layer MySQL Async Writer synchronous write async write Application Servers Amazon DynamoDB Current synchronous read 2015年秋頃から既存の一部機能をこちらの構成 に移行し、新規機能の開発時はdynamoを利用し た構成で開発 Amazon RDS Amazon ElastiCache
7.
Amazon DynamoDB移行の動機 古い構成の問題点:複数プレイヤーが同じデータへ同時に書き込む際の競合 memcached {“id”: 1,
“point”: 100} playerA {“id”: 1, “point”: 200} playerB {“id”: 1, “point”: 300} get update update casで失敗 memcachedでplayerデータのjsonを保持していたため、以下の様な競合が発生しやすかっ た
8.
Amazon DynamoDBのメリット atomic
counterによる差分save 値の変化分を指定して更新しているため、数値の更新が競合しない Numberの更新の場合、casという操作自体が不必要 dynamoDB {“id”: 1, “point”: 100} playerA {“id”: 1, “point”: 200} playerB {“id”: 1, “point”: 300} get point: +200 point: +100
9.
Amazon DynamoDBのメリット conditional
saveによる条件指定 item内の特定の属性の値が指定した条件に合致する場合だけ更新 例えば、ゲーム中で ●アイテムAを早いもの勝ちで10個まで買える(1人当たり最大3個) のようなルールを実現する場合は以下のようにするだけ item_id: N, count: N, // 購入時にcountを increment item定義 UpdateItem count: +1 when: count < 10 conditional save
10.
Amazon DynamoDBのメリット read/writeの負荷の大きさ=コスト大きさ 負荷を減らせばコストも減り、 その効果はaws consoleですぐに確認できる! なので
コスト可視化 Read/writeの上限は設定したThroughput Capacityによって制限 Throughput Capacityの大きさによって料金が決まる
11.
Amazon DynamoDBのコスト write:
$0.0065 10unit / hour read : $0.0065 50unit / hour storage size: $0.25 / (GB*month) つまり writeはreadの10倍(結果整合性のあるreadと比較) storage容量分は小さい writeのthroughputを小さく保つことが重要
12.
コスト削減の実例 1. write capacityを抑える
deleteせずに済むならしない secondary indexをみだりに使わない 2. read capacityを抑える randomにitem取得
13.
Write時に消費されるCapacity PutItem, UpdateItem,
DeleteItem, BatchWriteItemの実行で消費される 消費capacity = ceil(操作するitemのデータ量 / 1KB) Tips ●BatchWriteItemは並列に書き込めるだけで消費capacityは変わらないので注意 ○latencyの低減に役立つがコストの削減にはならない writeはitemにつき最低1unit必ず消費する
14.
コスト削減の実例 1. write capacityを抑える
deleteせずに済むならしない secondary indexをみだりに使わない 2. read capacityを抑える randomにitem取得
15.
例えば、historyのようなデータを考える ユーザのアクセス毎にPutItem 表示に必要なデータは最新の100件だけ 100件を超えた分を毎回deleteするのが簡単だがwrite
capacityの消費UP アクセス増大時のwrite負荷がさらに大きくなってしまう Deleteせずに済むならしない バッチで非同期にdeleteする or 定期的に新しいテーブルを作成する設計
16.
コスト削減の実例 1. write capacityを抑える
deleteせずに済むならしない secondary indexをみだりに使わない 2. read capacityを抑える randomにitem取得
17.
IndexとWrite Capacity 射影されている属性に変化があった場合 indexへの書き込みに必要分のcapacityが消費される indexの個数をnとすると消費されるcapacityは(n+1)倍となる write capacityが数倍になるだけの価値があるか検討すべき つまり全属性を射影していた場合
18.
例えば 以下のようなitemを保持するテーブルがあったとする read時にitemを絞りこまなくとも問題ないのであれば、 indexを張ってwriteが2倍となるよりも全件取得の方がよい (コストのみについて考えるならば) player_id : N
(hash key) some_id : N (range key) filter_key: S … ※アプリ側ではfilter_keyによってfilterした結果がほしい
19.
コスト削減の実例 1. write capacityを抑える
deleteせずに済むならしない secondary indexをみだりに使わない 2. read capacityを抑える randomにitem取得
20.
ランダムに結果を取得する 要求:あるイベントに参加しているユーザをランダムに取得する 単純な方法 ● 全ユーザ分のitemを取得してアプリ側でfilterをかける ex. itemの大きさ:100B、ユーザ数:10,000、Queryを利用 100B
* 10,000 / 4KB = 250uu ※Queryで消費されるcapacity = ceil(read総量 / 4KB) ユーザ数が多くなれば現実的ではない
21.
ランダムに結果を取得する 以下のようなkeyを定義し範囲指定で取得 event_id : N
(hash key) player_id : N (range key) random_id:N (local secondary index) … ※実際はpartition分割への対策のためhash_keyはもう少し複雑 ●UpdateItemの際にrandom_idも更新 ●item取得時は以下のようなQueryを発行 ○random_id < 乱数値 ○limit 10 消費されるcapacityが抑えられる上、 ランダムに取得する処理をコードとして書く必要がない
22.
まとめ 1. write capacityを抑える
deleteせずに済むならしない secondary indexをみだりに使わない 2. read capacityを抑える randomにitem取得 read/writeのアクセス数を算出し、必要な場合だけindexを利用する 負荷が膨大にならないのであればreadに負荷を寄せるのも一つの手
23.
Amazon DynamoDBで実際に運用し てみて出てきた問題・課題
24.
Amazon DynamoDBで実際に運用してみて出てきた課題 Throttling発生問題 Throughput
Capacityを超えるThroughputが発生した時に400 ProvisionedThroughputExceededException が返ってくる ただし、過去5分間の空きThroughputを貯蓄するBurst機能で一時的に カバーしてくれる AWS SDK側で再送信してくれるが一定回数を超えると処理を失敗 Throttlingしてしまった状態正常な状態
25.
Amazon DynamoDB Partitioning ●データ容量やThroughput
CapacityによってPartition分割される ●ルール ●例 ●注意点 ○HotkeyがあるとThrottlingしやすくなる ○Scanすると分割前よりThrottlingしやすくなる ○( Read Capacity / 3,000 ) + ( Write Capacity / 1,000 ) ○10G毎に分割される ○CEIL(MAX(read:2000 + write:333, size:9G) = 1 ○CEIL(MAX(read:2000 + write:334, size:9G) = 2 ○Capacityも分割される ○一度割れたら戻らない
26.
Hot Key/PartitionによりThrottlingが発生 Partition分割されているTableで、Throughputが一つのPartitionに集中して Throughput Capacityを超えてしまった Throughput
Capacity超えてないように見えるがThrottlingしてしまった状態 Partition数 : 30 Write Capacity : 900 Partition毎のCapacity : 30 Amazon DynamoDBで実際に運用してみて出てきた課題
27.
Amazon DynamoDB Partitions
- Hot Key/Partition Issue Hot Keys/Partition問題 ●一つのPartitionにアクセスが集中することで、そのPartitionで Throttlingが発生しサービスに影響が出しまう。 基本 ●Table設計時にkeyが均等にアクセスされるようにする
28.
Hot Key/Partition Issue
- どう対応したか (その1) ● 問題 Tableサイズ増加でPartitionが細かく割れてしまい少しの偏りでThrottlingが発生 ● 対応 ○費用を考えるとCapactiyを上げたくはない ○アーカイブ用Tableを作りそこにBatchで少しずつ移動していった ○古いDataを同時に取得することがなくなったのでThrottlingが減った
29.
Hot Key/Partition Issue
- どう対応したか (その2) ● 問題 一部のKeyの読み込みが非常に激しくThrottlingしていた ● 対応 Memcached / APC cache等に読み込みをキャッシュ NoSQLとはいえAmazon DynamoDBはThroughput毎にお金がかかるた め Cacheに載せたほうが安い ※Amazon DynamoDBの仕様上1 Parititionの利用可能な最大Read Throughputは6000 units/秒
30.
Hot Key/Partition Issue
- どう対応したか (その3) • 問題 一部のKeyの書き込みが非常に激しくThrottlingしていた • 対応 TableをShardingして、Writeを複数Tableに分散させた ※読み込み時は複数TableからDataを取る必要がある ※Amazon DynamoDBの仕様上1 Parititionの利用可能な最大 Write Throughtputは 1000 units/秒
31.
Amazon DynamoDB Throughput
Bursting - 気をつける事 ● 過去5分間の空きThroughputを貯蓄してくれる。(急激な上昇への対策) ただしBurst機能は常に保証していないので前提にしてはならない ● Capacityを上げる時等バックグラウンド処理が走るとThrottlingされた 事も(GSI生成/Partition分割時等)
32.
可用性を維持しながらコストを抑えるには ● Amazon DynamoDBはTable毎に明確にCapacityを設定する必要がある ○
イベント毎に負荷の見積もり行うが想定外の盛り上がりの可能性もある ○ コストは抑えたいが可用性のためにCapacityは下げたくない ○ 見積もりの人的コストも毎回発生する ○ AutoScaleしてほしい
33.
● ということでDynamic Dynamoの導入しました Amazon
DynamoDBのCapacityを自動調整してくれるサー ビス。Amazon CloudWatchのCosumedCapacity Metricsの 数値を元にRead/Write Capacityの設定を自動的に上げ下げ してくれる。細かい設定が可能で最小・最大なども指定可能 Dynamic Dymamoとは 可用性を維持しながらコストを抑えるには
34.
Dynamic DynamoとDynamo DB
Partitionsの関係 ○ 一度分割されたら戻らないのでScale downした時にThrottlingされる可能性 ■900 -> 1100 でScale upした時にPartitionが割れるので1Partition内のCapacityは 900 -> 450に落ちる。Hot keyがある場合 Throttlingされる可能性あり ○ Hot Key/Partition問題の解決にはならない ■ Hot Key/Partitionの場合Amazon CloudWatchではCapacity上限に近いわからない のでScale upできない ○ 大規模なプロモを実施する前には事前にマニュアルで上げておく必要がある ■ Amazon CloudWatchは1分毎に集計、Dynamic Dynamoも数分毎に実行するので Capacityが上がるまで数分かかる。事前にマニュアルでCapacityを上げて大事な時 間のサービスに影響が出ないように準備する必要がある。 可用性を維持しながらコストを抑えるには
35.
Amazon Auroraを使ったコスト削減
36.
Amazon RDS for
MySQLのコスト削減について コスト削減を目的としてAmazon Auroraを使ってmaster統合を実施 MySQL compatibilityなのでCodeの変更は不要 masterとslaveの数を減らす事でinstance費用が減る 移行後にinstanceもdowngradeできればさらに減る Amazon RDS for MySQLに比べてIO-boundになりにくいため instanceのCPUを使えるようになった
37.
コスト削減と可用性向上を目的としてmaster統合を実施 IOPS費用がProvisioned IOPS(月額固定)からほぼ従量課金にな るので負荷の変化が大きいゲームにおいてはIOPS費用が減る イベント開始・終了の負荷が非常に高いが、平常時は落ち着いている Amazon
RDS for MySQLのコスト削減について
38.
移行した結果 Write Latency/IOPSとDB
Connectionsが減少 Binlogをoffにしている事が関係していると思われる。同じIOPS前提で コストを計算していたため、想定よりコストが下がりそう。 その他 Amazon CloudWatchのMetricsが非常に増えているので地味に便利 当GameではWriteがAsyncだが、Sync WriteなGameの場合 Latencyの向上が見込めそう Amazon RDS for MySQLのコスト削減について
39.
移行でのTips RRはすべて一時利用不可に Amazon
RDS for MySQLの場合 Master down時でもslaveは利用可能 Amazon Auroraの場合 Master down時には数秒間全slaveが利用不可 Amazon RDS for MySQL 5.5とはReplicationできない 事前に5.6にUpdateが必要 Amazon RDS for MySQLのコスト削減について
40.
+ 大量のログをなるべく安く 簡単にさばく方法 Glossom 開発部 籠島啓介
41.
+ 目次 Glossom
会社概要 Glossomで扱うログ AWSをなるべく安く便利に使う 最後に
42.
+ Glossom 会社概要
元グリー広告統括部が分社化 広告のシステムの開発・運用など
43.
+ Glossomで扱うログ 10億弱/日
の 入札ログ (DSP) 毎時集計してレポートに反映 商品づくりのために入札ログの解析も必要(頻度低) これらのログの処理にAWSを利用
44.
+ 集計システム全体図 Amazon ECS バッチ処理 集計 解析 Amazon EMR Amazon Redshift Amazon S3 ストレージ 各種webサーバ (担当エンジニア) バッチサーバ
45.
+ AWSをなるべく安く便利に使う 生ログをltsv形式にする
生ログをs3に直接fluentdでアップロード batchにAmazon ECSを使う Amazon EMR + SPOTインスタンス Amazon EMR + S3Dist Cp Amazon Redshiftのインスタンス制御
46.
+ 集計システム全体図 Amazon ECS バッチ処理 集計 解析 Amazon EMR Amazon Redshift Amazon S3 ストレージ 各種webサーバ (担当エンジニア) バッチサーバ
47.
+ 生ログをltsvにする ltsv形式だとparseの計算量が少ない
40カラムほどのデータの単純集計で集計時間が約半分になった {“time”:1462174589,“column1”:”value1”, … “columnN”:”valueN”} time:1462174589[tab]column1:value1[tab] … [tab]”columnN”:”valueN”
48.
+ 生ログをAmazon S3に 直接fluentdでアップロード
Amazon S3はコスパが良い→積極的に利用 input時 転送量無料 fluentdのreceiverは立てない→障害ポイントが減る fluentdのプラグインが便利 fluent-plugin-s3 (td-agent標準で付属) サービス要件上リアルタイム性が不要なのでkinesis等は使わず
49.
+ 集計システム全体図 Amazon ECS バッチ処理 集計 解析 Amazon EMR Amazon Redshift Amazon S3 ストレージ 各種webサーバ (担当エンジニア) バッチサーバ
50.
+ batchにAmazon ECSを使う
batch処理をするインスタンスとして Amazon ECSのクラスタを利用 batchの冗長化 スケーラビリティ向上 batch処理ごとに異なる環境を作れる
51.
+ 集計システム全体図 Amazon ECS バッチ処理 集計 解析 Amazon EMR Amazon Redshift Amazon S3 ストレージ 各種webサーバ (担当エンジニア) バッチサーバ
52.
+ Amazon EMRでSPOTインスタンス
利点 価格を大幅に抑えられる (1/2 〜 1/8 程度) 欠点 インスタンスを上げられなかった時のハンドリングが面倒 10分経っても立ち上がらなかったらON DEMAND
53.
+ Amazon EMR
+ S3DistCp 集計処理前にAmazon EMRクラスタのhdfsにデータを入れておく クラスタのDisk IOをフルに活用 S3DistCp Amazon S3 ストレージ 集計 Amazon EMR
54.
+ 集計システム全体図 Amazon ECS バッチ処理 集計 解析 Amazon EMR Amazon Redshift Amazon S3 ストレージ 各種webサーバ (担当エンジニア) バッチサーバ
55.
+ Amazon Redshiftのインスタンス制御
使う時だけインスタンスを立ち上げる データのインポートスクリプトを用意 元データは集計時に予め作っておきAmazon S3へ
56.
+ 最後に AWSは使い方を工夫することで 安く便利に利用できる
一番大事なのはこまめなコストチェック
57.
+ Cost Explorer
58.
+ インフラツールも サーバレスで安く 開発本部 インフラストラクチャ部 堀口 真司
59.
+ お高い順 Compute RDBMS 他 >>> ちいさい機能の フルマネージドは 比較的安い!
60.
+ 深夜に定期実行 ssh API Service Stop 等 安全にスナップショットを とるための処理 t2.micro Amazon EBS snapshot Amazon
EBS スナップショット取得事例
61.
+ API SSM 起点は Amazon CloudWatch Events 脱 EC2 ! 100万回で1$ という感覚 SSM
にすることで実行ログが Amazon CloudWatch Logs と AWS CloudTrail と SSM Output に残り不具合調査や監 査が出来るようになった。 ssh 秘密鍵の管理や実行イン スタンスの心配も不要に。 - t2.micro + AWS Lambda + Amazon DynamoDB AWS Lambda Amazon CloudWatch Amazon DynamoDB Amazon EBS snapshot
62.
+ コツ • AWS Lambda
実行が失敗する可能性がある • 状態を Amazon DynamoDB に入れておく • 進捗するたびに Amazon DynamoDB に Put する • (ただし、一度も実行時の障害を観測したことは無い) • 同時実行される可能性がある • Amazon DynamoDB で悲観ロックを行う • 時間がかかる可能性がある • 寿命は最大でも5分、関数を分ける • 5分以内に終わりそうな関数 → 成功したら次の関数
63.
+ API 起点は CloudWatch Events 色々 AWS の状態を 問い合わせ状態が正 しいかチェックする AWS
Lambda の実行失敗は CloudWatch Alarm でトリガーできる。 一分間隔で三回リトライしてくれるので、トリ ガーもそれにあわせて閾値の設定が良く合う 通知ロジックも AWS Lambda で… 3かい - t2.micro + AWS Lambda + CloudWatch Alarm + Amazon DynamoDB Amazon CloudWatch 監視ロジックの例
64.
+ AWS Lambda とゲーム
API 系 • Amazon EC2 を使わない • 高いので API Gateway も使わない • 小さいレスポンスなら1リクエストあたり、10倍ぐらい差がつくことも。 • ゲームは HTTP(S) である必要が無いので AWS-SDK を使う • 直接 Invoke する。しかし Native SDK の内部実装では libcurl+openssl • Invoke できる Credentials をアプリに入れる • ストレージはもちろん Amazon DynamoDB
65.
+ AWS SDK
をアプリ へ組み込み Credentials も 入れちゃう API Gateway をつかわず Lambda 直行で激安 - t2.micro - Elastic Load Balancing - サーバ証明書 + AWS Lambda + Amazon DynamoDB
66.
+ コツ • Credentials は流出する可能性がある •
アプリの解析、http ヘッダ解析 • 流出前提で最低限の Policy のみ設定する • でもふつうの https を叩かれるよりは敷居が高いはず • AWS Lambda 内の非同期処理は並列に行う • 実行時間で課金されるため、なるべく待ち時間を減らす
67.
+ Amazon EC2 –
時間指定の動作 • 勤務時間だけ動作させるのが、当初のモチベーション • CloudWatchEvents で個別指定ではない • スケジュールをかんたんに設定できるように Tags 操作 • アプリサーバにも応用 • 毎日の予測できる急激な負荷対応 • 予測できないもの、ゆるやかなものは Auto Scaling Group へ
68.
+ 日 月
火 水 木 金 土 平日9時半〜18時半で設定 9時半に StartInstance 18時半に StopInstance Rate 5min 〜 describeInstances 1/(24*7)*((18.5-9.5)*5) = 稼働率 約 27% Jenkins 等のツール 検証、実験用インスタンス 共用の開発サーバ など… VM の suspend と違 いメモリが揮 発する。用途 に相性がある 。
69.
+ 日 月
火 水 木 金 土 お昼 Rate 5min 〜 describeInstances 夕方 夜 仕組みや設定が 単純なので DevOps でい うところの Dev におまかせ。 ゆるやかな部分は ASG にて運用
70.
+ MySQL master 普通のレプリケーション。 しかし、安いとはいえ、 事実上構成管理ツール が必須なのでこのままでは運 用できない。 MySQL replica MySQL replica MySQL replica ↑ 気合のある誰か Or 自動でうごく何か ↓ RDS より安く! 費用面だけな ら三割ぐらい 安い
71.
+ MySQL master MySQL replica MySQL replica MySQL replica PowerDNS x3 LVS-NAT x2 MultiMaster MySQL Worker MongoDB x3 オンプレの オーケストレーションツール Amazon Route
53 t2.micro Amazon DynamoDB AWS に移植した オーケストレーションツール PowerDNS を Amazon Route53 へ移植し、 MongoDB を Amazon DynamoDB へ移植 。 ワーカーもスモール スタート 10台! 1台!
72.
+ まとめ • 安い順に 1. AWS
Lambda と Amazon CloudWatch Events 2. AWS Lambda と SSM で Amazon EC2 利用 3. AWS Lambda と API Gateway, S3 等イベントソース 4. AWS Lambda VPC 内実行 で Amazon EC2 連携 1. NAT や Proxy の都合がつくなら結構安いかも 5. ちょっとしたものは Amazon DynamoDB
73.
+ ありがとうございました