我向 250 万个主机发送了 5 亿 HTTP 请求

主要观点:

  • 用 Go 语言实现短时间内发送 500000000 个非 RFC 合规的 HTTP/1.1 请求到 2500000 个主机,深入研究 HTTP/1.1 和 Go 语言进行优化,包括水平扩展、优化代码等。
  • 对比 Go 和 Rust 语言,阐述 Go 语言的优势,如简单、并发支持好、速度快等。
  • 详细介绍发送单个 HTTP/1.1 请求的过程及影响时间的因素,如距离、服务器负载等。
  • 阐述优化发送请求的方法,如去除请求解析和 DNS 解析、选择 fasthttp 库、优化 TLS 握手等。
  • 利用 Kubernetes 进行扩展,编写自定义自动缩放脚本,避免 DDoS 自身及被检测到,最终实现每秒 100 - 400 个请求,扩展到 60 个 pod 在几小时内发送 500000000 个请求。
  • 招聘创始后端工程师,负责构建基于 LLM 的代码扫描工具等工作。

关键信息:

  • 用 Go 语言优化发送大量 HTTP 请求的过程和方法。
  • 提及 Rust 语言在异步 tokio 类型方面的难度。
  • 详细说明 HTTP 请求的各个步骤及影响时间的因素。
  • 介绍优化 HTTP 库、跳过 DNS 解析、优化 TLS 握手等具体操作。
  • 使用 Kubernetes 进行扩展及相关自定义脚本。
  • 强调避免 DDoS 和被检测到的方法。

重要细节:

  • 用 massdns 快速解析 DNS 记录。
  • 设计多个 worker 池进行请求处理。
  • 选择 fasthttp 库提高 HTTP 发送速度。
  • 为节省 CPU 周期修改 fasthttp 库的请求处理步骤。
  • 按 200 个主机为一组拆分工作并进行扩展。
  • 利用 DigitalOcean 的带宽和新 IP 地址避免被检测。

结论:最终实现了较好的发送请求效果,正在招聘创始后端工程师。

阅读 13
0 条评论