外部ストレージのサポートが有効になった Memcached 1.6.0 のリリース

開催されました インメモリデータキャッシュシステムの重要なリリース Memcached 1.6.0、キー/値形式でデータを操作し、使いやすいです。 Memcached は通常、DBMS および中間データへのアクセスをキャッシュすることで高負荷のサイトの作業を高速化する軽量ソリューションとして使用されます。 コード 供給された BSD ライセンスに基づいて。

新しいバージョンではストレージの実装が安定しています。」エクスストアこれはデフォルトでビルドされるようになりました (これを無効にするには、configure スクリプトに「--disable-extstore」オプションが用意されています) が、起動時に明示的にアクティブ化する必要があります (古いインストールは更新後も変更なしで引き続き動作します)。 extstore は一般に安定していると考えられていますが、非常に大規模なシステムに実装する場合は注意が必要です。

Extstore を使用すると、SSD/フラッシュ ドライブを使用してキャッシュ サイズを拡張できます。 RAM と同様、フラッシュ ストレージは永続的なものではなく、再起動時にリセットされます。 新しいモードの範囲は、大規模なデータを効率的にキャッシュすることです。 「extstore」を利用すると、キーとメタデータは従来通りRAM上にのみ保存されますが、設定した閾値を超えるようなキーに関連付けられた大きなデータは外部ストレージに保存され、RAM上にはポインタのみが残ります。

キーが小さなデータに関連付けられている場合、Memcached は通常どおりに動作し、データをメモリ内に保持し、外部ストレージにはアクセスしません。 空きメモリがたくさんある場合は、最も必要なデータを RAM 内のキャッシュに完全に配置することもできます (たとえば、1024 秒間アクセスされなかった 3600 バイトを超えるオブジェクトのみをフラッシュにリセットするように指定できます) )。

実装は、ストレージ効率 (高レベルの断片化) を犠牲にして、最大のパフォーマンスと最小限の CPU 負荷を保証するように最適化されています。 フラッシュ ドライブの寿命を延ばすために、データはバッファリングされ、ストレージに順次フラッシュされます。 再起動の間にキャッシュ状態を保存するには、リリース 1.5.18 で登場した機能を使用して、キャッシュ ダンプをファイルにダンプできます。 次回の起動時に、このファイルからキャッシュを復元して、キャッシュが空であることによるコンテンツ プロセッサの負荷のピークを排除できます (キャッシュはすぐに「ウォーム」になります)。

Memcached 1.6 の 1.6 番目の重要な変更は、単一のシステム コール内でバッチ リクエストを自動的に処理するように適応されたネットワーク通信コードの再加工でした。 以前は、単一の TCP パケットで複数の GET コマンドを送信する場合、memcached は別のシステム コールで結果を送信していました。 Memcached 1.5 では、単一のシステム コールを送信することで応答が集約されて返されます。 その結果、システム コールごとに平均 25 キーが使用されるようになり、テストでは CPU 負荷が最大 XNUMX% 削減され、レイテンシーが数パーセント削減されたことが実証されています。

ネットワーク サブシステムの再設計により、バッファを静的に割り当てるのではなく、必要に応じてバッファを動的に割り当てるように移行することも可能になりました。 この最適化により、クライアントが確立した接続を介して新しいコマンドを待機する際のメモリ消費量が 4.5 KB から 400 ~ 500 バイトに削減され、また、不要なメモリの断片化につながる、malloc、realloc、free への多くの呼び出しを取り除くことも可能になりました。多数の接続があるシステム。 各ワーカー スレッドは、アクティブなクライアント接続用の読み取りおよび書き込みバッファーの独自のプールを処理するようになりました。 これらのバッファのサイズを調整するには
オプション「-o resp_obj_mem_limit=N」および「-o read_buf_mem_limt=N」が提供されます。

ブランチ 1.6 では、 バイナリプロトコル サーバーとの対話。 バイナリ プロトコルのメンテナンスとバグ修正は継続されますが、新機能や既存の機能のアップデートは移植されません。 テキストプロトコル 変わることなく発展し続けます。 バイナリ プロトコルは新しいプロトコルに置き換えられました メタ (コンパクトなメタコマンドを備えたプロトコルのテキスト バージョン)、パフォーマンスと信頼性の最適な組み合わせを示します。 新しいプロトコルは、テキストおよびバイナリ プロトコルを通じて以前に利用できたすべての操作をカバーします。

出所: オープンネット.ru

コメントを追加します