ウェブサイト検索

2023 年の Linux 向けベスト オープンソース キャッシュ ツール


信頼性の高い分散コンピューティング システムとアプリケーションは、特にミッションクリティカルなビジネス プロセスの自動化と管理、および顧客へのサービスの提供において、著名なビジネスの基礎となっています。

これらのシステムやアプリケーションの開発者およびシステム管理者として、最も効率的なシステムを利用できるようにするあらゆる種類の情報技術 (IT) ソリューションを提供することが期待されています。

これには、エンドユーザーに満足のいくレベルのサービスを提供するための、システム/アプリケーションのパフォーマンス、信頼性、可用性、拡張性に関する戦略の設計、テスト、実装などのタスクが含まれます。

キャッシュは、非常に基本的でありながら、信頼できる効果的なアプリケーション配信手法の 1 つです。先に進む前に、キャッシュとは何か、どこにどのように適用できるのか、その利点について簡単に見てみましょう。

キャッシュまたはコンテンツ キャッシュとは何ですか?

キャッシュ (またはコンテンツ キャッシュ) は、データのコピーを一時的な保存場所 (キャッシュ とも呼ばれます) に保存するために広く使用されている手法です。これにより、データを元のストレージから取得するときに簡単かつ迅速にアクセスできるようになります。

キャッシュに保存されるデータには、キャッシュの種類と目的に応じて、ファイルまたはファイルのフラグメント (HTML ファイル、スクリプト、画像、ドキュメントなど)、データベース操作またはレコード、API 呼び出し、DNS レコードなどが含まれる場合があります。

キャッシュはハードウェアまたはソフトウェアの形式をとることができます。ソフトウェア ベースのキャッシュ (この記事の焦点) は、アプリケーション スタックのさまざまな層に実装できます。

ブラウザ キャッシュやアプリ キャッシュ(またはオフライン モード)などのキャッシュは、クライアント側(またはアプリケーション プレゼンテーション層)で適用できます。すべてではないにしても、ほとんどの最新のブラウザには、HTTP キャッシュの実装が付属しています。

Web アプリケーションにアクセスするときに、古いコピーを使用するブラウザではなく、Web サイトまたはアプリケーション上の最新のデータやコンテンツを表示できるようにするための「キャッシュをクリア」というよく使われるフレーズを聞いたことがあるかもしれません。ローカルに保存されているコンテンツ。

クライアント側キャッシュのもう 1 つの例は、オペレーティング システム (OS) レベルで発生するDNS キャッシュです。これは、OS または Web ブラウザによる以前の DNS ルックアップに関する情報の一時的な保存場所です。

キャッシュは、 プロキシを介してLAN またはWAN のネットワーク レベルで実装することもできます。このタイプのキャッシュの一般的な例は、Web プロキシ サーバーのグローバルに分散されたネットワークであるCDN (コンテンツ配信ネットワーク) です。

3 番目に、オリジン サーバーまたはバックエンド サーバーでキャッシュを実装することもできます。サーバーレベルのキャッシュにはさまざまな形式があり、次のようなものがあります。

  • ウェブサーバーのキャッシュ (画像、ドキュメント、スクリプトなどのキャッシュ用)。
  • アプリケーションのキャッシュまたは記憶(ディスクからのファイルの読み取り、他のサービスやプロセスからのデータ、API からのデータのリクエストなどに使用されます)。
  • データベース キャッシュ (要求されたデータベース行、クエリ結果、その他の操作など、頻繁に使用されるデータへのメモリ内アクセスを提供します)。

キャッシュ データは、データベース、ファイル、システム メモリなどを含む任意のストレージ システムに保存できますが、プライマリ ソースよりも高速なメディアである必要があることに注意してください。この点において、メモリ内キャッシュは最も効果的で一般的に使用されるキャッシュ形式です。

キャッシングを使用する理由

