Đang bị tấn công DDoS nhưng không làm gì cả
- Trong nhiều tuần qua, đã có ai đó cố gắng thực hiện tấn công DDoS.
- Họ dội hàng triệu request vào máy chủ để cố tải tệp cấu hình xuống hàng triệu lần.
- Chỉ trong 5 ngày gần đây, đã có hơn 800.000 lần thử tải xuống, và mỗi lần tải tệp cấu hình có dung lượng khoảng 200MB.
- Phần lớn lưu lượng đến từ EU, đặc biệt là Đức và Anh.
- Cuộc tấn công vẫn đang tiếp diễn ngay tại thời điểm bài blog này được viết.
Chúng tôi làm gì trong tình huống khẩn cấp này
- Không chặn địa chỉ IP của kẻ tấn công.
- Có dùng Cloudflare, nhưng không bật chế độ "Under Attack".
- CPU máy chủ hầu như ở trạng thái nhàn rỗi trong phần lớn thời gian bị tấn công.
- Nói chung là gần như không làm gì cả.
Tại sao lại như vậy?
- Dịch vụ có thể xử lý hàng tỷ request mỗi tháng mà không gặp vấn đề gì và chi phí cũng không quá cao.
- Có khoảng 8 dịch vụ API và cơ sở dữ liệu, và ngay cả không có cache thì vẫn có thể xử lý hàng tỷ request mỗi tháng.
- Có Cloudflare và băng thông không giới hạn.
Làm sao điều đó có thể xảy ra?
- Thiết kế của ứng dụng TablePlus rất đơn giản, và triết lý này cũng được áp dụng cho các dịch vụ backend được giữ ở mức tối giản.
- Không dùng các dịch vụ bên thứ ba như Vercel hay Netlify. Thay vào đó là dùng web server không có giới hạn.
- Trước đây, monolithic từng là điểm nghẽn do VPS/bộ xử lý yếu, nhưng ngày nay VPS mạnh có thể xử lý hàng tỷ request mỗi tháng trên một instance duy nhất.
- Vì vậy, họ xây dựng dịch vụ monolithic cho từng ứng dụng. Việc triển khai và bảo trì rất dễ dàng.
Hãy nói về monolithic
- Chúng ta có xu hướng làm mọi thứ trở nên phức tạp, nhưng điều đó không thành vấn đề cho đến khi gặp áp lực hoặc giới hạn.
- Vì ghét sự phức tạp nên họ chọn monolithic. Tích hợp mọi thứ ứng dụng cần vào một dịch vụ duy nhất.
- Việc triển khai rất đơn giản. Chỉ cần một tệp cấu hình duy nhất, build và deploy.
- Ít phụ thuộc hơn nên dễ debug và dễ xác định điểm nghẽn.
Một web framework đơn lẻ bằng Go hoặc Rust, nếu được triển khai đúng cách, có thể xử lý hàng tỷ request mỗi tháng
- Chọn framework hiệu năng cao.
- Đánh index cho cơ sở dữ liệu để giảm thời gian truy xuất khi tập dữ liệu lớn dần.
- Tách cơ sở dữ liệu chính khỏi cơ sở dữ liệu log/dữ liệu sử dụng để hiệu năng không ảnh hưởng đến hoạt động kinh doanh cốt lõi.
- Dùng reverse proxy mạnh như Nginx để xử lý và phân phối request tới API cốt lõi.
- Đặt mọi thứ sau Cloudflare và cấu hình phù hợp.
- Dùng CDN có bảo vệ DDoS.
- Không đặt các tệp tải xuống lớn trên VPS nếu không có CDN hoặc cache.
Hãy nói về triển khai
- Tại TablePlus, họ đơn giản hóa quy trình triển khai nhiều nhất có thể.
- Không dùng Docker, Kubernetes hay container, cũng không cần thiết lập môi trường.
- Họ dùng binary. Có thể sao chép binary và chạy như một process trên máy chủ Linux.
- Họ chọn Go và Rust. Đây là các ngôn ngữ hiệu năng cao và có thể tạo tệp binary để triển khai.
Cập nhật
- Vercel đã liên hệ và cho biết họ có các tính năng có thể bảo vệ trang web trong tình huống như thế này.
- Thông qua quản lý chi tiêu, có thể đặt giới hạn chi tiêu, và cũng có chế độ thử thách tấn công tương tự chế độ "Under Attack" của CF.
Ý kiến của GN⁺
- Bài viết này nhấn mạnh tầm quan trọng của hạ tầng mạnh và chiến lược triển khai được đơn giản hóa để duy trì dịch vụ ổn định ngay cả khi bị tấn công DDoS.
- Kiến trúc monolithic cho thấy lợi thế trong việc giảm độ phức tạp, đơn giản hóa triển khai và tối ưu hiệu năng.
- Việc tận dụng hiệu quả dịch vụ đám mây và CDN để tạo khả năng chống chịu trước tấn công DDoS có thể là một ví dụ tốt cho các doanh nghiệp khác.
- Cách tiếp cận này cũng mang lại góc nhìn về việc xây dựng hạ tầng hiệu quả về chi phí, đặc biệt cho các startup giai đoạn đầu hoặc doanh nghiệp vừa và nhỏ.
- Tuy nhiên, cách tiếp cận monolithic không phù hợp với mọi hệ thống hay ứng dụng, vì vậy điều quan trọng là phải chọn kiến trúc phù hợp với từng yêu cầu và bối cảnh.
1 bình luận
Ý kiến trên Hacker News
Tóm tắt bình luận thứ nhất:
Tóm tắt bình luận thứ hai:
Tóm tắt bình luận thứ ba:
Tóm tắt bình luận thứ tư:
Tóm tắt bình luận thứ năm:
Tóm tắt bình luận thứ sáu:
Tóm tắt bình luận thứ bảy:
Tóm tắt bình luận thứ tám:
Tóm tắt bình luận thứ chín:
Tóm tắt bình luận thứ mười: