
驚くほど小さくなるオペレーティングシステム:コンテナとサーバーレスコンピューティングがクラウドをどう変えるのか

エンタープライズコンピューティングに関わる人たちと長く付き合っていると、いつかは「スタック」について話すことになるでしょう。これは、現代のデータセンターで稼働する複雑なソフトウェア層を指す用語で、スタックの最も基本的な部分はオペレーティングシステムです。オペレーティングシステムは、スタック内の他のすべてのソフトウェアがハードウェアをどのように使用するかを管理します。
クラウド業界のニュースと分析については、GeekWire の Cloud Tech Newsletter を購読してください。
長年にわたり、MicrosoftとLinuxベンダーは、スタックのこの基本的かつ収益性の高い部分の支配権をめぐって争ってきました。しかし、クラウドコンピューティングが進化するにつれて、スタックの他の部分がより大きな重要性を持つようになり始めています。
アプリケーションをオペレーティングシステムから独立して実行できるようにするコンテナは、この進化のきっかけとなりました。Kubernetesのようなコンテナオーケストレーションソフトウェアの重要性の高まりは、かつてオペレーティングシステムが行っていたリソース管理の一部を、他の場所で処理できるようになったことを意味します。Microsoft Azureの最高技術責任者であるマーク・ルシノビッチ氏によると、イベント駆動型のサーバーレス開発手法の出現は、スタック内のオペレーティングシステムに対する考え方にさらなる変化をもたらす可能性があります。
「コンテナの進化の過程を見れば、それは基本的にこれまでのOSモデルの進化と言えるでしょう。つまり、コンテナはファイルシステム的な視点で物事を捉えているのです」と、オペレーティングシステムの歴史家でもあるルシノビッチ氏は最近のインタビューで述べた。「アプリが何をしようとしているのかを見れば、そうした抽象化から脱却できる可能性があります。」
オペレーティングシステムは今後も存在し続けるでしょう。サーバー上で実行されるアプリケーションの基本的な要求に応じて、ハードウェアリソースの割り当てを担う何かが不可欠です。しかし、オペレーティングシステムの役割は大きく変化する可能性があり、その変化は将来のデータセンターの構成に大きな影響を与える可能性があります。これは、クラウドを積極的に導入しながらも、サーバーベンダーやオンプレミス型データセンターを構築する企業に従来のオペレーティングシステムを販売することで依然として大きな収益を上げているRed HatやMicrosoftにとって、問題となる可能性があります。
そして、これまで開発と保守に多大なリソースを費やしてきた製品に新たなアプローチをすることで、スタートアップ企業にとって興味深い機会が生まれる可能性もある。FPGA(フィールド・プログラマブル・ゲート・アレイ)がその柔軟性から人工知能研究者の間で注目を集めているように、軽量OS(必要最低限のパッケージだけで全てを動作させることができる)は、クラウドネイティブなコンピューティングのアプローチとして台頭する可能性がある。
演算順序
オペレーティングシステムは、その名前が示す通り、コンピュータを操作するシステムです。オペレーティングシステムは、高レベルのアプリケーションアクティビティとプロセッサ、メモリ、ストレージなどのハードウェアコンポーネントとの間の橋渡しとして機能し、従来、前述のスタックの中で最も重要なコンポーネントの一つでした。
グランジロックが全米を席巻していた頃、Unixはエンタープライズコンピューティングの主流オペレーティングシステムでした。そして1990年代後半にインターネットが本格化すると、スケールアウト型のローエンドサーバーの台頭により、Windowsがエンタープライズコンピューティングに参入しました。同じ頃、Linus Torvaldsという人物が、オープンソース版Unixを改良するプロジェクトを主導していました。

