Slide 1

Slide 1 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービスメッシュは本当に必要なのか 何を解決するのか Yasuhiro “Tori” Hara / @toricls Sr. Specialist SA, Containers Amazon Web Services Japan # d e v s u m i # d e v s u m i B Feb. 14, 2020

Slide 2

Slide 2 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Yasuhiro “Tori” Hara / @toricls Sr. Specialist SA, Containers Amazon Web Services Japan --- ERP パッケージベンダー R&D チーム SDE ➡ UI ⾃動テスト SaaS ➡ クラウド利⽤の SI + MSP にて、コンテナやサーバーレスによる設計・開発・運⽤ Web 技術利⽤のゲームやビジネスアプリケーション開発、ML/DL 環境構築運⽤など ➡ 現職 《 好きな AWS のサービス 》AWS Fargate, AWS Lambda

Slide 3

Slide 3 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App

Slide 4

Slide 4 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App

Slide 5

Slide 5 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App マイクロ サービス化 しよう︕

Slide 6

Slide 6 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. “Monolith” マイクロ サービス化 しよう︕

Slide 7

Slide 7 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. “Monolith”という呼称に込められるニュアンス Monolith

Slide 8

Slide 8 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. “Monolith”という呼称に込められるニュアンス 関係者間調整のオーバーヘッド Monolith “Does everything”

Slide 9

Slide 9 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. “Monolith”という呼称に込められるニュアンス 関係者間調整のオーバーヘッド 変更による影響範囲の広さ モジュール構造維持の難しさ Monolith “Does everything”

Slide 10

Slide 10 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. “Monolith”という呼称に込められるニュアンス 関係者間調整のオーバーヘッド 変更による影響範囲の広さ モジュール構造維持の難しさ ⾮効率なスケーリング Monolith “Does everything”

Slide 11

Slide 11 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. “Monolith”という呼称に込められるニュアンス 関係者間調整のオーバーヘッド 変更による影響範囲の広さ モジュール構造維持の難しさ ⾮効率なスケーリング テスト・ビルドに要する時間の⻑さ Monolith “Does everything”

Slide 12

Slide 12 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービス化に期待される効果 変更による影響範囲の局所化 モジュール境界の維持しやすさ 独⽴したデプロイとスケーリング ⾃律的なチームによる開発・運⽤ Polyglot(-able) “Does one thing”

Slide 13

Slide 13 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 14

Slide 14 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App

Slide 15

Slide 15 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 16

Slide 16 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. 現実世界のモノリスは複雑

Slide 17

Slide 17 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. 現実世界のモノリスは複雑 . . . [02/14:14:16:18] ”POST /something" 201 2000ms . . . . . . . [02/14:14:16:18] ”POST /something" 201 2000ms . . . .

Slide 18

Slide 18 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. 現実世界のモノリスは複雑 2.0 sec. 時間がかかったのはどこ︖ ① ALB - アプリ︖ ② アプリ - S3︖ ③ アプリ - SQS︖ ④ アプリ内処理︖ ➡ AWS X-Ray

Slide 19

Slide 19 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS X-Ray 分散アプリケーションの分析と調査のための分散トレーシングサービス • サービス間通信の可視化 • エラー原因のサービス発⾒ • パフォーマンス上のボトル ネック発⾒

Slide 20

Slide 20 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. 総処理時間 最も時間を要した処理 呼び出し順 AWS X-Ray 分散アプリケーションの分析と調査のための分散トレーシングサービス

Slide 21

Slide 21 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.AWSXRayRecorderBuilder; ... public class WebConfig { ... static { AWSXRayRecorderBuilder builder = AWSXRayRecorderBuilder.standard() .withPlugin(new EC2Plugin()).withPlugin(new ECSPlugin()); URL ruleFile = WebConfig.class.getResource("/sampling-rules.json"); builder.withSamplingStrategy(new LocalizedSamplingStrategy(ruleFile)); AWSXRay.setGlobalRecorder(builder.build()); } } AWS X-Ray 分散アプリケーションの分析と調査のための分散トレーシングサービス

