Memcachedは、汎用のメモリキャッシュシステムです。これは、計算または取得に長い時間がかかる質問への回答を保存(またはキャッシュ)するように設計されていることを意味します。 もう一度尋ねられる可能性があります 。一般的な使用例は、データベースの使用を加速することです。たとえば、「チームXにいるすべての人の名前」のリストが繰り返し必要になる場合は、SQLクエリを実行するのではなく、このデータをMemcachedに配置します。毎回。 (注:Memcachedは「memcache」と呼ばれることもあります。この記事ではフルネームを使用します。)
キャッシュは、サイト信頼性エンジニア(SRE)の中核となるスケーラブルなアプリケーションとインフラストラクチャを構築するのに役立ちます。この記事では、Memcachedを効果的に運用するために必要なものについて説明します。
Memcachedは、システムが利用できるメモリの量に制限されている場合に最適に機能します。削除 メモリ制限よりも多くのスペースを必要とする場合のデータ。 「オーバーヘッド」と呼ぶことができるもの、つまりMemcachedの管理操作、オペレーティングシステム、および補助プロセスに必要なメモリのために、ある程度のメモリスペースが必要になります。
より優れたコンテンツ
- 無料のオンラインコース:RHELの技術概要
- 高度なLinuxコマンドを学ぶ
- チートシートをダウンロード
- オープンソースの代替案を見つける
- トップLinuxコンテンツを読む
- オープンソースリソースを確認してください
これは-mを介して設定されます コマンドラインフラグ。これは、Memcachedを実行するために必要な唯一のフラグである可能性があります。 -d (デーモン化)フラグは通常は役に立ちません。最新のsystemdベースのオペレーティングシステムでは、Memcachedはそれ自体をデーモン化するべきではありません。同様に、Dockerで実行する場合も、それ自体をデーモン化するべきではありません。
コンテナでMemcachedを実行することは問題ありませんが、ホストで他に何が実行されているかを検討し、メモリ要件を慎重に調整することが重要です。
Memcachedを実行しているときは、直接接続して遊んで、何が起こっているかを確認することをお勧めします。少し注意を払う限り、本番インスタンスであっても、かなり安全です。
実行するのに最も安全なコマンドは統計です 。これにより、Memcachedは、多くの場合役立つ統計と詳細を大量に吐き出します。
$ echo stats | nc localhost 11211
...
STAT uptime 1346
...
STAT max_connections 1024
STAT curr_connections 2
STAT total_connections 6
STAT rejected_connections 4
...
STAT get_hits 0
STAT get_misses 0
STAT get_expired 0
...
END
最も興味深い統計は、通常、「ヒット」、「ミス」、および「期限切れ」です。これらは、キャッシュがどれほど効果的であるかについて興味深い話をすることがよくあります。有効性が低下すると、アプリケーションのパフォーマンスが低下する可能性があるため、これは懸念の原因になります。
少し安全性が低いのは、ストアアンドリトリーブです。これは、「タイヤを蹴って」それがどのように機能するかを学ぶための良い方法です:
$ echo stats | nc localhost 11211
set my_key 0 0 8
my_value^M
STORED
get my_key
VALUE my_key 0 8
my_value
END
my_valueと入力した後 、DOSスタイルの行末を送信する必要があります:returnとnewline。これは、Linuxコンソールで Ctrl + Vを使用して実行されます 次にEnterを押します 、 returnを出力します 文字(ASCII 13)を入力し、 Enterを押します。 いつものように改行を出力します 文字(ASCII 10)。
最初の0 「メタデータ」用で、 0を渡します 興味深いメタデータがないことを意味します。ビットマスクとして扱われるため、 0 すべてのビットがオフになっています。 2番目の0 有効期限です。 「期限切れにならない」という意味です。一般に、これはテストには問題ありません。本番環境では、キーの有効期限を設定することをお勧めします。
これが重要なインスタンスである場合は、重要なキーを上書きしないように注意する必要があります。ただし、コマンドラインを介してすばやく保存および取得する機能により、Memcachedが正しく実行されていることを確認できます。
最新のマイクロサービスのセットアップでは、多くのサービスがデータをMemcacheに保存する必要があることに注意してください。これを管理するための戦略を考え出すことは、価値があります。 1つのオプションは、サービスごとにMemcacheまたはクラスターを実行することです。ただし、これは多くの場合、複雑で高度なメンテナンスが必要です。多くの場合、正しいことはサービスにMemcacheを共有させることです。その場合、いくつかの合理的なポリシーを実装することをお勧めします。たとえば、キーの前にサービス名を付けることを義務付けます。これにより、 cachedump を使用して、どのサービスがどのくらいのスペースを使用しているかを確認できます。 コマンド:
$ echo 'stats items' | nc -w 1 localhost 11211|grep ':number '
STAT items:1:number 2
このコマンドは、すべての「スラブ」IDを表示します。 Memcacheは、同様のサイズのキーをスラブに保存します。この例にはスラブが1つだけあります:
$ echo 'stats cachedump 1 1000' | nc -w 1 localhost 11211
ITEM my_key [8 b; 0 s]
ITEM foo [5 b; 0 s]
END
ここでは、2つのキーがあります。1つは8バイトの値で、もう1つは5バイトの値です。
多くのキーを使用するより現実的なシナリオでは、このデータを awkで処理することをお勧めします。 またはスクリプトを使用し、ローカル規則を使用して、各サービスが使用しているスペースの量を把握します。
これをPrometheusなどの監視システムに統合して、時間の経過に伴う行動を追跡できます。
さらに、多くのチームが同じサービスを共有しているため、サービスがキャッシュしているデータを暗号化および認証することを提案することは有用なガイドラインです。最新のCPUでの対称暗号化はパフォーマンスが高く、これにより、はるかに単純なセキュリティモデルが可能になります。これをサポートするライブラリの一例は、暗号化のフェルネットです。 (これについてもっと読みたい場合は、コメントで知らせてください。)
Memcachedは、SREがサポートする一般的なオープンソーステクノロジーです。この記事では、それに関する一般的な統計を照会する方法を確認し、構成に関するアドバイスを提供し、複数のチームが1つのMemcachedクラスターを簡単に監視して安全な方法で共有できるようにする方法を示しました。 Memcachedの管理方法について他に質問がありますか?コメントで質問してください。もっと多くのヒントを喜んで共有します。