Evet, dün gece yine oldu, AWS outage haberiyle uyandım. Sabah kahvemi içerken telefonuma baktım, sosyal medyada herkes AWS’nin down olduğunu söylüyor. Ben de tabii hemen kendi sistemime girdim, rest api’miz C# ile yazılmış, Dapper’la PostgreSQL’e bağlı, bir bakayım dedim ki her şey yolunda mı? Neyse efendim, şükürler olsun ki bizde bir sorun çıkmadı ama o an aklıma eski bir outage geldi, hatırlıyorum da sinir olmuştum.
Aslında AWS outage’leri son zamanlarda sık sık duyuluyor, değil mi? Amazon’un bu dev bulut servisi, milyonlarca site ve app’i taşıyor, bir kesinti olunca domino etkisi yaratıyor. Snapchat, Reddit, hatta Ring gibi şeyler etkileniyor, down detector siteleri çökertiyor adeta. Bana göre bu outage’ler, bulutun ne kadar kritik olduğunu gösteriyor, her şey tek bir yere bağlı olunca risk artıyor tabii.
Fakat bu seferki AWS outage, us-east-1 bölgesinde yoğunlaşmış gibi, DynamoDB ve diğer servisler etkilenmiş. Sanırım bir ağ sorunuymuş, tam detayını bilmiyorum ama AWS’nin resmi sitesinde status sayfasına bakmak lazım. Orada real-time güncellemeler var, outage olursa yeşilden kırmızıya dönüyor her şey.
Bu arada, aklıma geldi, geçen sefer bir outage sırasında kendi rest api’mde sorun yaşadım. C# .NET projemde, AWS S3’e dosya upload ediyordum, bir hata verdi, timeout falan. Meğer bağlantı kopmuş, ben de panikle kodu debug ettim, async await’i düzelttim ama outage bitmeden çözemedim. Neyse, o gün öğrendim ki backup plan şart.
Şimdi outage’lerde ne yapılmalı diye düşünelim. Öncelikle, kendi sistemini izle, monitoring tool’lar kur. Mesela New Relic veya Datadog gibi, ama biz küçük ölçekteyiz, ben basit bir script yazdım C# ile, periyodik ping atıyor AWS endpoint’lere. Eğer down olursa mail atıyor bana. Basit ama etkili, değil mi?
AWS Outage Neden Olur, Biraz Derine İnelim
AWS outage’leri genelde ağ arızaları, güç kesintileri veya yazılım bug’larından kaynaklanıyor. Hatırlıyorum, bir keresinde bir DDoS attack’le bağlantılı outage olmuştu, her yer karıştı. Aslında DDoS’lar ayrı bir konu ama AWS gibi büyüklerde bile oluyor bunlar. Bana göre, bu outage’ler geliştiricilere ders oluyor, multi-region deploy etmeyi öğretiyor.
Fakat outage sırasında panik yapma, önce status’u kontrol et. Google’da ‘AWS outage status’ ara, en güncel haberler çıkar. Down detector da iyi, orada kullanıcı raporları var, kendi deneyimini paylaşabiliyorsun.
Bu arada, outage’lerde en çok etkilenenler e-ticaret siteleri ve streaming servisleri. Amazon’un kendisi bile etkileniyor bazen, prime video falan donuyor. Sen ne dersin, outage olursa ne yaparsın? Benim gibi kodlamaya mı sarılırsın yoksa kahve mi içersin 🙂
Geçenlerde bir outage’ta, kendi gömülü sistem projemde bir devre hatası yaşadım, alakasız ama. Kart tasarımı yaparken güç kaynağı yetersiz kalmış, sistem reset atıyordu sürekli. O outage haberiyle birleşince, “bulut da devre de aynı kapıya çıkıyor” dedim kendi kendime. Neyse efendim, o hatayı oscilloscope’la debug ettim, voltajı yükselttim, win oldu.
Pratik Çözümler, Adım Adım Değil Ama
Outage için pratik olarak, failover mekanizması kur. Mesela C# rest api’inde, AWS’ye alternatif olarak Azure veya local db kullan. Ben Dapper’la PostgreSQL’e bağlıyım, outage olursa connection string’i switch ediyorum kodda. Önce if koşulu koyuyorsun, status check et, sonra retry logic ekle. Exponential backoff falan, 1 saniye bekle, sonra 2, 4 diye.
Evet, bu retry’ler hayat kurtarıyor. Bir keresinde unuttum, api 500 error verdi sürekli, kullanıcılar şikayet etti. Sonuç olarak, kodu güncelledim, artık otomatik retry yapıyor. Tabi, cache’leme de önemli, Redis gibi bir şey koy, outage’ta veri kaybı olmasın.
Aslında outage’lerde en komiği, herkesin aynı anda down detector’a girmesi, site yavaşlıyor. Bir sitede görmüştüm, outage sırasında nasıl mock data kullanacağını anlatıyorlardı, link bulamadım ama Reddit r/aws‘de tartışılıyor bolca. Orada developer’lar deneyim paylaşıyor, faydalı oluyor.
Neticede, AWS outage’leri kaçınılmaz ama hazırlıklı olmak fark yaratıyor. Ben Bursa’da otururken, dağcılığa gidemiyorum outage yüzünden, kodlama yapıyorum evde. Eşimle çocuğumla vakit geçirirken bile aklımda kalıyor bazen, fikir üretiyorum yeni failover’lar için.
Bu outage’lerde güvenlik de önemli, DDoS’la karışabiliyor. Mesela bir cyber attack outage’i tetikleyebiliyor, o zaman firewall’ları güçlendir. Ben jquery ile frontend’de basit kontroller ekliyorum, ama backend’de C# ile rate limiting yapıyorum. Sanırım 100 request/s sınırı koydum, fazla gelirse block.
Fakat outage bitince her şey normale dönüyor, değil mi? Bu seferki de kısa sürdü galiba, 2-3 saat. Tam hatırlamıyorum ama haberlerde öyleydi. Neyse, outage yaşarsan sakin ol, status’u takip et ve yedek planını uygula.
Sonuç Olarak Ne Düşünüyorum
Açıkçası, AWS outage’leri beni daha iyi developer yapıyor, her seferinde bir şey öğreniyorum. Siz de outage olursa panik yapmayın, pratik çözümleri deneyin. Belki bir dahaki sefere kendi outage hikayenizi paylaşırız, ne güzel olmaz mı? 🙂
Bu arada, vue.js ile bir dashboard yaptım outage monitoring için, jquery ajax çağrılarıyla api’yi çekiyor. Basit bir proje, ama işe yarıyor. Eğer ilgilenirseniz, kodunu paylaşabilirim ileride.