現在、Red Hat Enterprise LinuxからAmazon Web ServicesのカスタムLinuxディストリビューションまで、エンタープライズコンピュータで稼働するLinuxのバージョンは数十種類に上ります。Microsoft Azureは、OSに依存しない環境を目指し、以前はWindowsのみだったサービスにおいて、現在では8種類のLinuxオプションを提供しています。また、ほとんどのクラウドベンダーも、多様なLinuxオプションを提供しています。
そして今、私たちは新たな変化を目撃しています。
2000年代に最も注目を集めたエンタープライズテクノロジー(そう、そんなものがあります)は仮想マシンでした。VMwareのハードウェア仮想化とソフトウェアの導入により、企業は単一のプロセッサコア上で複数のアプリケーションを実行できるようになりました。現在でも広く利用されている仮想マシンは、動作するためにオペレーティングシステムのコピーとその他のアプリケーションソフトウェアがパッケージ化されている必要があり、ハイパーバイザーと呼ばれるソフトウェアが仮想マシンの展開方法を管理します。
現在、オペレーティングシステムレベルの仮想化を基盤とするコンテナにより、開発者は単一のハードウェア上にさらに多くのアプリケーションを詰め込むことが可能になっています。コンテナは、動作するためにオペレーティングシステムのコードを必要としないという点も魅力的です。つまり、特に仮想マシンと比較して、非常に高速に起動できるということです。
「仮想化によって同じハードウェアからより高いパフォーマンスを引き出せるようになったため、コンテナはさらに進歩した」とルシノビッチ氏は語った。
コンテナを核に
しかし、コンテナはオペレーティング システムに期待されるものの概念を変えています。
21世紀のエンタープライズコンピューターを動作させるために選ばれるオペレーティングシステムの設計において、ダウンサイジングの動きが始まっているのかもしれません。CoreOSのような企業や、Alpine、CentOSといったオープンソースプロジェクトは、オペレーティングシステムの高レベル部分の複雑さの多くはコンテナ管理ソフトウェアと、コンテナ時代のハイパーバイザーであるKubernetesによって処理できると考え、簡素化されたオペレーティングシステムを提唱しています。
「コンテナに特化したOSというカテゴリーを、いわば私たちが先導したようなものです」と、CoreOSの共同創業者兼最高技術責任者であるブランドン・フィリップスは述べています。「コンテナがOSに対する考え方を変えるだろうと、私たちは当初から認識していました。」
コンテナが登場する以前は、エンタープライズアプリケーションはオペレーティングシステムと緊密に統合する必要がありました。なぜなら、アプリケーションの実行に必要なすべてのコンポーネント(バイナリやライブラリ)がオペレーティングシステム内で利用可能である必要があったからです。コンテナを使用すると、開発者はオペレーティングシステムを持ち込むことなく、これらのバイナリやライブラリをアプリケーションにパッケージ化できるため、オペレーティングシステム自体がアプリケーションの幅広い依存関係に対応する必要がなくなります。