キャッシュには次のような多くの利点があります。

  • データベース レベルでは、キャッシュされたデータの読み取りパフォーマンスがマイクロ秒まで向上します。ライトバック キャッシュを使用して書き込みパフォーマンスを向上させることもできます。この場合、データはメモリに書き込まれ、その後指定された間隔でディスクまたはメイン ストレージに書き込まれます。しかし、そのデータ整合性の側面は、潜在的に悲惨な影響をもたらす可能性があります。たとえば、データがメイン ストレージにコミットされる直前にシステムがクラッシュした場合です。
  • アプリケーション レベルでは、アプリケーション プロセス自体内で頻繁に読み取られるデータをキャッシュに保存できるため、特にネットワーク上でのデータ検索時間を数秒からマイクロ秒まで短縮できます。
  • アプリケーションとサーバーの全体的なパフォーマンスを考慮すると、キャッシュされたデータがクライアントに提供されるときに、キャッシュによってサーバーの負荷、遅延、ネットワーク帯域幅が削減され、応答時間とクライアントへの配信速度が向上します。
  • また、キャッシュにより、特に CDN 経由でコンテンツを利用できるようになり、その他多くの利点が得られます。

この記事では、サーバー側を実装するための主要なオープンソース (アプリケーション/データベース キャッシュプロキシ サーバーのキャッシュ) ツールのいくつかをレビューします。 Linux でのキャッシュ

1.リディス

Redis (完全にはREmote DIctionary Server) は、無料のオープンソース、高速、高性能、柔軟な分散インメモリ コンピューティング システムであり、すべてではないにしてもほとんどのプログラミング言語から使用できます。

これは、キャッシュ エンジン、メモリ内の永続的なオンディスク データベース、およびメッセージ ブローカーとして機能するメモリ内のデータ構造ストアです。 Redis は Linux (デプロイに推奨されるプラットフォーム) と OS X で開発およびテストされていますが、*BSD などの他の POSIX システムでも外部依存関係なく動作します。

Redis は、文字列、ハッシュ、リスト、セット、ソートされたセット、ビットマップ、ストリームなど、多数のデータ構造をサポートしています。これにより、プログラマは特定の問題を解決するために特定のデータ構造を使用できるようになります。文字列への追加、リストへの要素のプッシュ、ハッシュ値の増加、セットの共通部分の計算など、データ構造に対する自動操作をサポートします。

その主な機能には、Redis マスター/スレーブ レプリケーション (デフォルトでは非同期)、Redis Sentinel を使用して提供される高可用性と自動フェイルオーバー、Redis クラスター (クラスター ノードを追加することで水平方向に拡張できます)、およびデータ パーティショニング (複数の Redis 間でのデータの分散) が含まれます。インスタンス)。また、トランザクション、Lua スクリプト、さまざまな永続化オプション、およびクライアント/サーバー通信の暗号化のサポートも備えています。

Redis は、インメモリでありながら永続的なオンディスク データベースであるため、インメモリ データセットと最適に動作する場合に最高のパフォーマンスを提供します。ただし、MySQL、PostgreSQL などのオンディスク データベースでも使用できます。たとえば、非常に書き込み量の多い小さなデータを Redis に取り込み、データの他のチャンクをディスク上のデータベースに残すことができます。

Redis はさまざまな方法でセキュリティをサポートしています。その 1 つは、「プロテクト モード 」機能を使用して、Redis インスタンスが外部ネットワークからアクセスされないように保護することです。また、クライアント/サーバー認証 (パスワードがサーバーで構成され、クライアントで提供される) と、クライアント接続、レプリケーション リンク、Redis クラスター バス プロトコルなどのすべての通信チャネルでの TLS もサポートします。

Redis には、データベース キャッシュ、フルページ キャッシュ、ユーザー セッション データ管理、API 応答ストレージ、パブリッシュ/サブスクライブ メッセージング システム、メッセージ キューなどを含む非常に多くの使用例があります。これらは、ゲーム、ソーシャル ネットワーキング アプリケーション、RSS フィード、リアルタイム データ分析、ユーザー レコメンデーションなどに適用できます。

