noteのタイトル画像

[Puppeteer] 魔改造bitmex_websocketのパフォーマンスを計測する

前回のnoteにて、Puppeteer(傀儡師)にwebsocket(魔改造版)を実装したことを紹介しました。
今日はそのパフォーマンスを計測したのでご報告です。
(実装する前にちゃんと計測しておけよ、というお叱りはごもっとも)

計測対象

bitmexのwebsocketの通知には4つのイベントが通知されます。

・partial (初回データとデータ構造等の情報)
・insert (挿入)
・update (更新)
・delete (削除)

です。

魔改造したとはいえ「update(更新)」に一番時間がかかるのではないかと想像しています。モッチオさんのnoteでも

明らかにUpdate処理が遅かったですから。
それにしても、元祖bitmex_websocketの処理速度が

partialが0.000009秒、insertが約0.00685秒、updateが110.045秒、deleteが0.5296秒

というのには驚きです。update部が「秒」じゃなくて「ミリ秒」じゃないのか?とツッコミたくなりました。

今回はpartial, insert, update, delete毎に時間を計測するのではなく、もっとも大量なイベントが飛来するであろう「orderBookL2(板情報)」「trade(約定履歴)」単位での処理時間計測してみたいと思います。

以下の処理時間と個数を計測します。

・partial処理時間
・insert処理時間
・update処理時間
・delete処理時間
・通知イベント数個数

メッセージ毎に通知されるイベントは違う

どのメッセージ(tradeやorderBookL2など)にもpartial, insert, update, deleteのイベントが通知されるとは限りません。

今回私が調査したところ、次のように観測されました。

次の3つはpartial, insertのみ
- quote
- trade
- execution
次の3つはpartial, updateのみ
- margin
- position
- instrument
次はpartial, insert, updateのみ(データの形式が毎回変わる。複数個通知)
- order
次はpartial, insert, update, deleteのすべてが通知される。(複数個通知)
- orderBookL2

結果

まずは「orderBookL2」

orderBookL2:
 全体 =1.4298276901245117 (秒)
 
計測個数 =24749 (個)
 平均 =5.777315003129467e-05 (秒)

 partial =0.0336604118347168 (秒) (2.35[%])
 insert =0.0163419246673584 (秒) (1.14[%])
 update =1.3603465557098389 (秒) (95.14[%])
 delete =0.019478797912597656 (秒) (1.36[%])

(partial, insert, update, deleteの後ろに記載している%表記は全体の中の割合を示しています)

さすがorderBookL2です。
短時間の間にすごい数の通知が飛来しました。
partialは初回の一回しか飛来しない(と思う)ので、ずっと放置すれば処理時間のほとんどはupdate処理時間と考えて良いでしょう。
板情報の処理は今回の改造の中でもっともややこしい処理をしていることを考えても、平均すればあまり問題になる時間ではないと思います。

次に「trade」

trade:
 全体 =0.004022359848022461 (秒)
 計測個数 =442 (個)
 平均 =9.10036164710964e-06 (秒)

 partial =3.0994415283203125e-06 (秒) (0.08[%])
 insert =0.004019260406494141 (秒) (99.92[%])
 update =0 (秒) (0.0[%])
 delete =0 (秒) (0.0[%])

tradeにはupdate, deleteがないので、ほぼinsert(挿入)処理の時間です。
あまり売買の無い時間帯に計測してしまったので400個程度の計測数ですが、単純な追記型なので処理時間もほとんど気にならない程度です。

Puppeteerの取得はこちらから

MITライセンスです。

ご期待いただければ「スキ」ボタンをポチっとお願いいたします。

楽しいbotライフを!

ソフトウェア・エンジニアを40年以上やってます。 「Botを作りたいけど敷居が高い」と思われている方にも「わかる」「できる」を感じてもらえるように頑張ります。 よろしくお願い致します。