Slide 1

Slide 1 text

ニュースパスのサーバレスなマイクロサービス Gunosy Inc. 2016.07 @y_matsuwitter

Slide 2

Slide 2 text

2 ©Gunosy Inc. ⾃⼰紹介 n Gunosy Inc. – 開発本部執⾏役員 n 業務 – 開発全般のマネジメント – Go⾔語布教係 – パフォーマンスチューニング – ISUCONとか好きです n 担当 – 右⼿でiOS、左⼿でAndroid – Web – Infrastructure(AWSのみ) n 最近の興味 – VR ウォッチングおにいさん 松本 勇気 @y_matsuwitter

Slide 3

Slide 3 text

3 ©Gunosy Inc. Gunosy Inc. について n 情報キュレーションサービス「グノシー」の 開発・運営 n iOS/Android合わせ、約1300万DL n 「数値は神より正しい」を合⾔葉に、数値中 ⼼の改善・経営 n 広告配信、機械学習、データ分析、AWS運⽤ などに強いチームです 「情報を世界中の⼈に最適に届ける」

Slide 4

Slide 4 text

4 ©Gunosy Inc. ニュースパスについて 2016年06⽉01⽇にKDDI様とリリースした情報キュレーションサービスです。

Slide 5

Slide 5 text

5 ©Gunosy Inc. 今⽇の話 n マイクロサービスの採⽤について n サーバレスアーキテクチャとの関わり n 開発・運⽤を⽀える技術 n 最後に ニュースパスの開発にあたりマイクロサービスを採⽤した話について。

Slide 6

Slide 6 text

6 ©Gunosy Inc.

Slide 7

Slide 7 text

7 ©Gunosy Inc. マイクロサービスの採⽤について

Slide 8

Slide 8 text

8 ©Gunosy Inc. ニュースパスとマイクロサービス 短期間・少数で⾼品質なサービスをマイクロサービス上で実現 n システムの規模感 – 30個のサブシステム – 45個のGithubリポジトリ – iOS/Android/Webでの提供 – 全てOpsworks上で管理・運⽤ – サービスダウンやアプリのクラッシュは ほぼ0 n 運⽤・開発は少数精鋭で実施 ニュース配信の裏側の各ビジネスドメインをマイクロサービス化 API Gateway Auth Content Log

Slide 9

Slide 9 text

9 ©Gunosy Inc. 記事配信サービス 検索サービス マイクロサービスをなぜ採⽤したか 柔軟なスケール・柔軟な構成によりリソースを適切に運⽤する n ドメインごとに必要なシステムの性質は違う – 検索 – ログ解析 – 推薦・⾃然⾔語処理 – 認証・認可 – クローラ – 管理画⾯ – …etc n 適切なシステムを適切なミドルウェアと規模 で運⽤する n データを他のドメインに汚染させない データの完全なカプセル化とドメインごとの柔軟な構成が⽬的 Elasticsearch Golang API MySQL DynamoDB Golang API Python Batch DBへの直接の参照禁止

Slide 10

Slide 10 text

10 ©Gunosy Inc. Microservices + サーバレスアーキテクチャ + 2-Tierアーキテクチャ

Slide 11

Slide 11 text

11 ©Gunosy Inc. サーバレスアーキテクチャ 柔軟にスケール可能 運⽤を簡素化 スケールの最⼩単位を⼩さく、柔軟 に増減する コード⾃体の設計・開発に集中 n インフラの最⼩単位がコードに – 実⾏単位でのスケールが可能 – 働いてないリソースを極⼒削る n 実⾏リソースもコードごとに柔軟に – あるスクリプトだけメモリを⼤き く当てる、など n コードの実⾏環境は管理不要 – リソース監視やスケーリングはク ラウド側が担保 – 成功・失敗やその他実⾏時のログ は管理 n サーバ単位のセキュリティなどもクラ ウド側で担保 コスト・運⽤両⾯でメリットが⼤きい サーバを抽象化し、ロジックを必要に応じてデプロイ・実⾏できる仕組み

Slide 12

Slide 12 text

