Vinyl Cache(旧称Varnish Cache [ 2 ])は、コンテンツ量の多い動的な Web サイトやAPIのHTTP アクセラレータとして使用されるリバース キャッシング プロキシ[ 3 ]です。クライアント サイド キャッシュとして始まったSquidや、主にオリジン サーバーであるApacheやnginxなどの他のWeb アクセラレータとは対照的に、Vinyl Cache は HTTP アクセラレータとして設計されました。Vinyl Cache は、 FTP、SMTP、その他のネットワーク プロトコルをサポートすることが多い他のプロキシ サーバーとは異なり、HTTPに特化しています。
このプロジェクトは、ノルウェーのタブロイド紙「Verdens Gang」のオンライン部門によって開始されました。設計者および主任開発者は、デンマークの独立コンサルタントであるPoul-Henning Kamp氏[ 3 ](有名なFreeBSD開発者)で、当初はノルウェーのLinuxコンサルティング会社Linproが管理、インフラストラクチャ、および追加開発を担当していました。Varnishのサポート、管理、開発は後にVarnish Softwareという別の会社に分離されました。
Varnishは、2条項BSDライセンスの下で提供される無料のオープンソースソフトウェアです。商用サポートは、Varnish Softwareをはじめとする複数の企業から提供されています。
Varnish のバージョン 1.0 は 2006 年にリリースされ、[ 4 ] [ 5 ] Varnish 2.0 は 2008 年に、[ 6 ] Varnish 3.0 は 2011 年に、[ 7 ] Varnish 4.0 は 2014 年に、[ 8 ] Varnish 5.0 は 2016 年に、[ 9 ] Varnish 6.0 は 2018 年 3 月に、[ 10 ] Varnish 7.0 は 2021 年 9 月にリリースされました。[ 11 ]
Varnishはデータを仮想メモリに保存し、メモリに保存するものとディスクにページアウトするものを決定するタスクをオペレーティングシステムに任せます。[ 12 ]これにより、アプリケーションがデータをディスクに移動している間にオペレーティングシステムがデータをキャッシュし始める状況を回避するのに役立ちます。
Varnishはマルチスレッドを多用しており、各クライアント接続は個別のワーカースレッドによって処理されます。アクティブなワーカースレッド数の設定上限に達すると、着信接続はオーバーフローキューに格納されます。このキューの設定上限に達すると、着信接続は拒否されます。
主要な設定メカニズムは、Varnish Configuration Language (VCL) です。これは、各リクエストの処理における重要なポイントで呼び出されるフックを記述するために使用されるドメイン固有言語(DSL) です。ほとんどのポリシー決定は VCL コードに委ねられているため、Varnish は他のほとんどの HTTP アクセラレータよりも設定の柔軟性と適応性に優れています。VCLスクリプトがロードされると、C 言語に変換され、システムコンパイラによって共有オブジェクトにコンパイルされ、アクセラレータに直接ロードされます。これにより、再起動することなくアクセラレータを再構成できます。
実行時パラメータは、ワーカー スレッドの最大数と最小数、各種タイムアウトなど、さまざまな設定を制御します。コマンドライン管理インターフェースを使用すると、アクセラレータを再起動することなく、これらのパラメータを変更したり、新しい VCL スクリプトをコンパイル、ロード、アクティブ化したりできます。
高速パスにおけるシステムコールの数を最小限に抑えるため、ログデータは共有メモリに格納され、ログデータの監視、フィルタリング、フォーマット、およびディスクへの書き込みといったタスクは別のアプリケーションに委任されます。
Varnish Cache は、情報配信を数百倍高速化できます。適切な動作とパフォーマンスを確保するために、Varnish は次の領域で監視できるメトリックを公開しています。[ 13 ]
Varnish Cache には、監視およびログ記録ツールが付属しています。最もよく使用されるツールの 1 つは、Varnish の現在のパフォーマンスの詳細なスナップショットを提供する varnishstat です。キャッシュヒットとミス、リソース消費、作成されたスレッドなど、メモリ内の統計情報にアクセスできます。[ 14 ]
コマンドラインからvarnishstatを実行すると、利用可能なすべてのVarnishメトリックのリストが継続的に更新されます。-1フラグを追加すると、varnishstatはリストを1回出力した後に終了します。[ 15 ] Varnishstatは、キャッシュの状態をスポットチェックするためのスタンドアロンツールとして使用できます。メトリックを時間経過とともにグラフ化し、インフラストラクチャ全体の他の統計情報と相関させ、発生する可能性のある問題に関するアラートを設定するために、監視サービスはVarnishと統合してvarnishstatメトリックを収集できます。

Varnishlogは、個々のリクエストに関する詳細情報を提供するため、Varnishの設定をデバッグまたは調整するために使用できるツールです。
Varnishは、ラウンドロビンとランダムディレクターの両方を使用したロードバランシングをサポートしており、どちらもバックエンドごとに重み付けが可能です。バックエンドの基本的なヘルスチェックも利用できます。[ 16 ]
Varnish Cacheには以下の機能も備わっています。