Azureクラウドネイティブスタックで、すばやく最大限の価値を提供――サービス選択のポイントは? 【デブサミ2019】
【15-C-2】デベロッパーのためのAzureクラウドネイティブスタック 〜 提供したい価値からはじめる高速+高可用+高付加価値ソリューション
オブザーバビリティを実現し、データストアに伴う複雑化を解決するサービス
高まる抽象化、アプリケーションのマイクロサービス化に伴い、プラットフォームだけではなくアプリを含めた全体ステートの把握、つまりオブザーバビリティ(可観測性)が重要になっている。「可観測性はモニタリング、ロギング、トレーシング、ビジュアライゼーションといった要素で構成され、それぞれを実現するツールも登場している。しかし、オブザーバビリティを実現するには、ツールを組み合わせる必要があるため、当然複雑なものとなる。それに伴うコストなどが増大してしまう問題がある」と川崎氏。
こういったオブザーバビリティに関する問題を解決してくれるのが、Azure Monitor for containersだ。「Azure Monitor for containersを有効化することで、ログやメトリックの収集を自動で行うだけではない。リテンションの管理、ログの検索なども自動で行われるため、オブザーバビリティのために余分なコストをかける必要がなくなる。本業のビジネスに集中したい人にとっては、欠かせないモニタリングツールだ」と川崎氏は言う。
クラウドネイティブになると、データストアの活用も重要になる。なぜなら、コンテナアプリケーションとデータのライフサイクルは異なるからだ。コンテナはデプロイ単位でライフサイクルが終了する。つまりコンテナ起動中に保持したデータは消える。したがってデータを永続化する必要があり、その対応策としては、次の2つが考えられる。1つはコンテナのホストOS側にデータを保存する。もう1つは外のストレージやデータストアに保存する方法だ。
では、Kubernetesでのステートフルワークロードに対応するにはどうすれば良いか。川崎氏のおすすめは、弾力性や回復性をネイティブに備えているPaaSを利用することだという。「PaaSを利用することで、デプロイメントや運用管理の単純化を実現できる」と川崎氏。主にステートレスワークロードをAKSで展開し、ステート・永続化データ対応はステートフルワークロード専用PaaSと連携するという、ワークロードに応じた良いところ取り戦略が得策だというのである。
もう1つ、広域災害対策を意識するのであれば、データをKubernetesに置かず、外に持つ方法が有用だ。「詳しくは『しくみがわかるKubernetes Azureで動かしながら学ぶコンセプトと実践知識』という書籍を読んでほしい」と語り、クラスタレス、ノードレスコンテナの話題へと移った。
通常、Kubernetesを動かすときはクラスタの作成が必要となる。しかし「Azure Container Instances(ACI)」であれば、クラスタは必要なく、コンテナ1つから使える。ACIはマイクロソフトがウォームアップしたサーバインスタンスを用意しており、コンテナを動かすために必要なメモリの量を投げかけるだけで、高速にスタートアップできる。
「ロードテストや大量エンコーディングなど瞬発的なものや、予測可能なバースト型のワークロードで使用することに適している」(川崎氏)
またKubernetesクラスタから外部サービスをプラグインとして利用可能にするOSSプロジェクト「Virtual Kubelet」とACIを組み合わせることで、VMおよびACI上で動作するPodをシームレスに渡すKubernetesサービスを構築できる。つまりVirtual Nodeを使用したAKSクラスタからのACI実行が可能になる。
これはHPA(Podを横にオートスケール)、VPA(PodのResource allocationをスケール)、CA(ノードの数をスケール)のほか、Virtual NodeのPodを外部メトリックに、横にスケールする「Virtual Node Autoscaler(名前がないので川崎氏が勝手に名付けたとのこと)」に応用できるという。
例えば、Prometheus Metric Adapterを利用し、Virtual NodeのPodをメトリックに応じて自動スケールさせることができる。デモでは、Virtual NodeのPodを50個、手動スケールさせてその立ち上がりの速さとスケール能力のデモを実施し、その可能性を示した。
技術やアーキテクチャは適材適所で選択しよう
最後はサーバレス(FaaS)について。FaaSは高度な抽象化、イベントドリブンで自動スケール、使った分だけ細かく課金できるといった特徴を持つ。そのため、FaaSは小さいコードやステートレス(毎回作って実行する)、短時間で終わる処理に向いている。「非常に大きなメリットが得られる適用領域がある」と川崎氏は次の例を挙げた。それがWebやモバイルアプリのバックエンド、大量統計情報のストリーム処理やアップロードされたファイル解析などのリアルタイム処理、Webbookによる疎な連携などだ。
もちろん、ロングランニング処理、ステートフルな処理に弱かったり、複雑化しやすいといった問題もある。だが、FaaSにも新しいパラダイムが登場している。それがAzure Functions拡張機能で提供している「Durable Functions」だ。
サーバレス環境でステートフル関数を記述できるプログラミングモデル。このモデルを使用すると、オーケストレーター関数を使用してステートフルワークフローを定義できるようになる。「Durable Functionsを使うと見通しが良くなり、読みやすい形で実現できるところがメリットだ」と川崎氏は紹介する。
最後に、川崎氏は次のように語り、セッションを締めた。
「技術やアーキテクチャを適材適所で選択して、最大限の付加価値を創造しよう。空いた時間を新たなイノベーションに使おう。何よりも楽しいことに費やしていこう」
お問い合わせ
日本マイクロソフト株式会社
この記事は参考になりましたか?
既に会員の方はを行ってください。
- この記事の著者
-
CodeZine編集部(コードジンヘンシュウブ)
CodeZineは、株式会社翔泳社が運営する開発者のための情報メディアです。日々の開発に取り組むエンジニアやテクノロジーを学びたい方に向けて、プログラミングやAI活用、開発ツール、エンジニアの学びとキャリアに関する記事をお届けしています。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社
この記事は参考になりましたか?
この記事をシェア
