Microsoft Azure で実現する
最新クラウドアーキテクチャ

Tatsuro Shibamura @shibayan

私について

芝村 達郎 @shibayan

本日お伝えしたいこと

Azure を使うと最新のクラウドアーキテクチャを簡単に実現できる

マネージドサービスは正しく使えば怖くない

開発者・チームを疎かにするとアーキテクチャは失敗する

最新のクラウドアーキテクチャとは?

最新のクラウドアーキテクチャとは、常にアップデートが可能な疎結合アーキテクチャ

モノリシック、マイクロサービスという視点ではない

  • 疎結合にして常にアップデートが可能なアーキテクチャを目指す
  • 疎結合なアーキテクチャを実現するためのサービスが Azure には用意されている

なぜ疎結合なアーキテクチャが重要なのか

大前提:アーキテクチャは設計した瞬間から古くなる

クラウドの世界では設計が完了した瞬間が最新、その後は古くなる一方

  • Azure サービスのアップデートは異次元の速度
  • サービスの選定を間違えると、実装が完了した時点で陳腐化することも度々

より優れたサービスが登場する可能性を理解しておく

  • 疎結合なアーキテクチャにすることで部分的なアップデートを可能にする

大前提:大量のコンピューティングリソースが使える

スケールアップではなくスケールアウトの容易さで考える

  • バッチ処理を書くと並列実行・スケーリングが難しい
  • メッセージングを利用したイベントドリブンで実現出来ないかを優先する

実行中にインスタンスが追加・削除されることを前提にする

  • 疎結合なアーキテクチャではスケーリングに柔軟に対応可能

大前提:使われているハードウェアの信頼性は低い

ハードウェアの信頼性の低さをソフトウェアで補っている

  • 動作するアプリケーションもソフトウェアで信頼性を高める必要がある
  • 信頼性を高める方法は一般化され、広く公開されている

リトライが容易な設計、冪等性の担保が重要

  • マネージドサービスは意図しないタイミングで再起動される
  • 疎結合なアーキテクチャはリトライと冪等性の担保が行いやすい

最新のクラウドアーキテクチャが必要な理由は?

最新のクラウドアーキテクチャで実現したい要素

高いスケーラビリティと可用性

  • PaaS / Serverless とイベントドリブンを活用した疎結合なアーキテクチャ

サービス運用のコスト削減

  • マネージドサービスでリソース自体のコストと人的コストの両方を最適化

開発体験の向上による価値提供のスピードアップ

  • Visual Studio Code や GitHub を組み合わせて開発体験を向上
  • DevOps / IaC を導入し、自動化によってアジリティを高める

全てに対応できるアーキテクチャは存在しない

自分たちが何を必要としているのかを、正確に理解して共有する

  • アプリケーションによって必要なスケールや可用性レベルはバラバラ
  • 過剰なアーキテクチャを構築しないように注意する

手段と目的を間違えないようにする

  • あくまでも最新のクラウドアーキテクチャは手段でしかない
  • 最新のクラウドアーキテクチャを構築するのが目的になってはいけない

高いスケーラビリティと可用性を実現する

アプリケーションを小さく作り、疎結合にする

開発やテスト、デプロイが行いやすくなり、顧客への価値提供を早められる

  • 規模に比べて過剰に小さく作るなど、粒度を間違わないようにする
  • アプリケーションの要件によって適切な粒度は異なる

利用するサービスやリソース数は必然的に多くなる

  • 実現するために必須となるのは自動化(DevOps / IaC)

実証済みのデザインパターンを最優先する

ソフトウェアの世界と同様にクラウドの世界にもデザインパターンが存在する

  • 当たり前と言えるリトライ自体もデザインパターンとして紹介されている
  • そういった当たり前を言語化し、リスト化されていることが重要

複数のデザインパターンを組み合わせて目的のアーキテクチャを実現する

サービス運用のコスト削減を目指す

PaaS / Serverless なサービスを積極的に利用する

Azure は元々 PaaS から始まったクラウドサービス

  • 100% 活用するためには PaaS / Serverless サービスの利用が必須と言える
  • 必要なタイミングで必要なだけリソースを確保出来る

PaaS / Serverless を最適な場面で組み合わせてデザインパターンを実装する

シナリオに合わせて最適なデータストアを選択する

1 つのアーキテクチャに複数のデータストアを利用するのは基本

  • 特にデータストアに関しては相反する要件が求められるケースも多い
  • 読み込み・書き込みで別々のデータストアを用意して実現する
    • データの同期と一貫性を担保するために、Azure のサービスを利用する

データストアは絶対に 1 つという発想を捨てる

開発体験の向上による価値提供のスピードアップ

Visual Studio Code / GitHub との高度な連携

開発中から実運用に至るまで、必要な機能をフルサポート

  • Azure 側にも開発初期から DevOps を導入するための機能が提供されている

開発者の生産性と安全性を高める

自動化を推進し、開発者による手動での作業を無くす

  • DevOps / IaC の全面的な導入を行い、徹底することでアジリティを高める

そもそも開発者が危険な操作を行えないようにする

  • Azure Policy / Azure Active Directory / RBAC などの組み込み機能を活用する

最新のクラウドアーキテクチャとは
常にアップデートが可能な疎結合アーキテクチャ

実現するためのサービスが Azure には全て用意されている

ご清聴ありがとうございました

Q. 利用する Azure サービスは最小限にした方が良いのでは?

A. アーキテクチャの構成要素を深く理解し、最適な Azure サービスを惜しみなく使う

  • フロントエンド・バックエンド・バッチ処理など、明らかに特性の異なる処理に単一のサービスを適用すると歪みと妥協が必ず生じる
    • その妥協した部分が後々のボトルネックとなり、アプリケーション全体へ影響を及ぼす
  • 最小限にしたい理由は、主に経験不足による不安と不完全な自動化

Q. 多くの Azure サービスを使うことに不安を感じる。セキュリティ面でも管理できるのか心配

A. 心配は経験不足によるもの、実際に手を動かすことで解消出来る

  • ワークショップ・ハンズオン・ハッカソンなどを活用する
  • 管理面は DevOps / IaC を活用した自動化によって解消される
    • 開発者が Azure Portal や Azure CLI を使って直接作業することを不要にする
  • Azure Policy や Microsoft Defender for Cloud を導入し、セキュリティのベストプラクティスを一括で適用する