Slide 22

Slide 22 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 23

Slide 23 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 24

Slide 24 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービスの課題 サービスの適切な分割

Slide 25

Slide 25 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービスの課題 サービスの適切な分割 テストの難しさ

Slide 26

Slide 26 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービスの課題 サービスの適切な分割 テストの難しさ 影響範囲を⾃サービス内に収める難しさ

Slide 27

Slide 27 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. マイクロサービスの課題 サービスの適切な分割 テストの難しさ 影響範囲を⾃サービス内に収める難しさ サービス間通信の信頼性 - Reliability サービス間通信の可観測性 - Observability

Slide 28

Slide 28 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス間通信の信頼性- Reliability API MICROSERVICE MICROSERVICE ❔ • マイクロサービスは⼀種の分散システム • ネットワーク経由通信 = 失敗が前提 • ⼀時的なネットワーク状況による失敗 • 対向サービスの不具合・停⽌による失敗 • 防御的実装の必要性

Slide 29

Slide 29 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス間通信の信頼性を⾼める防御的実装- Reliability API MICROSERVICE MICROSERVICE 1. 呼出先サービスの位置は⼀定ではない → サービスディスカバリ 2. ⼀時的な呼び出しの失敗 → リトライ (w/ Exponential back-off) 3. 継続した呼び出しの失敗 → サーキットブレーカー 4. 呼出先サービスのパフォーマンス悪化 → タイムアウト 5. 呼出<元>システムの不具合 → スロットリング

Slide 30

Slide 30 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス間通信の可観測性- Observability • マイクロサービス群 = 1つのシステム • 外形的には「システム」の失敗 • 失敗は、どこで、なぜ起きたのか • システムを観測できる実装の必要性 API MICROSERVICE EVENT MICROSERVICE QUEUE OBJECT STORAGE CACHE API MICROSERVICE DATABASE

Slide 31

Slide 31 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス間通信の可観測性を⾼める実装- Observability • ログ/メトリクス/トレース情報出⼒ • 各サービスの既存実装の出⼒フォー マットが不揃いだとコンテキストが ⾒えない • 「システム」全体の観測には不向き ➡ 全サービスの出⼒フォーマット統⼀ API MICROSERVICE EVENT MICROSERVICE QUEUE OBJECT STORAGE CACHE API MICROSERVICE DATABASE

Slide 32

Slide 32 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. 全てを実装しきることは可能なのか • 各サービスへの個別実装 • 複数の⾔語やフレームワーク • 実装担当者と品質担保⽅法 • 統⼀フォーマットの変更 • ⼀貫性ある実現⽅法が必要 MICROSERVICE API API MICROSERVICE MICROSERVICE EVENT API MICROSERVICE EVENT API MICROSERVICE DATABASE DATABASE QUEUE OBJECT STORAGE CACHE

Slide 33

Slide 33 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. ⼀貫性あるサービス間通信の信頼性/可観測性実装 『共通ライブラリ』という解決策 アプリケーション コード MICROSERVICE 共通ライブラリ ü サービスディスカバリ ü リトライ ü タイムアウト ü スロットリング ü etc., etc.

Slide 34

Slide 34 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス間通信の信頼性と可観測性の実装 『共通ライブラリ』という解決策︖ アプリケーションコード 共通ライブラリ アプリケーション 改修が必要… xx⾔語⽤の ライブラリがないです 共通ライブラリで パフォーマンスが 悪化しました 先⽇新規開発された マイクロサービスが ライブラリを⼊れて ないらしい 最新ライブラリに 移⾏してくれない チームがいます フォーマット変更 したいけど全ライブラリ 改修はしたくない yy⾔語 v2 対応は まだですか︖ この⾔語 書いたことない…

Slide 35

