91
Copyright © Classmethod, Inc. モバイルファースト時代の クラウドネイティブアーキテクチャ JAWS DAYS 2015 2015.3.22 classmethod Inc. 大橋 力丈 ×

モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Embed Size (px)

Citation preview

Page 1: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Copyright © Classmethod, Inc.

モバイルファースト時代の クラウドネイティブアーキテクチャ

JAWS DAYS 2015 2015.3.22

classmethod Inc. 大橋 力丈

×

Page 2: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

大橋 力丈 (おおはし りきたけ)

✦所属 • クラスメソッド株式会社

• iPhoneアプリサービス事業部 部長

✦仕事 ✦iOSとAWSを組み合わせたアプリの開発

http://dev.classmethod.jp/author/oohashi-rikitake/

ブログ

http://underscore-app.tumblr.com/アプリ

Page 3: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

クラスメソッド株式会社• iOS/AWSに特化した会社(Androidもやってます)

• アプリからインフラまでワンストップ

• 秋葉原 / 札幌 / 上越

• 約70名のエンジニア集団

• Developers.IO

Page 4: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Developers.IO

Page 5: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Developers.IO• 社員執筆によるIT技術専門サイト • 月間:80万PV、35万UU • 国内で最も多くのAWS記事を公開しています • AWS:1,000本、iOS:500本、Android:300本以上

ブログもやってる会社です

Page 6: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Developers.IO

AWSだけじゃない!!

Page 7: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Twi$er Jaws*Days **

@jawsdays

3 "

@awscloud_jp

#jawsdays

1 "

AWS Twi0er JAWS"DAYS Twi0er

??

17:00 *9:00 16:50 Tweet

Kindle JAWS*T

*Moff*Band JAWS*T

Step"1"

Step"2"

Step"3"

Jaws*Days OK

JAWS*T

Page 8: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

今日はいくつか名言ぽいことを言いますので、是非

Tweetしてください!

#jawsdays

Page 9: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Agenda

•よくあるAWS構成

•モバイルアプリで考えておくべきこと

•クラウドネイティブ

• AWS Mobile SDK

•おさらい

Page 10: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Agenda

•よくあるAWS構成

•モバイルアプリで考えておくべきこと

•クラウドネイティブ

• AWS Mobile SDK

•おさらい

Page 11: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

よくあるスケーラブルな構成

Page 12: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

ELB + EC2 + RDS構成のメリット

• EC2に障害があってもELBが振り分けてくれる

•トラフィック増えたらスケールアウト

• AutoScalingで自動で拡大/縮小

• RDSの負荷が上がったらスケールアップ •スナップショットでデータ復元

Page 13: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

ELB + EC2 + RDS構成のメリット

ELB + EC2 + RDSは 本当に良い構成!!

ちゃんと設計されていれば

Page 14: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Agenda

•よくあるAWS構成

•モバイルアプリで考えておくべきこと

•クラウドネイティブ

• AWS Mobile SDK

•おさらい

Page 15: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

モバイルアプリ開発あるある

•最短リリース!最小構成!

• Push通知と一斉リターン

•既存のAPIあるある問題!

Page 16: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

最短リリース!最小構成!

Page 17: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

各ストアのアプリ登録数

•AppStore •1,230,000本

•GooglePlay •1,430,000本

•Amazon AppStore •293,000本

Sorece:appFigures

Page 18: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

各ストアの登録数

Page 19: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

とにかく早く!

•アイデアが決まったらすぐリリース

•モバイルアプリの開発期間は短い 平均3ヶ月※1

•iOSは毎年9月頃にOSのバージョンアップ

※1:当社平均です

スピード重要!

Page 20: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

最小構成!最短リリース!

•モバイルアプリはリリースしてからがスタート •後々必要になる足回りは後回しになりがち •拡張性

•ログ

•アクセス解析

•アップデート対応

•全体設計の考慮漏れ

Page 21: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

「小さく産んで大きく育てる」 そのための設計は疎かにしない

Page 22: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Push通知と一斉リターン

Page 23: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Pushの流れ

Page 24: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

端末が増えてくると…

配信遅延が起きてくる

Page 25: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

•SNSのTopic使う

•1リクエストで複数の送信先へ一括送信

•1トピックで1000万サブスクリプション

•3000トピックまで作成可能

配信を早くする