12 ©Gunosy Inc. 2-Tierアーキテクチャ ロジックの持ち⽅を柔軟に 開発を最⼩限に これまでのサーバサイド・クライア ントサイドの境界を塗り替える ロジックの責任をクラウドに n どこで実装すべきか?という問い – 認証・認可 – ログ配送 – 設定値管理 etc... n クライアントサイドの実装を⽀援する 仕組みが増えた – クライアントでやる選択肢 n SDKを介してマネージドなサービスを 利⽤する – ロジックは各種サービスに任せる n 例:AWS – Cognito … AWS上での認証・認 可の仕組みを提供する クライアント側がインフラ構成に参加する新しい形態 Client-sideが直接マネージドなサービスを操作する

Slide 13

Slide 13 text

13 ©Gunosy Inc. マイクロサービスとこれらの関わり リソースを柔軟に コアの価値に集中 コスト効率を上げる n サービスごとに必要な リソースを必要なだけ 割り当てる n 突発的なスケールもク ラウド側で担保 n コアロジック以外はク ラウド提供者側やクラ イアント側に移譲 n コードを書く以外に考 えるべき要素を最⼩化 n 各サービスのマイクロ さを⾼める n スケールの単位の⼩さ さを担保 n 必要なサービスに必要 な量だけリソース割当 n タイミングに応じてコ ストも柔軟にスケール する システム内の多数のサービスの開発・運⽤負荷というデメリットを軽減 ドメインごとのサービスをより効率よく・スケーラブルな構成へ

Slide 14

Slide 14 text

14 ©Gunosy Inc. 開発・運⽤を⽀える技術の事例

Slide 15

Slide 15 text

15 ©Gunosy Inc. Microservicesを⽀えるAWSの技術 n コードの実⾏環境 n Node.jsやPython等多 くの⾔語環境が提供さ れている。 n AWSの多くのサービス がイベントフックにて Lambdaを呼び出し可 能に。 Lambda n ユーザーのAWSに対す る認証・認可サービス n OpenID Connectと組 み合わせ、ユーザー管 理を可能に。 n 直近ではメールによる ユーザー登録・管理機 版も登場 Cognito n ログ配送の中継 n Fluentdと似たようなレ イヤ n ⼀定期間分のデータを 溜め、中継先が任意に 読み取り可能 n 周辺ツールが充実しつ つある Kinesis ピタゴラスイッチ的に組み合わせるだけでも様々な可能性がある マネージドで効率的に使いやすいサービスが増えている

Slide 16

Slide 16 text

16 ©Gunosy Inc. 事例:プッシュ通知の管理系統 Amazon Cognito Mobile Client 設定値 Push: 有効 トークン: aaaa … Push System CognitoSyncで LocalとAWS上 を同期 AWS Lambda Queue On SQS Amazon SNS Syncイベントをフック Pushシステム側で Dequeue => DB登録 Amazon Elasticsearch Service Amazon SNS Mobile Puh SNSのエンドポイント登録 無効なトークンの削除 Amazon SNS Mobile Puh PushをSNS経由で配信 コアの配信ロジック以外は マネージドなAWSツール 実装も配信ロジックが主

Slide 17

Slide 17 text

17 ©Gunosy Inc. 最後に

Slide 18

Slide 18 text

18 ©Gunosy Inc. 最後に 開発・運⽤コストを最⼩にし、サービス改善に注⼒しよう Microservices + 次世代のアーキテクチャで効率的なサービス運⽤が可能 ニュースパスでのMicroservices AWSの活⽤による省⼒化 n 各サブシステムを適切なアーキテクチ ャで構成・運⽤する n 多数のシステムから単⼀のデータを触 る際の拘束具としてのサービス分割 n サーバレスや2-Tierを組み合わせて、 より効率的な形を求めていく n Lambdaなどのマネージドなサービス をフル活⽤していく n ロジックの責務やインフラの運⽤を AWSに担保させる n スケール単位を細かくしていくことで 必要に応じて柔軟にスケール、コスト 効率も⾼い

Slide 19

Slide 19 text

19 ©Gunosy Inc. Gunosyでは、新規サービス⽴ち上げや microservicesの開発に挑戦したい! そんなエンジニアを募集しています!