Slide 35 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス間通信の信頼性と可観測性の実装 共通ライブラリによる実装は⼀貫性の担保が難しい アプリケーションコード 共通ライブラリ アプリケーション 改修が必要︖ このバージョンの ときだけクラッシュ します 共通ライブラリで パフォーマンスが 悪化しました 先⽇新規開発された マイクロサービスが ライブラリを⼊れて ないらしい v2 ライブラリに 移⾏してくれない チームがいます フォーマット変更は したいが全ライブラリ 改修はしたくない XX⾔語 v3 対応は まだですか︖ こんな⾔語 書いたことない… アプリケーション コード MICROSERVICE ⼀貫した実装「共通ライブラリ」が密結合を⽣んでしまう

Slide 36

Slide 36 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. プロキシ トラフィック アプリケーション サービス間通信の信頼性と可観測性の実現 プロキシへのオフロードというアイデア

Slide 37

Slide 37 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. サービス間通信の信頼性と可観測性の実現 プロキシへのオフロードというアイデア A B C D

Slide 38

Slide 38 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 39

Slide 39 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. B A サービス間通信の信頼性と可観測性の実装 プロキシへのオフロード - サービスメッシュ リトライ、 タイムアウト、 サービスディスカバ リ、 etc. 統⼀フォーマットでの ログやメトリクス、トレーシング情報の出⼒

Slide 40

Slide 40 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. OSS プロジェクト コミュニティサポートと多くのインテグレーション 多くの本番環境利⽤実績 CNCF “Graduated” プロジェクト Lyft 社が 2016 年に開始 Envoy Proxy

Slide 41

Slide 41 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Envoy proxy の設定 A static_resources: listeners: - address: socket_address: address: 0.0.0.0 port_value: 80 # ~ snip ~ # virtual_hosts: - name: backend domains: - "*" routes: - match: prefix: "/service/1" route: cluster: service1 - match: prefix: "/service/2" route: cluster: service2 clusters: - name: service1 # ~ snip ~ # load_assignment: cluster_name: service1 endpoints: - lb_endpoints: - endpoint: address: socket_address: address: service1 port_value: 80 - name: service2 # ~ snip ~ # load_assignment: cluster_name: service2 endpoints: - lb_endpoints: - endpoint: address: socket_address: address: service2 port_value: 80 # ~ snip ~ #

Slide 42

Slide 42 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. プロキシとアプリケーションの密結合 異なるライフサイクルとオペレーションモデル § プロキシを選択した理由は⼀貫性と疎結合性 § ビジネスロジックとしての関⼼(=アプリケーション) § マイクロサービスとしての関⼼(=システムアーキテクチャ) § プロキシ設定に設定ファイルを利⽤する § → 設定変更にデプロイ(と再起動)が必要 § それぞれのライフサイクルとオペレーションモデルは 本質的に異なる § プロキシとアプリケーションが再び密結合に︖

Slide 43

Slide 43 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS App Mesh Envoy proxy の動的設定変更を可能にする

Slide 44

Slide 44 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Mesh はサービスメッシュの コントロールプレーン • メッシュ全体構造の定義 • メッシュを構成するプロキシ に対し動的に設定を配信 AWS App Mesh コントロール プレーン

Slide 45

Slide 45 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS App Mesh アプリケーションレベルのネットワーク ログ・メトリクス・トレース情報の容易な出⼒ クライアントサイドのトラフィック・ルーティングポリシー クラスタやサービスにまたがるメッシュの構築 Amazon ECS AWS Fargate Amazon EKS Kubernetes on EC2 Amazon EC2 マネージドコントロールプレーン 容易なオペレーション ⾼いスケーラビリティ

Slide 46

Slide 46 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. トラフィックコントロール • 負荷分散 • 重み付け分散 • サービスディスカバリ (DNS, AWS Cloud Map) • ヘルスチェック • リトライ • タイムアウト* • サーキットブレーカー* トラフィック管理 ルーティング • プロトコルサポート (HTTP, TCP, HTTP2/gRPC) • Path ベース • Header ベース • Cookie ベース • Host ベース *On Roadmap

