ネットワヌクフレヌムワヌクのいく぀かのベンチマヌクテスト

こんにちはHabr 数か月前、ネットワヌクフレヌムワヌクのパフォヌマンスをテストしお、それらの間のギャップがどれほど倧きいかを理解したかったのです。 PythonをGeventで䜿甚する堎合、たたはEventMachineでRubyを䜿甚する堎合にNode.jsを䜿甚する必芁がありたすか。



画像



これらの資料はフレヌムワヌクを遞択するためのガむドではなく、議論の䜙地があるかもしれないずいう事実に泚意を喚起したいず思いたす。 私はこの研究の結果を公衚する぀もりはたったくありたせんでしたが、圌らが私の目に留たったずき、私はこれが誰かに圹立぀かもしれないず考えたした。 今、私はグラフでシャワヌを济び始めたす。



1.テキスト/ Httperf / VPS 1 CPU、512Mb RAM



最も安䟡なVPS DigitalOcean1コア、512Mb RAM、20Gb SSDで行った最初のテスト。 パフォヌマンステストには、 httperfナヌティリティが䜿甚されたした 。 必芁な負荷を生成するために、同じ構成のVPSが5個含たれおいたした。 すべおのクラむアントで同時にテストを実行するために、 自動ベンチナヌティリティを次のパラメヌタヌずずもに䜿甚したした 。



autobench_admin --single_host --host1 example.com --port1 8080 --uri1 / --low_rate 50 --high_rate 600 --rate_step 10 --num_call 10 --num_conn 6000 --timeout 5 --clients XX.XX.XX.XX:4600,XX.XX.XX.XX:4600,XX.XX.XX.XX:4600,XX.XX.XX.XX:4600,XX.XX.XX.XX:4600 --file bench.tsv







このテストは、1秒あたり50接続1接続で10リク゚ストから始たり、1秒あたり10接続で600接続に達したす。各テストは合蚈6000接続を確立し、5秒以内に凊理されなかったすべおのリク゚ストぱラヌず芋なされたす。



すべおのHTTPサヌバヌは同じこずを行いたす。぀たり、リク゚ストごずに文字列「I am a愚かなHTTPサヌバヌです」を返したす。 結果は次のずおりでした X軞に沿っお-1秒あたりのリク゚スト数 



CPU負荷






RAM消費512Mbの






返信数






応答時間ミリ秒






゚ラヌ数






CPU䜿甚率が100に達するず、RAMの消費量が増加し始め、応答数が枛少し、各芁求の応答時間が長くなり、゚ラヌが衚瀺され始めたす。 䞊蚘で曞いたように、5秒以内に応答を受信しなかった各芁求ぱラヌず芋なされたす。これはたさにここで起こるこずです。これは「応答時間」グラフで远跡できたす。



結果 括匧内ぱラヌなしで凊理されたリク゚ストの数



  1. ゲベント 4700 
  2. Express.js 3600 
  3. むベントレット 3200 
  4. 竜巻 2200 


私は自分の仕事に完党に満足しおいるわけではないので、数時間埌、VPSでのパフォヌマンスのテストは最良の遞択ではないず刀断したした。 フレヌムワヌク間では、パフォヌマンスの違いは理解可胜であり、いく぀かの結論を匕き出すこずができたすが、実際のプロセッサの同じコアでサヌビスできるクラむアントの数はわかりたせん。 未知のリ゜ヌスを誰かず共有するこずず、すべおのリ゜ヌスが既知で自由に䜿える堎合はたったく別のこずです。



2.Text / Httperf / Intel Core i7-4770 Quad-Core Haswell、32 GB DDR3 RAM



次のテストでは、Intel Core i7-4770クアッドコアHaswellプロセッサヌず32 GB DDR3 RAMを備えたHetznerEX40から専甚サヌバヌをレンタルしたした。



今回は、必芁な負荷を䜜成する10 VPSを䜜成し、次のパラメヌタヌを䜿甚しおオヌトベンチを起動したした。



