266 Views
May 11, 17
スライド概要
2017/5/10
マイクロサービス化とFirebase活用事例について
LIFULL HOME'Sを運営する株式会社LIFULLのアカウントです。 LIFULLが主催するエンジニア向けイベント「Ltech」等で公開されたスライド等をこちらで共有しております。
マイクロサービス化とFirebase活用事例 【タウンWiFi × LIFULL】スマホアプリ開発の実例を大公開! 2017.5.10 株式会社LIFULL 寒川 明好
自己紹介 • 寒川 明好 • 株式会社LIFULL – Android開発グループ • Engineering Manager • 2010年入社 – 入社後1年半はWebを担当 – その後はアプリ開発メイン • Android • iOS • Windows Phone 2 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
LIFULL HOME’Sとは 最上の住まいに出逢えるよう、最大の不動産・住宅情 報と、最良の情報品質、最適な手法によって 住まい探しをお手伝いする、不動産・住宅情報の総合 サービスです。 • ブラウザ – デスクトップ – スマートフォン • アプリ – Android • Phone • Tablet • Wear – iOS • • • • 3 Phone Tablet Watch TV © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
おかげさまでベストアプリ 4 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
アジェンダ • マイクロサービス化 – – – – LIFULL HOME’Sのマイクロサービス構成 API Gateway と Lambda について API側の開発環境 運用と監視 • Firebase活用事例 – Develop : Realtime Database & Storage – Grow : Remote Config – Grow : Dynamic Links 5 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
マイクロサービスとは • モノリシックとマイクロサービス – モノリシック • すべての機能が1つのプロセスで稼働 – マイクロサービス • ビジネスロジック機能ごとのサービスで、それぞれ独立したプロセス で稼働 Orchestration Layer DB / DAO PC API Common Modules SP API APP API 6 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
マイクロサービスとは • モノリシックとマイクロサービス – モノリシック • すべての機能が1つのプロセスで稼働 – マイクロサービス • ビジネスロジック機能ごとのサービスで、それぞれ独立したプロセス で稼働 Orchestration Layer DB / DAO PC API Common Modules SP API APP API 7 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
LIFULL HOME’Sのマイクロサービス構成 • Amazon API Gateway + AWS Lambda で構成 Cloud Front S3 iOS / Android Route 53 API Gateway Lambda DAO / DB CloudWatch 8 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
API Gateway と Lambda • API Gateway – 最大で数十万の同時API呼 び出し – 従量課金 – キャッシュ – Cloud Watchでロギング – クライアント側SDKが出力 可能 – Lambda関数を指定 POINT – Androidでは出力したクラ イアントSDKを使っていな い 9 • Lambda – Lambda対応言語 Node.js Java C# Python • • • • – S3のイベントをフックし てコード実行 – API Gatewayと組み合わせ てRESTful通信 POINT – 1関数1git repositoryで独 立 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
API Gateway と Lambda の制限 POINT 運用コストが減る代わりに、様々なデフォルト制限がある サービスの規模に応じてAWS Supportに上限緩和申請をする ※項目によっては緩和出来ないため、AWSのドキュメントを参照 • • • • • 10 スロットル制限1,000rps アカウント当たりのAPI数 60 Timeout 30秒 Payloadサイズ 10MB Etc… • • • • ディスク容量 512MB リクエスト本文のPayloadサイズ 6MB 関数の同時実行数 Etc… © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
API側の開発環境 • 言語 – Node.js • パッケージマネージャ – Yarn • API フォーマット – Swagger • テスト – Mocha – ESlint • CI – Circle CI 11 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
Yarn • 言語 – Node.js • パッケージマネージャ – Yarn • API フォーマット – Swagger • テスト Yarn • Facebookが2016/10にローンチ • Ultra Fast. • Mega Secure. • Super Reliable. • Offline Mode • Flat Mode $ npm install $ yarn (install) – Mocha – ESlint • CI Ultra Fast! – Circle CI 12 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
API側の開発環境 • 言語 – Node.js • パッケージマネージャ – Yarn • API フォーマット – Swagger • テスト – Mocha – ESlint Swagger • THE WORLD’S MOST POPULAR API FRAMEWORK • Open Source Initiativeが採用 • RESTful APIドキュメントの管理 • Swagger SpecでI/Oを定義する (yaml/json) • Client用のSDKとサーバーコード の生成 • Electron化で社内用ツールとして 使用 • CI – Circle CI 13 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
API側の開発環境 • 言語 – Node.js • パッケージマネージャ – Yarn • API フォーマット – Swagger • テスト – Mocha – ESlint Mocha • ユニットテスト • 結合テスト(APIテスト) • npm ライブラリrewireでprivate functionテスト • coverage計測 • CIサーバーでpush毎にnpm run test ESlint • JavaScriptの静的検証ツール • コーディング規約を集約 • CI – Circle CI 14 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
API側の開発環境 • 言語 – Node.js • パッケージマネージャ – Yarn • API フォーマット – Swagger • テスト – Mocha – ESlint • CI – Circle CI Circle CI • • • • • • • ビルド毎にコンテナ起動 → 破棄 1コンテナは無料 Github連携 Slackにテスト結果通知 yarnでも使える Test前にlintも流す cache_directoriesの指定 • ビルドからテストまでを高速 化 コードをPush Circle CIでテスト実行 GitHubと連携 Slackに結果を通知 15 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
API運用・監視 • ツール – AWS CloudWatch • デフォルトで使用可能なアラームの他、手動で様々なアラームを定 義 – – – – – – 5xxエラー Lambdaの関数ごと 任意の文字列(ログ内容から抽出) Invocation Count Count over limit Throttles • 体制 – 輪番でアプリエンジニアが監視 • CloudWatchからのアラームで検知 – 問題が発生した場合 • Lambdaでバージョン管理しているので差し戻し • リポジトリが独立しているため、他APIへの影響はほぼゼロ 16 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
アジェンダ • マイクロサービス化 – – – – LIFULL HOME’Sのマイクロサービス構成 API Gateway と Lambda について API側の開発環境 運用と監視 • Firebase活用事例 – Develop : Realtime Database & Storage – Grow : Remote Config – Grow : Dynamic Links 17 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
Firebaseとは • Google I/O 2016 で新しいFirebaseが発表 • mobile Backend as a Service(MBaaS)と呼 ばれるクラウドサービス • ネイティブアプリに特化したプラットフォーム • Analytics, Develop, Grow, Earn によるアプリ の最大化 18 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
Develop : Realtime Database & Storage • 特徴 – Realtime Database • クラウドでホスティングされているデータベース • 1 つの Realtime Database インスタンスを共有して、最新のデー タによる更新を自動的に受信 – Storage • Google Cloud Storage でサポートされている WebP 19 特集などシーズンに よって変わるものを すべてのユーザに提 供できる Develop が加速する © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
Grow : Remote Config • 特徴 – 機能変更の公開 – ABテストの実施 通勤・通学時間から探す 所要時間から探す 通勤・通学時間から探す 所要時間から探す 様々なパターンをテストし 一番CVRが上がるものをセットできるので アプリを Grow させることができる 20 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
Grow : Dynamic Links • 特徴 – 1つのリンクでiOS, Android, Webで同じ動作できる – プラットフォームに応じて、適切な場所に移動できる – アプリをインストール済みかどうかで動作を変える Webの続き Webユーザをアプリユーザにすることで アプリを Grow させることができる 21 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
Firebaseを最大限に活用しよう Develop Analytics Grow $ Earn 22 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。
おわり 23 © LIFULL Co.,Ltd. 本書の無断転載、複製を固く禁じます。