Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

フルサーバレスで構築した電子書籍ストアを1年運用してみた

467 views

Published on

Serverless Days Fukuoka 2019で発表した資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

フルサーバレスで構築した電子書籍ストアを1年運用してみた

  1. 1. Serverless Days Fukuoka 2019 フルサーバレスで構築した電子書籍ストアを 1年運用してみた Keiichi Nakayama Vice General Manager Cloud Partner Group CHARA-WEB Co., Ltd.
  2. 2. Serverless Days Fukuoka 2019 自己紹介 • 中山 桂一 ( @k1nakayama ) • 株式会社キャラウェブ クラウドパートナーグループ 副部長 • クラウドパートナー事業をリード • サーバレスが大好きなのに, DevOps関連の登壇が多め
  3. 3. Serverless Days Fukuoka 2019 会社概要 会社名:株式会社キャラウェブ 所在地:東京都台東区東上野4−12−1 資本金:7,161万円 主な事業内容: コンテンツ事業 電子書籍のライセンスおよび管理,電子書籍販売 クラウドパートナー事業 AWS活用支援サービスの提供及びSI事業
  4. 4. Serverless Days Fukuoka 2019 コンテンツ事業  電子書籍ライセンス管理 • 白泉社の電子書籍事業の共同事業展開 • 電子書店各社へ電子書籍のコンテンツ提供やライセンスの管理を行う  電子書店の構築・運用 • 白泉社e-net!の構築・運用  各種デジタルコンテンツ関連サービスの運営 • フィーチャーフォン向けにキャリア公式コンテンツとして, ゲームコンテンツや着メロコンテンツ等を提供
  5. 5. Serverless Days Fukuoka 2019 白泉社e-net!  白泉社公式電子書籍サイト  Web / iOS / Android向けに提供  2013年3月から提供開始  主な特徴 • 電子コミック雑誌の先行配信 • 電子限定コミックの配信 • 電子限定特典 • 白泉社作品の熱狂的ファンが集まる電子書籍ストア
  6. 6. Serverless Days Fukuoka 2019 サーバレス化  2018年10月に全面リニューアル  同時にiOS / Androidアプリでもストア展開  全てマネージド・サービスのみで構成したサーバレスアーキテクチャ  23個のマイクロサービスで構成  ステージあたり約270個のLambda Functionで構成
  7. 7. Serverless Days Fukuoka 2019 従来の課題  初期構築時のPHP5.6,Symfony 1など脆弱性たっぷり  モノリシックな構造なうえ,次々とハリボテ的な追加開発により, 機能の拡張より,むしろバグを産む感じ  全ページサーバサイドレンダリングで,APIがゼロ。 スマホ向けアプリ化などをしたいけどAPIないしムリ!  クラウドを活かせていない構成などにより,障害対応に追われる毎日  社内のエンジニアは,2名(当時)
  8. 8. そうだ! フルサーバレス化しよう!
  9. 9. Serverless Days Fukuoka 2019 アーキテクチャデザイン
  10. 10. Serverless Days Fukuoka 2019 マイクロサービスアーキテクチャ 機能などの区分け毎にマイクロサービス化する マイクロサービス単位でリソースを管理 他のサービスが正常でない場合があることを考慮する マイクロサービス単位のCI/CDパイプラインを構築 マイクロサービス間はAPIやPub/Subで連携 μS μS μS μS
  11. 11. Serverless Days Fukuoka 2019 ステージ 開発用,検証用,本番用それぞれのステージを用意する AWSアカウントをステージごとに分ける 管理用アカウントを用意 •各マイクロサービスのCI/CDパイプラインやGitリポジトリ •アセット(画像や各種設定ファイル類,EPUB等)のデプロイ先 •スタッフ用IAMユーザを作成し,各ステージ用アカウントへはAssume Roleで Manage Account Dev Stg Prod
  12. 12. Serverless Days Fukuoka 2019 アーキテクチャ全体像
  13. 13. Serverless Days Fukuoka 2019 Web/MobileバックエンドAPI ① 典型的なWeb/MobileのバックエンドAPIとして使われている マイクロサービス毎に1つのAPIを立てる Swaggerを適切に定義しておくことが重要 Amazon DynamoDBAmazon API Gateway AWS Lambda
  14. 14. Serverless Days Fukuoka 2019 Web/MobileバックエンドAPI ② Pub/Subを容易に実装することができる 複数のAPIコールを1回にまとめて行える 直接DynamoDBに読み書きが行えるため, Lambdaの実装削減できる AWS AppSync Amazon DynamoDB Amazon Elasticsearch Service AWS Lambda
  15. 15. Serverless Days Fukuoka 2019 DynamoDBトリガー DynamoDB内のレコードの書き込みをトリガーにアクション Kinesis Streams同様に時系列に従ってイベントが受け取れる 非同期処理を容易に実装できる AWS Lambda Amazon DynamoDB
  16. 16. Serverless Days Fukuoka 2019 SQSトリガー キューに入ったメッセージをトリガーにLambdaを発火 リソース間を疎結合に保ちやすくできる Lambdaの同時実行数の予約をしておかないとエライことに Amazon Simple Queue Service AWS Lambda AWS Lambda AWS Lambda
  17. 17. Serverless Days Fukuoka 2019 データ解析・可視化 DynamoDBトリガーを利用しデータをS3に吐き出す QuickSight + Athena + Guleでデータ解析し可視化する パーティション設計などに気をつけてデータ吐き出し Amazon Simple Storage Service AWS Glue Amazon Athena Amazon QuickSight AWS LambdaAmazon DynamoDB
  18. 18. Serverless Days Fukuoka 2019 通知処理 Eメールやプッシュ通知を時系列に沿って配信 シャード量の調整で配信速度を調整可能 PinpointにユーザIDを紐付けて管理することで, ユーザID指定でPUSH通知 Amazon Simple Email Service Amazon Pinpoint Amazon Kinesis Data Streams AWS Lambda
  19. 19. Serverless Days Fukuoka 2019 エッジHTML生成 ・ エッジ画像リサイズ Lambda@Edgeを活用 リクエスト毎に認証や動的なHTML生成が可能 UserAgent等に合わせた画像のリサイズ等をリアルタイムに実行 Amazon CloudFront Amazon Simple Storage Service AWS Lambda
  20. 20. Serverless Days Fukuoka 2019 サーバレス化の成果
  21. 21. Serverless Days Fukuoka 2019 サーバレス化の成果 1年ちょっとの間,サービスダウンを伴う障害は1件もなし! •8.23の東京リージョン障害も無傷だった セキュリティパッチ対応やスケーリング対応等必要なし! マイクロサービス単位に手を入れられるので,機能改修がしやすい iOS / Androidアプリでもストア展開ができた アプリ展開も行ってトラフィックも急増し,3ステージに分けて運用し ているが,コストは従来の80%程度 ページ表示等のUXが大きく改善された エンジニアのモチベーションが向上した
  22. 22. Serverless Days Fukuoka 2019 失敗談
  23. 23. Serverless Days Fukuoka 2019 オリジンバケットをus-east-1に配置した DRM処理関連はコストを考慮しus-east-1で行っている 処理後のファイルもus-east-1のバケットに入れていた Lambda@Edgeにより処理されるブラウザビューアの ページ送りが,キャッシュヒットしないと, 各ページ2秒ほど掛かりストレス 処理後の画像データをap-northeast-1のバケットに転送で改善
  24. 24. Serverless Days Fukuoka 2019 S3 Storage Classを変えた リニューアル直後の11月後半,re:InventにてS3の新しいStorage Class「Intelligent-Tiering」が発表された Epubなど大容量のファイルをこれに変えよう! 全ファイルのS3トリガーが発生してDRM処理が再度行われ 関連処理のサービス利用料が爆発! 約100万円ほどの無駄な費用が発生した
  25. 25. Serverless Days Fukuoka 2019 Node.jsで全Lambda Functionを作成 フロントエンドはAngular(TypeScript)で開発していくことにした Lambdaの開発も,同様にTypeScriptで行うことに 2018年初旬のLambdaのNode.jsの最新バージョンは6.10だった 2018年10月,ようやくリニューアルオープン! 2019年4月1日にNode.js 6.10のサポート終了がアナウンス サポート終了に向けてNode.js 8.10にアップデート アップデート作業中に,Node.js 10.xのサポートが発表
  26. 26. Serverless Days Fukuoka 2019 DynamoDBトリガーのLambdaで問題 Node.jsのアップデート対応に伴いLambdaを修正していた 全てユニットテストも通ったと思っていたら,一時的にテストをして いない関数がちらほら。。 適切にランタイムのアップデートがされていないDynamoDBトリ ガーのLambda Functionがあった 24時間の間イベントがリトライされ続ける 適切なモニタリングが出来ていないうえ, 気づきにくい処理部分で発生していた 修正するまで無限実行され続けLambda等のコストが 150万ほど無駄に発生!
  27. 27. Serverless Days Fukuoka 2019 課題
  28. 28. Serverless Days Fukuoka 2019 課題 DynamoDBの設計がダメダメなことに気づいたので直したい サービスのモニタリングが最低限しか出来ていない Nodeはライフサイクル短いなぁ 今更だけどAuth0とか使ったほうが,拡張性高かった まだまだ,UX向上できるはず SSR対応出来ていない
  29. 29. Serverless Days Fukuoka 2019 まとめ
  30. 30. Serverless Days Fukuoka 2019 まとめ 適切にマイクロサービス化すると,開発効率は向上する Swagger等をしっかり作り,マイクロサービス単位で外注すると 比較的スムーズにプロジェクトを進めやすい 急いでいるときこそ,細かなユニットテストを行うべし モニタリングをどう行うかをプロジェクトの序盤で考えるべし リトライに対する対処など,Lambdaの基本的なことをしっかりやる AWSサービスに固執せず,様々なSaaSなどを積極的に取り入れ ることで,開発効率を向上させる

×