Uberは3月5日、オープンソースのピアツーピア(P2P)DockerレジストリのKrakenをリリースした。Krakenは、大規模システム用のDockerレジストリサービスの提供と、リージョン間サポートやパフォーマンスボトルネック、ハイブリッドクラウド環境といった課題解決を念頭に設計されている。
BitTorrentプロトコルにほぼ基づいているKrakenは、DockerレジストリAPIと互換性を持ち、S3やHDFSなどのようにコンフィギュレーション可能なストレージバックエンドを提供する。2018年始めにオープンソースコミュニティに公開される以前は、Uberの社内で運用されていた。
コンテナ内で動作するDockerイメージは、その前のレイヤへの相対的変更を含むレイヤによって構成され、イメージファイルのバイナリラージオブジェクト、いわゆるblobと、実行可能ファイルに関連付けられている。Dockerレジストリは、イメージのレイヤとblobを格納し配布する、サーバーサイドのアプリケーションである。DockerはDocker Hubで無償レジストリを提供すると同時に、有償サービスも提供している。Docker以外にも、プライベートホスティングや、あるいはストレージバックエンドとしてのIPSF実装など、特定のニーズを対象とした他のレジストリ{/0}が開発されている。
Uberは、大規模な分散クラスタを、ハイブリッドなクラウド環境で運用している。同社では、イメージキャッシングやデータベースシャーディングなど、パフォーマンス向上の努力を払ってきたが、それでもDockerレジストリでは、同社環境における要求の拡大を充足することはできなかった。そのためUberのチームは、独自のソリューションを構築する方法を選択したのだった。
Uberでの実装以降、Krakenは、1日100万blob以上のディストリビューションをサポートしており、同社の運用ピーク時には、30秒以内に100MBから1GBのサイズを持った20,000件のblobを配布する。Krakenのドキュメントによると 、Krakenは、各ホストのダウンロード最大速度の50%以上の速度で、Dockerイメージを配布することができる。しかも、そのダウンロード速度は、クラスタサイズやイメージサイズに大きく影響されることはない。Krakenの今後の機能強化は、イメージサイズの拡大によるパフォーマンス向上、セキュリティ改善、Dockerタグ変更のサポートなどが中心となる予定である。
Krakenのアーキテクチャは、Uberがスケーラブルで可用性の高いレジストリを提供する上で重要なものだった。設計の基本となったのは独自のP2Pネットワークである。この中には、エージェントのネットワークに対してコンテンツをシードする、限られた数のホストが含まれている。ネットワーク内のエージェントは、高い接続性と小さな直径 – システムのダウンロード時間における重要なファクタである – を持った、疑似乱数正規グラフ(pseudo-random regular graph)を形成する。エージェントは、イメージblobをバックエンドストレージに格納するオリジンからコンテンツをシードされ、し、ネットワーク内のピアと接続し、dockerプルリクエストのイメージを返す。
Krakenは当初BitTorrentで構築されていたが、問題空間の相違から、Krakenチームでは、独自のP2Pドライバ開発を決定した。しかしチームは、KrakenプロトコルにBitTorrentとの互換性を復活させる可能性について、積極的にレビューを行っている。
AlibabaのCloud Native Computing Foundation(CNCF)プロジェクトであるDragonflyも同じく、オープンソースのP2Pイメージとファイル分散システムとして、クラウドネイティブアプリケーションのディストリビューションに関する課題に取り組んでいる。Krakenのドキュメントには、両者の主な違いが説明されている。
Dragonflyクラスタには、クラスタ内で4MBサイズのデータチャンク転送をコーディネートする、1台ないし数台の"スーパーノード"があります。スーパーノードは最適な判断を下すことが可能な一方で、クラスタ全体のスループットが数台のホストの処理速度によって制限されるという問題もあります。また、blobサイズやクラスタサイズが拡大すると、パフォーマンスは直線的に低下します。
Krakenのトラッカは接続グラフのオーケストレーションを支援しますが、実際のデータ転送のネゴシエーションは個々のピアに任せているため、大規模なblobにも良好にスケールします。さらに、KrakenはHAであり、クラスタ間のレプリケーションをサポートします。これらはいずれも、信頼性の高いハイブリッドクラウドのセットアップに必要なものです。