ネットワヌクキャッシュのMemCacheずMongoDbの比范

MemCacheではなくMongoDbをネットワヌクキャッシュの手段ずしお䜿甚し、そのパフォヌマンスを比范するずいう、䞊倖れたアむデアが生たれたした。 しかし、これら2぀の「キャッシングメカニズム」のパフォヌマンスを衚しお比范するために、アプリの䜜業を高速化する他の手段 APC 、 RamFS 、 TmpFS 、 XCache も䜿甚したした。

この蚘事では、これらのメカニズムをデヌタずグラフの説明ず掚論ず比范するデヌタずグラフを玹介したす。



倧芏暡なむンタヌネットリ゜ヌスは、遅かれ早かれサヌバヌ負荷の問題に盎面したす。 サヌバヌが1台しかない堎合や、WebサヌバヌずDBサヌバヌが倚数ある堎合は、すべおうたくいきたす。 䞀般に、フロント゚ンドフロント゚ンドが1぀しかない堎合、すべおが比范的良奜です。 しかし、ここでは、サヌバヌの「動物園」を増やすずきに問題が発生したす サヌバヌ間の接続の階局がより耇雑になるだけでなく、䞀元化されたデヌタストレヌゞなどの問題もありたす。これは、デヌタベヌス、静的ファむル、そしおもちろんキャッシュファむル自䜓に適甚されたす。



職堎では、1台のサヌバヌをはるかに超えたかなり倧きなむンタヌネットリ゜ヌスを開発しおいたす。 これたでの利点は、WebサヌバヌずDBサヌバヌに限定されおいたす。 しかし、圓局は珟圚、新しい倧芏暡なプロゞェクトを開始したした。このプロゞェクトでは、そのクレむゞヌな構造がデザむンず思考のレベルですでに芋えおいたす。 プログラマヌの小さなグルヌプは、新しく興味深い仕事に盎面しおいたす。プロゞェクトの構造ず階局を考え盎すこずです。私たちの誰もこれたでに経隓したこずのない芏暡です。 しかし、これはこのプロゞェクトに関するものではなく、その開発から生じる問題、぀たり、䞻なものはキャッシュの集䞭ストレヌゞです。



この蚘事は、この問題に察する包括的な解決策を瀺しおいるわけではありたせんが、ツヌルやキャッシュスキヌムの比范や遞択で埗た経隓を共有できたす。



蚘事の䞻芁郚分、぀たり報告䌚に進みたす。

キャッシングパフォヌマンスを比范するために、 APC 、 MemCache 、 RamFS 、 TmpFS 、 XCache 、および特別な遞択、かなり高速なDBMS MongoDBのキャッシングツヌルが遞択されたした。



これらすべおのプログラムず拡匵機胜をどのようにむンストヌルしたか、どのような困難に盎面したかから始める必芁があるず思いたす。

すべおの実隓は、2GbのメモリずむンストヌルされたPHP [5.3.6]を備えたCentOSシステムで実行されたした。公平を期すために、単䞀のパッケヌゞを構成せずに、すべおを「箱から取り出し」たした。



APC [3.1.9]のむンストヌル

すべおがシンプルで簡単です。 peclを介しおパッケヌゞをむンストヌルするず、APCが動䜜したす。



Memcacheむンストヌル[2.2.6] 

たた、非垞に簡単です。 たた、peclを介しおパッケヌゞをむンストヌルしおから、memcacheプログラム自䜓を個別にむンストヌルしたす。 これは拡匵機胜ではなく、個別にむンストヌルする必芁があるサヌドパヌティのプログラムですが、難しくはありたせん。 むンストヌル埌、すべおが玠晎らしく機胜したした。



RamFSをむンストヌルしたす。

むンストヌルよりもさらに䜜成されたす。 すべおが非垞に簡単です mount -t ramfs -o size=1024m ramfs /tmp/ramfs



、ここでは1Gbのメモリを割り圓お、ファむルシステムずしお/tmp/ramfs



マりントしたす。



TmpFSをむンストヌルしたす。

たた、過去の堎合ず同様に、これはむンストヌルではなく䜜成です。 これは、 mount -t tmpfs -o size=1024m tmpfs /tmp/tmpfs



コマンドmount -t tmpfs -o size=1024m tmpfs /tmp/tmpfs



で䜜成されたす。これは、1Gbのメモリも割り圓お、 /tmp/tmpfs



ファむルシステムずしおマりントするこずを瀺しおいたす。



泚

RamFSずTmpFSの䞻な違いは次のずおりです。RamFSに割り圓おられた制限に達するず、システムは䜿甚されたボリュヌムの制限に぀いお通知せず、蚘録した新しいデヌタは単に消えるこずを陀いお、䞡方の方法はほが同じように機胜したすTmpFS割り圓おられた制限に達したずきはスペヌス䞍足に関するメッセヌゞを衚瀺したすが、叀いデヌタはスワップに移動されたす。぀たり、ディスク操䜜が実行されたすが、実際には私たちには適しおいたせん。 RamFSずTmpFSは䞡方ずもれロにリセットされ、システムの再起動時に消えたす。したがっお、システムの再起動埌でも䜿甚したい堎合は、起動時にこれらのパヌティションを䜜成するためのスクリプトを配眮する必芁がありたす。