2.Memcached

Memcached は、無料のオープンソースで、シンプルかつ強力な分散メモリ オブジェクト キャッシング システムです。これは、データベース呼び出し、API 呼び出し、ページ レンダリングの結果などの小さなデータ チャンクを格納するメモリ内のキーと値のストアです。 Linux や OS X などの Unix 系オペレーティング システムや Microsoft Windows 上で動作します。

開発者ツールであるため、コンテンツ (デフォルトでは最も最近使用されていない (LRU) キャッシュ) をコンテンツにキャッシュすることで、動的 Web アプリケーションの速度を向上させ、ディスク上のデータベースのロード – アプリケーションの短期メモリとして機能します。最も一般的なプログラミング言語の API を提供します。

Memcached は、唯一のデータ型として文字列をサポートします。これはクライアント/サーバー アーキテクチャを採用しており、ロジックの半分はクライアント側で発生し、残りの半分はサーバー側で発生します。重要なことは、クライアントは、アイテムの書き込みまたは読み取りを行うサーバーを選択する方法を理解していることです。また、クライアントは、サーバーに接続できない場合に何をすべきかをよく知っています。

これは分散キャッシュ システムであるためクラスタリングをサポートしていますが、Memcached サーバーは相互に接続されていません (つまり、相互に認識していません)。これは、Redis のようなレプリケーションのサポートがないことを意味します。また、アイテムを保存および取得する方法、メモリをいつ削除または再利用するかを管理する方法も理解しています。サーバーを追加すると、使用可能なメモリを増やすことができます。

Memcached 1.5.13 では TLS 経由の認証と暗号化をサポートしていますが、この機能はまだ実験段階にあります。

3.Apache Ignite

Apache Ignite も、無料のオープンソースで、水平方向にスケーラブルな分散インメモリ キー/値ストア、キャッシュ、およびマルチモデル データベース システムであり、分散データを計算するための強力な処理 API を提供します。これは、メモリ内または Ignite ネイティブ永続性のいずれかで使用できるメモリ内データ グリッドでもあります。それはLinuxWindowsなどのUNIXに似たシステム上で実行されます。

多層ストレージ、完全な SQL サポート、複数のクラスター ノードにわたるACID (原子性、整合性、分離、耐久性) トランザクション (キーと値の API レベルでのみサポート)、同じ場所に配置された処理、そして機械学習。あらゆるRDBMS (MySQL、PostgreSQL、Oracle Database など) や NoSQL ストアを含む、あらゆるサードパーティ データベースとの自動統合をサポートします。

Ignite は SQL データ ストアとして機能しますが、完全には SQL データベースではないことに注意することが重要です。従来のデータベースと比較して、制約とインデックスを明確に処理します。プライマリ インデックスとセカンダリ インデックスをサポートしていますが、一意性を強制するために使用されるのはプライマリ インデックスのみです。さらに、外部キー制約はサポートされていません。

Ignite は、サーバーでの認証を有効にし、クライアントにユーザー資格情報を提供できるようにすることで、セキュリティもサポートします。すべての Ignite ノード間に安全な接続を提供するための SSL ソケット通信もサポートされています。

Ignite には、キャッシュ システム、システム ワークロードの高速化、リアルタイム データ処理、分析などの多くのユース ケースがあります。グラフ中心のプラットフォームとしても使用できます。

4. カウチベースサーバー

Couchbase Server は、データをキーと値の形式でアイテムとして保存する、オープンソースの分散型 NoSQL ドキュメント指向エンゲージメント データベースでもあります。 Linux や、Windows や Mac OS X などの他のオペレーティング システム上で動作します。N1QL と呼ばれる機能豊富なドキュメント指向のクエリ言語を使用しており、データに対するサブミリ秒操作をサポートする強力なクエリおよびインデックス サービスを提供します。

