Microservices Mimarisi Nedir?
Mikroservis mimarisi, bir uygulamanın küçük, bağımsız, birbirinden ayrı çalışan servislerden oluştuğu bir yapıdır. Her mikroservis, belirli bir işlevi yerine getirir ve bağımsız olarak geliştirilip dağıtılabilir. Bu sayede uygulamanın her bir parçası ayrı ayrı ölçeklendirilebilir ve yönetilebilir.
Örneğin, bir e-ticaret uygulaması düşünün. Bu uygulamanın ödeme, ürün yönetimi, kullanıcı yönetimi gibi her biri ayrı bir mikroservis olabilir. Böylece bir servis güncellenirken, diğer servisler etkilenmez. İşte tam da bu noktada, ASP.NET Core’un sunduğu esneklik ve hız devreye giriyor.
ASP.NET Core ile Mikroservis Geliştirme
ASP.NET Core, açık kaynak kodlu ve platformlar arası uyumlu bir framework olup, mikroservis mimarisine geçişi oldukça kolaylaştırıyor. Hem REST API hem de gRPC servislerini kolaylıkla geliştirebileceğiniz bu platform, özellikle mikroservis mimarisi için ideal.
Öncelikle, bir mikroservis projesi oluşturmak için ASP.NET Core’un şablonlarını kullanarak işe başlayabilirsiniz. Bu şablonlar, temel yapı taşlarını hızlıca kurmanızı sağlar ve mikroservislerinizi geliştirirken zaman kazandırır.
Adım Adım Mikroservis Geliştirme
Şimdi mikroservis geliştirmeye başlamak için adım adım bir yolculuğa çıkalım. Başlamak için ilk olarak bir ASP.NET Core projesi oluşturuyoruz.
dotnet new webapi -n ProductService
Bu komutla “ProductService” adında bir web API projesi oluşturduk. Bu, ürünleri yöneten bir mikroservis olacak. Şimdi bu servisi geliştirelim.
1. API Servisini Yazmak
API’nizin temel işlevi ürünleri listelemek, eklemek, güncellemek ve silmek olacaktır. Aşağıda, ürünleri yönetmek için gerekli olan temel CRUD işlemlerini gerçekleştiren bir Controller kodu örneğini bulabilirsiniz.
[ApiController]
[Route("api/[controller]")]
public class ProductController : ControllerBase
{
private readonly IProductService _productService;
public ProductController(IProductService productService)
{
_productService = productService;
}
[HttpGet]
public IActionResult GetAll()
{
var products = _productService.GetAll();
return Ok(products);
}
[HttpPost]
public IActionResult Create([FromBody] Product product)
{
_productService.Add(product);
return CreatedAtAction(nameof(GetAll), new { id = product.Id }, product);
}
}
Bu controller, ürünlerin alınıp gönderilmesini sağlar. Şimdi ürünleri veritabanında tutabilmek için bir veri katmanı ekleyelim.
2. Veritabanı Entegrasyonu
Veritabanı yönetimi için Entity Framework Core kullanacağız. Veri tabanına bağlanabilmek için aşağıdaki komutu çalıştırarak gerekli paketleri yükleyelim:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design
Daha sonra `DbContext` sınıfını oluşturarak mikroservisin verilerini yönetebiliriz.
public class ApplicationDbContext : DbContext
{
public DbSet Products { get; set; }
public ApplicationDbContext(DbContextOptions options) : base(options) { }
}
3. Mikroservisleri Bağımsız Dağıtma ve Docker Kullanma
Mikroservislerin bağımsız olarak çalışabilmesi için her bir servisi ayrı bir konteynerde çalıştırmak oldukça önemlidir. Bu noktada Docker devreye giriyor. Docker, her mikroservisi izole bir şekilde çalıştırmanıza olanak tanır.
Bir Dockerfile oluşturup, mikroservisinizi kolayca bir Docker konteynerine yerleştirebilirsiniz.
# Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["ProductService/ProductService.csproj", "ProductService/"]
RUN dotnet restore "ProductService/ProductService.csproj"
COPY . .
WORKDIR "/src/ProductService"
RUN dotnet build "ProductService.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "ProductService.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "ProductService.dll"]
4. Kubernetes ile Dağıtım
Mikroservislerinizi Kubernetes üzerinde çalıştırmak, onları yönetmek için mükemmel bir seçenek sunar. Kubernetes, servislerinizi kolayca yönetebilmeniz ve ölçeklendirebilmeniz için gerekli araçları sağlar. YAML dosyalarını kullanarak, Kubernetes’e mikroservislerinizi nasıl dağıtacağınızı belirtebilirsiniz.
5. API Gateway ile Servislerinizi Birleştirme
Mikroservis mimarisinin önemli bir parçası da API Gateway kullanımıdır. API Gateway, mikroservislerinizi tek bir endpoint üzerinden yönetmenizi sağlar ve dış dünyaya karşı bir yönlendirici işlevi görür. Bu sayede istemciler yalnızca bir noktaya başvurur, ancak bu nokta onların farklı mikroservislerle iletişimini sağlar.
Örneğin, Ocelot gibi bir API Gateway kütüphanesi ile servislerinizi birleştirebilirsiniz.
Sonuç
Bu yazıda, ASP.NET Core ile mikroservis mimarisine nasıl başlayabileceğinizi, adım adım bir örnekle gösterdik. Mikroservisler, modern yazılım geliştirme için güçlü bir yapı sunuyor ve ASP.NET Core, bu yapıyı kolayca inşa etmenize olanak tanıyor. Docker ve Kubernetes gibi teknolojilerle mikroservislerinizi daha da güçlendirebilir, ölçeklenebilir ve yönetilebilir hale getirebilirsiniz. Eğer bu konuda daha fazla bilgi isterseniz, bize yorum bırakabilirsiniz!