クラウドネイティブとは何か

2023/04/02に公開

はじめに

2019年に株式会社ROBONを設立するにあたって、これから時代のソフトウェアのアーキテクチャはどうあるべきかを考えました。既にクラウドネイティブという言葉はあったと思いますが、私にはそれが何なのかよくわかりませんでした。

クラウドネイティブとは何か

定義

クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。

これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。

Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。

https://github.com/cncf/toc/blob/main/DEFINITION.md#日本語版

ごめんなさい。やっぱりわかりません。

クラウドとは何か

Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction. This cloud model is composed of five essential characteristics, three service models, and four deployment models.

https://www.nist.gov/publications/nist-definition-cloud-computing

クラウドコンピューティングは、共用の構成可能なコンピューティングリソース(ネットワーク、サーバー、ストレージ、アプリケーション、サービス)の集積に、どこからでも、簡便に、必要に応じて、ネットワーク経由でアクセスすることを可能とするモデルであり、最小限の利用手続きまたはサービスプロバイダとのやりとりで速やかに割当てられ提供されるものである。このクラウドモデルは5つの基本的な特徴と3つのサービスモデル、および4つの実装モデルによって構成される。

https://www.ipa.go.jp/security/reports/oversea/nist/ug65p90000019cp4-att/000025366.pdf

要するに「いつでも」「どこでも」「必要なだけ」計算資源が使えるのがクラウドだ。ということですよね。

クラウドらしいシステム

クラウドの定義が上記であるなら、クラウドらしいシステムとは、利用者が、「使いたい時」「使いたい場所で」「使いたい量だけ」使えるシステムなのではないでしょうか。

コンピューティングリソースのうちストレージは、どこかに物理的に存在している必要があります。でも、もしも一つしか存在していないとすると、その一つのストレージの本体や経路が故障すると「いつでも」が達成できません。ですから、ストレージは物理的に分散して複数配置する必要があります。

その他のリソースは、物理的には交換可能なので、ゼロからコールドスタートができれば「いつでも」「どこでも」「必要なだけ」が達成できそうです。あとは「ゼロからが当たり前」なのか、「(いろいろ制約があるけど)ゼロからでもできるよ」なのかの違いでしょうか。やはり、使わないときには全く使わない「ゼロからが当たり前」の方がクラウドらしい気がします。
また、「ゼロから」の場合、Function as a Service のような小さなソフトウェアの方が有利でしょう。

「ゼロからが当たり前」なら、要求量に応じて、どんどんコンピューティングリソースを使用して要求に応じることで拡張可能性の高いシステムとなるのと同時に、使えなくなったリソースが使えるリソースで置き換わることで耐障害性の高いシステムとなります。

まとめ

既にクラウドネイティブの定義はありますので、「ぼくがかんがえたさいきょうの」になってしまいますが、

  • 「使いたい時」「使いたい場所で」「使いたいだけ」上手にコンピューティングリソースを使うことがクラウドらしさ。
  • 上手に使うためには、専用リソースをできるだけ少なくして、できるだけ汎用のリソースで構成すべき。
  • 「ゼロからコールドスタートが当たり前」の要素のみで構成されたシステムは、クラウドネイティブ以前では困難なレベルのスケーラビリティとアベイラビリティを(クラウドベンダー任せの運用で)実現できる。

と考え、そこを目指すことにしました。

GitHubで編集を提案
株式会社ROBONの技術ブログ

Discussion