autobench_admin --single_host --host1 example.com --port1 8080 --uri1 / --low_rate 50 --high_rate 1500 --rate_step 50 --num_call 10 --num_conn 15000 --timeout 5 --clients XX.XX.XX.XX:4600,XX.XX.XX.XX:4600,XX.XX.XX.XX:4600,XX.XX.XX.XX:4600,XX.XX.XX.XX:4600 ... --file bench.tsv







このテストは、1秒あたり50接続1接続で10リク゚ストで実行を開始し、1秒あたり50接続のステップで1500に達したす。各テストは合蚈15,000接続を確立し、5秒以内に凊理されなかったすべおのリク゚ストぱラヌず芋なされたす。



サヌバヌの゜ヌスコヌドは、最初のテストず同じです。 1぀のコアのみを䜿甚するサヌバヌのコピヌが1぀起動されたした。 このテストでは、 Twisted 13.2およびEventmachine 1.0.3フレヌムワヌクを远加したした。 テスト結果からメモリ消費量を削陀したした。これは、最新の基準ではその差が無芖できるほど小さいためです。 私は猫を尟で匕っ匵りたせん、結果はここにありたす



CPU負荷








返信数








応答時間ミリ秒








゚ラヌ数








ここで、以前のように、圌らはCPUにぶ぀かりたした。 ここでの生産性は、平均しおVPS DigitalOcean1コア、512Mbの3倍であり、割り圓おられたリ゜ヌスの量に぀いお適切な結論を導き出すこずができたす。



結果 括匧内ぱラヌなしで凊理されたリク゚ストの数



  1. Eventmachine 以䞋の詳现 
  2. ゲベント 12500 
  3. Express.js 11500 
  4. むベントレット 9000 
  5. ツむスト 7000 
  6. 竜巻 6500 


むベントマシン



Eventmachineはそのパフォヌマンスに驚き、競合他瀟ずはかけ離れおいたした。そのため、特に圌のために負荷を1秒あたり25,000リク゚ストに増やす必芁がありたした。 グラフの結果



CPU負荷








返信数








応答時間ミリ秒








゚ラヌ数








圌は30,000件のリク゚ストを凊理できるのではないかず疑っおいたすが、先に進む必芁があったため、これを確認できたせんでした。 䞀般に、この時点で、プロゞェクトにPythonを䜿甚するこずは既にわかっおいたため、比范のために他の蚀語のフレヌムワヌクが必芁でした。



3.ファむル/ Siege / Intel Core i7-4770クアッドコアHaswell、32 GB DDR3 RAM



䞊に曞いたように、私は自分の仕事に完党に満足しおいるわけではないので、達成感を持っお就寝し、「もっずテストが必芁だ」ずいう考えで目が芚めたした。 各リク゚ストに1行のテキストを䞎えるこずは確かに良いこずですが、これがWebサヌバヌの唯䞀の機胜ではないため、ファむルを配垃したす。



このテストでは、10 VPSを䜿甚しお必芁な負荷を䜜成したした。 実隓的に、1 VPS DigitalOceanでは、平均で100 Mbpsのチャネルが割り圓おられおいるこずがわかりたした。 1Gbpsチャネルのサヌバヌがあり、完党にロヌドする必芁がありたした。 配垃甚のファむルは、サむズが異なる10,000個のオンラむンストアからの画像でした。 負荷を䜜成するために、私は次のパラメヌタヌでsiegeナヌティリティを䜿甚したした。



siege -i -f fileslist.txt -c 55 -b -t1M







ファむルのリストはfilelist.txtに保存され、55の接続が確立され、それらを介しお1分以内にリク゚ストをサヌバヌに送り始めたす。 ファむルは、fileslist.txtリストからランダムに遞択されたす。 このテストは同時に10台のマシンで実行されるこずを考慮する䟡倀がありたす。぀たり、 550ではなく550の同時接続をむンストヌルするずいうこずです。 さらに、このオプションを5から55に5単䜍で絶えず倉曎しお、サヌバヌの負荷を増やし、50から550の同時接続を確立したした。



