Mikroservislerde Merkezi Hata Yönetimi Nasıl Yapılır? (.NET Core ile)
Mikroservis mimarisi, büyük ölçekli uygulamaların geliştirilmesinde oldukça popüler hale geldi. Bu mimaride, hizmetler birbirinden bağımsız olarak geliştirilir ve çalıştırılır. Bu yaklaşım, uygulamaların ölçeklendirilmesini ve güncellenmesini kolaylaştırdığı gibi, geliştirme sürecinin hızlandırılmasını da sağlar. Ancak, mikroservis mimarisiyle birlikte, hizmetlerin artmasıyla hata yönetimi de daha karmaşık hale gelir.
Merkezi hata yönetimi, mikroservis mimarisi içinde ortak bir sorunların ve hataların izlenmesi, analiz edilmesi ve yönetilmesi için kullanılan bir tekniktir. Bu yaklaşım, hataların hızlı bir şekilde tespit edilmesini ve giderilmesini sağlar. Bu makalede, mikroservislerde merkezi hata yönetimi için nasıl bir yaklaşım benimseneceği ve bunun nasıl uygulanacağı ele alınacaktır.

Hata Yakalama
Hata Yakalama, uygulamanın hatayla karşılaştığı durumlarda hatanın kaynağını, tipini ve zamanını tespit etmek için bir mekanizma oluşturmayı içerir.
Bu mekanizma genellikle uygulamanın çeşitli noktalarına yerleştirilen kod parçaları veya middleware’ler kullanılarak gerçekleştirilir. Middleware, uygulama isteği ile yanıtı arasında yer alan bir ara yazılımdır ve istek ve yanıtı manipüle etme, loglama, hata yakalama gibi çeşitli işlemleri yapmak için kullanılabilir.
Hata yakalama mekanizması, uygulamanın sorunsuz bir şekilde çalışmasını sağlamak için çok önemlidir. Hataların kaynakları tespit edilerek çözülebilmesi, uygulamanın performansının artırılması, kullanıcı deneyiminin iyileştirilmesi gibi birçok avantajı bulunmaktadır.
Mikroservis sistemlerinde genellikle hata kontrolleri mantıksal kodların içerisinde yapılmaz. Bir çok mikroservis sisteminde try-catch yapısını göremezsiniz. Bunun bir çok nedeni vardır. Ama en önemli iki neden performans ve hata durumlarında alınacak aksiyonun merkez tarafından kontrol edilme isteğidir.
Kapsamlı bir mikroservis sisteminde genellikle potansiyel olarak alınabileccek hata durumları için bir yönetim mekanizması bulunur. Bu mekanizma çoğunlukla framework çatısı altında kullanılır ve hata durumlarında ne yapılacağı burada belirlenir. .Net Core ve daha üst versiyonlarında hata yakalama işlemleri middleware’ler ile yönetilmektedir. Middleware’ler arka tarafta düzenli olarak gelen istekleri kontrol eder ve hata alınması durumunda hatayı yakalayarak istenen çözümleri sağlar.
Hata Durumunda Neler Yapılabilir
Hata durumunda yapılacak işlemler, hatanın tipine, şiddetine ve uygulamanın gereksinimlerine göre farklılık gösterebilir. Bazı yaygın uygulamalar arasında aşağıdakiler yer alabilir:
- Hatanın kaynağını tespit etmek: Uygulama, hata nedeniyle beklenmeyen bir şekilde durduğunda, hatanın kaynağı tespit edilerek sorunun çözülmesi daha kolay hale gelebilir. Bu nedenle, hata oluştuğunda hatanın nedenini belirleyen bir loglama mekanizması oluşturulması önemlidir.
- Kullanıcılara bilgi vermek: Eğer hata, kullanıcı tarafından tetiklenmişse, kullanıcılara hatanın ne olduğu ve ne yapabilecekleri konusunda bilgi vermek iyi bir uygulamadır. Böylece kullanıcılar, sorunun ne olduğunu anlayabilirler ve sorunu çözmek için gerekli adımları atabilirler.
- Hata mesajı göndermek: Hata durumunda, bir hata mesajı gönderilerek, uygulamanın yöneticileri veya destek personeli bilgilendirilebilir. Bu sayede, hatanın nedeni ve nasıl çözülebileceği hakkında daha fazla bilgi toplanabilir.
- Otomatik olarak yeniden başlatma: Bazı hatalar, uygulamanın yeniden başlatılması ile çözülebilir. Bu nedenle, uygulamanın otomatik olarak yeniden başlatılması gibi mekanizmalar oluşturulabilir.
- Alternatif kaynaklar kullanmak: Hata durumunda, alternatif kaynaklar kullanarak uygulamanın çalışmasını sağlamak mümkündür. Örneğin, hata nedeniyle veri tabanına erişilemiyorsa, yedek bir veri tabanı kullanarak uygulamanın çalışmasını sağlamak mümkündür.
Hata durumunda yapılacak işlemler, uygulamanın gereksinimlerine ve hata nedenine göre değişebilir. Bu nedenle, uygulamanın hatayla karşılaşması durumunda yapılacak işlemler önceden belirlenmeli ve uygulamaya entegre edilmelidir.
Middleware Hazırlama
.NET Core’da bir middleware kullanarak merkezi hata yönetimi sağlayabiliriz. Middleware, bir ASP.NET Core uygulaması için HTTP isteklerini işleyen bir ara yazılım bileşenidir. Middleware, bir isteği işlemek için kod ekleyebilir veya çıkarabilir.
Aşağıdaki kod örneği, .NET Core kullanarak basit bir middleware oluşturmayı gösterir. Bu middleware, her bir mikro hizmetin hatalarını yakalar ve merkezi bir hata yönetim sistemine ileterek kaydeder:
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
public class CentralizedErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public CentralizedErrorHandlingMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
{
_next = next;
_logger = loggerFactory.CreateLogger("CentralizedErrorHandlingMiddleware");
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
// Hata kaydı. Bu kısımda SeriLog gibi başka kütüphanelerde kullanılabilir.
_logger.LogError($"Hata oluştu: {ex.Message}");
// Merkezi hata yönetimi servisine hata gönderme kodu burada yer alabilir
// Gerek kod silme, gerekse hata durumunda yapılmasını istediğimiz işlemleri burada kodlayabiliriz.
throw;
}
}
}
Yukarıdaki middleware, bir istek işlendiğinde önce isteği işlemek üzere sonraki middleware’e geçer. Ancak bir hata oluştuğunda, hata kaydı yapıldıktan sonra hata fırlatılır ve sonraki middleware’lere geçilmez.
Bu middleware’i kullanmak için, Startup.cs
dosyasındaki Configure
metoduna eklememiz gerekiyor:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
app.UseMiddleware<CentralizedErrorHandlingMiddleware>();
// ...
}
Bu şekilde, her bir mikro hizmetin hatalarını yakalamak için tek bir middleware kullanarak merkezi hata yönetimini sağlayabiliriz.