さまざまな言語/プラットフォームでのC10k(問題10,000接続)



UPD。 ベンチマークの2番目のバージョンはこちらです: eric.themoritzfamily.com/websocket-demo-results-v2.html


警告 :ベンチマークやコードについて苦情がある場合は、Githubでベンチマークを利用できます。これにより、自分でバグを編集したり、作成者にバグを報告したりできます。

10,000件の接続の問題の詳細: en.wikipedia.org/wiki/10000_connections problem

Erlang、Go、Haskell(Snap)、Java(Webbit)、Node.js(websocket)、Python(ws4py)は、Webソケット経由の10,000接続の問題にどのように対処できますか?



ベンチマーク中、新しいクライアントはミリ秒ごとに起動します。 1秒ごとに、各クライアントは現在時刻を含むメッセージをサーバーに送信し、サーバーはこのメッセージを送り返します。

実装接続時間(平均)遅延(中)投稿化合物接続タイムアウト
アーラン865ms17ms284929410,0000
Haskell(スナップ)168ms227ms11874134996108
Java(Webbit)567ms835ms10283904637157
行く284ms18503ms23981809775225
Node.js(websocket)768ms42580ms117084757014299
Python(ws4py)1561ms34889ms105299647925208


PythonとNode.jsの実装は、接続の約半分に落ちました。

GoのパフォーマンスがErlangに違反すると予想されていたにもかかわらず、遅延ははるかに大きく、サーバーは225接続で要求を処理しませんでした。

Java Webbitはダークホースでしたが、最終的にはGo(157の生の接続)よりも優れたパフォーマンスを発揮しました。

最も驚くべきことは、gevent(Python)とnode.jsがそれぞれC1k問題を解決するために実装されたという事実にもかかわらず、5001と4792の接続後に動作を停止したことです。

より詳細な説明、コード、および生データはGithubにあります: github.com/ericmoritz/wsdemo/blob/master/results.md

UPD。 ますます多くの人が比較に関わっています; Tornado(Python)のテストが登場しました



UPD。 ベンチマークの2番目のバージョンはこちらです: eric.themoritzfamily.com/websocket-demo-results-v2.html

Source: https://habr.com/ru/post/J145796/


All Articles