はじめに
Azure ワークロードの品質向上に使用できる基本原則として「 Azure Well-Architected Framework 」と呼ばれるものがあります。 Azure Well-Architected Framework は 「コストの最適化」「オペレーショナル エクセレンス」「パフォーマンス効率」「信頼性」「セキュリティ」 の 5 つの柱で構成され、それぞれに細かな指針や確認事項が示されています。
また、自身の Azure 環境がどの程度 Well-Architected Framework に準じているかを評価するための仕組みとして「Azure Well-Architected Review」があります。これは、以下のリンク先で選択肢にチェックを入れていくだけで、誰でも利用できます。
2021 年 2 月現在、Azure Well-Architected Review は英語でのみ提供されています。項目数が多く設問ごとに頭の中で翻訳していると時間がかかると思い、現在のチェックリストを一通り日本語訳してみました。
本記事では 5 つの柱の中から 「パフォーマンス効率」 を取り上げます。翻訳に自信のない箇所や意訳した箇所については補足で記述していますが、より適切な訳し方があればコメントいただけると幸いです。
How are you designing your workload to scale?
スケールするためにワークロードをどのように設計しているか?
- Have the right data store to match usage.
- Use dynamic service discovery for microservices applications.
- Utilize connection pooling.
- Compress data when appropriate.
- Use locking to ensure consistency.
- Use async calls and waits to prevent locks.
- Use microservices when you can.
- Use queues.
- Avoid sticky sessions and client affinity.
- Automatically scale when load increases.
- Use background jobs.
- None of the above.
- 使用量に合った適切なデータストアを持つ。
- マイクロサービスアプリケーションのために、動的なサービス検知を使う。
- コネクションプーリングを活用している。
- 必要に応じてデータを圧縮する。
- 一貫性を確保するために、ロックを使用する。
- ロックを防ぐために、非同期呼び出しや待機を使う。
- 可能な場合に、マイクロサービスを使う。
- キューを使う。
- スティッキーセッションやクライアントアフィニティの使用を避ける。
- 負荷増加時に、自動スケールする。
- バックグランドジョブを使う。
- 上記いずれでもない。
How are you thinking about performance?
パフォーマンスについて、どのように考えているか?
- Have well-defined performance goals.
- Use horizontal scaling when possible.
- Have policies to scale in and scale down when my load decreases.
- Understand the performance bottlenecks.
- Use idempotent operations.
- None of the above.
- 十分に定義されたパフォーマンスのゴールを持つ。
- 可能な場合に、水平スケーリングを使う。
- 負荷が減少した場合にスケールイン/ダウンするためのポリシーを持つ。
- パフォーマンスのボトルネックを理解している。
- 冪等な手順を用いる。
- 上記いずれでもない。
How are you handling user load?
ユーザーの負荷をどのようにハンドリングするか?
- Run tests at peak load.
- Have awareness about the time taken to scale in response to events.
- None of the above.
- ピーク時を想定して負荷テストを実施する。
- イベントに応じてスケールするのに要する時間について意識を持つ。
- 上記いずれでもない。
補足 1
-
Have awareness~
「考慮している」ぐらいの意訳でもいいかもしれないです。
How are you ensuring you have sufficient capacity?
十分な容量を持つことをどのように確認するか?
- Use a Content Delivery Networks (CDN) if applicable.
- Have a strategy in place to manage events that may cause a spike in load.
- Optimized resource choices (vm, database sizing, etc) to match the needs of my application.
- Configured scaling policies by using the appropriate metrics.
- Automatically schedule autoscaling to add resources based on time of day trends.
- None of the above.
- 該当する場合、CDN を使う。
- 負荷のスパイクを引き起こすイベントを管理するための戦略を持つ。
- VM やデータベースのサイジング等で、アプリケーションの要求に見合った最適なリソースを選定している。
- 適切なメトリクスを使うことで、スケーリングのポリシーが構成されている。
- 時間帯の傾向に基づいてリソースを追加するためのオートスケールがスケジューリングされている。
- 上記いずれでもない。
補足 2
-
~in place~
はあえて訳さず省略した方がしっくりきたので、そうしています。 -
Automatically schedule autoscaling~
「オートスケールが自動スケジューリング」だと冗長なため、省いた訳としています。
How are you managing your data to handle scale?
スケールをハンドリングするために、データをどのように管理するか?
- Design for eventual consistency.
- Use sharding for database storage when appropriate.
- Minimize the load on the data store.
- Normalize the data appropriately.
- Optimize database queries and indexes.
- Document plans for data growth and retention.
- None of the above.
- 結果整合性に基づき設計する。
- 必要に応じて、データベースのストレージを共有する。
- データストアの負荷を最小化する。
- データを適切に正規化する。
- データベースのクエリーやインデックスを最適化する。
- データの増加や保持のために、計画を文書化する。
- 上記いずれでもない。
How are you monitoring to ensure the workload is scaling appropriately?
ワークロードが適切にスケールしていることを確認するために、どのように監視するか?
- Track when resources scale in and out.
- Have an overall monitoring strategy for scalability.
- None of the above.
- リソースがスケールイン/アウトしたことを追跡する。
- スケーラビリティのための全体的な監視戦略を持つ。
- 上記いずれでもない。
まとめ
今回は「パフォーマンス効率」を取り上げました。リストの数自体は他の柱と比べて少ないですが、一つ一つがディープなテーマであるため実践できるとワークロードを大きく強化できるのではと感じました。
次回は「信頼性」の予定です。
参考
Microsoft Azure Well-Architected Framework
関連記事
Azure Well-Architected Review の日本語訳~コストの最適化編~(2021 年 2 月時点)
Azure Well-Architected Review の日本語訳~オペレーショナル エクセレンス~(2021 年 2 月時点)