その注目すべき機能は、マネージド キャッシュを備えた高速キーバリュー ストア、専用インデクサー、強力なクエリ エンジン、スケールアウト アーキテクチャ (多次元スケーリング)、ビッグ データと SQL の統合、フルスタック セキュリティ、および高可用性です。

Couchbase サーバーには、ネイティブのマルチ インスタンス クラスタ サポートが付属しており、クラスタ マネージャ ツールがすべてのノード アクティビティを調整し、クラスタ全体のインターフェイスをクライアントに提供します。重要なのは、必要に応じて、ダウンタイムなしでノードを追加、削除、または交換できることです。また、クラスターのノード間でのデータ レプリケーションや、データ センター間での選択的なデータ レプリケーションもサポートします。

専用の Couchbase Server ポート、さまざまな認証メカニズム (資格情報または証明書のいずれかを使用)、ロールベースのアクセス制御 (各認証済みユーザーに割り当てられているシステム定義のロールを確認するため)、監査、ログ、およびセッションを使用した TLS によるセキュリティを実装します。 。

その使用例には、統合プログラミング インターフェイス、全文検索、並列クエリ処理、ドキュメント管理、インデックス作成などが含まれます。特に、大規模な対話型 Web、モバイル、IoT アプリケーションに低遅延のデータ管理を提供するように設計されています。

5. ヘーゼルキャストIMDG

Hazelcast IMDG (インメモリ データ グリッド) は、オープンソースの軽量、高速、拡張可能なインメモリ データ グリッド ミドルウェアであり、弾力的に拡張可能な分散インメモリ コンピューティングを提供します。 Hazelcast IMDG は、Linux、Windows、Mac OS X、および Java がインストールされているその他のプラットフォームでも動作します。 Map、Set、List、MultiMap、RingBuffer、HyperLogLog など、柔軟で言語ネイティブなデータ構造を幅広くサポートしています。

Hazelcast はピアツーピアであり、シンプルなスケーラビリティ、クラスタ セットアップ (統計の収集、JMX プロトコル経由の監視、便利なユーティリティによるクラスタ管理のオプション付き)、分散データ構造とイベント、データ分割をサポートしています。 、およびトランザクション。また、複数のメンバーの各データ エントリのバックアップを保持するため、冗長性もあります。クラスターを拡張するには、別のインスタンスを起動するだけで、データとバックアップが自動的に均等にバランス化されます。

クラスター内の CPU にアクセスして処理速度を最大化するための便利な API のコレクションを提供します。また、Map、Queue、ExecutorService、Lock、JCache など、Java からの多数の開発者向けインターフェイスの分散実装も提供します。

そのセキュリティ機能には、クラスタ メンバーとクライアント認証、JAAS ベースのセキュリティ機能を介したクライアント操作のアクセス制御チェックが含まれます。また、クライアントによって実行されるソケット接続とリモート操作のインターセプト、クラスター メンバー間のソケット レベルの通信暗号化、および SSL/TLS ソケット通信の有効化も可能になります。ただし、公式ドキュメントによると、これらのセキュリティ機能のほとんどは Enterprise バージョンで提供されます。

最も一般的な使用例は、分散メモリ内キャッシュとデータ ストレージです。ただし、Web セッションのクラスタリング、NoSQL の置き換え、並列処理、簡単なメッセージングなどのために導入することもできます。

6.マクルーター

Mcrouter は、Memcached 導入を拡張するための無料のオープンソース Memcached プロトコル ルーターであり、Facebook によって開発および保守されています。 Memcached ASCII プロトコル、柔軟なルーティング、マルチクラスターのサポート、マルチレベル キャッシュ、接続プーリング、複数のハッシュ スキーム、プレフィックス ルーティング、レプリケートされたプール、運用トラフィック シャドウイング、オンライン再構成、宛先健全性監視/自動フェイルオーバーを備えています。