Page 26: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

•デバイス毎に直接通知を行う

特定の宛先に配信

S3に配信リストを置く

Workerが配信リストを取得してキューに入れる

Workerはキューを取り出してPublishする

Page 27: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

配信が早く終わると 瞬間的なリクエストが増える

Page 28: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

一斉アクセス

 ・APIに負荷が一気にかかる  ・AutoScalingでも対応できない

 ・I/Oが追いつかない  ・スケールアップでも対応できない

Page 29: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

•配信量をコントロールする •各サービスの対策

•EC2:ピーク時の計画的スケールアウト

•RDS:読み取り専用インスタンス

•そもそもEC2にアクセスが本当に必要か?

•静的コンテンツを利用

一斉アクセス対策

全体を意識したアーキテクチャ

Page 30: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Pushを制するものが モバイルアプリを制する

Page 31: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

既存のAPIあるある問題!

Page 32: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

サーバーサイドってどうなってます?

既存のAPIあるんでソレ使って下さい!

あっ!既存あるんすね! じゃあチョチョイのチョイですね!!

営業 クライアント

※フィクションです

Page 33: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

既存のAPIあるから余裕そうだよ!

大丈夫!大丈夫! 既存あるから!よろしくね!

営業 エンジニア

えっ!? API一覧とか見たいです

・・・・・

※フィクションです

Page 34: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

ホーム画面用のAPI一覧

目的 エンドポイント

トピック一覧取得 https://api.xxx.com/v1/topics/

カテゴリー一覧取得 https://api.xxx.com/v1/categories/

おすすめ商品取得 https://api.xxx.com/v1/products/recommend

ユーザー情報取得 https://api.example.com/v1/user/

Page 35: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

ホーム画面の呼び出しまで

カテゴリー一覧取得APIおすすめ商品一覧API

ユーザー情報取得APIトピック一覧取得API

1画面呼ぶのに何個のAPIを叩けばいいんだ!?

Page 36: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

モバイルアプリ用のAPIを作るべき

•何度も異なるAPIを呼ぶのは非効率

•画面表示までに時間がかかる •ユーザー体験が悪い

•API毎にエラーハンドリングなど考えなきゃダメ

詳しくは ”Web API The Good Parts”

Page 37: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015
Page 38: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

1Screen, 1API call

Page 39: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Agenda

•よくあるAWS構成

•モバイルアプリで考えておくべきこと

•クラウドネイティブ

• AWS Mobile SDK

•おさらい

Page 40: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

ここから本題!

Page 41: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

モバイルファースト時代の クラウドネイティブアーキテクチャ

本日のタイトル

Page 42: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

よくあるスケーラブルな構成

Page 43: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

これは クラウドネイティブ?

Page 44: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSを使っているから クラウドネイティブ?

Page 45: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSのサービス

Page 46: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSのサービス

使ってるのこれだけ

Page 47: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSのすべての機能やツールには、存在している

理由がある

米アマゾンCTOのヴァーナー・ヴォーゲルズ(Werner Vogels)氏

Page 48: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

21世紀的なアプリケーション開発のあり方

•Controllable • コンポーネント化とステートレス化

• デプロイメントおよび運用のプロセスの自動化

• アプリケーション設計の最初に考えるべきはコスト

•Resilient • 顧客の保護は何よりも優先されるべき

• コンティニュアスなデプロイメントやインテグレーションは日常だ

• 障害は例外的なものではないと考えること

•Adaptive • 自分で制約することをやめよ

•Data Driven • データを最大限に活用せよ

参考:@IT アマゾンCTOが語った、「クラウドネイティブ」なアプリのつくりかた

Page 49: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

EC2:センターフォワード RDS:ゴールキーパー

注:あくまで主観です

Page 50: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

サッカーのポジション• GK:ゴールキーパー

• DF:ディフェンダー

• CB:センターバック

• SB:サイドバック

• SW:スウィーパー

•MF:ミッドフィールダー

• DMF:ディフェンシブミッドフィルダー

• WB:ウイングバック

• CMF:セントラルミッドフィルダー

• SMF:サイドミッドフィルダー

• OMF:オフェンシブミッドフィルダ

•フォワード(FW)

• WG:ウイング

• ST:セカンドトップ

• CF:センターフォワード

Page 51: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSのサービス

