PV: 回 / All:

自サイトの攻撃耐性向上に励んだ話

2025年3月26日

自サイト、攻撃耐性がめっちゃ低いんですよ。言っちゃいけないんですけど。⇐おい

自サイトの攻撃耐性なんぼ?なんで低いん?

根本的原因があります。Node.jsを使ってるからです。
Node.js、超複雑にしてめっちゃ最適化しても遅いんです。とにかく遅いんです。

アクセスカウンターとかいろいろ置く前は、1000リクエスト/秒くらいは応答できていた頃もありました。
本当にシンプルだったからね。

でも、アクセスカウンターを置いたり、アクセスログを取るようにしたりした結果、応答可能なリクエスト数が4分の1、250リクエスト/秒まで低下しました。仕方ないと言えば仕方ないですが
一番影響が大きかったのは、やはりアクセスログでしたね。正直結構な重さがあります

耐性どれくらい上がったん?

サイトの応答量は、250リクエスト/秒から550リクエスト/秒まで増加しました。
増加しましたが、
サーバーのCPUをすべて使えるように設計を変更した結果、障害からの復旧速度は若干遅れた…?感じ

あと、Spotifyの再生通知をdiscordに送るプログラムを作ったんですよ、やりたいことがあって。
それも含めて攻撃を食らうと全て遅延します。nice -20にしてても余裕で10秒くらい遅延します。正直言ってすごいバグります

耐性を上げるために必要なこと

Intel Xeon 6シリーズほしい!!!(冗談交じりの夢)
正直、NodeだろうとGoだろうとJavaだろうと、全てはコア数の暴力で解決できます。
一応、Cloudflareを挟んでるのでバカみたいに撃たれることはないだろうけど、それでも油断はできません

で、結局何をやったん(本題)

ここからが本題です。
これまでは、"node:worker_thread"で一部処理をスレッド化していました。
しかしメインスレッド自体が正直とてつもなく遅いため、これで改善したのはせいぜい20リクエスト/秒。
そして、マルチスレッド・並列処理の技法はworkerだけじゃないことを知り、webサーバーは

“node:cluster"が有用だと聞き、すぐに書き換え作業に取り掛かったんですよ
で、それからログの時刻取得を、1秒(1000ms)精度なのに毎回関数を実行して取得するといったバカげた処理によって負荷がかかっていたことが判明し、それを250msに1回更新される変数を参照することによって、
並列化によって400リクエスト/秒までUpした応答量が更に150増えました。

実は、そもそもサーバーがクソ弱いのでこれ以上は厳しいんですよね
Orange Pi3 LTSとググればわかります。
確かに弱いんです。ものを考えればそこそこ強いんですが、それでも弱いんです。
Intel Eコアだけを載せたXeonほしい!!!(願望)

結局何が言いたいんだよ

攻撃しないでね!