ASP.NET Core ile Mikroservis Mimarisi Oluşturma Rehberi
ASP.NET Core, modern yazılım geliştirme ihtiyaçlarını karşılamak için esnek ve yüksek performanslı bir framework sunar. Mikroservis mimarisi, özellikle büyük ölçekli uygulamalarda daha hızlı geliştirme ve dağıtım süreçleri sağlar. Bu makalede, ASP.NET Core ile mikroservis mimarisi oluşturmanın teknik detaylarına odaklanacağız.
Mikroservis Mimarisi Nedir?
Mikroservis mimarisi, uygulamaların bağımsız olarak dağıtılabilen, küçük, modüler hizmetler halinde tasarlanmasını ve yönetilmesini sağlar. Her mikroservis, belirli bir işlevi yerine getirir ve diğer servislerle iletişim kurarak daha büyük bir uygulamanın parçası olur. Bu mimari, geliştiricilere daha fazla esneklik ve ölçeklenebilirlik sunar.
Mikroservislerin Avantajları
– Bağımsız Dağıtım: Her mikroservis bağımsız olarak geliştirilebilir, test edilebilir ve dağıtılabilir.
– Ölçeklenebilirlik: Servisler, ihtiyaca göre yatay veya dikey olarak ölçeklenebilir.
– Esneklik: Farklı dillerde ve teknolojilerde geliştirilmiş servisler bir arada çalışabilir.
ASP.NET Core ile Mikroservis Geliştirme
ASP.NET Core, mikroservis mimarisi için ideal bir platform sunar. Yüksek performanslı, çapraz platform desteği ve modüler yapısı sayesinde, mikroservisler için güçlü bir temel sağlar.
ASP.NET Core ile Başlangıç
ASP.NET Core kullanarak mikroservis geliştirmeye başlamak için, Visual Studio veya .NET CLI kullanarak yeni bir proje oluşturabilirsiniz. İşte basit bir ASP.NET Core Web API projesi oluşturma adımları:
dotnet new webapi -n MyMicroservice cd MyMicroservice dotnet run
Bu komutlar, yeni bir ASP.NET Core Web API projesi oluşturur ve çalıştırır. Bu basit proje, mikroservis mimarinizin temelini oluşturabilir.
API Gateway Kullanımı
Mikroservis mimarisinde, API Gateway genellikle istemci taleplerini yönlendirmek ve yönetmek için kullanılır. Ocelot, ASP.NET Core ile uyumlu popüler bir API Gateway çözümüdür.
Ocelot Kurulumu ve Yapılandırması
Ocelot’u projeye eklemek için aşağıdaki NuGet paketini yükleyebilirsiniz:
dotnet add package Ocelot
Ardından, ocelot.json
dosyasında API yönlendirme kurallarını tanımlayın:
{ "Routes": [ { "DownstreamPathTemplate": "/api/users", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 5001 } ], "UpstreamPathTemplate": "/users", "UpstreamHttpMethod": [ "GET" ] } ] }
Bu yapılandırma, /users
isteğini /api/users
servisine yönlendirir.
Servis Keşfi ve Yük Dengeleme
Mikroservis mimarisinde, servislerin dinamik olarak keşfedilmesi ve yük dengelenmesi önemlidir. Consul, bu işlemler için yaygın olarak kullanılan bir araçtır.
Consul ile Servis Kayıt ve Keşfi
Consul kullanarak servislerinizi kaydedebilir ve keşfedebilirsiniz. ASP.NET Core projenize Consul istemcisi ekleyerek başlayın:
dotnet add package Consul
Ardından, servis kaydını gerçekleştirin:
var consulClient = new ConsulClient(); var registration = new AgentServiceRegistration { ID = "user-service", Name = "UserService", Address = "localhost", Port = 5001 }; await consulClient.Agent.ServiceRegister(registration);
Bu kod, UserService
adında bir servisi Consul’a kaydeder.
Veritabanı Bağlantısı ve Veri Tutarlılığı
Mikroservis mimarisinde, her servis kendi veritabanına sahip olabilir. Bu, veri tutarlılığı ve senkronizasyonu açısından dikkat gerektirir. Event Sourcing ve CQRS (Command Query Responsibility Segregation) gibi desenler bu tür senaryolar için uygundur.
Entity Framework Core ile Veritabanı Bağlantısı
ASP.NET Core ile Entity Framework Core kullanarak veritabanı bağlantısı kurabilirsiniz:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Aşağıdaki örnek, bir DbContext
sınıfı tanımlar:
public class UserContext : DbContext { public DbSet Users { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=localhost;Database=UserDB;Trusted_Connection=True;"); } }
Bu kod, UserDB
adlı bir veritabanına bağlanır ve User
tablosunu temsil eder.
Mesajlaşma ve Asenkron İletişim
Mikroservisler arasında asenkron iletişim sağlamak için mesajlaşma sistemleri kullanılır. RabbitMQ, bu tür iletişim için popüler bir seçenektir.
RabbitMQ ile Asenkron İletişim
ASP.NET Core uygulamanıza RabbitMQ istemcisi ekleyerek başlayın:
dotnet add package RabbitMQ.Client
Aşağıdaki örnek, RabbitMQ üzerinden bir mesaj gönderir:
var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: "task_queue", durable: true, exclusive: false, autoDelete: false, arguments: null); string message = "Hello World!"; var body = Encoding.UTF8.GetBytes(message); var properties = channel.CreateBasicProperties(); properties.Persistent = true; channel.BasicPublish(exchange: "", routingKey: "task_queue", basicProperties: properties, body: body); }
Bu kod, task_queue
adlı bir kuyruğa “Hello World!” mesajını gönderir.
Güvenlik ve Kimlik Doğrulama
Mikroservis mimarisinde güvenlik kritik bir konudur. OAuth 2.0 ve OpenID Connect gibi protokoller, kimlik doğrulama ve yetkilendirme için yaygın olarak kullanılır.
IdentityServer4 ile Kimlik Doğrulama
IdentityServer4, ASP.NET Core ile entegre edilebilen bir açık kaynak kimlik sunucusudur. Projenize IdentityServer4 ekleyerek başlayın:
dotnet add package IdentityServer4
Ardından, IdentityServer4’ü yapılandırın:
public void ConfigureServices(IServiceCollection services) { services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryApiResources(Config.GetApiResources()) .AddInMemoryClients(Config.GetClients()); }
Bu yapılandırma, IdentityServer4’ü temel bir kimlik doğrulama sunucusu olarak ayarlar.
Performans ve İzleme
Mikroservislerin performansını izlemek ve optimize etmek için çeşitli araçlar ve teknikler kullanılabilir. Prometheus ve Grafana, performans izleme ve görselleştirme için popüler araçlardır.
Prometheus ile Performans İzleme
Prometheus, mikroservislerin performansını izlemek için kullanılabilir. ASP.NET Core uygulamanıza Prometheus istemcisi ekleyerek başlayın:
dotnet add package prometheus-net
Ardından, performans metriklerini toplamak için aşağıdaki kodu ekleyin:
app.UseMetricServer(); app.UseHttpMetrics();
Bu kod, Prometheus’un metrikleri toplamasına olanak tanır.
Loglama ve Hata Yönetimi
Loglama, mikroservis mimarisinde önemli bir rol oynar. Serilog gibi loglama kütüphaneleri, logların merkezi bir yerde toplanmasına yardımcı olabilir.
Serilog ile Loglama
Serilog, ASP.NET Core uygulamanıza kolayca entegre edilebilir:
dotnet add package Serilog.AspNetCore
Ardından, loglamayı yapılandırın:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { Log.Logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger(); app.UseSerilogRequestLogging(); }
Bu yapılandırma, konsola loglama yapar ve her HTTP isteğini loglar.
Sonuç
ASP.NET Core ile mikroservis mimarisi oluşturmak, modern yazılım geliştirme ihtiyaçlarına uygun esnek ve ölçeklenebilir çözümler sunar. Bu rehberde, mikroservis mimarisinin temel bileşenlerini ve ASP.NET Core ile nasıl uygulanacağını inceledik. Mikroservis mimarisi, doğru araçlar ve tekniklerle birleştirildiğinde, yüksek performanslı ve sürdürülebilir yazılım çözümleri oluşturmanıza yardımcı olabilir. Eğer mikroservislerinizi Cloud Sunucular veya VDS Sunucular üzerinde barındırmayı düşünüyorsanız, bu seçenekler size esneklik ve ölçeklenebilirlik sağlayacaktır.