まず、システムキャッシュ
サイトへの大規模な大規模な同時アクセスには、そのようなレコードの数百万でリレーショナルデータベースのクラスタ、特に大規模なリレーショナルデータベース、もしその同時毎秒何千回へのアクセス、および各訪問としてOpenStackの表中のとき、クエリデータの記録、その効率も余裕がないことができ、データベースのために、非常に低くなります。
解決することができる緩衝系を使用した場合、大規模な同時データアクセスが非効率的なデータベースや圧力やその他の問題、頻繁にメモリアクセスで重複データを避けるために使用されるアクティブ・データ・ストレージ・システム・キャッシュによってもたらされる、データベースクエリをもたらしました頻繁にディスクI / Oと大きなテーブルクエリ時間のオーバーヘッドなので、キャッシュシステムは、ほとんどの大規模なサイトに不可欠な機能モジュールです。
キャッシュメモリシステムは、大規模生産のデータベースメモリベースのキャッシュ・データベースは、それによってデータ・アクセス・クライアントからのフィードバックからの要求、およびデータベースバックエンドへのアクセスを減少させる圧力を増加させる、高速なデータアクセス動作を提供するの後端に対して、データベースに基づくものと考えることができます。
二、Memcachedのコンセプト
memcachedのは、オープンソース、高性能、分散メモリオブジェクトキャッシュシステムです。データベースの負荷を軽減することによってサイトアクセス速度を向上させるために、メモリ内のデータとオブジェクトをキャッシュすることにより読み取るデータベースの数、加速動的なWebアプリケーションを低減します。
memcachedはキャッシュメモリであり、多くの場合、キャッシュメモリ内のオブジェクトやデータにアクセスする必要があり、メモリのデータをメモリにハッシュテーブルにハッシュを使用して格納された後、データキャッシュは、API経由でアクセスされましたアクセス制御およびセキュリティ管理、一般的に安全領域memcachedサーバのユーザにあり、従って、インターネットベースのシステムアーキテクチャのためのMemcachedの認証がないのでデータは、キー値の形でハッシュテーブルに格納されています。
物理メモリが十分な空きスペースがあるときにmemcachedサーバ・ノードは、Memcachedのは、最も最近使用されたアルゴリズム(LRU、LastRecentlyUsed)最近の非アクティブなデータがクリーンアップ、それによってソートアウトデータを格納するために必要な新しいメモリ・ストレージ・スペースを使用します。
Memcachedのは、また。クラスタシステムとしてのキャッシュに、多くの問題が明らかな利点を持っており、また、二次開発に簡単ですので、より多くのユーザーに大規模なクラスタのデータ・キャッシュの解決に持っているオープンAPIをMemcachedの、大規模なようにほとんどのプログラミング言語は、javacの、C / C ++ C#として、Memcachedのに使用することができ 、PerlやPython、PHP、Rubyの一般的なプログラミング言語の多様性。
Memcachedの多くの利点ので、キャッシュシステムクラスタ化された多くのオープンソースプロジェクトの最初の選択肢となっています。キーストーンの認証プログラムとしてOpenstacksd。大幅にデータベースの高負荷運転の下で大規模なクラスタでユーザーOpenStackのを向上させることができ、ユーザのログイン認証、MySQLのクエリのバックエンドデータベースに格納されているユーザ情報の必要性を排除し、そのような識別情報として、トークンのテナントをキャッシュするためのMemcachedを使用します。そのようなWeb管理インターフェースとオブジェクトストレージホライゾンスウィフトプロジェクトのMemcachedは、クライアント要求の応答速度を改善するために、キャッシュデータに使用するアクセスなどの認証方法。
三、memcachedのキャッシュ処理
1、クライアントチェックするMemcacheで要求されたデータかどうか、存在する場合、データ上の任意の操作を実行していない、直接、要求されたデータを返します。
要求されたデータは、Memcacheのではない場合は2、Memcacheのデータキャッシュながら、データベースクエリ、クライアントに戻し、データベースからデータの取得に行く
データベースはMemcacheのを更新しながら、データベースを更新し、3たびに。データの整合性を確認してください。
割り当てられたメモリ空間がMemcacheの最大使用される4、LRUは、(最低使用、最低使用頻度)障害ポリシー戦略に加え使用し、古いデータを交換するために最初に、次いで、最近使用されていないデータを交換します。
四、memcachedの機能
図1に示すように、単純なプロトコル
テキスト行ベースのプロトコルを使用して、テルネットのMemcachedを介して直接サーバ上のデータにアクセスすることができます
2、libeventに基づいて、イベント処理
libeventライブラリ使用C開発、そのようなイベントは、一つのインタフェースにパッケージの機能を扱うようBSDシステム、ファイルディスクリプタLinuxシステムを、kqueueの、ことを確認しても、サーバ側であればリンクの数。プラスそれはまた、非常に良好なパフォーマンスを再生することができます。非同期イベント処理のために、このライブラリを使用memcachedの。
3、内蔵のメモリ管理
LRUアルゴリズムを使用して、満たされた空間に格納されたデータは自動的に削除されていない場合Memcachedのメモリ管理は、このアプローチは、Memcachedの中に格納されているすべてのデータは、内蔵メモリ、非常に効率的である、独自の方法を持っていますキャッシュ使用、その再利用メモリ空間の有効期限が切れ。災害復旧データの問題を考慮していMemecached、すべてのデータが失われ、すべて一度再起動してください。
4、节点相互独立的分布式
各个 Memecached 服务器之间互不通信,都是独立的存取数据,不共享任何信息。通过对客户端的设计,让 Memcached 具有分布式,能支持海量缓存和大规模应用。
五、使用Memcached应该考虑的因素
1、Memcached服务单点故障
在Memcached集群系统中每个节点独立存取数据,彼此不存在数据同步镜像机制,如果一个Memcached节点故障或者重启,则该节点缓存在内存的数据全部会丢失,再次访问时数据再次缓存到该服务器
2、存储空间限制
Memcache缓存系统的数据存储在内存中,必然会受到寻址空间大小的限制,32为系统可以缓存的数据为2G,64位系统缓存的数据可以是无限的,要看Memcached服务器物理内存足够大即可
3、存储单元限制
Memcache缓存系统以 key-value 为单元进行数据存储,能够存储的数据key尺寸大小为250字节,能够存储的value尺寸大小为1MB,超过这个值不允许存储
4、数据碎片
Memcache缓存系统的内存存储单元是按照Chunk来分配的,这意味着不可能,所有存储的value数据大小正好等于一个Chunk的大小,因此必然会造成内存碎片,而浪费存储空间
5、利旧算法局限性
Memcache缓存系统的LRU算法,并不是针对全局空间的存储数据的,而是针对Slab的,Slab是Memcached中具有同样大小的多个Chunk集合
6、数据访问安全性
Memcache缓存系统的慢慢Memcached服务端并没有相应的安全认证机制通过,通过非加密的telnet连接即可对Memcached服务器端的数据进行各种操作