2020年のLinux用のトップ10オープンソースキャッシングツール


信頼性の高い分散コンピューティングシステムとアプリケーションは、特にミッションクリティカルなビジネスプロセスの自動化と管理、および顧客へのサービスの提供において、著名なビジネスの基礎となっています。これらのシステムおよびアプリケーションの開発者およびシステム管理者は、最も効率的なシステムを利用できるようにするためのあらゆる種類の情報技術(IT)ソリューションを提供することが求められます。

これには、システム/アプリケーションのパフォーマンス、信頼性、可用性、スケーラビリティの戦略の設計、テスト、実装などのタスクが含まれ、エンドユーザーに満足のいくレベルのサービスを提供します。キャッシングは、信頼できる非常に基本的で効果的なアプリケーション配信手法の1つです。先に進む前に、キャッシングとは何か、どこに、どのように適用できるか、そしてその利点について簡単に見てみましょう。

キャッシング(またはコンテンツキャッシング)は、データのコピーを一時的な保存場所(キャッシュとも呼ばれます)に保存するために広く使用されている手法であり、元のストレージから取得する場合よりも簡単かつ迅速にデータにアクセスできます。キャッシュに保存されるデータには、キャッシュの種類と目的に応じて、ファイルまたはファイルのフラグメント(HTMLファイル、スクリプト、画像、ドキュメントなど)、データベース操作またはレコード、API呼び出し、DNSレコードなどが含まれる場合があります。

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

キャッシングは、クライアント側(またはアプリケーションプレゼンテーション層)で適用できます。たとえば、ブラウザーキャッシングやアプリキャッシング(またはオフラインモード)です。すべてではないにしてもほとんどの最新のブラウザには、HTTPキャッシュの実装が付属しています。ローカルに保存されているコンテンツの古いコピーを使用するブラウザではなく、Webアプリケーションにアクセスして、Webサイトまたはアプリケーションの最新のデータまたはコンテンツを表示できるようにするときに、「キャッシュをクリアする」という一般的なフレーズを聞いたことがあるかもしれません。

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

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

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

  • webserver caching (for caching of images, documents, scripts, and so on).
  • application caching or memorization (used in reading files from disk, data from other services or processes or requesting data from an API, etc.).
  • database caching (to provide in-memory access to frequently used data such as requested database rows, query results, and other operations).

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

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

  • At the database level, it improves read performance to microseconds for cached data. You can also use write-back cache to improve write performance, where data is written in memory and later on written to disk or main storage at specified intervals. But the data integrity aspect of it may have potentially disastrous implications. For example, when the system crashes just before data is committed to the main storage.
  • At the application level, a cache can store frequently read data within the application process itself, thus reducing data lookup times from seconds down to microseconds, especially over the network.
  • Considering overall application and server performance, caching helps to reduce your server load, latency, and network bandwidth as cached data is served to clients, thus improving response time and delivery speeds to clients.
  • Caching also allows for content availability especially via CDNs, and many other benefits.

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

1.Redis

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

これは、キャッシングエンジン、インメモリ永続オンディスクデータベース、およびメッセージブローカーとして機能するインメモリデータ構造ストアです。 Linux(デプロイに推奨されるプラットフォーム)とOS Xで開発およびテストされていますが、Redisは、外部の依存関係なしに、* 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呼び出し、ページレンダリングの結果など、データの小さなチャンク用のメモリ内のKey-Valueストアです。 LinuxやOSXなどのUnixライクなオペレーティングシステム、およびMicrosoftWindowsで動作します。

開発者ツールであるため、コンテンツ(デフォルトでは、使用頻度が最も低い(LRU)キャッシュ)をキャッシュすることで動的Webアプリケーションの速度を向上させ、ディスク上のデータベースの負荷を軽減することを目的としています。アプリケーション。最も人気のあるプログラミング言語用のAPIを提供します。

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

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

Memcached 1.5.13以降、TLSを介した認証と暗号化をサポートしていますが、この機能はまだ実験段階です。

3. Apache Ignite

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

多層ストレージ、完全なSQLサポート、および複数のクラスターノードにわたるACID(Atomicity、Consistency、Isolation、Durability)トランザクション(Key-Value APIレベルでのみサポート)、同じ場所に配置された処理、機械学習を備えています。 RDBMS(MySQL、PostgreSQL、Oracle Databaseなど)やNoSQLストアなどのサードパーティデータベースとの自動統合をサポートします。

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

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

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

4.Couchbaseサーバー

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

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

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

専用のCouchbaseServerポート、さまざまな認証メカニズム(資格情報または証明書のいずれかを使用)、役割ベースのアクセス制御(認証された各ユーザーに割り当てられたシステム定義の役割を確認する)、監査、ログ、およびセッションを使用して、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は、Facebookによって開発および保守されている、Memcachedデプロイメントをスケーリングするための無料のオープンソースMemcachedプロトコルルーターです。 Memcached ASCIIプロトコル、柔軟なルーティング、マルチクラスターサポート、マルチレベルキャッシュ、接続プーリング、複数のハッシュスキーム、プレフィックスルーティング、レプリケートされたプール、本番トラフィックシャドウイング、オンライン再構成、宛先ヘルスモニタリング/自動フェイルオーバーを備えています。

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

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

7.ワニスキャッシュ

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

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

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

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

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

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

8.Squidキャッシングプロキシ

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

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

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

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

9. NGINX

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

NGINXは、キャッシュされたコンテンツがディスク上の永続キャッシュに保存される基本的なキャッシュ機能を提供します。 NGINXのコンテンツキャッシュの魅力的な部分は、オリジンサーバーから新しいコンテンツをフェッチできないときに、キャッシュから古いコンテンツを配信するように構成できることです。

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

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

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

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

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

セキュリティの観点から、Traffic Serverは、プロキシキャッシュの使用を許可されるクライアント、クライアントとそれ自体の間、およびそれ自体とオリジンサーバーの間の両方の接続のSSLターミネーションを構成できるようにすることで、クライアントアクセスの制御をサポートします。また、プラグインを介した認証と基本認証、(受信したすべての要求と検出したすべてのエラーの)ロギング、および監視もサポートします。

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

キャッシングは、主にWebサイトまたはアプリケーションの速度を上げるように設計された、最も有益で老舗のWebコンテンツ配信テクノロジーの1つです。キャッシュされたデータがクライアントに提供されるため、サーバーの負荷、遅延、およびネットワーク帯域幅を削減し、アプリケーションの応答時間とクライアントへの配信速度を向上させるのに役立ちます。

この記事では、Linuxシステムで使用するトップのオープンソースキャッシュツールを確認しました。ここに記載されていない他のオープンソースキャッシュツールをご存知の場合は、以下のフィードバックフォームからお知らせください。この記事についてのあなたの考えを私たちと共有することもできます。