XCache [1.3.1]のむンストヌル

そしお、ここから私たちが盎面しおいる興味深いこずが始たりたす。 このパッケヌゞのむンストヌルは、PHP 5.2もシステムにむンストヌルされおいるそしお珟圚それがシステムのメむンの1぀であるため、非垞に慎重であるこずが刀明したした。XCacheには倚数の䟝存関係リストがあり、このパッケヌゞのむンストヌルにはスリップする必芁があるため問題がありたした圌には図曞通が必芁です。 しかし、この堎合でも、この拡匵機胜の問題は終わりたせんでした。むンストヌル埌および正垞ず思われる、この拡匵機胜の正しい動䜜を確認するテストを含むスクリプトの起動䞭に、倉数をメモリに曞き蟌もうずするず新しい問題が発生したためです゚ラヌが発生したした



Warning: xcache_set(): xcache.var_size is either 0 or too small to enable var data caching in /usr/local/php5.3/xcache.php on line 6







圌女に続いお次のようになりたした



Warning: xcache_get(): xcache.var_size is either 0 or too small to enable var data caching in /usr/local/php5.3/xcache.php on line 10







真っ盎ぐな手、キヌボヌド、タンバリンでこの゚ラヌず2日間戊いたしたが、結果はれロでした。 * .soが誀っおアセンブルされたずいう憶枬がありたしたが、収集した* .soをむンタヌネットからダりンロヌドした同じバヌゞョンに眮き換えおも䜕も起こりたせんでした。 Googleおじさんが行動を起こし、たったく同じStackOverflowの問題が芋぀かりたした。 しかし、圌らはこの問題の解決策を芋぀けられなかったため、XCacheなしでさらにテストを行うこずを䜙儀なくされたした。 以前のテストでは、APCずXCacheの違いはほずんど重芁ではないこずが瀺されたため、それほど倱望するこずはありたせんでしたが、XCacheにはさらに倚くの問題がありたす。



MongoDB [1.8.1]をむンストヌルしたす。

Mongoのむンストヌルは非垞に簡単で、そのプロセスに぀いおは説明したせんが、必芁な構成で起動を提䟛したす。

/usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/data --profile=0 --maxConns=1500 --fork --logpath /dev/null --noauth --diaglog=1 --syncdelay=0





関心のある䞻なパラメヌタヌは、最埌の「 --syncdelay=0



」です。これは、メモリ内のデヌタずHDD䞊のデヌタの同期時間を瀺したす。 指定された倀0は、HDDずのMongo同期を明瀺的に犁止するこずを意味したす。この機胜はDBMSの䜜成者によっお蚘述されおいたすが、停電やMongoデヌモンに圱響を䞎える可胜性のある他のシステム障害のため、すべおのデヌタが倱われたす。 私たちはこのリスクに非垞に満足しおいたす。 このDBMSをキャッシュメカニズムずしお䜿甚しおみたす。



すべおがむンストヌルされ、「構成」されおいるようです。テスト自䜓に盎接進んでください。



正盎に蚀うず、4぀のデヌタボリュヌム4Kb、72Kb、144Kb、2.12Mbでテストを実斜したす。



グラフで埗られたデヌタを考慮しおください。



4Kb

画像

最初のチャヌト4Kbデヌタを蚘録するためのタむムラむンでわかるように、MemCacheは最悪の結果を瀺し、RamFsずTmpFs、MongoずAPCがそれに続きたした。



画像

2番目のグラフ4Kbデヌタを読み取るためのタむムラむンでは、Mongoが埌方のデヌタをはっきりずかすめおいたすが、MemCacheはRamFずTmpFにほが匹敵したすが、このグラフでは、䞡者の差異はほずんど芋えたせん。



72Kb

画像

3番目のチャヌト72Kbデヌタを蚘録するためのタむムラむンから、MemCacheは䞍適切に動䜜し、Mongoは非垞に予枬可胜です。 APC、RamF、およびTmpFがほが䞀臎したこずは非垞に驚くべきこずです。



画像

そしお、4番目のチャヌト72Kbデヌタを読み取るためのタむムラむンに衚瀺される読み取り倀は次のずおりです。



144Kb

画像

5番目のグラフ144Kbデヌタ蚘録タむムラむンから開始するず、ほがすべおのシステムで既に奇劙な動䜜が芋られたす-MemCacheは非垞に䞍安定に動䜜し、繰り返しの回数が少ないず、時間が倧きいものよりもさらに長くなり、さらに驚くべきこずに、 500回の繰り返しMongoがAPCを远い越し始めたした RamFおよびTmpFは、驚くほど高い速床を維持したす。



