Azure İşlevleri ve .NET Çözümleriyle Sunucusuz Uygulamalar Oluşturma
Yayınlanan: 2023-09-21Sunucusuz bilgi işlem, geliştiricilerin sunucuları düşünmeden uygulamalar ve hizmetler oluşturmasına ve çalıştırmasına olanak tanıyan bir bulut yürütme modelidir. Sunucusuz uygulamalarda, uygulamalar sunucuların çalışır durumda tutulmasına bağlı değildir; bulut sağlayıcı, sunucuların tahsisini ve sağlanmasını dinamik olarak yönetir. Bu, geliştiricilerin sunucu yönetimi yerine iş mantığını kodlamaya odaklanmasına olanak tanır.
Microsoft Azure İşlevleri, sunucuları sağlamaya veya yönetmeye gerek kalmadan web uç noktaları ve arka planda işleme işleri oluşturmaya ve barındırmaya yönelik sunucusuz bir bilgi işlem hizmetidir. Azure İşlevleri ile, altyapıyı açıkça sağlamak veya yönetmek zorunda kalmadan, olaylara yanıt olarak isteğe bağlı kod çalıştırabilirsiniz. Bu blog yazısında, ASP.NET Geliştirme hizmetlerinden yararlanma da dahil olmak üzere .NET çözümlerini kullanarak Azure İşlevleri ile sunucusuz uygulamaların nasıl oluşturulacağını keşfedeceğiz.
Azure İşlevleri nedir?
Azure İşlevleri, altyapıyı dağıtmadan veya yönetmeden bulutta kod çalıştırmanıza olanak tanır. İşlevler ile, sunucuları yönetme endişesi duymadan, yalnızca elinizdeki sorun için ihtiyacınız olan kodu yazarsınız. Azure tüm altyapıyı ve sunucuları sizin için yönetir.
Azure İşlevlerinin bazı önemli yönleri ve avantajları:
- Olay odaklı: İşlevler, birçok Azure ve üçüncü taraf hizmetinden gelen olaylar tarafından tetiklenir. Bunlara HTTP istekleri, zamanlayıcılar, kuyruklar, sunucusuz API'ler ve daha fazlası dahildir. Bu olaylara yanıt olarak kodun çalıştırılmasını sağlayabilirsiniz.
- Otomatik olarak ölçeklenir: Azure, gelen istek hızına ve işlem yüküne göre işlevleri otomatik olarak yönetir ve ölçeklendirir. Sunucuları manuel olarak sağlamanız ve ölçeklendirmeniz gerekmez.
- Yürütme başına ödeme: Yalnızca kodunuzu çalıştırmak için gereken işlem kaynakları için ödeme yaparsınız. İşlevleriniz çalışmadığında boşta kalma ücreti alınmaz.
- Çoklu dil: İşlevler C#, JavaScript, Python, PowerShell, Java ve daha fazlasını destekler. Tercih ettiğiniz dilde işlevler geliştirebilirsiniz.
- Sunucusuz deneyim: İşlevler ile kod yazmaya odaklanırsınız ve Azure'un tüm sunucu sağlama, yapılandırma ve yönetimini yönetmesine izin verirsiniz. Gerçek bir sunucusuz deneyim elde edersiniz.
.NET İşlevlerini yerel olarak geliştirme
.NET işlevlerini yerel olarak geliştirmek için, Azure İşlevlerini hem yerel olarak hem de Azure'a geliştirmeye, test etmeye ve dağıtmaya yönelik bir komut satırı arabirimi olan Azure İşlevleri Çekirdek Araçlarına ihtiyacınız vardır.
Geliştirme ortamını ayarlamak için:
- .NET Core SDK'nın en son sürümünü yükleyin
- Dotnet aracını kullanarak Azure İşlevleri Temel Araçlarını yükleyin install -g Microsoft.Azure.WebJobs.Script.WebHost
- Functions uygulaması projesi için bir dizin oluşturun ve func init'i çalıştırın
- Bu, bir fonksiyon şablonuna sahip örnek bir fonksiyon projesinin iskeletini oluşturacaktır
Artık işlev kodunu ekleyebilir, yerel olarak test edebilir ve func CLI'yi kullanarak Azure'da yayınlayabilirsiniz. HTTP tarafından tetiklenen bir C# işlevi için bir run.csx dosyası ekleyin:
Kaynak {csharp}
Kopyala
#r “Newtonsoft.Json”
Microsoft.AspNetCore.Mvc kullanarak;
Microsoft.Extensions.Primititives'ı kullanma;
Newtonsoft.Json'u kullanarak;
System.Net'i kullanarak;
System.Threading.Tasks'ı kullanma;
genel statik eşzamansız Görev<IActionResult> Çalıştır(HttpRequest req, ILogger günlüğü)
{
log.LogInformation(“C# HTTP tetikleyici işlevi bir isteği işledi.”);
string name = req.Query[“name”];
string requestBody = yeni StreamReader(req.Body).ReadToEndAsync() bekleniyor;
dinamik veriler = JsonConvert.DeserializeObject(requestBody);
isim = isim ?? veri?.isim;
dönüş adı != null
? (ActionResult)new OkObjectResult($”Merhaba, {name}”)
: new BadRequestObjectResult(“Lütfen sorgu dizesine veya istek gövdesine bir ad girin”);
}
Yerel ana makinenizde işlevler ağ geçidini başlatan func host start komutunu çalıştırarak bunu yerel olarak test edin. Artık Postacıyı veya http://localhost:7071/api/HttpExample?name=John ile tarayıcıyı kullanarak tetikleyebilirsiniz.
Azure İşlevleri tetikleyicilerini ve bağlamalarını seçme
Azure İşlevleri, tetikleyiciler ve bağlamalar adı verilen birçok farklı olay kaynağını ve hedefi destekler. Kullanım durumunuza bağlı olarak doğru tetikleyicileri ve bağlamaları seçmek önemlidir.
İşlevlerdeki bazı yaygın tetikleyiciler şunlardır:
- HTTP Tetikleyici: REST API'leri ve web uç noktaları oluşturmak için. Kod, HTTP istekleri tarafından tetiklenir.
- Zamanlayıcı Tetikleyici: Bir programa göre çalışan, örneğin her 5 dakikada bir, planlanmış işler için.
- Kuyruk Tetikleyici: Depolama kuyruklarından gelen mesajları işlemek için.
- Blob Tetikleyici: Azure Blob depolama alanındaki yeni veya güncelleştirilmiş bloblara tepki vermek için.
Bağlamalar, işlevlerin harici veri depoları ve hizmetlerle etkileşime girmesine olanak tanır. Ortak bağlamalar şunları içerir:
- Depolama Kuyruğu: Mesajların depolama kuyruklarına gönderilmesi için.
- Blob Depolama: Azure Blob depolama alanından okumak ve buraya yazmak için.
- Cosmos DB: Azure Cosmos DB veritabanı hizmetindeki belgeleri sorgulamak ve değiştirmek için.
- Service Bus: Azure Service Bus kuyruklarından ve konularından gelen iletileri işlemek için.
Doğru tetikleyiciyi ve bağlamaları seçmek, farklı işlevleri veri ve hizmetlerle entegre ederek uçtan uca çözümlerin oluşturulmasına yardımcı olur.
Dayanıklı İşlevleri Kullanma
Dayanıklı İşlevler, arıza veya yeniden başlatma durumunda bile işlem dizilerinin güvenilir bir şekilde yürütülmesine olanak tanıyan durum bilgisi olan işlevlerin yazılmasına olanak tanır. Uzun süredir devam eden iş akışlarını durum makineleri olarak yapılandırmanıza olanak tanır.
Örneğin, Dayanıklı İşlevleri kullanarak aşağıdakilerden oluşan bir iş akışı oluşturabilirsiniz:
- Orkestratör işlevi: Etkinlik işlevlerinin uygun sırayla yürütülmesini koordine eden bir durum makinesi gibi davranır.
- Etkinlik işlevleri: Orkestratör işlevleri tarafından çağrılabilen küçük bağımsız iş birimleri.
Dayanıklı İşlevleri kullanmanın yararları şunlardır:
- Güvenilir yeniden denemeler: Dayanıklı İşlevler, başarısızlık durumunda etkinlik işlevlerini otomatik olarak yeniden dener.
- Eşzamansız çağrılar: Orchestrator işlevi, etkinlik işlevlerini eşzamansız olarak çalıştırabilir ve bunların tamamlanmasını bekleyebilir.
- Kontrol noktaları: Durum sürekli olarak kontrol noktalarına sahiptir, böylece iş akışları uygulama yeniden başlatıldıktan veya arızalandıktan sonra bile geri yüklenebilir.
İki etkinliği düzenleyen basit bir iş akışı görelim:
Kaynak {csharp}
Kopyala
[FunctionName(“Orkestratör”)]
genel statik eşzamansız Görev ÇalıştırmaOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext bağlamı)
{
var çıktı1 = wait context.CallActivityAsync<string>(“DotNetActivity”, “Merhaba”);
var çıktı2 = wait context.CallActivityAsync<string>(“DotNetActivity”, çıktı1);
// sonucu döndür
çıkış çıkışı2'yi döndür;
}
[FunctionName(“DotNetActivity”)]
public static Görev<string> Çalıştır(
[ActivityTrigger] dize girişi,
ILogger günlüğü)
{
log.LogInformation($”DotNetActivity işlevi işlendi: {input}”);
return Task.FromResult(input.ToUpper());
}
Dayanıklı İşlevler, karmaşık süreçlerin güvenilir iş akışlarına bölünmesine olanak tanır.
Azure İşlevleri geliştirmeye yönelik en iyi uygulamalar
Azure İşlevleri geliştirme için izlenecek en iyi uygulamalardan bazıları:
- Bağımlılık eklemeyi kullanın: Daha iyi test edilebilirlik için bağımlılık hizmetlerini işlevlere enjekte edin.
- Uzun süren süreçlerden kaçının: İşlevler, küçük işlem birimlerinde kod çalıştırmayı amaçlamaktadır. Kod yürütmeyi kısa tutun.
- Değişmez veri türlerini kullanın: İşlevler durum bilgisine sahip değildir, bu nedenle sorunlara neden olabilecek değiştirilebilir türlerden/yan etkilerden kaçının.
- Merkezi hata yönetimi: Hataları her yerde tek tek ele almak yerine ortak bir hata işleme mantığı ekleyin.
- Yapılandırılmış günlük kaydı: Standartlaştırılmış günlük kaydı, hata ayıklama, izleme ve denetim yollarına yardımcı olur.
- Azaltma ve yeniden denemeler: Üstel geri çekilmelerle yeniden denemeler uygulayarak azaltma hatalarını giderin.
- Sürüm oluşturma: Değişikliklerin bozulmasını önlemek için güçlü sürüm tetiklemeleri, bağlamalar ve giriş/çıkışlar.
- İzleme ve enstrümantasyon: Günlüğe kaydetme, performansı izleme ve kullanım analitiği için Application Insights gibi araçları kullanın.
- Bağlam bağlamalarını kullanın: Uygulama ayarları gibi şeylere ek bağımlılıklar olmadan erişmek için bağlam bağlamalarından yararlanın.
Bu en iyi uygulamaları takip etmek, Azure İşlevleri ile sağlam, güvenilir ve ölçeklenebilir sunucusuz uygulamalar oluşturmaya yardımcı olur.
İşlevleri Azure'a dağıtma
İşlevler hazır olduğunda bunları Azure CLI, PowerShell, Visual Studio aracılığıyla veya doğrudan Azure İşlevleri temel araçları CLI'sından Azure'a dağıtabilirsiniz:
Kopyala
func azure functionapp yayınlama <işlev-uygulama-adı>
Bu, işlevler proje klasörünü bir Azure İşlev Uygulamasına yayınlayacaktır. İşlevleri Azure'a dağıtmanın birkaç temel avantajı şunlardır:
- Otomatik Ölçeklendirme – İşlevler, gelen istek hacmine veya zaman tetikleyicilerine göre ölçeklenir.
- Yüksek Kullanılabilirlik – Veri merkezlerindeki birden fazla örnek, yüksek kullanılabilirlik sağlar.
- İzleme ve Günlüğe Kaydetme – Performansı, hataları vb. izlemek için Application Insights gibi araçları kullanın.
- Sunucusuz Platform – Sağlanacak/yönetilecek sunucu yok. Siz sadece koda odaklanın.
- Sürekli Dağıtım – Kod değişikliklerinde otomatik dağıtım için CI/CD işlem hatlarını kullanın.
Azure tüm altyapıyı yönetir, boşta kalma maliyetlerini önler ve sunucusuz uygulamaları uygun ölçekte güvenilir bir şekilde çalıştırmak için tamamen sunucusuz bir platform sağlar.
Çözüm
Azure İşlevleri ile sunucusuz bilgi işlem, geliştiricilerin tüm altyapı ve operasyon yönetimini Azure'a aktarırken iş mantığına odaklanmasına olanak tanır. ASP.NET Çekirdek Geliştiricilerini Kiralama seçeneği de dahil olmak üzere yerel .NET geliştirme desteği, C#'ta kolaylıkla güçlü sunucusuz çözümler oluşturmaya olanak tanır. Tetikleyiciler, bağlamalar ve Dayanıklı İşlevler sayesinde geliştiriciler, durum bilgisi olmayan ve durum bilgisi olan işlevler olarak uçtan uca olay odaklı mimariler ve iş akışları oluşturabilir. En iyi uygulamalarla bir araya getirilen Azure İşlevleri, sunucusuz uygulamaların basit ve ölçeklenebilir bir şekilde oluşturulmasına ve bulutta dağıtılmasına olanak tanır.