Cloud native dağıtık bir uygulama geliştirmenin, kendi içerisinde bir çok zorlukları, zaman alacak gereksinimleri vardır; state management, db layer, cloud bindings gibi liste uzar gider. Event driven bir mimari kurmak istediğinizde ise, hali hazırda çözülmüş olan ve sizin, tekrardan yazmanız gereken bir sürü implementasyon olacaktır.
Bu yazının konusu, bahsettiğimiz “zaman alıcı” işlerden soyutlanmamızı ve odağımızı, yapmak istediğimiz business’a yönlendirmemizi amaçlayan bir “framework” olan Dapr.
Dapr Nedir?
Dapr (ORM olan dapper değil 🙂 ), kendisinini Distributed Application Runtime olarak konumlandırmaktadır. Bir çok bileşenden oluşan bir araç kütüphanesi olarak da düşünülebilir, istediğiniz şeyi alır kullanır veya özelleştirebilirsiniz bu yaklaşımı java spring cloud tarafında da görmüştük. Cloud native mikroservis uygulamaları geliştirmek istediğinizde, ihtiyacınız olacak bir çok şeyi size hazır olarak sağlar, bu sayede çözülmüş olan bir çok problem için kod yazma ihtiyacınızı ortadan kaldırır.
Microsoft tarafından geçtiğimiz yıl açık kaynak olarak duyrulmuştu ve uzun bir süre alfa ve beta testleri devam etti, geçtiğimiz haftalarda ise 1.0 sürümüyle production ready hale geldi .Dapr, projelere import edilerek kullanılan bir kütüphane değildir, sidecar olarak çalışan http ve grpc ile iletişim kurulabilen bir araçtır, bu sayede programlama dilinden ve platformdan bağımsız olarak kullanabilmenize olanak sağlamaktadır. Dilerseniz, popüler programlama dilleri olan Go, Java, .Net, JavaScript, C++, PHP, Python gibi diller için geliştirilmiş olan SDK’ları da mevcuttur. Dapr, standalone çalışabildiği gibi Kubernetes ortamında da çalışabilmektedir.
Dapr, 6 ana başlık altında bir birinden farklı 71 bileşene sahiptir. Bu bileşenler: I/O Bindings, State Store, Pub/Sub, Secret Store, HTTP Middleware, Name Resolution.
Kurulum
Kurulum adımlarını dokümantasyon üzerinden takip etmek isterseniz buraya tıklayabilirsiniz veya burada kalıp bu yolculuğa benle devam edebilirsiniz 🙂
Geliştirme ortamınızda, dapr self hosted modunu kurabilirsiniz. Self hosted dapr, docker ile çalışmaktadır.
- Dapr cli’ile self hosted Dapr’ı kolayca yönetebilmekteyiz, bunun için işletim sisteminize göre olan CLI’ı buradan indirebilirsiniz.
- Terminal aracılığıyla;
dapr init
komutunu çalıştırın. Bu komut ile, Dapr image larını indirecek ve çalıştıracaktır.
- Dapr init, varsayılan olarak Redis ve Zipkin ile birlikte gelmektedir. Proje ihtiyaçları doğrultusunda Dapr konfigürasyon ayarları ile, hangi bileşenler ile çalışmasını istediğinizi belirtebilirsiniz.
Örnekler
DaprState management
Dapr, state management işlemlerini kolaylaştırmak için “state store” özelliğini sunar. Bu özellik, bir mikroservis uygulamasının veri depolama ihtiyacını karşılamak için kullanılabilecek bir key-value veri deposudur. Örneğin, bir mikroservis uygulamasının kullanıcı profillerini saklaması için kullanılabilir.
Aşağıdaki örnekte, C# diliyle bir mikroservis uygulamasının, Dapr state store özelliğini kullanarak bir kullanıcı profili kaydetme işlemi yapalım:
using Dapr.Client; using System; using System.Threading.Tasks; // Kullanıcı profili sınıfı public class UserProfile { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } } // Mikroservis uygulaması içinde class MyService { private readonly DaprClient daprClient; public MyService(DaprClient daprClient) { this.daprClient = daprClient; } public async Task SaveUserProfile(string userId, UserProfile profile) { // state store'a kullanıcı profilini kaydet await daprClient.SaveStateAsync("statestore", userId, profile); Console.WriteLine($"Kullanıcı profili kaydedildi. ID: {userId}"); } }
Bu örnekte, DaprClient
sınıfından bir nesne oluşturulur ve bu nesne ile SaveStateAsync
metodu kullanılarak, veri deposuna bir kullanıcı profili kaydedilir. Bu metodun ilk parametresi “state store” adıdır ve ikinci parametresi kaydedilecek verinin anahtarıdır. Üçüncü parametresi ise kaydedilecek veri nesnesidir.
Bu örnekte, “statestore” adında bir state store kullanılmaktadır ve kullanıcı profilleri kaydedilmektedir. Ancak, state store adı ve kaydedilecek veri türü, uygulamanın ihtiyacına göre değişebilir.
Dapr Publish-Subscribe Messaging
Publish-Subscribe messaging, bir yayıncının bir mesajı bir veya daha fazla aboneye göndermesidir. Bu tür bir sistemde, yayıncı bir mesajı yayınlar ve bu mesaj birden fazla abone tarafından alınır. Bu şekilde, bir mesajın birden fazla kullanıcıya ulaşması sağlanır.
Dapr, bu tür bir sistemi kullanmak için gerekli olan API’leri sağlar. Örnek olarak, bir yayıncının bir mesajı yayınlaması için aşağıdaki örneğebakalım:
using Dapr.Client; using Microsoft.AspNetCore.Mvc; [ApiController] public class PublisherController : ControllerBase { private readonly DaprClient daprClient; public PublisherController(DaprClient daprClient) { this.daprClient = daprClient; } [HttpPost("publish")] public async Task Publish([FromBody]string message) { await daprClient.PublishEventAsync("topic", message); return Ok(); } }
Bu kod, yayıncı bir mesajı “topic” adlı bir konuda yayınlar. Aboneler ise, aşağıdaki gibi kod kullanarak bu mesajları alabilirler:
using Dapr.Client; using Microsoft.AspNetCore.Mvc; [ApiController] public class SubscriberController : ControllerBase { private readonly DaprClient daprClient; public SubscriberController(DaprClient daprClient) { this.daprClient = daprClient; } [Topic("topic")] [HttpPost("subscribe")] public async Task Subscribe([FromBody]string message) { // Process the message here return Ok(); } }
Bu kod, “topic” adlı bir konuya abone olur ve yayıncı tarafından yayınlanan mesajları alır. Burada, “Process the message here” satırında mesaj işlenir.
Benzer İçerikler
Microsoft .Net (C#, VB.Net) ile Mikroservis Uygulama Geliştirme