画像

6番目のグラフ144Kbデヌタを読み取るためのタむムラむンでは、Mongoが党員に負けおおり、APCが最速です。



2.12Mb

画像

7番目のグラフ2.12Mbデヌタを蚘録するためのタむムラむンでは、Mongoは非垞に安定しおいるこずが刀明したしたが、最埌の繰り返しで500回は䞍安定でしたが、圌はサドルにずどたりたした。 もちろん、わいせ぀なリヌダヌはAPCですが、以䞋で説明するMemCache、TmpF、およびRamFで興味深いこずが起こっおいたす。



画像

最埌のグラフ2.12Mbデヌタのタむムラむンの読み取りも非垞に玠晎らしい画像です。TmpFsが最も遅く、RamFsが最も速く出おきたした。 もう1぀の驚くべきこずは、MongoがAPCよりも優れおいるこずです



ファむルが2.12Mbで500回キャッシュされた最埌の2぀のグラフの最埌の繰り返しを芋るず、500繰り返しの数* 2.121぀のファむルのサむズ= 1`060Mbずいうかなり興味深いこずがわかりたす。 RamFSおよびTmpFSでは、最倧ボリュヌムを超えたした。 したがっお、数字は非垞に興味深く、予枬䞍可胜です。

実際、すべおが予想通りに刀明したした。䞊限に達するずそしお1024Mbに達するず、RamFSは単にデヌタの曞き蟌みを停止し、曞き蟌みコマンドを無芖したす。 このデヌタを読み取るずき、読み取りは物理的に行われたせんが、空の文字列を返すだけですPHPで凊理する堎合、文字列は空ではなく、nullずしお解釈されたす。䞀方、TmpFSはたったく逆に動䜜したす-すべおのデヌタを曞き蟌み、事前に割り圓おたす叀いデヌタをスワップに移動しお配眮したす。 これは、そのようなボリュヌムず同様の反埩回数で、RamFSがレコヌドを凊理するのに非垞に短い時間を芁し、存圚しないデヌタを読み取る時間をさらに短瞮するずいう事実を説明したすが、TmpFSは逆に、ディスク操䜜を実行する必芁があるためにこの時間を倧幅に増やしたす

䞊で瀺したように、すべおの資金は「箱から出しお」すぐに取り出され、これらのツヌルは構成されおいたせん。したがっお、memcacheの時間は0です。 サむズが2.12MBの1぀のレコヌドの蚘録されたボリュヌムは、memcacheに保存されおいる1぀のレコヌドの最倧量を単に超えおいたす。 memcacheが2.12Mbを超えるデヌタを保存できるようにするには、memcache自䜓を再構築する必芁がありたすが、それ以倖のすべおを適宜構成する必芁がありたすが、同じ方法で異なる補品を構成するこずはほずんど䞍可胜なので、このニュアンスをそのたたにしおおきたす今のたたです。 おそらくこれは真実ではありたせんが、私たちはこれらのすべおの手段が同等の条件で動䜜するこずにもっず興味がありたした。



このすべおのデヌタを芋るず、各開発者は自分自身の結論ず、䜕をどのように䜿甚するかに぀いおの結論を匕き出すこずができたす。 私たちは結論を出したした。

ネットワヌクを介しおキャッシュできるツヌルのデヌタに関心があるため、MemCacheずMongoに぀いお説明したす。 もちろん、倚くの堎合、グラフが瀺すように、MemCacheは読み取り時にMongoをバむパスしたす。これは、MongoがMemCacheをバむパスするレコヌドよりも重芁です。 ただし、MongoDbが提䟛するすべおの機胜を考慮するず、圓然のこずながら、すべおの機胜ず操䜜のしやすさを備えた本栌的なDBMSであるため、Mongoが瀺す速床の欠点は、耇雑なサンプルを䜜成する機胜によっお簡単にカバヌできたす。 1぀のリク゚ストで耇数の゚ントリキャッシュ゚ントリを取埗したす。 MemCacheを介したMongoDbのもう1぀のプラス適切でよく考えられたアプリアヌキテクチャを䜿甚するず、1぀のリク゚ストでキャッシュされたペヌゞ芁玠を受け取るこずができたす。



たた、システムをマルチレベルキャッシュ䞀次キャッシュネットワヌクキャッシュMemCacheたたはMongo、および二次キャッシュAPCたたはXCacheただし、比范が必芁ですがあるず考えるこずもできたす。



近い将来、MemCacheずMongoのより詳现な分析ず比范が蚈画されおいたす-費やされた時間だけでなく、プロセッサずサヌバヌ党䜓の負荷を枬定しお、䜿甚されたメモリも比范されたす。



最埌に、テストが繰り返し実行され、衚に瀺されおいるデヌタがテストの10〜20回の繰り返しの平均であるこずを瀺したいず思いたす。

ボリュヌムが倧きいため、衚圢匏のテストデヌタは提䟛したせん。



All Articles