Page 52: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSのサービス

豊富なタレントが 揃っている

Page 53: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

インフラだけでいいの?

Page 54: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSを利用しサービス全体を考える

•可用性 •サーバーはダウンするという前提で設計する

•性能・拡張性 •急なリクエストが発生するという前提で設計する

•運用・保守性 •定期的なシステムメンテナンスが発生するという前提で設計する

•コスト •ユーザー数が増えてもコストが激増しないような設計する

Page 55: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSを知り、サービスを 知らなければ勝利はない

Page 56: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

チームで全体を考える!

Page 57: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

疎結合なチーム

AWSエンジニア

プロダクトオーナー

Serverエンジニアスマホエンジニア

Page 58: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

密結合なチーム

AWSエンジニア

プロダクトオーナー

Serverエンジニア

スマホエンジニア

それぞれが補完し合える 関係が大切!!

Page 59: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

サービスは疎結合 チームは密結合

Page 60: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Agenda

•よくあるAWS構成

•モバイルアプリで考えておくべきこと

•クラウドネイティブ

• AWS Mobile SDK

•おさらい

Page 61: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWS Mobile SDK

Page 62: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

モバイルから直接使える AWS サービス

認証 : Cognito データストア : DynamoDB ストレージ : S3 プッシュ通知 : SNS 行動分析 : Mobile Analytics データストリーミング : Kinesis 分散キュー : SQS

Page 63: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

2Tire Archtecture

Page 64: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

2Tier Archtecture

•クライアントとバックエンド

•クライアントに処理を持つ(ファットクライアント)

•クライアントからAWSのサービスを利用する

Page 65: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

2Tierの門番

Page 66: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Cognito

Page 67: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AmazonCognito

•アイデンティティの管理 •複数のIDプロバイダや独自認証基盤の連携

•ユニークIDの作成、識別

•複数デバイスをまたいだデータ同期 •ローカルに保存したデータの同期

•オフラインでも使える

Page 68: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Cognitoを使ったログインの流れ

Page 69: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

モバイルアプリへの 活用例

Page 70: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

2Tier のイメージ

EC2とRDSは裏側にいる

Page 71: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

•フルマネージドのサービスに直接アクセス •サーバーレス

• EC2,RDSへの一極集中の負荷を減らせる

•何かカッコイイ

2Tierの良いところ

Page 72: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

本当に サーバーレスで いけるのか?

Page 73: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

• AWS Mobile SDKをラップする必要がある

• iOSとAndroidで実装が必要

•各サービス同士のつなぎ込みがしにくい •ロールバックある場合は大変

2Tierの課題

Page 74: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

2Tierの救世主!?

Page 75: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Lambda

Page 76: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

•イベントをトリガーに処理を実行

•実行環境はAWSが管理

•オートスケール

• EC2インスタンス費用が不要

• AWS Mobile SDKからは呼べない

AWS Lambda

Page 77: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

課題は色々あるけれど…

Page 78: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

モバイルアプリは 2Tierが増える!

Page 79: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Agenda

•よくあるAWS構成

•モバイルアプリで考えておくべきこと

•クラウドネイティブ

• AWS Mobile SDK

•おさらい

Page 80: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

おさらい

Page 81: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

「小さく産んで大きく育てる」 そのための設計は疎かにしない

Page 82: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

Pushを制するものが モバイルアプリを制する

Page 83: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

1Screen, 1API call

Page 84: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSのすべての機能やツールには、存在している

理由がある

米アマゾンCTOのヴァーナー・ヴォーゲルズ(Werner Vogels)氏

Page 85: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

AWSを知り、サービスを 知らなければ勝利はない

Page 86: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

サービスは疎結合 チームは密結合

Page 87: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

モバイルアプリは 2Tierが増える!

Page 88: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

告知

Page 89: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

• 3/27(金):BusinessDay • デジタルマーケティングをテーマにした話

• 対象:マーケティング担当

• 3/29(日):DevelopersDay • AWS、Mobile、IoT、BigDataなどのお話

• 対象:デベロッパー

• セミナー、ハンズオン、テクニカルディープセッション

• 本日の2Tierの話をより深く話します

Developers.IO 2015

Page 90: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015

お待ちしております!

Page 91: モバイルファースト時代のクラウドネイティブアーキテクチャ JAWS DAYS 2015