0

ダウンロード可能な圧縮アーカイブ ファイル (zip ファイル)が多数ある Web サーバーがあります。これらのアーカイブがサーバーで使用するディスク フットプリントを大幅に削減したいと考えています。

重要な洞察は、これらのアーカイブは実際には同じ非圧縮コンテンツのわずかに異なるバージョンであるということです。これらの多くのアーカイブのいずれか 2 つを解凍し、結果の差分を実行した場合、差分はアーカイブの合計サイズの約 1% であることがわかると思います。

これらのアーカイブは実際には JAR ファイルですが、圧縮の詳細は (私が思うに) 無関係です。しかし、これは、これらのアーカイブを特定の圧縮形式で提供することは交渉の余地がないことを説明しています。それはサーバーの基本的な目的です。

それ自体は、これらのアーカイブのコンテンツ用に差分ストレージをインストールすることは問題ではなく、一連のアーカイブのディスク フットプリントを大幅に削減します。これを行うには、デルタ エンコーディングまたは共有を理解する圧縮ファイルシステムを使用する方法が多数あります(たとえば、 btrfsはブロック共有を理解するか、スナップショットを使用して強制することができます)。

問題は、これらのファイルから圧縮された zip を作成するにはどうすればよいかということです。私が持っているサーバーには計算能力がほとんどなく、ブロック共有コンテンツからオンザフライで JAR を再作成するには十分ではありません。

非圧縮レベルの共有コンテンツを圧縮レベルに公開するプログラムによる方法はありますか? 簡単に zip に変換できる増分圧縮形式 ?

その場で JAR を生成するキャッシング ソリューションを探す必要がありますか? これにより、最も要求の多い JAR を生成する際の計算上の負担が少なくとも軽減されます。

zip を非常に高速に生成できる特殊なハードウェアがありますが、私はむしろ出費を避けたいと考えています。また、サーバーへのリクエストの数が増えると、あまりスケーラブルなソリューションではありません。

4

2 に答える 2

1

すべての jar ファイルのすべてのエントリに 1% の違いが見られる場合は、多くの再圧縮を行わずにできることはほとんどありません。

一方、1% の違いが数 % の jar エントリに集中し、ほとんどの jar エントリが変更されていない場合は、希望があります。サーバー上の独自のjarファイルに個々のjarエントリをすべて保持でき、提供するjarファイルごとに、結合する個々のjarエントリファイルのリストを保持するだけです. 一連の jar ファイルを取得してそれらを 1 つの jar ファイルにマージする高速なユーティリティを作成するのは簡単です。まだない場合。

于 2013-03-27T15:06:20.237 に答える
1

私が過去に使用した 1 つのアプローチは、しばらくの間、zip ファイルに対する実際の要求をログに記録することです。リクエストが非常に偏っている場合は、キャッシングを使用して、その場で zip ファイルを生成するコストを軽減できる場合があります。

基本的に、提案どおりに差分ストレージを実装します。また、実際の .zip ファイル用の LRU (またはその他の置換アルゴリズム) 用に、合計ストレージの一部 (たとえば 10%) を割り当てます。ユーザーが zip を要求するたびに、準備ができている場合はキャッシュから提供するか、オンザフライで生成して、そうでない場合はキャッシュに入れます。

一般的なケースでは、これはうまく機能しない可能性がありますが、実際のリクエストが少数の集中した数のファイルに対して行われる一般的なケースでは、問題が解決する可能性があります。

それ以外の場合、私はあなたのオプションを次のように見ています:

  1. ディスクでデルタ エンコーディングを使用してから、クライアントが応答に期待する形式を変更します。たとえば、zip の代わりに、基本的にファイルを再構築するために必要なデルタ エンコード ファイルのビットである形式を提供できます。サーバー側では、ディスクから多かれ少なかれ変更されていないファイルを提供するだけなので、ほとんどの作業を節約できます。その後、クライアントはそれらをまとめる必要があります (既存のクライアントはすでにファイルを解凍する必要があるため、おそらくこれは過度の負担)。

  2. .zip 形式を注意深く確認し、ほとんどの .zip が事前に機能する特殊な方法でファイルを保存してください。たとえば、デルタ エンコーディングのようなものですが、ファイルのエンコーディングが非常に高速なプロセスになるように、一致検索の実際の難しい部分がディスクに保存されます。ただし、これを設計するには、zip 形式に関する高度な知識を持つ人が必要です。

于 2016-02-19T01:15:02.087 に答える