Serverless, ortalamaların ötesine bakana kadar harikaydı. Java + Spring Boot Lambda'mız 50ms P50 gösteriyordu — ve 8.000ms P99. Cold start'lar kabaca yüz istekten birini vuruyordu: ortalamada görünmez, kısa çöpü çeken için acımasız.

Bizimki neden yavaştı

  • 8 saniyenin büyük kısmını JVM açılışı artı Spring'in classpath taraması oluşturuyordu
  • Önce indirilip açılması gereken 250MB'lık bir deployment paketi
  • Düşük ve dalgalı trafik; bu yüzden sıcak execution environment'ların süresi sürekli doluyordu

Problem olmayan bir şey: VPC bağlantısı. Az kalsın 2019 dönemine ait bir tavsiyeye — VPC ağının her cold start'a bir-iki saniye eklediği iddiasına — göre mimariyi yeniden kuruyorduk. Bu bilgi, AWS'nin Lambda'yı aynı yıl paylaşımlı Hyperplane ENI'lerine taşımasından beri geçersiz — bugün VPC cold start yükü ihmal edilebilir düzeyde. Bir blog yazısı aksini söylüyorsa tarihine bakın.

Gerçekten işe yarayanlar

  • Önce Lambda SnapStart. Tam olarak bu iş yükünü hedefler: init'ten sonra başlatılmış JVM'in anlık görüntüsünü alır ve soğuktan açmak yerine bu snapshot'tan geri yükler. Java için 2022'den beri GA (Python ve .NET 2024'te izledi). SnapStart artı snapshot-güvenli başlatma, cold start'larımızı ~8 saniyeden bir saniyenin epey altına indirdi.
  • Paketi küçültün. Kullanılmayan bağımlılıkları atmak bizi 250MB'tan 40MB'a indirdi ve indirme-açma süresinden tasarruf sağladı.
  • Gerçekten ucuz olduğu yerde provisioned concurrency. Düşük trafik için pahalı diye bir kenara atmıştık. Yanılmışız: 1GB'lık bir fonksiyonda tek bir provisioned birim ayda kabaca $10 tutar. Sert gecikme gereksinimi olan tek endpoint'imizde bir birim tutuyor, gerisini SnapStart'a bırakıyoruz.

Atladıklarımız: zamanlanmış keep-warm ping'leri (kırılgan ve yalnızca tek bir ortamı sıcak tutuyorlar) ve Node.js'e tam yeniden yazım — SnapStart bunu gereksiz kıldı; yine de sıfırdan başlayan düşük trafikli bir API için daha hafif bir runtime hâlâ makul bir varsayılan. Platforma yeniyseniz, AWS Lambda nasıl çalışır yazımız bütün bunların arkasındaki execution environment yaşam döngüsünü anlatıyor.

Sonra

  • P50: ~50ms'de değişmedi
  • P99: 8.000ms → ~400ms

Ders: Kullanıcılarınızın gerçekten yaşadığı yer P99'dur — serverless'a bağlanmadan önce cold start sıklığını ve süresini ölçün ve izlediğiniz tavsiyenin güncel olduğundan emin olun. Ekiplerin AWS'nin yıllar önce çözdüğü problemler etrafında aşırı mühendislik yaptığını görüyoruz; kısa bir bulut mimarisi incelemesi yeniden yazımdan ucuzdur.


← Çıkarılan Dersler'e dön

Bu tür olaylar önlenebilir. AWS Yönetilen Hizmetler ekibimiz müşteri ortamlarını yapay zekâ destekli izleme ve nöbetteki kıdemli mühendislerle 7/24 gözetir — böylece bu tür hikâyeler arşivde kalır.