
Serverless Nedir ve Nasıl Çalışır?
Serverless (sunucusuz), geleneksel sunucu tabanlı uygulama altyapılarının yerini alan ve yazılım geliştiricilere daha esnek ve verimli bir yöntem sunan bir bilgi teknolojileri kavramıdır. Bu yeni yaklaşım, bulut bilişim hizmetleriyle birlikte çalışır ve uygulama geliştirme sürecini dönüştürür.
Sunucu Tabanlı Yaklaşımın Sorunları
Geleneksel sunucu tabanlı uygulamalar, fiziksel sunucu veya sanal makine üzerinde çalışır ve önceden belirlenmiş kaynaklar (bellek, işlemci gücü, depolama vb.) tahsis edilir. Bu, uygulamaların iş yüküne göre ölçeklendirilmesini ve yönetilmesini zorlaştırabilir. Örneğin, beklenmedik trafik artışları durumunda sunucuların manuel olarak ölçeklendirilmesi gerekebilir, bu da zaman alıcı ve maliyetli olabilir. Ayrıca, sunucuların sürekli çalışması, kullanılmadıkları zamanlarda bile maliyetlerin oluşmasına neden olur.
Serverless'in Temel İlkesi
Serverless mimari, bu tür sorunları gidermek için geliştirilmiştir. Serverless, adından da anlaşılacağı gibi, geleneksel sunucu tabanlı yapılar yerine sunucuları ortadan kaldıran bir yaklaşımdır. Yani, geliştiricilerin sunucu altyapısıyla ilgilenmesine gerek kalmadan, sadece kodlarını yürüten ve işlevleri çalıştıran hizmetler üzerine odaklanmalarını sağlar.
Serverless Nasıl Çalışır?
Serverless mimari, işlevleri çalıştırmak için bulut sağlayıcıları tarafından yönetilen hizmetleri kullanır. En popüler serverless platformlarından biri, Amazon Web Services (AWS) tarafından sunulan AWS Lambda'dır. Microsoft Azure Functions ve Google Cloud Functions gibi diğer bulut sağlayıcıları da serverless işlevler sağlar.
Bu işlev hizmetleri, olaylara yanıt olarak çalışır. Örneğin, bir HTTP isteği gönderildiğinde, belirli bir zaman aralığından geçtiğinde veya bir nesne depolama hizmetine dosya yüklendiğinde işlevler tetiklenebilir. İşlevlerin çalıştırılması, talep edilen işlem gücüne bağlı olarak otomatik olarak ölçeklendirilir ve yalnızca işlev çalıştırıldığında ödeme yapılır.
Serverless'in Avantajları
-
Ölçeklenebilirlik: Serverless mimari, uygulamaların trafik artışlarına esnek bir şekilde yanıt vermesini sağlar. İşlevler otomatik olarak ölçeklendirilir, böylece performans kaybı olmaz.
-
Maliyet Etkinlik: Sunucu tabanlı mimarilere kıyasla, serverless uygulamalar yalnızca işlev çalıştırıldığında ödeme yapar. İşlevlerin çalıştığı sürece hesaplanan bir ücret bulunur, böylece kullanılmayan kaynaklar için gereksiz masrafların önüne geçilir.
-
Yönetim Kolaylığı: Geliştiriciler, altyapı yönetiminden kurtulur ve sadece işlevlerinin kodunu oluşturmaya odaklanır. Bu, hızlı ve verimli bir geliştirme süreci sunar.
-
Hızlı Dağıtım: Serverless mimari, kod değişikliklerinin hızla dağıtılmasını sağlar. Bu, yazılım ekibinin daha hızlı geliştirme döngüleri ve müşteri geri bildirimlerine daha hızlı yanıt verme yeteneği anlamına gelir.
Serverless, geleneksel sunucu tabanlı uygulama geliştirme süreçlerini dönüştüren, ölçeklenebilir, maliyet etkin ve yönetimi kolay bir mimari yaklaşımıdır. Geliştiriciler, sunucu yönetimiyle uğraşmak yerine kodlama ve uygulama mantığını optimize etmeye odaklanabilirler. Serverless, gelecekte yazılım geliştirme alanında daha da yaygınlaşması beklenen bir paradigmadır. Bu nedenle, geliştiricilerin bu yeni yaklaşımı incelemesi ve kullanmasının faydalı olacağı düşünülmektedir.

