1 ポイント 投稿者 GN⁺ 2024-03-31 | 1件のコメント | WhatsAppで共有

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件のコメント

 
GN⁺ 2024-03-31
Hacker Newsの意見
  • 1つ目のコメント要約:

    • コメント投稿者は、Webサイトの性能についての自慢は誇張されていると考えている。
    • 「月間10億リクエスト」は毎秒数百リクエストにすぎず、これは些細な水準であり、DDoS攻撃とは見なせない。
    • サイトは CDN(Cloudflare)の背後にあるため、性能面で特別なことをしたようには見えない。
    • 200MBのファイルが CDN 経由でキャッシュされ配信されるのは当然であり、それを自慢するのは不適切な設計に見える。
  • 2つ目のコメント要約:

    • 月間4TBのトラフィックは DDoS 攻撃とは言い難い。
    • 月間600万リクエストは毎秒2回のリクエストにすぎず、この程度の規模であれば単一サービス(monolith service)を運用しても問題はない。
    • ほとんどのリクエストは Cloudflare が CDN レベルでキャッシュして処理しているはずだと見ている。
  • 3つ目のコメント要約:

    • サイトは単純な静的マーケティングサイトで、議論フォーラムはなく、フィードバックは GitHub issue を通じて処理されている。
    • 静的ファイルが毎日数百万回ダウンロードされるのを単純なデプロイで処理できると自慢するのは奇妙だ。
    • Cloudflare がすべての緩和作業を行っており、実際にはトラフィックが非常に少ないため、その必要すらないかもしれない。
  • 4つ目のコメント要約:

    • 説明されている追加トラフィックは「サービスへの無意味な乱用」に見え、実際の DDoS 攻撃とは言い難い。
    • このような乱用がコストやリソース枯渇の問題を引き起こさない限り、無視できる。
    • 自動スケーリング基盤の大半が有用な作業をしていないという話はよくあり、トラフィックを監視しておくのがよい。
    • ロギングへの不満があり、ログ保存が安価で豊富なら問題にはならないが、乱用トラフィックを自動分類して日常的な処理を抑制するのが望ましい。
  • 5つ目のコメント要約:

    • 英国で発生した月間5000万リクエストは、単一のスクリプトが実行されるだけで発生しうる水準だ。
    • 投稿者は、Go サーバーなら最適化なしでも毎秒250倍多いリクエストを処理できるはずだと考えている。
    • 助言そのものは悪くないが、提示された数字はその助言の根拠にはなっていない。
  • 6つ目のコメント要約:

    • バイナリを配布することは Docker を使うより好ましい場合もあるが、バイナリを実行するホストに関するセキュリティ上の懸念がある。
    • 単一の VPS でホスティングされる単一サービス(monolith service)は低コストで良いが、ハードウェアに問題が起きると相当なダウンタイムが発生しうる。
    • すべてを単一サービスに統合すると、多層防御(defence in depth)が失われる可能性があり、セキュリティ問題が発生した場合にデータストアへのアクセスを許してしまう恐れがある。
  • 7つ目のコメント要約:

    • 「月間10億リクエスト」は単一サーバーで処理できる水準であり、単一の不具合スクリプトでもこの程度のトラフィックを発生させうる。
  • 8つ目のコメント要約:

    • 月間数十億リクエストが大規模な DDoS 攻撃と見なされるのか疑問を呈している。
  • 9つ目のコメント要約:

    • 各アプリについて単一サービス(monolith service)を構築するのは、デプロイと保守が容易だ。
    • Docker、Kubernetes、依存関係、ランタイム環境なしに、単にバイナリファイルだけを配布すればよい。
  • 10つ目のコメント要約:

    • タイトルを読んでもっと大きな話を期待したが、Cloudflare の背後にあるという点は重要な要素だ。
    • トラフィック分布次第では、Cloudflare なしでも VPS 上で十分に運用できるかもしれない。
    • ロシアの layer7 DDoS 攻撃は、主要プロバイダーが容量の問題で失敗するほど大規模だ。