さらに、コールド キャッシュのウォームアップ、豊富な統計およびデバッグ コマンド、信頼性の高い削除ストリームのサービス品質、大きな値、およびブロードキャスト操作をサポートし、IPv6 および SSL のサポートも付属しています。

これは Facebook と Instagram でキャッシュ インフラストラクチャのコア コンポーネントとして使用されており、ピーク時には 1 秒あたりほぼ 50 億のリクエストを処理します。

7. ワニスキャッシュ

Varnish Cache は、Web クライアントとオリジン サーバーの間に位置する、オープンソースの柔軟で最新の多目的 Web アプリケーション アクセラレータです。最新の Linux、FreeBSD、Solaris (x86 のみ) プラットフォームすべてで動作します。これは、NGINX、Apache、その他多くの Web サーバーの前にデプロイできる優れたキャッシュ エンジンおよびコンテンツ アクセラレータであり、デフォルトの HTTP ポートをリッスンして、クライアント要求を受信して Web サーバーに転送し、Web サーバーに配信します。サーバーがクライアントに応答します。

ワニッシュ キャッシュは、クライアントとオリジン サーバーの間の仲介者として機能する一方で、いくつかの利点を提供します。この要素は、Web コンテンツをメモリにキャッシュして Web サーバーの負荷を軽減し、クライアントへの配信速度を向上させます。

クライアントから HTTP リクエストを受信すると、それをバックエンド Web サーバーに転送します。 Web サーバーが応答すると、Varnish はコンテンツをメモリにキャッシュし、応答をクライアントに配信します。クライアントが同じコンテンツを要求すると、Varnish はキャッシュブースト アプリケーションの応答からそのコンテンツを提供します。キャッシュからコンテンツを提供できない場合、リクエストはバックエンドに転送され、応答はキャッシュされてクライアントに配信されます。

Varnish は、リクエストの処理方法などを構成するために使用される VCL (Varnish 構成言語 - 柔軟なドメイン固有の言語) を備えています。Varnishモジュール (VMODS) は Varnish Cache の拡張機能です。

セキュリティ面では、Varnish Cache はVMODS によるロギング、リクエスト検査、スロットリング、認証、認可をサポートしていますが、SSL/TLS のネイティブ サポートはありません。 ヒッチや NGINX などの SSL/TLS プロキシを使用して、Varnish Cache の HTTPS を有効にできます。

また、Varnish Cache を、Web アプリケーション ファイアウォール、DDoS 攻撃防御、ホットリンク プロテクター、ロード バランサー、統合ポイント、シングル サインオン ゲートウェイ、認証および認可ポリシー メカニズム、不安定なバックエンドのクイック フィックス、および HTTP リクエスト ルーターとして使用することもできます。

8. Squid キャッシュ プロキシ

もう 1 つの無料のオープンソースで優れた、広く使用されている Linux 用のプロキシおよびキャッシュ ソリューションは Squid です。これは、HTTP、HTTPS、FTP などの一般的なネットワーク プロトコルにプロキシ サービスとキャッシュ サービスを提供する、機能豊富な Web プロキシ キャッシュ サーバー ソフトウェアです。他の UNIX プラットフォームや Windows でも実行できます。

ワニス キャッシュと同様に、クライアントからリクエストを受信し、指定されたバックエンド サーバーに渡します。バックエンド サーバーが応答すると、コンテンツのコピーをキャッシュに保存し、クライアントに渡します。同じコンテンツに対する今後のリクエストはキャッシュから処理されるため、クライアントへのコンテンツ配信が高速化されます。そのため、クライアントとサーバー間のデータ フローを最適化してパフォーマンスを向上させ、頻繁に使用されるコンテンツをキャッシュしてネットワーク トラフィックを削減し、帯域幅を節約します。