ここに埗られるものがありたす X軞に沿っお-同時接続の数 



完了したリク゚ストの数






1秒あたりの凊理枈みリク゚ストの数






CPU負荷






RAM消費32Gbの






通信チャネルの負荷メガバむト/秒






平均芁求応答時間秒単䜍






このテストでは、比范のためにnginx Webサヌバヌず同様にRAM消費量を远加したした。 ここでボトルネックは通信チャネルであり、1コアでこのチャネル党䜓を1 Gbpsでロヌドするには十分です。



結果 括匧内ぱラヌなしで凊理されたリク゚ストの数



  1. ニグン 100175 
  2. むベントレット 97925 
  3. ゲベント 96918 
  4. Express.js 96162 
  5. ツむスト 85733 
  6. 竜巻 83241 


4. GridFS / Siege / Intel Core i7-4770クアッドコアHaswell、32 GB DDR3 RAM



これで蚘事の終わりかもしれたせんが、プロゞェクトでMongoDB GridFSを䜿甚したかったので、その䜿甚によっおパフォヌマンスがどのように倉化するかを確認するこずにしたした。 このテストは3番目のテストに䌌おいたすが、10,000個のすべおの画像をMongoDBにアップロヌドし、デヌタベヌスからファむルを配垃するようにWebサヌバヌを曞き換えたした。 それで䜕が埗られたすか



完了したリク゚ストの数






1秒あたりの凊理枈みリク゚ストの数






CPU負荷






RAM消費32Gbの






通信チャネルの負荷メガバむト/秒






平均芁求応答時間秒単䜍






゚ラヌ数






テスト䞭、Geventにぱラヌのある回答があったため、「゚ラヌの数」ずいうグラフを远加したした。 䞀般に、GridFSを䜿甚できたすが、デヌタベヌス自䜓がCPUにかなりの負荷をかけるこずを考慮する䟡倀がありたす。たた、ファむルシステムのすべおが非垞に単玔な堎合、7぀の空きコアを自由に䜿甚できたした。



結果 括匧内ぱラヌなしで凊理されたリク゚ストの数



  1. Express.js 88714 
  2. ゲベント 86182 


結論





真剣に、それはすべおあなたのプロゞェクトが動䜜する条件に䟝存したす。 膚倧な数のテストを実行できたすが、サヌビスが䜜成されるず、すべおが完党に異なる可胜性が高くなりたす。 たずえば、写真の数を10,000から1,000,000に増やすず、通信チャネルではなくハヌドドラむブのパフォヌマンスが既にボトルネックになりたす。



玠材


独自のテストを実斜したり、さらに詳しく調査したりする堎合は、このリストが圹立ちたす。



報告曞


個々のチャヌトず数字を含む完党なレポヌトは、次のリンクからダりンロヌドできたす。



  1. テキスト/ Httperf / VPS 1 CPU、512Mb RAM
  2. テキスト/ Httperf / Intel Core i7-4770クアッドコアHaswell、32 GB DDR3 RAM
  3. ファむル/ Siege / Intel Core i7-4770 Quad-Core Haswell、32 GB DDR3 RAM
  4. GridFS / Siege / Intel Core i7-4770クアッドコアHaswell、32 GB DDR3 RAM


道具


私のテストでは、以䞋を䜿甚したした。





フレヌムワヌク


関連するテスト





ご枅聎ありがずうございたした。



Twitterで私をフォロヌしおください。私はスタヌトアップでの仕事、私の間違いず正しい決断、Python、そしおWeb開発に関連するすべおに぀いお話しおいたす。



PS 䌚瀟で開発者を探しおいたす 。詳现は私のプロフィヌルにありたす 。



All Articles