負荷を軽減すると、いくつかの興味深い効果が期待できます。
第一に、オペレーティングシステムの複雑さが減れば減るほど、安定性が高まる傾向があります。そして、誰もが誰かをハッキングする世界では、コードベースが小さいほど、セキュリティ専門家が「攻撃対象領域の縮小」と呼ぶものを実現します。つまり、ソフトウェアの数が少ないほど、発見され悪用されるソフトウェアの脆弱性も少なくなるということです。
コードベースが小さければ、OS開発者にとってシステムのアップデートやパッチ適用も容易になるとフィリップス氏は述べた。「OSディストリビューターは、アプリケーションに不具合が生じることを恐れて、アップデートのリリースを躊躇してきましたが、コンテナ化によってその懸念は払拭されます」と彼は述べた。
この動きの最先端に位置するのがユニカーネルです。ユニカーネルでは、アプリケーションがハードウェアリソースをほぼ管理します。ユニカーネルは基本的に、従来はオペレーティングシステムが処理していた管理層を取り除き、アプリケーションをシステムのプロセッサ上で直接実行するために必要なすべてのものをパッケージ化します。これにより、従来のアプリケーションが依存していた多くのオペレーティングシステムコンポーネントが不要になります。
最初の映画が、クリエイティブな人々がメディアの新しい可能性を理解し始めるまでたまたま撮影されていた実写劇であったのと同様に、旧式のアーキテクチャ戦略をクラウドに単に移行するだけでは、柔軟でオンデマンドのクラウド コンピューティングの究極の可能性を逃してしまうと考える人はたくさんいます。
殻を割る
技術のベテランたちは、この振り子が何年にもわたり前後に揺れ動くのを見てきましたが、ユニカーネルのようなアイデアに関しては懐疑的な人(そしてコメディアン)もたくさんいます。
Samsung の Joyent 社の最高技術責任者である Bryan Cantrill 氏は、昨年、ユニカーネル コンセプトがまだ実稼働システムの準備が整っていない理由について、かなり厳しい (しかし、Bryan 氏を知る人にとっては、非常に的を射た) 論を執筆しており、最近の会話の中で、この最新のコード削減の議論について彼がうんざりしているのが目に浮かぶようだった。
「システムを根本的に簡素化しようとする動きがあるのは、システムが複雑になりすぎているという信念があるからです。そして、急進的な動きが起こり、システムを簡素化すると、最初はシンプルだったシステムがさらに複雑になってしまいます」と彼は述べ、テクノロジー開発に関する古くからの真理を明言しました。システムは最初はシンプルですが、その後、クールな機能を実現するために(あるいはソフトウェアの売上を伸ばすために)機能が追加され、最終的にはシステムが肥大化し、同等の機能を持ちながらもよりシンプルなものによって破壊される危険性が高まります。
しかし、平均的な規模のテクノロジー組織にとって、OSをスリム化するアプローチでは、アプリソフトウェアの動作に必要なすべてのコンポーネントを組み立てる作業が大幅に増えます。こうした柔軟性を好むエンジニアリングチームもあれば、複雑さを嘆くチームもあります。
「Linuxディストリビューションが作られたのには理由があります。それは、人々があれだけのパッケージをまとめて提供したくないと思ったからです」と、この議論に大きな関心を持つRed Hatの製品管理ディレクター、ガンナー・ヘレクソン氏は述べた。「その仕事を誰かに任せることには価値があるのです。」
Kubernetesのようなツールが使いやすく成熟し、コンテナの利用が再び爆発的に増加するにつれ、軽量OSの価値が輝き始める可能性は十分にあります。しかし、サーバーレス技術の台頭により、この議論は完全に回避されるかもしれません。
サーバーレス開発のようなイベント駆動型プログラミングモデルは、オペレーティングシステム層からさらに離れ、アプリケーション開発者がオペレーティングシステムについて全く考える必要がなくなるまでになります。AWS LambdaやAzure Functionsなどのサービスは、ハードウェアリソースを処理するだけでなく、オペレーティングシステム層も抽象化するため、開発者はイベントと望ましい結果に集中でき、クラウドベンダーはそれぞれの状況に最適なものを選択できます。
シンプルに
過去数十年間、コンピューターの実際の動作の驚くほど複雑な仕組みを抽象化する技術は着実に進歩しており、それがソフトウェア開発の爆発的な増加につながり、まったく新しい産業が誕生しました。
しかし、カンファレンスや技術講演を刺激する最先端のクラウドコンピューティング技術がある一方で、時代遅れの技術で十分に機能している企業も依然として多く存在し、それがエンタープライズコンピューティングへの有望な新しいアプローチの導入を遅らせている可能性があることを、私たちは常に忘れてはなりません。オペレーティングシステムの規模と役割を変えることのメリットが、十分な数の企業にとって納得のいくものになるまでには、しばらく時間がかかり、一部のワークロードのカテゴリーでは、それが実現しない可能性もあります。
しかし、そのような環境で成功する可能性のあるアプリの種類もいくつかあり、これまでは信頼性や規模で実現できなかった最新のツールを使用して構築された新しいアイデアやアプリケーションが常に存在します。
ソフトウェア開発者は、仕事をより簡単かつ迅速にするソリューションを求める傾向があるとフィリップス氏は述べた。「彼らにとって重要なのはOSではなく、『アプリケーションが稼働しているか、そしてOSがそれを維持しているかどうか』ということだ」