Squid には、プロキシ サーバーの相互通信階層にわたる負荷の分散、Web 使用パターンに関するデータ (最もよくアクセスされるサイトに関する統計など) の生成などの機能が備わっており、プロキシされるメッセージの分析、キャプチャ、ブロック、置換、または変更を可能にします。

また、豊富なアクセス制御、認可、認証、SSL/TLS サポート、アクティビティ ログなどのセキュリティ機能もサポートしています。

9.NGINX

NGINX (エンジン X と読みます) は、Web インフラストラクチャをセットアップするためのオープンソース、高性能、フル機能の非常に人気のある統合ソリューションです。これは、HTTP サーバー、リバース プロキシ サーバー、メール プロキシ サーバー、および汎用 TCP/UDP プロキシ サーバーです。

NGINX は、キャッシュされたコンテンツをディスク上の永続キャッシュに保存する基本的なキャッシュ機能を提供します。 NGINX のコンテンツ キャッシュの興味深い点は、オリジン サーバーから新しいコンテンツを取得できない場合に、キャッシュから古いコンテンツを配信するように構成できることです。

NGINX は、Web システムを保護するための多数のセキュリティ機能を提供します。これらには、SSL 終了、HTTP 基本認証によるアクセスの制限、サブリクエストの結果に基づく認証、JWT 認証、プロキシされた HTTP リソースへのアクセスの制限、地理的位置によるアクセスの制限、などなど。

通常、アプリケーション スタック内のリバース プロキシ、ロード バランサー、SSL ターミネーター/セキュリティ ゲートウェイ、アプリケーション アクセラレータ/コンテンツ キャッシュ、および API ゲートウェイとしてデプロイされます。ストリーミングメディアにも使用されます。

10.Apacheトラフィックサーバー

最後に重要なことですが、Apache Traffic Server は、HTTP/1.1 および HTTP/2.0 をサポートするオープンソースの高速でスケーラブルで拡張可能なキャッシュ プロキシ サーバーです。企業、ISP (インターネット サーバー プロバイダー)、バックボーン プロバイダーなどを対象に、頻繁にアクセスされるコンテンツをネットワークのエッジでキャッシュすることで、ネットワークの効率とパフォーマンスを向上させるように設計されています。

HTTP/HTTPS トラフィックのフォワード プロキシとリバース プロキシの両方をサポートします。いずれかまたは両方のモードで同時に実行するように構成することもできます。永続的なキャッシュ、プラグイン API を備えています。 ICP (インターネット キャッシュ プロトコル)、ESI (エッジ サイド インクルード) のサポート。キープアライブなど。

セキュリティの面では、Traffic Server は、プロキシ キャッシュの使用を許可するクライアントを構成できるようにすることで、クライアント アクセスの制御をサポートし、クライアントとそれ自身の間、および自分自身とオリジン サーバーの間の両方の接続に対して SSL 終了を行います。また、プラグインを介した認証と基本的な承認、ロギング (受信したすべてのリクエストと検出したすべてのエラー)、およびモニタリングもサポートしています。

Traffic Server は、Web プロキシ キャッシュ、フォワード プロキシ、リバース プロキシ、透過プロキシ、ロード バランサーとして、またはキャッシュ階層内で使用できます。

結論

キャッシュは、最も有益で長年確立されている Web コンテンツ配信テクノロジーの 1 つであり、主に Web サイトまたはアプリケーションの速度を上げることを目的として設計されています。キャッシュされたデータがクライアントに提供されるため、サーバーの負荷、遅延、ネットワーク帯域幅が軽減され、アプリケーションの応答時間とクライアントへの配信速度が向上します。

この記事では、Linux システムで使用できるトップのオープンソース キャッシュ ツールをレビューしました。ここにリストされていない他のオープンソース キャッシュ ツールをご存知の場合は、以下のフィードバック フォームを介して共有してください。この記事に関するご意見もお寄せください。