信頼性の高い分散コンピューティングシステムとアプリケーションは、著名なビジネスの基礎となっています。 特に、ミッションクリティカルなビジネスプロセスの自動化と管理、およびサービスの提供において 顧客。 これらのシステムおよびアプリケーションの開発者およびシステム管理者として、すべてを提供することが期待されています 最も効率的なシステムを確保するための情報技術(IT)ソリューションの種類 利用可能。
これには、システム/アプリケーションの戦略の設計、テスト、実装などのタスクが含まれます パフォーマンス、信頼性、可用性、およびスケーラビリティにより、エンドユーザーに満足のいくレベルの サービス。 キャッシング は、信頼できる非常に基本的で効果的なアプリケーション配信手法の1つです。 先に進む前に、キャッシングとは何か、どこに、どのように適用できるか、そしてその利点について簡単に見てみましょう。
キャッシング (また コンテンツのキャッシュ)は、データのコピーを一時的な保存場所(別名 キャッシュ)元のストレージからデータを取得する場合よりも、データに簡単かつ迅速にアクセスできるようにします。 キャッシュに保存されるデータには、ファイルまたはファイルのフラグメント(HTMLファイル、スクリプト、画像など)が含まれる場合があります。 ドキュメントなど)、データベース操作またはレコード、API呼び出し、DNSレコードなどのタイプと目的に応じて キャッシング。
キャッシュは、ハードウェアまたはソフトウェアの形式にすることができます。 ソフトウェアベースのキャッシュ(この記事の焦点です)は、アプリケーションスタックのさまざまなレイヤーに実装できます。
キャッシング クライアント側(またはアプリケーションプレゼンテーション層)で適用できます。たとえば、ブラウザーキャッシュやアプリキャッシュ(またはオフラインモード)です。 すべてではないにしてもほとんどの最新のブラウザには、HTTPキャッシュの実装が付属しています。 「」という人気のフレーズを聞いたことがあるかもしれません。キャッシュをクリアするローカルに保存されているコンテンツの古いコピーを使用するブラウザの代わりに、Webアプリケーションにアクセスして、Webサイトまたはアプリケーション上の最新のデータまたはコンテンツを表示できるようにする場合。
クライアント側のキャッシュのもう1つの例は、 DNSキャッシング これはオペレーティングシステム(OS)レベルで発生します。 これは、OSまたはWebブラウザによる以前のDNSルックアップに関する情報の一時的なストレージです。
キャッシングは、ネットワークレベルで実装することもできます。 LAN また WAN プロキシ経由。 このタイプのキャッシングの一般的な例は次のとおりです。 CDN (コンテンツ配信ネットワーク)、これはWebプロキシサーバーのグローバルに分散されたネットワークです。
第3に、オリジンサーバーまたはバックエンドサーバーでキャッシュを実装することもできます。 サーバーレベルのキャッシュにはさまざまな形式があり、次のようなものがあります。
キャッシュデータは、データベース、ファイル、システムメモリなどを含む任意のストレージシステムに保存できますが、プライマリソースよりも高速なメディアである必要があることに注意してください。 この点で、メモリ内キャッシュは最も効果的で一般的に使用されるキャッシュの形式です。
キャッシングには、次のような多くの利点があります。
この記事では、トップのオープンソースのいくつかをレビューします(アプリケーション/データベースのキャッシュ と プロキシサーバーのキャッシュ)Linuxでサーバー側キャッシュを実装するためのツール。
Redis (辞書サーバーのリモート 完全に)は、すべてではないにしてもほとんどのプログラミング言語から使用できる、無料でオープンソースの高速で高性能な柔軟な分散型インメモリコンピューティングシステムです。
これは、キャッシングエンジン、インメモリ永続オンディスクデータベース、およびメッセージブローカーとして機能するインメモリデータ構造ストアです。 Linux(デプロイに推奨されるプラットフォーム)とOS Xで開発およびテストされていますが、Redisは、外部依存関係がなくても、* BSDなどの他のPOSIXシステムでも機能します。
Redis 文字列、ハッシュ、リスト、セット、ソートされたセット、ビットマップ、ストリームなど、多数のデータ構造をサポートします。 これにより、プログラマーは特定のデータ構造を使用して特定の問題を解決できます。 文字列への追加、リストへの要素のプッシュ、ハッシュの値のインクリメント、セットの共通部分の計算など、データ構造の自動操作をサポートします。
その主な機能は次のとおりです。 Redisマスタースレーブレプリケーション (デフォルトでは非同期)、高可用性と自動フェイルオーバーを使用して提供 RedisSentinel, Redisクラスター (クラスターノードを追加することで水平方向にスケーリングできます)およびデータ分割(複数のRedisインスタンス間でデータを分散します)。 また、トランザクションのサポートも備えています。 Luaスクリプト、さまざまな永続化オプション、およびクライアント/サーバー通信の暗号化。
インメモリでありながら永続的なオンディスクデータベースであるRedisは、インメモリデータセットで最適に動作する場合に、最高のパフォーマンスを提供します。 ただし、MySQL、PostgreSQLなどのオンディスクデータベースで使用できます。 たとえば、Redisで書き込みの多い小さなデータを取得し、データの他のチャンクをディスク上のデータベースに残すことができます。
Redisは、さまざまな方法でセキュリティをサポートしています。保護モード」機能により、Redisインスタンスが外部ネットワークからアクセスされないように保護します。 また、クライアント/サーバー認証(パスワードがサーバーで構成され、クライアントで提供される場合)および クライアント接続、レプリケーションリンク、Redisクラスターバスプロトコルなどのすべての通信チャネルでのTLS、および もっと。
Redisには、データベースキャッシング、フルページキャッシング、ユーザーセッションデータ管理、API応答ストレージ、パブリッシュ/サブスクライブメッセージングシステム、メッセージキューなどを含む非常に多くのユースケースがあります。 これらは、ゲーム、ソーシャルネットワーキングアプリケーション、RSSフィード、リアルタイムデータ分析、ユーザーの推奨事項などに適用できます。
Memcached は、無料でオープンソースの、シンプルでありながら強力な分散メモリオブジェクトキャッシングシステムです。 これは、データベース呼び出し、API呼び出し、ページレンダリングの結果など、データの小さなチャンク用のメモリ内のKey-Valueストアです。 LinuxやOSXなどのUnixライクなオペレーティングシステム、およびMicrosoftWindowsで動作します。
開発者ツールであるため、コンテンツをキャッシュすることで動的Webアプリケーションの速度を上げるために使用することを目的としています(デフォルトでは、 最近使用されていない (LRU)キャッシュ)したがって、ディスク上のデータベースの負荷が軽減されます。これは、アプリケーションの短期記憶として機能します。 最も人気のあるプログラミング言語用のAPIを提供します。
Memcached 唯一のデータ型として文字列をサポートします。 クライアントサーバーアーキテクチャがあり、ロジックの半分はクライアント側で発生し、残りの半分はサーバー側で発生します。 重要なのは、クライアントは、アイテムに対して書き込みまたは読み取りを行うサーバーを選択する方法を理解していることです。 また、クライアントはサーバーに接続できない場合の対処方法をよく知っています。
分散キャッシングシステムであるため、クラスタリングをサポートしますが、Memcachedサーバーは相互に切断されます(つまり、相互に認識されません)。 これは、Redisのようなレプリケーションサポートがないことを意味します。 また、アイテムを保存およびフェッチする方法、削除するタイミングを管理する方法、またはメモリを再利用する方法も理解しています。 サーバーを追加することで、使用可能なメモリを増やすことができます。
Memcached 1.5.13以降、TLSを介した認証と暗号化をサポートしていますが、この機能はまだ実験段階です。
Apache Ignite、また、無料でオープンソースの、水平方向にスケーラブルな分散型メモリ内Key-Valueストア、キャッシュ、 分散型でコンピューティングするための強力な処理APIを提供するマルチモデルデータベースシステム データ。 また、メモリ内またはIgniteネイティブ永続性のいずれかで使用できるインメモリデータグリッドでもあります。 次のようなUNIXライクなシステムで実行されます Linux そしてまた ウィンドウズ.
多層ストレージ、完全なSQLサポート、および 酸 (Atomicity、Consistency、Isolation、Durability)複数のクラスターノード間でのトランザクション(Key-Value APIレベルでのみサポート)、同じ場所に配置された処理、機械学習。 これは、あらゆるサードパーティデータベースとの自動統合をサポートします。 RDBMS (MySQL、PostgreSQL、Oracle Databaseなど)またはNoSQLストア。
ただし、注意することが重要です。 発火 SQLデータストアとして機能しますが、完全にSQLデータベースではありません。 従来のデータベースと比較して、制約とインデックスを明確に処理します。 プライマリインデックスとセカンダリインデックスをサポートしますが、一意性を強制するために使用されるのはプライマリインデックスのみです。 また、外部キー制約はサポートされていません。
Igniteは、サーバーで認証を有効にし、クライアントでユーザークレデンシャルを提供できるようにすることで、セキュリティもサポートします。 すべてのIgniteノード間で安全な接続を提供するためのSSLソケット通信もサポートされています。
発火 キャッシングシステム、システムワークロードアクセラレーション、リアルタイムデータ処理、分析など、多くのユースケースがあります。 グラフ中心のプラットフォームとしても使用できます。
カウチベースサーバー は、オープンソースの分散型NoSQLドキュメント指向エンゲージメントデータベースでもあり、データをキー値形式のアイテムとして保存します。 LinuxおよびWindowsやMacOSXなどの他のオペレーティングシステムで動作します。 N1QLと呼ばれる機能豊富なドキュメント指向のクエリ言語を使用して、データに対するサブミリ秒の操作をサポートする強力なクエリおよびインデックスサービスを提供します。
その注目すべき機能は、マネージドキャッシュ、専用のインデクサー、強力なクエリエンジンを備えた、高速なKey-Valueストアです。 スケールアウトアーキテクチャ(多次元尺度構成法)、ビッグデータとSQLの統合、フルスタックセキュリティ、および 高可用性。
カウチベースサーバー ネイティブのマルチインスタンスクラスターサポートが付属しており、クラスターマネージャーツールがすべてのノードアクティビティを調整し、クラスター全体のインターフェイスをクライアントに提供します。 重要なのは、ダウンタイムなしで、必要に応じてノードを追加、削除、または置換できることです。 また、クラスターのノード間でのデータレプリケーション、データセンター間での選択的なデータレプリケーションもサポートします。
専用のCouchbaseServerポート、さまざまな認証メカニズム(資格情報または 証明書)、役割ベースのアクセス制御(認証された各ユーザーに、割り当てられているシステム定義の役割を確認するため)、監査、ログ、および セッション。
そのユースケースには、統合プログラミングインターフェイス、全文検索、並列クエリ処理、ドキュメント管理、およびインデックス作成が含まれます。 大規模なインタラクティブWeb、モバイル、IoT向けの低遅延データ管理を提供するように特別に設計されています アプリケーション。
ヘーゼルキャストIMDG (インメモリデータグリッド)は、オープンソースで軽量、高速、拡張可能なインメモリデータグリッドミドルウェアであり、弾力的にスケーラブルな分散型インメモリコンピューティングを提供します。 ヘーゼルキャストIMDG Linux、Windows、Mac OS X、およびJavaがインストールされているその他のプラットフォームでも動作します。 Map、Set、List、MultiMap、RingBuffer、HyperLogLogなど、さまざまな柔軟で言語ネイティブのデータ構造をサポートします。
ヘーゼルキャスト ピアツーピアであり、単純なスケーラビリティ、クラスタセットアップ(統計を収集するオプション、JMXを介して監視するオプション付き)をサポートします プロトコル、および有用なユーティリティを使用してクラスターを管理する)、分散データ構造とイベント、データ分割、および トランザクション。 また、複数のメンバーの各データエントリのバックアップを保持するため、冗長性があります。 クラスタをスケーリングするには、別のインスタンスを起動するだけで、データとバックアップのバランスが自動的かつ均等になります。
クラスター内のCPUにアクセスして最大の処理速度を実現するための便利なAPIのコレクションを提供します。 また、Map、Queue、ExecutorService、Lock、JCacheなどのJavaからの開発者向けの多数のインターフェースの分散実装も提供します。
このセキュリティ機能には、クラスターメンバー、クライアント認証、およびJAASベースのセキュリティ機能を介したクライアント操作のアクセス制御チェックが含まれます。 また、クライアントによって実行されるソケット接続とリモート操作を傍受することもできます。 クラスタメンバー間のソケットレベルの通信暗号化、およびSSL / TLSソケットの有効化 コミュニケーション。 ただし、公式ドキュメントによると、これらのセキュリティ機能のほとんどはEnterpriseバージョンで提供されています。
最も一般的な使用例は、分散インメモリキャッシュとデータストアです。 ただし、Webセッションのクラスタリング、NoSQLの置き換え、並列処理、簡単なメッセージングなどにも展開できます。
マクルーター は、Memcachedデプロイメントをスケーリングするための無料のオープンソースMemcachedプロトコルルーターであり、によって開発および保守されています。 フェイスブック. Memcached ASCIIプロトコル、柔軟なルーティング、マルチクラスターサポート、マルチレベルキャッシュ、接続プーリング、複数のハッシュを備えています スキーム、プレフィックスルーティング、レプリケートされたプール、本番トラフィックシャドウイング、オンライン再構成、および宛先ヘルスモニタリング/自動 フェイルオーバー。
さらに、コールドキャッシュのウォームアップ、豊富な統計およびデバッグコマンド、信頼性の高い削除ストリームのサービス品質、大きな値、ブロードキャスト操作をサポートし、IPv6およびSSLのサポートが付属しています。
FacebookとInstagramでキャッシュインフラストラクチャのコアコンポーネントとして使用されており、ピーク時に1秒あたり約50億のリクエストを処理します。
ワニスキャッシュ は、Webクライアントとオリジンサーバーの間に位置する、オープンソースの柔軟で最新の多目的Webアプリケーションアクセラレータです。 最新のLinux、FreeBSD、およびSolaris(x86のみ)プラットフォームすべてで動作します。 これは、次のようなWebサーバーの前にデプロイできる優れたキャッシュエンジンおよびコンテンツアクセラレータです。 NGINX, Apache その他多くの場合、デフォルトのHTTPポートをリッスンして、クライアント要求を受信してWebサーバーに転送し、Webサーバーの応答をクライアントに配信します。
クライアントとオリジンサーバーの間の仲介者として機能している間、 ワニスキャッシュ いくつかの利点があります。基本的には、Webコンテンツをメモリにキャッシュして、Webサーバーの負荷を軽減し、クライアントへの配信速度を向上させます。
クライアントからHTTPリクエストを受信すると、それをバックエンドWebサーバーに転送します。 Webサーバーが応答すると、Varnishはコンテンツをメモリにキャッシュし、クライアントに応答を配信します。 クライアントが同じコンテンツを要求すると、Varnishはキャッシュブーストアプリケーションの応答からコンテンツを提供します。 キャッシュからコンテンツを提供できない場合、リクエストはバックエンドに転送され、レスポンスはキャッシュされてクライアントに配信されます。
ワニス 特徴 VCL (Varnish構成言語 –リクエストの処理方法などを構成するために使用される柔軟なドメイン固有言語) ワニスモジュール (VMODS)これはVarnishCacheの拡張機能です。
セキュリティ面では、Varnish Cacheは、ロギング、リクエストインスペクション、スロットル、認証、承認をサポートしています。 VMODS、ただし、SSL / TLSのネイティブサポートがありません。 有効にすることができます HTTPS などのSSL / TLSプロキシを使用するVarnishCacheの場合 ヒッチ またはNGINX。
Varnish CacheをWebアプリケーションファイアウォール、DDoS攻撃防御、ホットリンクプロテクター、ロードバランサー、統合として使用することもできます。 ポイント、シングルサインオンゲートウェイ、認証と承認のポリシーメカニズム、不安定なバックエンドのクイックフィックス、HTTPリクエスト ルーター。
Linux用のもう1つの無料でオープンソースの、卓越した、広く使用されているプロキシおよびキャッシングソリューションは イカ. これは、HTTP、HTTPS、FTPなどの一般的なネットワークプロトコルにプロキシおよびキャッシュサービスを提供する、機能豊富なWebプロキシキャッシュサーバーソフトウェアです。 また、他のUNIXプラットフォームおよびWindowsでも動作します。
と同じように ワニスキャッシュ、クライアントからリクエストを受信し、指定されたバックエンドサーバーに渡します。 バックエンドサーバーが応答すると、コンテンツのコピーがキャッシュに保存され、クライアントに渡されます。 同じコンテンツに対する将来のリクエストはキャッシュから提供されるため、クライアントへのコンテンツ配信が高速化されます。 そのため、クライアントとサーバー間のデータフローを最適化してパフォーマンスを向上させ、頻繁に使用するコンテンツをキャッシュしてネットワークトラフィックを削減し、帯域幅を節約します。
Squidには、プロキシサーバーの相互通信階層に負荷を分散したり、Webに関するデータを生成したりするなどの機能があります。 使用パターン(最も訪問されたサイトに関する統計など)を使用すると、送信中のメッセージを分析、キャプチャ、ブロック、置換、または変更できます。 プロキシ。
また、豊富なアクセス制御、承認、認証、SSL / TLSサポート、アクティビティログなどのセキュリティ機能もサポートしています。
NGINX (と発音します Engine-X)は、オープンソース、高性能、フル機能、そして非常に人気のある統合ソリューションです。 Webインフラストラクチャのセットアップ. これは、HTTPサーバー、リバースプロキシサーバー、メールプロキシサーバー、および汎用TCP / UDPプロキシサーバーです。
NGINX キャッシュされたコンテンツがディスク上の永続キャッシュに保存される基本的なキャッシュ機能を提供します。 NGINXのコンテンツキャッシュの魅力的な部分は、オリジンサーバーから新しいコンテンツをフェッチできないときに、キャッシュから古いコンテンツを配信するように構成できることです。
NGINXは、次のような多数のセキュリティ機能を提供します。 Webシステムを保護する、これらにはSSLターミネーション、アクセスの制限が含まれます HTTP基本認証、サブリクエストの結果に基づく認証、JWT認証、プロキシされたHTTPリソースへのアクセスの制限、地理的な場所によるアクセスの制限など。
通常、リバースプロキシ、ロードバランサー、SSLターミネーター/セキュリティゲートウェイ、アプリケーションアクセラレーター/コンテンツキャッシュ、およびアプリケーションスタック内のAPIゲートウェイとして展開されます。 ストリーミングメディアにも使用されます。
最後になりましたが、 Apacheトラフィックサーバー、HTTP /1.1およびHTTP / 2.0をサポートする、オープンソースの高速でスケーラブルな拡張可能なキャッシングプロキシサーバー。 ネットワーク効率を改善するように設計されています 企業、ISP(インターネットサーバープロバイダー)、バックボーンプロバイダー、および もっと。
HTTP / HTTPSトラフィックの順方向プロキシと逆方向プロキシの両方をサポートします。 また、いずれかまたは両方のモードで同時に実行するように構成することもできます。 永続的なキャッシュ、プラグインAPIを備えています。 ICP(インターネットキャッシュプロトコル)、ESI(エッジサイドインクルード)のサポート。 キープアライブなど。
セキュリティの観点から、Traffic Serverは、許可されているクライアントを構成できるようにすることで、クライアントアクセスの制御をサポートしています。 プロキシキャッシュを使用するには、クライアントとそれ自体の間、およびそれ自体とオリジンの間の両方の接続にSSLターミネーションを使用します サーバ。 また、プラグインを介した認証と基本認証、(受信したすべての要求と検出したすべてのエラーの)ロギング、および監視もサポートします。
Traffic Serverは、Webプロキシキャッシュ、フォワードプロキシ、リバースプロキシ、トランスペアレントプロキシ、ロードバランサーとして、またはキャッシュ階層で使用できます。
キャッシング は、主にWebサイトまたはアプリケーションの速度を上げるように設計された最も有益で老舗のWebコンテンツ配信テクノロジーの1つです。 サーバーの負荷、待ち時間、および ネットワーク帯域幅 キャッシュされたデータがクライアントに提供されるため、アプリケーションの応答時間とクライアントへの配信速度が向上します。
この記事では、Linuxシステムで使用するトップのオープンソースキャッシュツールを確認しました。 ここに記載されていない他のオープンソースキャッシュツールをご存知の場合は、以下のフィードバックフォームからお知らせください。 この記事についてのあなたの考えを私たちと共有することもできます。