ASP.NET Core ile Mikroservis Mimarisine Giriş

Hakan Güzel
3 min readSep 24, 2024

--

Modern yazılım geliştirme dünyasında, mikroservis mimarisi giderek daha popüler hale gelmektedir. Özellikle büyük ve karmaşık uygulamalar için mikroservisler, ölçeklenebilirlik, bağımsız geliştirme ve dağıtım kolaylığı gibi birçok avantaj sunar. Bu yazıda, ASP.NET Core kullanarak mikroservis mimarisinin temellerini ve bir mikroservis oluşturma sürecini ele alacağız.

Mikroservis Mimarisi Nedir?

Mikroservis mimarisi, büyük bir uygulamayı bağımsız olarak dağıtılabilen ve yönetilebilen küçük, bağımsız servisler halinde parçalara ayıran bir yazılım tasarım modelidir. Her mikroservis belirli bir işlevi yerine getirir ve genellikle kendi veri deposuna sahiptir. Mikroservisler, birbirleriyle hafif, genellikle HTTP tabanlı iletişim protokolleri kullanarak iletişim kurar.

Mikroservislerin Avantajları

  1. Ölçeklenebilirlik: Her mikroservis bağımsız olarak ölçeklenebilir, bu da sistemin genel performansını iyileştirir.
  2. Bağımsız Geliştirme ve Dağıtım: Ekipler, mikroservisleri bağımsız olarak geliştirebilir ve dağıtabilir, bu da geliştirme hızını artırır.
  3. Hata İzolasyonu: Bir mikroservisteki hata, diğer mikroservisleri etkilemez, bu da sistemin genel güvenilirliğini artırır.
  4. Teknoloji Bağımsızlığı: Her mikroservis, en uygun teknoloji stack’i kullanılarak geliştirilebilir.

ASP.NET Core ile Mikroservis Oluşturma

ASP.NET Core, mikroservisler oluşturmak için güçlü bir platform sağlar. Şimdi adım adım basit bir mikroservis oluşturma sürecini inceleyelim.

1. Proje Kurulumu

Öncelikle, bir ASP.NET Core Web API projesi oluşturalım:

dotnet new webapi -n ProductService
cd ProductService

2. Proje Yapılandırması

Startup.cs dosyasında gerekli yapılandırmaları yapalım:

public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// Diğer servis kayıtları burada yapılır
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}

3. Model ve Controller Oluşturma

Basit bir ürün modeli ve denetleyicisi (controller) oluşturalım.

Models/Product.cs:

namespace ProductService.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
}

Controllers/ProductController.cs:

using Microsoft.AspNetCore.Mvc;
using ProductService.Models;
using System.Collections.Generic;

namespace ProductService.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class ProductController : ControllerBase
{
private static readonly List<Product> Products = new List<Product>
{
new Product { Id = 1, Name = "Product1", Price = 10.0m },
new Product { Id = 2, Name = "Product2", Price = 20.0m }
};

[HttpGet]
public IEnumerable<Product> Get() => Products;

[HttpGet("{id}")]
public ActionResult<Product> Get(int id)
{
var product = Products.Find(p => p.Id == id);
if (product == null)
{
return NotFound();
}
return product;
}

[HttpPost]
public ActionResult<Product> Post(Product product)
{
product.Id = Products.Count + 1;
Products.Add(product);
return CreatedAtAction(nameof(Get), new { id = product.Id }, product);
}
}
}

4. Docker ile Konteynerleştirme

Mikroservislerin en büyük avantajlarından biri, Docker gibi konteyner teknolojileriyle kolayca dağıtılabilmeleridir. Dockerfile oluşturarak projemizi konteyner haline getirelim:

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"]

5. Kubernetes ile Orkestrasyon

Mikroservislerin yönetimi ve ölçeklendirilmesi için Kubernetes kullanılabilir. Bir Kubernetes dağıtım dosyası oluşturalım:

k8s-deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
name: productservice
spec:
replicas: 3
selector:
matchLabels:
app: productservice
template:
metadata:
labels:
app: productservice
spec:
containers:
- name: productservice
image: your-docker-repo/productservice:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: productservice
spec:
selector:
app: productservice
ports:
- protocol: TCP
port: 80
targetPort: 80

Sonuç

Bu yazıda, ASP.NET Core ile mikroservis mimarisine giriş yaptık ve basit bir mikroservis oluşturma sürecini ele aldık. Mikroservislerin avantajlarını ve nasıl uygulanacağını anlattık. Bu adımları takip ederek siz de kendi mikroservislerinizi oluşturabilir ve yönetebilirsiniz. Mikroservis mimarisi, özellikle büyük ölçekli projelerde esneklik ve ölçeklenebilirlik sağlayarak geliştirme sürecini daha verimli hale getirir.

--

--