DDoS攻撃を受けているが、何もしない
- 数週間にわたって、誰かがDDoS攻撃を試みている。
- サーバーに数百万件のリクエストを浴びせ、設定ファイルを数百万回ダウンロードしようとしている。
- 直近5日間だけでも80万回以上のダウンロードが試みられ、設定ファイルは1回のダウンロードあたり約200MBである。
- トラフィックの大半はEU、特にドイツとイギリスから発生している。
- 攻撃はこのブログ記事を書いている今この瞬間も続いている。
この緊迫した状況で私たちがしていること
- 攻撃者のIPアドレスをブロックしない。
- Cloudflareは使っているが、"Under Attack" モードは有効にしない。
- サーバーCPUは攻撃中でも、ほとんどの時間でほぼアイドル状態である。
- 基本的に、ほとんど何もしない。
なぜか?
- このサービスは月間数十億件のリクエストを問題なく処理でき、コストもそれほど高くない。
- 約8つのAPIサービスとデータベースがあり、キャッシュなしでも月間数十億件のリクエストを処理できる。
- Cloudflareと無制限帯域幅を利用している。
どうしてそれが可能なのか?
- TablePlusアプリの設計はシンプルであり、この哲学は最小限に保たれたバックエンドサービスにも適用されている。
- VercelやNetlifyのようなサードパーティサービスは使わない。代わりに、制限のないWebサーバーを使う。
- 過去には非力なVPS/プロセッサのためにモノリシック構成がボトルネックになっていたが、今日の強力なVPSなら単一インスタンスで月間数十億件のリクエストを処理できる。
- そのため、各アプリごとにモノリシックなサービスを構築している。デプロイと保守が容易だからだ。
モノリシックについて話そう
- あらゆるものを複雑にしがちだが、プレッシャーや制約を受けるまでは問題にならない。
- 複雑さが嫌いなので、モノリシックを選んでいる。アプリに必要なものをすべて単一のサービスに統合する。
- デプロイが簡単である。必要なのは1つの設定ファイルと、ビルドおよびデプロイだけだ。
- 依存関係が少ないため、デバッグやボトルネックの特定がしやすい。
GoやRustの単一Webフレームワークは、正しく実装されていれば月間数十億件のリクエストを処理できる
- 高性能なフレームワークを選ぶ。
- データベースにインデックスを付け、データセットが大きくなるにつれて取得時間を短縮する。
- メインのデータベースをログ/利用データベースから分離し、性能問題によって中核ビジネスが影響を受けないようにする。
- Nginxのような強力なリバースプロキシを使って、リクエストを中核APIへ処理・分配する。
- すべてをCloudflareの背後に置き、適切に設定する。
- DDoS保護付きのCDNを使う。
- CDNやキャッシュなしで大きなダウンロードファイルをVPS上に置かない。
デプロイについて話そう
- TablePlusでは、デプロイプロセスを可能な限り単純化している。
- Docker、Kubernetes、コンテナは使わず、環境設定も必要ない。
- バイナリを使う。バイナリはコピーしてLinuxサーバー上でプロセスとして実行できる。
- GoとRustを選んでいる。高性能な言語であり、デプロイ用のバイナリファイルを生成できる。
更新
- Vercelから連絡があり、このような状況でサイトを保護できる機能があるとのことだった。
- 支出管理によって支出上限を設定でき、CFの"Under Attack" モードに似た攻撃チャレンジモードもある。
GN⁺の見解
- この記事は、DDoS攻撃下でも安定したサービス運用を可能にする強力なインフラと、単純化されたデプロイ戦略の重要性を強調している。
- モノリシックアーキテクチャは、複雑性を減らし、デプロイを簡素化し、性能最適化に有利であることを示している。
- クラウドサービスとCDNを効果的に活用してDDoS攻撃への耐性を備えた点は、他の企業にとっても良い事例になりうる。
- このようなアプローチは、特に初期段階のスタートアップや中小企業にとって、コスト効率の高いインフラ構築への示唆を与える。
- ただし、すべてのシステムやアプリケーションにモノリシックなアプローチが適しているわけではないため、それぞれの要件や状況に合ったアーキテクチャを選ぶことが重要である。
1件のコメント
Hacker Newsの意見
1つ目のコメント要約:
2つ目のコメント要約:
3つ目のコメント要約:
4つ目のコメント要約:
5つ目のコメント要約:
6つ目のコメント要約:
7つ目のコメント要約:
8つ目のコメント要約:
9つ目のコメント要約:
10つ目のコメント要約: