DDoS saldırısı alıyoruz ama hiçbir şey yapmıyoruz
- Haftalardır biri DDoS saldırısı girişiminde bulunuyor.
- Sunucuya milyonlarca istek yağdırarak yapılandırma dosyasını milyonlarca kez indirmeye çalışıyor.
- Yalnızca son 5 günde 800 binden fazla indirme denemesi yapıldı ve yapılandırma dosyası indirme başına yaklaşık 200MB.
- Trafiğin büyük kısmı AB'den, özellikle Almanya ve Birleşik Krallık'tan geliyor.
- Saldırı, bu blog yazısı yazılırken de devam ediyor.
Bu acil durumda yaptığımız şey
- Saldırganın IP adreslerini engellemiyoruz.
- Cloudflare kullanıyoruz ama "Under Attack" modunu etkinleştirmiyoruz.
- Sunucu CPU'su saldırı sırasında zamanın büyük bölümünde neredeyse boşta kalıyor.
- Genel olarak neredeyse hiçbir şey yapmıyoruz.
Neden?
- Hizmet, aylık milyarlarca isteği sorunsuz şekilde işleyebiliyor ve bu çok pahalıya mal olmuyor.
- Yaklaşık 8 API servisi ve veritabanı var; önbellekleme olmadan bile ayda milyarlarca isteği işleyebiliyor.
- Cloudflare ve sınırsız bant genişliğimiz var.
Bu nasıl mümkün oluyor?
- TablePlus uygulamasının tasarımı basit ve bu felsefe, minimum düzeyde tutulan arka uç servislerine de uygulanıyor.
- Vercel veya Netlify gibi üçüncü taraf servisleri kullanmıyoruz. Bunun yerine limitsiz web sunucuları kullanıyoruz.
- Geçmişte zayıf VPS/işlemciler nedeniyle monolitik yapı darboğaz oluşturuyordu, ancak bugün güçlü VPS'ler tek bir instance üzerinde ayda milyarlarca isteği işleyebiliyor.
- Bu yüzden her uygulama için monolitik servisler kuruyoruz. Dağıtımı ve bakımı kolay.
Monolitik yapı hakkında konuşalım
- Her şeyi karmaşıklaştırma eğilimi var ama baskı veya kısıtla karşılaşana kadar bu sorun olmuyor.
- Karmaşıklıktan hoşlanmadığımız için monolitik yapıyı seçiyoruz. Uygulamanın ihtiyaç duyduğu her şeyi tek bir serviste birleştiriyoruz.
- Dağıtım basit. Sadece tek bir yapılandırma dosyası, build ve deploy gerekiyor.
- Bağımlılık az olduğu için hata ayıklamak ve darboğazları tespit etmek kolay.
Go veya Rust'taki tek bir web framework'ü doğru uygulanırsa ayda milyarlarca isteği işleyebilir
- Yüksek performanslı framework'leri seçiyoruz.
- Veri kümesi büyüdükçe erişim süresini azaltmak için veritabanını indeksliyoruz.
- Performans sorunlarının ana işi etkilememesi için ana veritabanını log/kullanım veritabanından ayırıyoruz.
- İstekleri işlemek ve çekirdek API'ye dağıtmak için Nginx gibi güçlü bir reverse proxy kullanıyoruz.
- Her şeyi Cloudflare arkasına alıyor ve doğru şekilde yapılandırıyoruz.
- DDoS koruması olan bir CDN kullanıyoruz.
- CDN veya önbellekleme olmadan büyük indirilebilir dosyaları VPS üzerinde tutmuyoruz.
Dağıtım hakkında konuşalım
- TablePlus'ta dağıtım sürecini olabildiğince basitleştiriyoruz.
- Docker, Kubernetes veya container kullanmıyoruz ve ortam yapılandırması gerekmiyor.
- Binary kullanıyoruz. Binary dosyalar kopyalanıp Linux sunucusunda bir süreç olarak çalıştırılabiliyor.
- Go ve Rust'ı seçiyoruz. Bunlar yüksek performanslı diller ve dağıtım için binary dosyaları üretebiliyor.
Güncelleme
- Vercel bizimle iletişime geçti ve bu tür durumlarda siteyi koruyabilecek özellikleri olduğunu söyledi.
- Harcama yönetimi ile harcama limiti belirlenebiliyor ve CF'nin "Under Attack" moduna benzer bir saldırı challenge modu var.
GN⁺ görüşü
- Bu yazı, DDoS saldırılarına rağmen hizmeti kararlı şekilde çalıştırabilmek için güçlü altyapı ve basitleştirilmiş dağıtım stratejisinin önemini vurguluyor.
- Monolitik mimari, karmaşıklığı azaltma, dağıtımı sadeleştirme ve performans optimizasyonunda avantaj sağlama açısından öne çıkıyor.
- Bulut servisleri ve CDN'in etkili kullanımıyla DDoS saldırılarına karşı dayanıklılık kazanılması, diğer şirketler için de iyi bir örnek olabilir.
- Bu yaklaşım, özellikle erken aşamadaki girişimler veya KOBİ'ler için maliyet etkin altyapı kurma konusunda içgörü sunuyor.
- Ancak monolitik yaklaşım her sistem veya uygulama için uygun olmadığından, ihtiyaçlara ve koşullara göre mimari seçmek önemli.
1 yorum
Hacker News görüşleri
Birinci yorum özeti:
İkinci yorum özeti:
Üçüncü yorum özeti:
Dördüncü yorum özeti:
Beşinci yorum özeti:
Altıncı yorum özeti:
Yedinci yorum özeti:
Sekizinci yorum özeti:
Dokuzuncu yorum özeti:
Onuncu yorum özeti: