Neden/Niçin bu Serverless?

Bir önceki yazım olan Nedir bu Serverless’ın devamı olarak yazıyorum bu yazıyı. Herhangi bir bağlantı olmasa da Serverless hakkında bilginiz yoksa önce Nedir Bu Serverless yazısını okumanızı tavsiye ederim.
Önceki yazımda belirttiğim iki soruya;
- Hangi problemleri çözer/kolaylaştırır?
- Faydaları nelerdir?
bu yazıda yanıt vermeyi hedefliyorum.
Neden bu Serverless? sorusunun cevabı ise en önemli olduğunu düşündüğüm şu başlıklar altında topladım:
- Daha az operasyonel karmaşıklık
- “Gerçekten” kullandığın kadar ödeme
- Hızlı prototip hazırlayıp, uygulamaya koyabilme
- “Gerçekten” otomatik ölçekleme
Daha az operasyonel karmaşıklık
Eğer canlıda herhangi bir uygulama çalıştırdıysanız, yazılımın kod yazmaktan çok daha fazlası olduğunu biliyorsunuzdur.
- Kodun çalışacağı ortamı/sunucuları hazırlamak (server provisioning)
- Kodu dağıtmak (deploy etmek)
- Logları / metricleri toplamak ve kullanabilmek (monitoring),
- Kullanıcı sayımız arttığında yeni kapasite eklemek (buna uygun ortamı hazırlamak)
- Az veya fazla kaynak kullanımını yönetmek
- Yazılım güncellemelerini yapmak
ve daha birçok problemle baş etmemiz gerekiyor. Serverless ortamların en büyük amacı, bu gibi problemleri ya tamamen yok etmek ya da kolaylaştırmak. Bunun sonucunda da daha ucuza daha hızlı yazılım geliştirebilmek. Sunucuları hazırlamak ve kodu gönderip anında güncellemek gibi konular ise tamamen bizim problemimiz olmaktan çıkıyor.
Bizim OpsGenie’deki tecrübelerimize göre monitoring alanında AWS Lambda için konuşursak; AWS CloudWatch ve X-Ray gibi yardımcı servisler olmasına rağmen özellikle kodumuzun içinde ne olup bittiğini öğrenebilmemiz için üçüncü parti uygulamalar kullanmamız gerekiyor ve bu uygulamalarda çok sınırlı durumda.
Burada önemli bir not, Serverless ortamlarda birçok problem ortadan kalkmasına veya kolaylaşmasına rağmen, bazı konularda ihtiyacınızı gören çözümleri bulmak zor olabilir.
“Gerçekten” kullandığın kadar ödeme
Serverless uygulamaların daha ucuz olduğunu ve bu yüzden avantajlı olduğunu söyleyen yazılar gördüm ancak bu tamamen sizin bu ortamı kullanım şeklinize bağlı. Çok çağrılan bir uygulamanız var ise daha pahalıya da gelebilir. Tabii burada güzel hesaplama yapar ve insan kaynağınıza harcadığınız parayı da sayarsanız; belki gerçekten Serverless, çok çağırılan uygulamalarda bile ucuza gelebilir :).

Serverless çözümlerin en önemli noktalarından biri klasik serverlar gibi saatlik para ödemememiz. Çoğu zaman az kullanıcımız olsa bile sürekli çalışır durumda olmak için birden fazla sunucu çalıştırır ve bu sunuculara harcadığımızdan fazla kaynak ayırırız.
Burada fark yaratan çok önemli bir nokta: Serverless uygulamalar event-driven olduğu için, yani tetiklendiği zaman çalışıp işini bitirdikten sonra kapandığı için (birkaç detay var ancak bu yazıda bahsetmeyeceğim), ücretlendirme de buna göre yapılabiliyor. Birçok Serverless ortam kodunuzun çalıştığı her 100ms başına ücretlendirme yapıyor — yani “gerçekten” kullandığınız kadar ödüyorsunuz. Bu tarz bir ücretlendirme yapılmasının en büyük avantajı ise sürekli çağrılan bir uygulamanız yerine az veya kısa bir süre içerisinde çok çağrılan bir uygulamanız varsa size çok daha ucuza gelebilir.
Bunlara ek olarak AWS’in Lambda servisi için free-tier kapsamında 1milyon çağrılma ücretsiz sunuluyor — birçok bulut servis sağlayıcıda da aynı durum söz konusu.
Hızlı prototip hazırlayıp, uygulamaya koyabilme
Ekibiniz veya sizin bir fikriniz olabilir ve daha önce canlıda bir uygulama çalıştırmamış olabilirsiniz. Bunun için bir ton şey öğrenmeniz gerekecek. Gerçekten kodu yazdığınız süre, bu gibi işlere ayırdığımız sürenin yanında çok az bile kalabilir. Aslında bu başlık özellikle ilk başlık olan operasyonel karmaşıklığı azaltmanın faydası olarak görülebilir.
Serverless uygulamaları, bir geliştirici geliştirdikten sonra kolayca kodu ortama yükleyebilir, güncelleyebilir ve basit bir şekilde bu uygulamayı yönetebilir.
Günümüzde avantaj kazanmak istiyorsanız sürekli yeni şeyler denemek ve bunu hızlı yapmak her zamankinden önemli. İşte Serverless ortamlar bunu size vadediyor. Hızlıca geliştirip, prototip hazırlamak için birebir.

Makalede görülebileceği gibi önümüzdeki 3–5 yıl içerisinde hızlı inovasyon yapmak, yeni şeyler denemek başarıyı getiren en önemli etkenlerden biri olacak.
“Gerçekten” otomatik ölçekleme
AWS gibi bulut servis sağlayıcılarının en önemli faydalarından biri ihtiyacımız olduğunda hızlı bir şekilde sunucu ekleyebilmek ve işimiz bitince bunu kaldırmak olmuştur.
Yeni bir sunucu oluşturduğunuzda (provision ettiğinizde), işletim sistemi veya çalıştırdığınız uygulamalar gibi parametrelere göre sunucunun çalışması genelde dakikalar seviyesinde zaman alır. Çok fazla istek alıyorsanız, bu hız bazı kullanıcılarınız için “down” olmanız yani uygulamanızın çalışmaması anlamına gelebilir. Kısaca para kaybedersiniz.
AWS Lambda gibi Serverless servisler eğer boşta (idle) bir fonksiyon yoksa yeni bir fonksiyon çalıştırır, yani fonksiyonlarınız paralel olarak çalışır. Bunun detayları bu yazının kapsamı dışında olduğu için ayrıntıya girmiyorum. Ancak bilmemiz gereken; bir istek varsa bu sırada bekletilmez hemen çalıştırılır. Ne kadar istek geldiği teoride önemli değildir, yani bir anda beşyüz istek geldi ise bu isteklere anında cevap verebilir.
Bunu tersi de söz konusu elbette. Şirketinizin önemli bir gideri de aslında kullanmadığınız boşa duran kaynaklar olabilir. Serverless ortamlarda ölçekleme otomatik yapıldığı için bir anda istekler azalırsa sizde ona göre para ödersiniz.
Tabii ki her zaman olduğu gibi hayat Serverless ortamlarda da toz pembe değil. Concurrent executions limit dedikleri, aynı anda bir AWS hesabında paralel çalışabilecek fonksiyon sayısı için bir limit var. Bu limit çoğu AWS limiti gibi soft, yani istek üzerinde arttırılabilir. Bu limitin ne kadar ve ne hızda artacağı da önemli bir soru.
Son olarak konu hakkında OpsGenie için yazdığım İngilizce bir yazı olan https://engineering.opsgenie.com/why-serverless-architectures-are-great-for-custom-solutions-7314f4a69dbf yazısını da okuyabilirsiniz. Bu yazıda da gerçek hayatta kullandığımız Serverless’ın bize başka uygulamalarla entegre olurken ne gibi faydalar sağladığından bahsediyorum.