Slide 47

Slide 47 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. ロギング • HTTP アクセスログ • Amazon CloudWatch Logs • Amazon ECS, Amazon EKS, AWS Fargate におけるコンテナログ Observability メトリクス • CloudWatch メトリクス • StatsD (with tags) • Prometheus 分散トレーシング • AWS X-Ray • Envoy がサポートするその他のトレーシングドライバ

Slide 48

Slide 48 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Mesh - Getting Started サービス概要 https://aws.amazon.com/app-mesh ドキュメント https://docs.aws.amazon.com/app-mesh/index.html サンプルアプリケーション https://github.com/aws/aws-app-mesh-examples ü AWS App Mesh のご利⽤に追加料⾦は発⽣しません ü 東京リージョンで利⽤可能

Slide 49

Slide 49 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Mesh - Kubernetes Related Projects AWS App Mesh Controller for K8s https://github.com/aws/aws-app-mesh-controller- for-k8s AWS App Mesh sidecar injector for EKS https://github.com/aws/aws-app-mesh-inject Weaveworks/Flagger https://flagger.app/

Slide 50

Slide 50 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Mesh パブリックロードマップ https://github.com/aws/aws-app-mesh-roadmap/projects/1 機能要望、フィードバックも お待ちしております

Slide 51

Slide 51 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. App Mesh パブリックロードマップ Client-side load balancing Path-based routing Egress traffic AWS Cloud Map service discovery AWS Cloud Map SD w/ selectors App Mesh console AWS X-Ray tracing Envoy supported tracing CloudWatch Logs, metrics StatsD, Prometheus metrics Amazon ECS, Fargate integration Amazon EKS integration Amazon EC2 integration AWS PrivateLink Header-based routing Cookie-based routing Host-based routing Retry policy HTTP2/gRPC End-to-end encryption w/ ACM(*) Mesh across multi AWS accounts(*) Near term Ingress routing Timeout policy mTLS HIPPA eligibility Longer term Circuit breaker policy API Gateway integration Lambda integration Open-sourcing App Mesh’s ADS Today *Public preview

Slide 52

Slide 52 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. AWS Container Services パブリックロードマップ https://github.com/aws/containers-roadmap/projects/1 機能要望、フィードバックも お待ちしております

Slide 53

Slide 53 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 54

Slide 54 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved.

Slide 55

Slide 55 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. • サービスメッシュ • サービス間通信の信頼性と可観測性を確保する⼀貫性ある⼿段の⼀つ • AWS App Mesh • サービスメッシュのマネージドコントロールプレーン • クラスタやサービスにまたがって動的なメッシュを構築できる あなたのシステムにサービスメッシュは必要か

Slide 56

Slide 56 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. • そもそもマイクロサービスにする必然性があるか • コードの品質やテストのなさをモノリスのせいにしていないか • マイクロサービスにしてもこれらが不要になるわけではない • サービスメッシュが解決しないマイクロサービスのデメリットに ⽴ち向かう価値があるか • マイクロサービス化により⽣まれる複雑性は対価に⾒合うのか • API 仕様だけを信頼し、相互に実装していく組織に変⾰できるか • API の後⽅互換性を保つ強い意志を持てるか あなたのシステムにサービスメッシュは必要か

Slide 57

Slide 57 text

© 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. • 本当にサービスメッシュか • X-Ray の分散トレーシング • ALB(Application Load Balancer) のトラフィックコントロール • AWS CodeDeploy の Blue/Green・カナリーデプロイ • OSS ライブラリの利⽤で⼗分低コストなケース • 動的なサービスメッシュは必要なのか • 静的設定ファイルを利⽤し、Envoy を高機能プロキシとして利⽤する あなたのシステムにサービスメッシュは必要か 課題に対する必要性を検討する

Slide 58

Slide 58 text

Thank you! © 2020, Amazon Web Services, Inc. or its affiliates. All rights reserved. Yasuhiro “Tori” Hara [email protected] toricls