[レポート] コマース用スマフォアプリにおけるAWS構成&Cognito活用事例 #AWSSummit

2015.06.02

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コマース用スマフォアプリにおけるAWS構成&Cognito活用事例

AWS Summit Tokyo 2015TC-04: Tech Deep Dive by Customers のセッション「コマース用スマフォアプリにおけるAWS構成&Cognito活用事例」のレポートです。スピーカーはクルーズ株式会社のSHOPLIST.com事業本部の田沢氏、加川氏、稲垣氏です。

image

紹介

  • CROOZ
  • ブラウザゲー
    • iOS、Androidのゲームを世界に配信
  • SHOPLIST.com
    • コマースショッピングサイト
  • エンターテイメントを提供

アジェンダ

  • SHOPLIST.comのAWS構成、負荷(メガセール時)の概要
  • 認証機能としてのCognito活用事例
  • 今後のAWS活用予定、方向性
  • 今後のAWSに期待したいこと

SHOPLIST.comについて

  • 昨年の年間取引高100億円
  • メガセール時、取引高月10億円突破
  • 90%以上がスマホから
  • インフラ構成
    • AWSに移行したのは昨年の10月
    • それまでオンプレで運用していたが約1ヶ月でクラウドに移行できた
    • サービスはノンストップ、入れ替え時に数時間メンテ入れた程度
    • DNSはRoute53
    • ELB、EC2
    • MariaDB on EC2
      • Aurola移行を検討中
    • 検索はElasticSearch、キャッシュはElastiCacheとRedis
    • レコメンドに近いところをMapReduce
    • 商品画像はオリジナルはS3、サムネ化はnginx
    • コンテンツ配信はCloudFrontでCDN化
    • オンプレで使用している一部をVPC、VPNで接続
  • インスタンスタイプ
    • その時点で一番いいものを使用する運用
    • 新インスタンスのほうがパフォーマンスが3割位良い
    • Webはc3.2xlarge、c3.xlarge
    • DBはr3.4xlarge、r3.2xlarge
    • Cacheはcache.r3.large
    • バッチはm3.xlarge
  • スケーラビリティ
    • 年3回「メガセール」を実施
    • 開始時にメルマガを送信
    • 通常の約5倍のアクセス数
    • 最大は1,000r/s
    • レイテンシは900msを超えることはない
  • コスト
    • 1インスタンスあたりのreq/sを想定で
    • 一式をワンセットとする
      • Web4台、db5台、search6台、cache5台
      • Web(c3.2xlarge) 100r/s
      • DB(r3.xlarge) 200r/s
      • Cache(cache.r3.large) 500r/s
    • 全体の売上に対して3%以下に抑える方針にしている
    • 1ヶ月の売上に対して1%程度しかかかっていない
  • 画像配信
    • CloudFrontを使用
    • CDNは他社サービスでもあるが(以前使っていた)
    • 現在はすべてAWSを使っている
    • トラフィック増でも十分さばけている
    • リザーブドは3,4割安い

Cognito活用事例

  • モバイルアプリからCognitoを利用
  • 極力EC2を経由せず、アプリ、新サービスのアクセスを捌きたい
    • スケールさせるのを考慮せずに直接AWSサービスを利用したい
  • SHOPLIST.comの認証基盤を今後新サービスにも展開したい
  • SSOも手間がかかるが、Cognitoを経由することで多少は楽になりそう
  • パーソナライズされたユーザーの行動情報を活用していきたい
  • 苦労した点、良かった点
    • 導入を決めるところが苦労
    • 既存の認証基盤を使うと、一手間増えるだけに
    • Kinesis活用など今後も見据えて入れるなどの理由が必要
    • データ同期の仕組みをフルスクラッチで作らなくて良い
      • 今後、アップデートで対応される
    • レイテンシが気になるレベルになっているのが問題
      • Cognitoが東京リージョンに無いため
      • 最大で900msくらいになっている
  • 具体的なプログラム
    • DeveloperAuthenticateを利用
    • Unauthも対応
    • CustomIdentityProviderクラスを作成
      • IdentityIdがとれてもSHOPLIST.comのトークンが取れていない場合がある
      • 確実にSHOPLIST.comのサーバーへリクエストが送信されない場合がある
      • とても簡単
    • サーバーサイドも難しくない
      • SHOPLIST.comのIDにCognitoのIdentityIdを紐付ける
      • SHOPLIST.comのトークンが切れている場合があるが、mergeDevelopIdentityを実行している

今後のAWSの活用予定

  • DynamoDB、Kinesisの活用
    • Webサーバーのログ、ユーザーの行動履歴を流す
    • ElastiCacheを一部DynamoDBに移行を検討中
      • スケーラビリティを確保したい
      • ElastiCacheはキーが増えたら分散しないと厳しい
      • コスト面でメリットが出る
      • レイテンシがElastiCacheよりかかるのが懸念
  • 今後のサービスの予定
    • リアルタイム、シームレス、パーソナライズ
      • スマホ⇔PC、おすすめなど
      • Cognito、Kinesis、EMRを活用
    • ユーザーにフォーカスした検索並び順の整備
      • きれいな画像やユーザーレビュー(ただしノイズ除外必要)
      • ノイズ除外はAMLを使って自動判定にしたい
    • 在庫確保
      • 欲しいと思う商品が無いのは問題
      • 物が売れる予測を立てる必要がある
        • Redshiftを使ってデータマイニングをしている
        • 相関関係をAMLを使って予測する調査を進めている

今後のAWSに期待したいこと

  • AML
    • 未来販売予測、レビューノイズ除外、商品検知
  • Aurora
    • 無停止、柔軟なRDB拡張
  • Lambda
    • 最低限数のインスタンスでサービスの実現
  • システム運用面
    • 無停止でインスタンスタイプを変更したい
  • セキュリティ面
  • コストメリット
    • EC2がほとんどコストになっているので、EC2を使わなくて済むアーキテクチャにしたい

まとめ

トラフィックが高い場合の対応方法やCognito活用のメリット・デメリットが具体的に聞くことができ、勉強になりました。AMLの活用もかなり考えておられるようで、AWSのサービスに対してかなり積極的な印象を受けました。今後もSHOPLIST.comに期待ですね!