Previous slide
Next slide
Toggle fullscreen
Open presenter view
Microsoft Azure で実現する
最新クラウドアーキテクチャ
Tatsuro Shibamura @shibayan
私について
芝村 達郎 @shibayan
ZEN Architects Distinguished Engineer
Microsoft MVP for Microsoft Azure
Blog :
https://blog.shibayan.jp
GitHub :
https://github.com/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 を導入し、セキュリティのベストプラクティスを一括で適用する