
Mikroservice Mimarisi Nedir? Neden Tercih Edilir?

Microservice Mimarisi Nedir?
Microservice mimarisi, modern yazılım dünyasında esnek, ölçeklenebilir ve yönetilebilir sistemler oluşturmak için kullanılan bir mimari yaklaşımdır. Uygulama, birbirinden bağımsız çalışan küçük servislerden oluşur. Her bir microservice, kendi işlevselliğini kapsar, bağımsız veri yönetimine sahiptir ve ayrı olarak deploy edilebilir.
“Microservice mimarisi nedir?” sorusuna verilecek en yalın yanıt; sistemin, küçük ve bağımsız bileşenler (servisler) hâline getirilerek modüler bir yapıya kavuşturulmasıdır. Bu servisler, birbiriyle REST API, gRPC, RabbitMQ gibi iletişim yöntemleriyle haberleşir.
Monolitik Mimari vs. Microservice Mimarisi
Monolitik Yapının Sınırları
Monolitik mimaride tüm işlevler tek bir uygulama altında toplanır. Bu yapı, küçük projelerde avantajlı olsa da zamanla kod karmaşası, bakım zorlukları ve dağıtım problemleri oluşturabilir. Örneğin, bir kullanıcı yönetimi modülünde yapılan değişiklik tüm uygulamanın yeniden derlenmesini ve dağıtılmasını gerektirir.
Microservice Mimarinin Sağladığı Avantajlar
- Bağımsız Geliştirme: Her servis farklı ekipler tarafından geliştirilebilir.
- Teknoloji Bağımsızlığı: Bir servis .NET Core ile, bir başkası Java ile geliştirilebilir.
- Kolay Ölçeklenebilirlik: Sadece ihtiyaç duyulan servis ölçeklenebilir.
- Hızlı Dağıtım (CI/CD): Servislerin bağımsız deploy edilebilmesi süreklilik sağlar.
- Hata İzolasyonu: Bir servis çöktüğünde tüm sistem değil, sadece o servis etkilenir.
Microservice Mimarisi Dezavantajları
- Dağıtık Sistem Karmaşıklığı: Servisler arası iletişim, izleme, loglama ve hata ayıklama karmaşık olabilir.
- Veri Tutarlılığı: Her servisin kendi verisini yönetmesi, ACID yerine eventual consistency gerektirir.
- DevOps ve CI/CD Kültürü Gerekir: Microservice’lerin yönetimi için gelişmiş otomasyon sistemleri gerekir.
Microservice Mimarisi Örnek Proje (C#/.NET Core)
1. Proje Senaryosu
“ProductService” adında bir microservice, ürün listesini yöneten bağımsız bir modül olacak. Diğer servisler (OrderService, UserService vb.) ile API üzerinden haberleşecek.
2. Klasör Yapısı:
ProductService/
│
├── Denetleyiciler/
│ └── ProductController.cs
├── Modeller/
│ └── Product.cs
├── Hizmetler/
│ └── ProductService.cs
├── Arayüzler/
│ └── IProductService.cs
├── Program.cs
├── Startup.cs
├── appsettings.json
3. Product.cs
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
4. IProductService.cs
public interface IProductService
{
IEnumerable<Product> GetAll();
Product GetById(int id);
void Add(Product product);
}
5. ProductService.cs
public class ProductService : IProductService
{
private readonly List<Product> _products = new();
public IEnumerable<Product> GetAll() => _products;
public Product GetById(int id) => _products.FirstOrDefault(p => p.Id == id);
public void Add(Product product) => _products.Add(product);
}
6. ProductController.cs
[ApiController]
[Route("api/[controller]")]
public class ProductController : ControllerBase
{
private readonly IProductService _productService;
public ProductController(IProductService productService)
{
_productService = productService;
}
[HttpGet]
public IActionResult GetAll() => Ok(_productService.GetAll());
[HttpPost]
public IActionResult Add(Product product)
{
_productService.Add(product);
return Created("", product);
}
}
7. Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
COPY . .
ENTRYPOINT ["dotnet", "ProductService.dll"]
Sonuç ve Öneriler
Microservice mimarisi; yüksek trafikli, büyüme potansiyeli yüksek ve modülerliği önemli projeler için mükemmel bir tercihtir. Ancak her projeye uygun değildir. Küçük ve basit uygulamalar için monolitik mimari hâlâ geçerliliğini korumaktadır.
Başarılı bir microservice geçişi için şunlara dikkat edilmelidir:
- Domain Driven Design (DDD) bilgisi
- CI/CD pipeline kurulumu
- Merkezi loglama ve izleme (Elastic Stack, Grafana, Prometheus)
- API Gateway ve Service Discovery kullanımı