AWS (Amazon Web Services), Azure (Microsoft Azure) ve Google Cloud (Google Cloud Platform) gibi büyük bulut sağlayıcıları tarafından sunulan serverless hizmetlerini karşılaştıralım. Bu karşılaştırmayı aşağıdaki kriterler üzerinden yapacağız:
-
Hizmet Çeşitliliği: Sunulan serverless hizmetlerin türleri ve işlevleri.
-
Fonksiyonellik ve Yetenekler: Serverless hizmetlerin işlevsellikleri ve yetenekleri.
-
Fiyatlandırma ve Maliyet: Fiyatlandırma modeli ve maliyet açısından farklılıklar.
-
Uygulama ve Veri Entegrasyonu: Diğer bulut hizmetleri ve uygulamalarla entegrasyonun kolaylığı.
-
Kullanılabilirlik ve Ölçeklenebilirlik: Kolay kullanım, otomatik ölçeklenme ve performans.
-
Güvenlik ve Uyumluluk: Veri güvenliği ve uyumluluk düzeyi.
Hizmet Çeşitliliği:
-
AWS Lambda (Amazon Web Services): İşlevsel hizmetler, API'ler, olay tetikleyicileri ve IoT (Nesnelerin İnterneti) uygulamaları için kapsamlı bir hizmet yelpazesi sunar.
-
Azure Functions (Microsoft Azure): Mikro hizmetler, olay tetikleyicileri, IoT senaryoları ve Logic Apps gibi farklı hizmet türlerini destekler.
-
Google Cloud Functions (Google Cloud Platform): Sadece olay tetikleyicilere odaklanan daha basit bir hizmettir. Google Cloud'un diğer hizmetleriyle entegrasyon sağlar.
2. Fonksiyonellik ve Yetenekler:
-
AWS Lambda: Çeşitli programlama dillerini destekler ve zengin API ve araçlara sahiptir. Lambda Layers, geliştiricilerin işlevlere ek paketler eklemesini sağlar.
-
Azure Functions: .NET, C#, JavaScript, Python ve Java gibi dilleri destekler. Logic Apps ve Event Grid ile entegrasyon sağlar.
-
Google Cloud Functions: Node.js, Python, Go ve Ruby gibi dilleri destekler ve diğer Google Cloud hizmetleriyle kolay entegrasyon sunar.
3. Fiyatlandırma ve Maliyet:
- Fiyatlandırma, kullanım sıklığıne, işlemci süresine, bellek kullanımına ve diğer faktörlere bağlı olarak değişebilir. Her platformun farklı fiyatlandırma modelleri ve ücretsiz kontenjanları vardır.
4. Uygulama ve Veri Entegrasyonu:
-
AWS Lambda: AWS hizmetleri ve dış uygulamalarla kolay entegrasyon sağlar.
-
Azure Functions: Azure diğer hizmetlerle sağlam entegrasyon sağlar ve Logic Apps ve Event Grid ile işbirliği yapabilir.
-
Google Cloud Functions: Diğer Google Cloud hizmetleriyle sorunsuz entegrasyon sağlar.
5. Kullanılabilirlik ve Ölçeklenebilirlik:
-
AWS Lambda: Kolay kullanım ve geniş ölçeklenebilirlik sunar.
-
Azure Functions: Kolay kullanım ve otomatik ölçeklenebilirlik sunar.
-
Google Cloud Functions: Basit yapı ve ölçeklenebilirlik sağlar.
6. Güvenlik ve Uyumluluk:
-
AWS Lambda: Gelişmiş güvenlik özellikleri ve uyumluluk düzeyi.
-
Azure Functions: Microsoft güvenlik standartlarına uygun ve uyumluluk özellikleri.
-
Google Cloud Functions: Google'ın güvenlik ve uyumluluk standartlarına uygun.
Sonuç olarak, AWS Lambda, Azure Functions ve Google Cloud Functions, serverless hizmetleri sunan büyük bulut sağlayıcıları arasında benzer yeteneklere sahiptir. Seçim, iş ihtiyaçlarına, mevcut altyapıya ve tercihlere dayanarak yapılmalıdır. Her platform, farklı özelliklere ve hizmet çeşitliliğine sahip olabilir, bu nedenle kullanıcılar kendi ihtiyaçlarına en uygun olanı belirlemek için platformları daha ayrıntılı olarak incelemelidir.
.NET Isolated Worker Nedir?
.NET Isolated Worker, .NET 6 ile sunulan bir özelliktir ve geleneksel .NET uygulamalarından farklı bir uygulama modeli sunar. Bu özellik, uygulamaları daha küçük, daha hızlı ve daha güvenli hale getirmeyi amaçlar.
Normalde, .NET uygulamaları bir hostta çalışır ve uygulamaların iş yüküne bağlı olarak birden fazla thread ile işlenirler. Bu durum, büyük uygulamalar için verimli olabilir ancak küçük ve hafif iş yükleri için gereksiz bir ağırlık oluşturabilir.
.NET Isolated Worker, uygulamaları host'tan bağımsız olarak çalışan izole edilmiş işçilere dönüştürür. Her işçi, kendi çalışma zamanını, bağımlılıklarını ve thread havuzunu içerir. Bu sayede, uygulamaları daha küçük ve daha hafif hale getirir ve aynı anda birden fazla işlemi daha etkin bir şekilde çalıştırır. Isolated Worker, işçileri tek bir host içinde çalışan iş parçacıkları olarak düşünülebilir.
Bu izole edilmiş işçiler sayesinde, .NET uygulamaları daha bağımsız ve taşınabilir hale gelir. Her işçi, kendi uygulama alanında çalıştığından, bir işçinin güncellenmesi veya çökmesi diğer işçileri etkilemez. Aynı zamanda, uygulama izolasyonu sayesinde güvenlik de artar ve bir işçi çöktüğünde diğerleri etkilenmez.
.NET Isolated Worker, özellikle küçük ve hafif iş yükleri, hızlı prototipler ve çeşitli uygulamalar için daha uygun ve verimli bir uygulama modeli sunar. Geliştiriciler, uygulamalarını izole edilmiş işçilere dönüştürerek daha esnek ve etkin bir şekilde çalıştırabilirler.
KODLAMAYA BAŞLAYALIM
Visual Studio 2022 ile Azure Functions Projesi oluşturuyoruz.

.NET Sürümünü seçiyoruz.

Function1.cs
using System.Collections.Generic;
using System.Net;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
namespace FunctionApp
{
public class Function1
{
private readonly ILogger _logger;
public Function1(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<Function1>();
}
[Function("Function1")]
public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString("Welcome to Azure Functions!");
return response;
}
}
}
Program.cs
using Microsoft.Extensions.Hosting;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.Build();
host.Run();
Projeyi çalıştırıyoruz.

Görüşmek dileğiyle.
Hoşcakalın.. 👍