ストリーミング業界では初となる Netflix は、企業が競争力を維持するために最新のテクノロジーをどのように統合しているかを鮮明に示しています。
Netflix は、一部のサービスをコンテナに移行する際にいくつかの課題に直面し、コンテナ管理プラットフォームであるTitusを開発しました。
現在、Netflix は、ビデオ ストリーミング、コンテンツ エンコーディング、推奨、機械学習、スタジオ テクノロジー、ビッグ データ、内部ツールなどのサービスを、合計 20 万のクラスターと 1 日あたり 50 万のコンテナー内で実行しています。
組織は、絶えず変化するデジタル市場に対応するために、新しいアプリケーションを開発し、既存のアプリケーションを改善するためにコンテナ化を採用しています。IBM®の調査によると、コンテナ ユーザーの約 61% が、過去 2 年間に新しいアプリケーションの少なくとも半分にコンテナを使用したと回答し、64% が今後 2 年間に現在のアプリケーションの半分以上をコンテナ化することを計画しています。エンタープライズ アプリケーションの最新化ソリューションは、この移行に不可欠であり、企業が競争力と俊敏性を維持するのに役立ちます。
このブログでは、アプリケーションのコンテナ化の課題、利点、ユースケースについて説明します。詳細に入る前に、コンテナ化を定義しましょう。
アプリケーション コンテナ化とは、コンテナと呼ばれる個別のパッケージでソフトウェア アプリケーションを実行することです。アプリケーション コンテナには、ファイル、ライブラリ、環境変数など、アプリケーションの実行に必要なすべてのものが格納されます。そのため、オペレーティング システムに関係なく、アプリケーションは互換性の問題が発生することなくスムーズに動作します。
アプリケーションをコンテナ化すると、ハードウェアやその他のソフトウェアの依存関係からアプリケーションを分離することで、開発がスピードアップし、効率が向上し、セキュリティが強化されます。コンテナは分離されている状態で、任意のホスト オペレーティング システムで実行できます。コンテナは、Google 検索、YouTube、Gmail などの主要なサービスで使用されています。Google は、コンテナとアプリケーションを管理するための人気の高いオープンソース プラットフォームである Kubernetes と Knative も開発しました。
コンテナーは、1 つのシステムで作成されたコードの表現と、それに対応する構成、依存関係、ライブラリなどを生成します。これらの表現は、さまざまなプラットフォームと互換性のあるコンテナー エンジンとして機能します。
コンテナの主な目的は、プログラムされたソフトウェアをさまざまなコンピューティング環境から分離することです。これにより、開発環境や開発方法の違いに関係なく、さまざまなプラットフォーム間で一貫したコード実行が可能になります。
さらに、コンテナ化テクノロジーはホスト オペレーティング システムとして機能します。ただし、前述したように、これらは親オペレーティング システムとは異なります。
現代のビジネス環境では、コンテナーはプログラムをホストするために頻繁に使用されており、次のようなユースケースに特に適しています。
マイクロサービス
マイクロサービスに基づくアプリケーションは、多数の個別の部分で構成され、そのほとんどはコンテナ内にデプロイされます。さまざまなコンテナが一緒になって、整理されたアプリケーションが作成されます。このアプリケーション設計手法は、効果的なスケーリングとアップグレードに役立ちます。負荷の増加を処理する場合、アプリケーション全体ではなく、最も負荷の高いコンテナをスケーリングする必要があります。同様に、プログラム全体ではなく、個々のコンテナを変更できます。
CI/CD パイプライン
コンテナ化されたアプリを使用すると、チームはアプリケーションを並行してテストし、継続的インテグレーション/継続的デリバリー (CI/CD) パイプラインを加速できます。さらに、コンテナはホスト システム間で移植可能であるため、テスト環境でコンテナ化されたアプリケーションをテストすると、運用環境でのパフォーマンスをより正確に再現できます。
反復的な仕事
バルク ジョブとデータベース ジョブは、コンテナーで適切に機能する定期的なバックグラウンド タスクです。コンテナーのおかげで、各操作は他の同時ジョブに干渉することなく実行できます。
デブオプス
コンテナ化されたアプリを使用すると、アプリケーションの一貫性のある軽量なランタイム環境をすばやく作成できます。これにより、 DevOpsチームは必要に応じてアプリケーションを構築、テスト、起動、反復処理できます。
コンテナは非常に有益ですが、いくつかの制限があります。
名前空間により、ホスト上の各コンテナはホスト オペレーティング システムから割り当てられたリソースを取得し、コンテナ内で実行されているプロセスをコンテナ外のプロセスから分離できます。ホスト オペレーティング システムに脆弱性があると、同じ OS 上で実行されるすべてのコンテナに脅威が及ぶ可能性があります。さらに、ネットワーク設定が侵害された場合、1 つのコンテナにアクセスした攻撃者は、他のコンテナやホストに簡単にアクセスできます。
実行中のコンテナに含まれるデータは、コンテナを停止すると消えてしまいます。データを保存するには永続的なファイル システムが必要です。ほとんどのオーケストレーション ツールは永続的なストレージを可能にしますが、ベンダーの製品によって品質や実行方法が異なります。
コンテナの急速な生成は有益ですが、管理されていないコンテナの拡散や管理の複雑さの増大につながる可能性もあります。
コンテナは頻繁に起動したり停止したりするため、チームは実行中のコンテナを追跡するのに苦労することがよくあります。コンテナは通常のホストよりも 12 倍速く切り替わるため、手動で追跡するのは困難です。
アプリケーションのコンテナ化により、さまざまな機能がハードウェア依存関係やその他のソフトウェア コンポーネントから分離され、速度、効率、セキュリティが向上します。コンテナ化されたアプリケーションには、次のような多くの利点があります。
コンテナ化されたアプリケーションは、他のアプリやシステム コンポーネントから隔離された環境に存在するため、1 つのアプリ内で発生した問題が他のアプリや基盤となるシステム コンポーネントに影響を与えることはありません。この封じ込めにより、潜在的なバグ インシデントの範囲が効果的に制限されます。
コンテナ化されたアプリケーションはオペレーティング システムから独立しているため、サーバー、仮想マシン、開発者のコンピューター、クラウドなどのさまざまな環境間で移植可能です。
コンテナは、オペレーティング システム全体を持たないため軽量であり、仮想マシンよりも効率的です。
コンテナ化されたアプリケーションは、コンピューティング機能とアプリケーション レイヤーを共有することでマシンのリソースを効果的に使用し、複数のコンテナを同じマシンまたは仮想環境で同時に実行できるようにします。
増大するアプリケーション需要に対応するためにコンテナ インスタンスを増やすことは、アプリケーションのコンテナ化におけるスムーズなプロセスです。
VM とコンテナは特定の計算リソースを「仮想化」することに重点を置いていますが、コンテナは VM よりも好まれることが多いです。これは、コンテナ化テクノロジと比較すると、VM の方がオーバーヘッドが大きいためです。
OS に関係なく、仮想マシン (VM) がサポートするもう 1 つの利点は、企業が 1 つ以上のシステムから複数のサーバーを仮想的に実行できることです。一方、コンテナーはアプリケーションを管理し、軽量であるため、数秒でインスタンスを起動および停止できます。
コンテナ化が企業のコスト削減にどのように役立つかを理解するために、例を見てみましょう。
課題: Spotify は、プラットフォームのアクティブ ユーザー数が急増し、月間加入者数が 2 億人を超えたときに、増加する作業負荷の管理に課題に直面しました。
解決策:これを処理するために、Spotify-
以前は仮想マシン (VM) 上で実行されていたマイクロサービスをコンテナ化しました。
コンテナ オーケストレーション プラットフォームを開発しました。これは後に Helios と名付けられました。これらの変更は、開発速度の向上とコストの削減を目的としていました。
結果:実施面では、同社は
コンテナ化を通じてワークロード、クラスター、インスタンスを管理します。
すべての Spotify コンテナとサーバーを管理するための Docker ベースのオーケストレーション プラットフォームを確立しました。Helios には、コンテナをホストするサーバーと対話するための HTTP API が搭載されています。
Kubernetes を Docker と統合して、開発と運用のタスクを迅速化します。
課題: 大手新聞社 Financial Times は、自社のプラットフォーム上で膨大なコンテンツを扱っていました。チームの目標は、AWS サーバーの運用に関連するコストを最小限に抑えることでした。
解決策: 彼らはフレームワークをアップグレードし、コンテナに移行することでこれを実現し、クラウドサーバーの管理コストを80%削減しました。以下は、コンテナとしてDockerを使用する際に採用した戦略の一部です。
結果: 開発チームは、技術クラスターの健全性を維持し、サーバーコストを最小限に抑えることに重点を置きました。その結果、
Kubernetes をベースにしたプライベート コンテナ オーケストレーション プラットフォームを作成しました。
150 個のマイクロサービスで構成される技術スタックをコンテナ化しました。
課題: Pinterest は、サイトに投稿された多数の画像の追加作業とホスティング コストに対処する必要がありました。適切な投資を行うために、新しいテクノロジーを探しました。
解決策: チームの目標は、
結果: Pinterest が長期的に多額の費用を回避するのに役立ったコンテナ化されたプロセスは次のとおりです。
すべてのサービス固有の依存関係は、サービス コンテナと呼ばれるものに統合されました。この方法により、すべての開発システム間で 1 つの AMI のみが転送されることが保証されます。
必要に応じてコンテナを起動および停止するための Telefig というツールを開発しました。このツールは、コンテナに影響を与えるすべての依存関係の管理に役立ちます。
コンテナ オーケストレーション方法論を実装しました。バッチ タスクを統合するためのマルチテナント クラスター システムを確立します。
上記の例は、コンテナ化によってコストを削減し、生産性を向上できることを示しています。Spotify、Financial Times、Pinterest などの大手企業は、コンテナを使用して、追加のワークロードと運用コストの処理、開発および配信プロセスの効率化という課題に対処しています。コンテナ化は、リソース管理の効率的な方法であるだけでなく、複雑な環境における変化と成長を促進します。
コンテナ化されたアプリケーション向けの一般的なプラットフォームには、次のようなものがあります。
ドッカー
Docker は、関連ツールのネットワークとともに共有オペレーティング システム (OS) 上で仮想化されたアプリケーション コンテナーを生成、展開、および監視するためのオープン ソース ソフトウェア プラットフォームです。
ルクセンブルク
LXC は、ツール、テンプレート、ライブラリ、言語接続で構成される Linux コンテナ ランタイムです。非常に基本的で、適応性が高く、アップストリーム カーネルでサポートされているほぼすべてのコンテナ機能を備えています。
rkt
rkt (Rocket とも呼ばれる) は、個々のコンテナを管理したり、Docker コンテナを操作したりできるコンテナ エンジンであり、コンテナ化されたアプリケーションに対する柔軟性と制御性が向上します。
クリオー
コンテナ管理プラットフォームの Container Runtime Interface (CRI) により、OCI 互換のランタイムが可能になります。Kubernetes では、Docker コンテナの代わりによく使用されます。
標準的なコンテナ化されたアプリケーション セットアップのコア コンポーネントは、次の 3 つの主要要素で構成されます。
コンテナエンジン
Docker コンテナー、CRI-O、Containerd、Windows コンテナーなどのツールを使用すると、アプリケーションの管理に必要な管理コストが削減され、アプリケーションの起動や環境間の切り替えが容易になります。
コンテナオーケストレーター
Kubernetes や OpenShift などのプラットフォームは、多数のコンテナを管理し、デプロイメントを自動化し、スムーズな操作を保証します。
マネージドKubernetesサービス
Amazon EKS や Google GKE などのプラットフォームを使用すると、Kubernetes の管理が容易になります。経験の浅い組織でもセットアップと操作が簡単になります。
コンテナ化は、 DevOps の実装をスムーズかつ成功させる上で重要な役割を果たし、ネイティブにシステム上に構築するのが困難だったアプリケーションの開発を促進します。スタートアップでも大企業でも、コンテナ化は俊敏性、移植性、柔軟性、スピードを提供します。コンテナにより、開発、テスト、本番環境などのさまざまな環境が同一になります。そのため、異なるサーバーで同じソフトウェアが実行されるようにするために運用チームに依存する必要はありません。
Docker は、ソフトウェア開発者がアプリケーションを標準化された分離されたコンテナにバンドルできるようにする、広く受け入れられているコンテナ化形式です。Docker は、基盤となるインフラストラクチャに関係なく、あらゆるシステムでのアプリケーション実行を簡素化します。
理論上は、ほとんどのアプリをコンテナ化できますが、その戦略が成功するかどうかは、アプリケーションの設計、依存関係、リソース要件などの要因によって異なります。したがって、各アプリケーションをチェックして、コンテナ化を実装できるかどうか、およびその利点を判断する必要があります。Web アプリケーション、マイクロサービス、ステートレス アプリケーション、開発およびテスト環境、CI/CD パイプラインなどは、コンテナ化できるアプリケーションの例です。
コンテナ化技術は繁栄し、急速に拡大しています。DevOps の分野では、Kubernetes と Docker が市場の需要を満たすために継続的に更新されているため、開発者の間で人気が高まっています。マイクロサービス アーキテクチャが勢いを増すにつれて、これらのツールによって、チームはコンテナとインフラストラクチャを管理しやすくなります。つまり、新しい機能をより迅速に展開し、進行中の開発および配信プロセスにスムーズに適合させることができます。