Upgrade to Pro — share decks privately, control downloads, hide ads and more …

クラウド・ネイティブ・アプリケーション

F6df8bd336f1ff47494a43c68a562bfa?s=47 satokota
July 28, 2021
310

 クラウド・ネイティブ・アプリケーション

F6df8bd336f1ff47494a43c68a562bfa?s=128

satokota

July 28, 2021
Tweet

Transcript

  1. クラウド・ネイティブ・アプリケーション マイクロサービスとコンテナのMarriage 樽澤広亨 HITARUSA@microsoft.com 日本マイクロソフト株式会社 カスタマーサクセス事業本部.App Innovationアーキテクト本部

  2. 自己紹介:樽澤広亨 (たるさわひろゆき) クラウド・ソリューション・アーキテクト 日本マイクロソフト株式会社 カスタマーサクセス事業本部.App Innovationアーキテクト本部 過去) 日本IBM クラウド事業本部, ソフトウェア事業本部,

    … エバンジェリスト, アーキテクト, 技術営業, 技術支援, サービス・デリバリー 米国IBM ソフトウェア開発研究所 ソフトウェア製品開発エンジニア 情報処理学会. 情報企画調査会. SC38専門委員 ISO IEC JTC1/SC38 のミラー・コミッティにて クラウド国際標準 & JIS策定に従事
  3. 絵で見てわかるマイクロサービスの仕組み 樽澤広亨著・監修 佐々木敦守/森山京平/松井学/石井真一/三宅剛史著 翔泳社発行 ISBN:978-4798165431 ハードコピー: ¥2,728 Kindle版: ¥2,728 Amazon

    Japan売れ筋ランキング(2021/ 7/12) 開発技法:6位 システム管理・監査:7位
  4. 目標 • マイクロサービスの基礎知識を理解する

  5. 目次 • 動機 • マイクロサービス概要 • Dapr ~ Distributed Application

    Runtime
  6. 動機

  7. クラウド・ネイティブ・コンピューティングを実現する 主要技術要素 Cloud Native Computing Foundation 初期2015年当時のFAQ/Charterより コンテナ ✓ スピーディ,

    コンパクト, ✓ ポータブルな仮想環境 動的オーケストレーション ✓ コンテナ・クラスターの管理 ✓ ルーティング, 負荷分散, スケール, 高可用性… マイクロサービス ✓ スピーディでフレキシブルな アプリ開発・運用・保守
  8. マイクロサービス = 小さなサービス

  9. このページは意図的にブランクとしております。 Chris Richardson Microservices Patterns: With examples in Java Manning

    Publications 978-1617294549
  10. 違いがわかりますか? James Lewis, Martin Fowler Microservices a definition of this

    new architectural term https://martinfowler.com/articles/microservices.html このページは意図的にブランクとしております。
  11. どのように作ればよいのでしょう? James Lewis, Martin Fowler Microservices a definition of this

    new architectural term https://martinfowler.com/articles/microservices.html このページは意図的にブランクとしております。
  12. マイクロサービス概要

  13. 概要 モダンなアプリケーション開発・運用の アーキテクチャー・スタイル 特徴: ⚫アプリケーション・コンポーネント個別の新規開発、保守が容易 用途: ⚫クラウド・ネイティブ・アプリケーション開発・運用に採用されることが多い

  14. マイクロサービス:特徴 ⚫ きめ細かなアプリケーションのリリース ⚫ 素早く、柔軟なアプリケーションの変更・メンテナンス ⚫ きめ細かなスケーリング ⚫ 障害の影響を最小化 ⚫

    継続的デリバリー実現のベース ⚫ サービス間通信のレイテンシー ⚫ 分散配置されたデータの同期 ⚫ 分散コンピューティング環境の運用・監視コスト ⚫ システム全体の設計の整合性・統一性 ⚫ サービスモデリング手法の学習コスト 期待される 効果 課題・ 考慮事項
  15. マイクロサービス:コンセプト モノリス:ライブラリー・ベース マイクロサービス:サービス・ベース ライブラリー コア・プログラム ライブラリー ライブラリー ライブラリー サービス サービス

    サービス サービス サービス リンク 密結合 リンク 密結合 リンク 密結合 リンク 密結合 疎結合 REST メッセージング 疎結合 REST メッセージング 疎結合 REST メッセージング 疎結合 REST メッセージング ✓ 各アプリ・コンポーネントが密結合 ✓ アプリケーションの変更が難しい ✓ 各アプリ・コンポーネントが疎結合 ✓ アプリケーションの変更が容易
  16. サービスの基本構造:ドメイン指向でサービスを抽出 オーダー オーダー オーダー エンドポイント ビジネス ロジック サービス 実装すべきビジネス要件 ✓

    インターフェースとモデルを包含する インターフェース プログラミング・インターフェース モデル ビジネス・データ
  17. レイヤード・アーキテクチャー ドメイン駆動設計(DDD)に基づく構成例 ✓リクエストの受け取り ✓レスポンスの送信 ✓トランザクション管理 ✓DTOの変換 ✓アプリのコーディネーション ✓ドメイン・オブジェクトへの アクセス ✓ドメインの状態と振る

    舞い(業務処理実装) ✓他の層のサポート (データ, メッセージングへの アクセス) ドメイン層 サービス サービス サービス ユーザー インターフェース(UI)層 サービス サービス サービス アプリケーション層 サービス インフラストラクチャー層 サービス サービス
  18. レイヤード・アーキテクチャー視点:マイクロサービス・アーキテクチャー適用例 オーダードメイン アプリ層 ドメイン層 インフラ層 UI層 <<BFF>> オーダー REST <<BFF>>

    オーダー Web <<アダプター>> DB Driver <<アダプター>> DB Driver <<アダプター>> DB Driver <<アダプター>> DB Driver オーダー 会計 在庫 出荷 <<API Gateway>> オーダー・アプリ <<集約>> オーダー <<集約>> 会計 <<集約>> 在庫 <<集約>> 出荷 <<リポジトリー>> オーダー リポジトリー <<リポジトリー>> 会計 リポジトリー <<リポジトリー>> 在庫 リポジトリー <<リポジトリー>> 出荷 リポジトリー
  19. レイヤード・アーキテクチャー ドメイン層 サービス サービス サービス ユーザー インターフェース(UI)層 サービス サービス サービス

    アプリケーション層 サービス インフラストラクチャー層 サービス サービス ◆ シンプルでわかりやすい ◆ 拡張性があるとは言いがたい : 抽象(アプリ)が実装(インフラ)に依存しているため 抽象が実装に依存
  20. ヘキサゴナル・アーキテクチャー アプリケーション ドメイン サービス サービス サービス ◆アプリ・ドメイン中心, 入出力はポート&アダプタを介して連携 ◆拡張性に柔軟 :

    抽象(アプリ)と具象(インフラ)が分離 ポート&アダプタ REST アダプタ Web UI アダプタ Twillio アダプタ AI アダプタ Oracle アダプタ Twillio Msg Service Oracle DB AI Artificial Intelligence
  21. ヘキサゴナル・アーキテクチャー視点:マイクロサービス・アーキテクチャー適用例 オーダードメイン <<BFF>> オーダー REST <<BFF>> オーダー Web <<アダプター>> DB

    Driver <<アダプター>> DB Driver <<アダプター>> DB Driver <<アダプター>> DB Driver オーダー 会計 在庫 出荷 <<ヘキサゴナル・アーキテクチャー>> <<API Gateway>> オーダー・アプリ <<集約>> オーダー <<集約>> 会計 <<集約>> 在庫 <<集約>> 出荷 <<リポジトリー>> オーダー リポジトリー <<リポジトリー>> 会計 リポジトリー <<リポジトリー>> 在庫 リポジトリー <<リポジトリー>> 出荷 リポジトリー
  22. マイクロサービス・アーキテクチャー・スタイルの例 基盤・稼働環境 PaaS コンテナ&オーケストレーション ソフトウェア・ディファインド・ネットワーク(SDN) サービス・メッシュ ・・・ 開発・運用手法 DevOps アジャイル開発プロセス

    ドメイン駆動設計 (DDD) サイト・リライアビリティ・エンジニアリング(SRE) ・・・ 開発・運用環境 継続的インテグレーション(CI) 継続的デリバリー (CD) 継続的モニタリング (CM) ・・・ アプリケーション・インテグレーション Web API (REST, RPC) メッセージング API管理 結果整合性 ・・・ マイクロサービス・アーキテクチャー サービスを組み合わせてアプリケーションを構成するソフトウェア構造
  23. マイクロサービス・アーキテクチャー・スタイルを支えるDevOpsエコ・システム DevOps Center of Excellence 事業部門 ソフトウェア開発部門 ITシステム運用部門 ツールチェーン アジャイル開発プロセス

    1チーム体制 JIRA Git Jenkins Selenium JMeter Prometheus プロダクト・オーナー ドメイン・スペシャリスト アーキテクト SWエンジニア SRエンジニア 分析・設計 開発 運用 ✓ サポート ✓ ナレッジ共有 ✓ トレーニング ✓ 改善活動 タスク/バグ管理 CDパイプライン ソースコード/構成管理 テスト 監視 xUnit Skaffold 単体 テスト ビルド デプロイ
  24. Dapr Distributed Application Runtime

  25. Dapr : Distributed Application Runtime • 分散アプリケーションのためのプラットフォーム • オープン・ソース・ソフトウェア:https://docs.dapr.io/ •

    マイクロサービス化されたアプリケーションの稼働を想定 • 2021年2月バージョン1.0を発表 • 特徴 • 任意のXXXをサポート • プログラミング言語、フレームワーク、ロケーション • ステートレス&ステートフル・アプリケーション向け • イベント駆動 • ポータブル • メリット • 開発容易性 • ポータビリティ Any language, any framework, anywhere
  26. Dapr : Distributed Application Runtime • 全体像 dapr 任意のクラウド基盤 ⚫

    セルフ・ホスティド・モード ⚫ Kubernetes モード アプリケーション C++ Go Java Java Script Python RUST .NET PHP ⚫ 多様な言語、フレームワークをサポート 状態管理 ステートフル・サービスの コンテキストを保管 パブ/サブ スケーラブルで安全な メッセージング サービス 呼出 プラットフォーム非依存の 安全なサービス間通信 バインド 外部リソースをトリガー としたイベント駆動処理 可観測性 容易で包括的なサービス間 通信の監視 アクター バルク&分散処理のための 自己完結型プログラミング・ モデル シークレット 外部シークレットへの安全な アクセス gRPC API HTTP/2ベース高機能RPCプロトコル HTTP API Web APIで広く採用されているプロトコル
  27. クラウド・ネイティブ・アプリを支えるマイクロソフト・ソリューション ドメイン層 <<集約>> サービス ユーザー インターフェース(UI)層 <<BFF>> サービス アプリケーション層 <<API

    GW>> サービス インフラストラクチャー層 <<リポジトリー>> サービス ✓ リクエストの受け取り ✓ レスポンスの送信 ✓ トランザクション管理 ✓ DTOの変換 ✓ アプリのコーディネーション ✓ ドメイン・オブジェクトへのアク セス ✓ ドメインの状態と振る舞い (業務処理実装) ✓ 他の層のサポート (データ, メッセージングへの アクセス) 開発環境 アプリケーション・ランタイム ✓ ソースコード管理 ✓ バージョン管理 ✓ インテグレーション ✓ テスト ✓ デプロイ ✓ 開発言語、フレームワーク ✓ デプロイメント ✓ 監視 ✓ メトリクス、ログ、トレース集約 ✓ セキュリティ ✓ SLA、SLO ✓ 災害対策 ✓ ・・・
  28. クラウド・ネイティブ・アプリを支えるマイクロソフト・ソリューション ドメイン層 <<集約>> サービス ユーザー インターフェース(UI)層 <<BFF>> サービス アプリケーション層 <<API

    GW>> サービス インフラストラクチャー層 <<リポジトリー>> サービス ✓ リクエストの受け取り ✓ レスポンスの送信 ✓ トランザクション管理 ✓ DTOの変換 ✓ アプリのコーディネーション ✓ ドメイン・オブジェクトへのアク セス ✓ ドメインの状態と振る舞い (業務処理実装) ✓ 他の層のサポート (データ, メッセージングへの アクセス) 開発環境 アプリケーション・ランタイム ✓ ソースコード管理 ✓ バージョン管理 ✓ インテグレーション ✓ テスト ✓ デプロイ ✓ 開発言語、フレームワーク ✓ デプロイメント ✓ 監視 ✓ メトリクス、ログ、トレース集約 ✓ セキュリティ ✓ SLA、SLO ✓ 災害対策 ✓ ・・・ Azure Container Registry Azure DevOps オーケストレーター 連携基盤&ツール GitHub Azure Kubernetes Service Azure Spring Cloud Azure App Service Azure RedHat OpenShift Azure Function Azure Logic Apps Azure Service Bus Dapr C++ Go Java Java Script Python RUST .NET PHP
  29. None