モニタリングは注目すべき価値があるものとなっている。膨大なデータワークロードを扱う企業にとって、データのモニタリングと計測の重要性がますます高まっているからだ。エコシステムの中に溢れる情報から真の洞察を得ようとする企業なら、市場に出回っている最新のモニタリングツールについて何らかの意見を抱いているだろう。
このIT分野はオープンソースと相性が良い。おそらく個人やコミュニティに属するソフトウェアアプリケーション開発の専門家が「コントロールと理解」を確立できることを好んでいるため、オープンソース空間にはモニタリングソフトウェアが多い。
しかし、そうしたイノベーションが、オープンなコミュニティから生まれたにせよ、独占的な巨大企業から生まれたにせよ、モニタリング分野における主要な課題は、企業内で急速に増大するデータ量に対応することだ。そのため、スケーラビリティ(拡張可能性)が重要となる。
本当に無限に拡張できるのか?
オープンソースのITモニタリングソリューションは、可能な限り「無限にスケール(拡張)できる」ものになる必要があるため、現在のツールがクラウドコンピューティングの中のいわゆるウェブ規模の世界で、どこまで拡張できるのかについて多くの議論がなされてきた。この分野のコメンテーターやアナリストの中には、既存のソフトウェアソリューション(たとえばITイベントのモニタリングとアラートを行うPrometheusなど)の「限界」が、持続可能性に主眼を置いた複数の競合企業の市場参入を招いたのだと主張する人もいる。
カリフォルニア州サンフランシスコに本社を置くVictoriaMetrics(ビクトリアメトリクス)は、その製品全体を、このスケーラビリティの課題を解決することを意識して設計している。同社は2018年、過去Google(グーグル)、Cloudflare(クラウドフレア)、Lyft(リフト)の勤務経験のある2人のウクライナ人エンジニアが創業した。2022年には、VictoriaMetricsはユーザーによるダウンロード数が5000万回に達したことを発表した。では、その魅力と技術の仕組みはどのようなものだろう?
VictoriaMetricsのCEOロマン・ハバロネンコは「パフォーマンス、シンプルさ、信頼性を重視することで、高いスケーラビリティと可用性の両立を実現しています。私たちは、本質的に運用しやすくするために、可動部品(調整を必要とする部品)をできるだけ少なくし、ソフトウェアコード間の余計な依存性がないことを常に心がけています。これこそが、私たちが開発を始めたそもそもの動機です。つまり、他のソリューションに存在する複雑さを取り除き、モニタリングを必要とするすべての人が使えるようにしたかったのです」という。
最近では、複数の衛星データを扱うプラットフォームOpen Cosmos(オープンコスモス)で、衛星の打ち上げと管理を支援する重要な役割を担っていることが明らかにされた。
ソフトウェアのスケーリングの仕組み
企業がモニタリングソリューションをスケーリングするためには、何とおりかの重要なやり方がある。以前にもここで、データベースシャーディングの概要について説明したが、今回の分析の文脈の中でそれをさらに説明しよう。
単に「スケーリング」と呼ばれることが多い従来の垂直スケーリングは、より多くのデータや負荷を処理するために1台のサーバーのリソースを増加させる手法だ。これはCPUをより強化し、RAMを増設し、ストレージ容量を拡張することで行われる。これは短期的には有効な方法で、多くのモニタリングソリューションが単一ノードでのスケーリングを得意としている。VictoriaMetricsの場合は、シングルノードあたり最大100万データポイント / 秒の取込レートに対応するスケーリングが可能だ。
しかし、限りなく無制限に近いスケーラビリティを実現するには、水平方向のスケーリング、すなわち「シャーディング」が最も効果的な手法だ。シャーディングとは、1つのデータセットを複数のデータベースに分散し、複数のマシンに保存できる手法である。これにより、大きなデータセットを小さな塊に分割して複数のデータノードに保存することができ、これによりシステムの総ストレージ容量が増えて、スケーラビリティを確保することができる。
水平方向のスケーリングを行うことで、ビッグデータや高負荷のワークロードを処理するための、ほぼ制限のないスケーラビリティが実現できる。
こうした小さなクラスタを構成しスケールアウト(拡大)するために最も効果的な方法が、マルチレイヤー(多層)アーキテクチャだ。シャーディングは、データベース全体の一部を保持する、より小さな計算インスタンス(シャード)にデータを分散させる。5つのシャードがある場合、5つの計算インスタンスがデータベース全体の1/5をそれぞれ保持することになる。
マルチレイヤーアーキテクチャを使うことで、ソフトウェアエンジニアは各シャードで扱われるデータの規模を拡大することができる。これによって、個々のシャードに対して、より小さなデータベースを追加して割り当てることができるようになるのだ。つまり、1つの大きなデータベースを5つのシャードに分割するのではなく、元のデータベースと5つのより小さなデータベースを、余分なスペースを使ったり、シャードを追加したりすることなく利用することもできるようになる。
データベースはマンションの建物のようなもの
ハバロネンコは次のように説明する「たとえば一棟のマンションを考えてみてください。この建物は、あらゆるものが入っている大きなデータベースを表しています。建物の各階がシャードです。マルチレイヤーではない単層構造では、各階には1つの部屋しか入ることができず追加の部屋は入れられません。規模を拡大しようとするときに、これは問題になります、各階ごとにまた別のシャードを追加しなければならなくなるからです。その結果、複数のシャードを持つシステムでは、ネットワークの容量、つまり建物の高さがボトルネックになってしまうのです。この限界を突破するため、マルチレイヤーアーキテクチャでは各階ごとに初めから複数の部屋を持たせて、各シャードに負荷を分散させます。こうすることで、より速く、より効率的に拡張できるようになるのです」
最後に、シンプルであることが重要だ。スケーラブルな分散システムを設計する場合には、できるだけシンプルなコンポーネントを使用することで、将来のスケーラビリティを簡単にすることができる。シンプルなコンポーネントは、1つか2つの機能だけを提供して、他のコンポーネントに依存することなくその機能を非常にうまくこなす必要がある。
ハバロネンコは「このようなデカップリング(コンポーネント間の依存度を下げること)により、個々のコンポーネントを独立してスケーリングすることができるようになります。そうしておかないと、いずれかのコンポーネントをスケーリングする際に、波及効果が発生する可能性があります。たとえば、読み取りクエリの処理をスケーリングするには、キャッシュ層のコンポーネントをスケーリングする必要があるかもしれませんし、キャッシュ層は他の何かをスケーリングする必要があるかもしれません」と結論づけている。
このシンプルさは、スケーリングのコストを抑えることにもつながる。無限のスケーリングは理論的には(ほぼ)可能だが、それを実現するためにはコスト効率が重要な要素となる。
この分野の技術開発で、費用対効果の高いイノベーションを実現するために重要なのは、シンプルさと透明性だろう。ボンネットの下で行われている魔法の数が少なくなり(現在のクルマがどれほど複雑に設計されているかを考えてみてほしい)、使用されているコンポーネントの数が少ない状態になればなるほど、私たちは乗り心地をカスタマイズし、無限にスケーリングできる夢へと向かってさらに向かうことができるのだ。