กำลังถูกโจมตี DDoS แต่ไม่ได้ทำอะไรเลย
- ตลอดหลายสัปดาห์ที่ผ่านมา มีใครบางคนพยายามโจมตีแบบ DDoS
- พวกเขาส่งคำขอเข้ามายังเซิร์ฟเวอร์นับล้านครั้ง เพื่อพยายามดาวน์โหลดไฟล์คอนฟิกนับล้านครั้ง
- เฉพาะในช่วง 5 วันที่ผ่านมา มีความพยายามดาวน์โหลดมากกว่า 800,000 ครั้ง โดยไฟล์คอนฟิกมีขนาดประมาณ 200MB ต่อการดาวน์โหลดหนึ่งครั้ง
- ทราฟฟิกส่วนใหญ่มาจากสหภาพยุโรป โดยเฉพาะเยอรมนีและสหราชอาณาจักร
- การโจมตียังคงดำเนินอยู่แม้ในขณะที่กำลังเขียนบล็อกโพสต์นี้
สิ่งที่เราทำในสถานการณ์เร่งด่วนนี้
- ไม่บล็อกที่อยู่ IP ของผู้โจมตี
- ใช้ Cloudflare แต่ไม่ได้เปิดโหมด "Under Attack"
- ระหว่างการโจมตี CPU ของเซิร์ฟเวอร์แทบจะว่างอยู่เกือบตลอดเวลา
- โดยทั่วไปคือแทบไม่ได้ทำอะไรเลย
ทำไมถึงเป็นแบบนั้น?
- บริการสามารถรองรับคำขอได้หลายพันล้านครั้งต่อเดือนโดยไม่มีปัญหา และมีค่าใช้จ่ายไม่สูง
- มีบริการ API ราว 8 ตัวและฐานข้อมูล ซึ่งสามารถรองรับคำขอได้หลายพันล้านครั้งต่อเดือนแม้ไม่มีแคช
- ใช้ Cloudflare และมีแบนด์วิดท์ไม่จำกัด
เป็นไปได้อย่างไร?
- การออกแบบของแอป TablePlus เรียบง่าย และแนวคิดนี้ก็ถูกนำมาใช้กับบริการแบ็กเอนด์ที่คงความมินิมอลไว้เช่นกัน
- ไม่ใช้บริการจากผู้ให้บริการภายนอกอย่าง Vercel หรือ Netlify แต่ใช้เว็บเซิร์ฟเวอร์ที่ไม่มีข้อจำกัดแทน
- ในอดีต สถาปัตยกรรมแบบ monolithic เคยกลายเป็นคอขวดเพราะ VPS/โปรเซสเซอร์ที่อ่อนแอ แต่ทุกวันนี้ VPS ที่ทรงพลังสามารถรองรับคำขอได้หลายพันล้านครั้งต่อเดือนบนอินสแตนซ์เดียว
- ดังนั้นจึงสร้างบริการแบบ monolithic สำหรับแต่ละแอป ทำให้ง่ายต่อการดีพลอยและบำรุงรักษา
มาคุยกันเรื่อง monolithic
- ผู้คนมักมีแนวโน้มทำให้ทุกอย่างซับซ้อน แต่ตราบใดที่ยังไม่เจอแรงกดดันหรือข้อจำกัด มันก็ไม่ใช่ปัญหา
- เลือกใช้ monolithic เพราะไม่ชอบความซับซ้อน รวมทุกอย่างที่แอปต้องใช้ไว้ในบริการเดียว
- การดีพลอยทำได้ง่าย ต้องมีเพียงไฟล์คอนฟิกเดียว การบิลด์ และการดีพลอย
- มี dependency น้อย ทำให้ดีบักและระบุคอขวดได้ง่าย
เฟรมเวิร์กเว็บเดี่ยวใน Go หรือ Rust หากพัฒนาได้อย่างถูกต้อง ก็สามารถรองรับคำขอได้หลายพันล้านครั้งต่อเดือน
- เลือกเฟรมเวิร์กประสิทธิภาพสูง
- ทำดัชนีฐานข้อมูลเพื่อลดเวลาในการดึงข้อมูลเมื่อชุดข้อมูลมีขนาดใหญ่ขึ้น
- แยกฐานข้อมูลหลักออกจากฐานข้อมูล log/usage เพื่อไม่ให้ปัญหาด้านประสิทธิภาพมากระทบธุรกิจหลัก
- ใช้ reverse proxy ที่ทรงพลังอย่าง Nginx เพื่อจัดการและกระจายคำขอไปยัง API หลัก
- วางทุกอย่างไว้หลัง Cloudflare และตั้งค่าอย่างเหมาะสม
- ใช้ CDN ที่มีการป้องกัน DDoS
- อย่าเก็บไฟล์ดาวน์โหลดขนาดใหญ่ไว้บน VPS โดยไม่มี CDN หรือแคช
มาคุยกันเรื่องการดีพลอย
- ที่ TablePlus กระบวนการดีพลอยถูกทำให้ง่ายที่สุดเท่าที่จะเป็นไปได้
- ไม่ใช้ Docker, Kubernetes หรือคอนเทนเนอร์ และไม่ต้องตั้งค่า environment
- ใช้ไบนารี ไบนารีสามารถคัดลอกแล้วรันเป็นโปรเซสบนเซิร์ฟเวอร์ Linux ได้
- เลือกใช้ Go และ Rust เพราะเป็นภาษาประสิทธิภาพสูงและสามารถสร้างไฟล์ไบนารีสำหรับการดีพลอยได้
อัปเดต
- Vercel ได้ติดต่อเข้ามาและบอกว่ามีฟีเจอร์ที่ช่วยปกป้องเว็บไซต์ในสถานการณ์แบบนี้ได้
- ผ่านการจัดการค่าใช้จ่าย สามารถตั้งขีดจำกัดการใช้จ่ายได้ และมีโหมด challenge สำหรับการโจมตีที่คล้ายกับโหมด "Under Attack" ของ CF
ความเห็นของ GN⁺
- บทความนี้เน้นย้ำถึงความสำคัญของโครงสร้างพื้นฐานที่แข็งแกร่งและกลยุทธ์การดีพลอยที่เรียบง่าย ซึ่งทำให้สามารถให้บริการได้อย่างเสถียรแม้เผชิญการโจมตี DDoS
- สถาปัตยกรรมแบบ monolithic แสดงให้เห็นถึงข้อดีในด้านการลดความซับซ้อน ทำให้การดีพลอยง่ายขึ้น และเอื้อต่อการปรับแต่งประสิทธิภาพ
- การใช้บริการคลาวด์และ CDN อย่างมีประสิทธิภาพเพื่อสร้างความทนทานต่อการโจมตี DDoS เป็นกรณีศึกษาที่ดีสำหรับบริษัทอื่น
- แนวทางนี้ยังมอบมุมมองเกี่ยวกับการสร้างโครงสร้างพื้นฐานที่คุ้มค่าต้นทุน โดยเฉพาะสำหรับสตาร์ทอัพระยะเริ่มต้นหรือธุรกิจขนาดเล็กและกลาง
- อย่างไรก็ตาม แนวทางแบบ monolithic ไม่ได้เหมาะกับทุกระบบหรือทุกแอปพลิเคชันเสมอไป ดังนั้นการเลือกสถาปัตยกรรมให้เหมาะกับความต้องการและสถานการณ์ของแต่ละกรณีจึงเป็นสิ่งสำคัญ
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สรุปความคิดเห็นแรก:
สรุปความคิดเห็นที่สอง:
สรุปความคิดเห็นที่สาม:
สรุปความคิดเห็นที่สี่:
สรุปความคิดเห็นที่ห้า:
สรุปความคิดเห็นที่หก:
สรุปความคิดเห็นที่เจ็ด:
สรุปความคิดเห็นที่แปด:
สรุปความคิดเห็นที่เก้า:
สรุปความคิดเห็นที่สิบ: