ASP Genel VMware

ASP.NET Core ile Mikro Hizmet Mimarisi Oluşturma

ASP.NET Core ile Mikro Hizmet Mimarisi Oluşturma

ASP.NET Core ile Mikro Hizmet Mimarisi Oluşturma

Mikro hizmet mimarisi, yazılım geliştirme dünyasında büyük ölçekli ve karmaşık uygulamaların daha esnek ve yönetilebilir bir şekilde inşa edilmesini sağlar. ASP.NET Core, bu tür mimarilerin oluşturulmasında güçlü bir araçtır. Bu makalede, ASP.NET Core kullanarak mikro hizmet mimarisi oluşturmanın temel adımlarını ve dikkat edilmesi gereken noktaları inceleyeceğiz.

Mikro Hizmet Mimarisi Nedir?

Mikro hizmet mimarisi, bir uygulamanın bağımsız olarak dağıtılabilir ve yönetilebilir küçük hizmetler halinde parçalanması anlamına gelir. Her mikro hizmet, belirli bir işlevi yerine getirir ve diğer hizmetlerle minimal bir iletişim kurar. Bu yaklaşım, büyük uygulamaların daha esnek ve ölçeklenebilir olmasını sağlar.

ASP.NET Core ile Mikro Hizmetlerin Temelleri

ASP.NET Core, mikro hizmetlerin oluşturulması için çeşitli avantajlar sunar. Hafif yapısı, yüksek performansı ve platform bağımsızlığı, ASP.NET Core’u mikro hizmet mimarisi için ideal bir seçim haline getirir.

1. Mikro Hizmetlerin Yapılandırılması

Mikro hizmetlerin yapılandırılması, her bir hizmetin bağımsız olarak çalışabilmesi için gereklidir. ASP.NET Core’da bu yapılandırmayı appsettings.json dosyası ile yapabiliriz. Her mikro hizmetin kendi yapılandırma dosyası olmalıdır.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ServiceSettings": {
    "ServiceName": "OrderService",
    "Version": "1.0.0"
  }
}

Bu yapılandırma dosyası, bir mikro hizmetin temel ayarlarını içerir. Örneğin, ServiceName ve Version gibi bilgiler burada tanımlanabilir.

2. API Geçidi ve Yönlendirme

Mikro hizmet mimarisinde, farklı hizmetlerin dış dünyaya tek bir noktadan erişilebilir olması önemlidir. Bu noktada API Geçidi (API Gateway) devreye girer. API Geçidi, tüm istekleri alır ve ilgili mikro hizmete yönlendirir.

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOcelot();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseOcelot().Wait();
    }
}

Yukarıdaki kod örneği, Ocelot kullanarak basit bir API Geçidi yapılandırmasını göstermektedir. Ocelot, ASP.NET Core için popüler bir API Geçidi kütüphanesidir.

3. Hizmet Keşfi ve Kayıt

Mikro hizmetler, dinamik olarak bulunabilir ve kaydedilebilir olmalıdır. Bu, hizmetlerin IP adreslerinin veya portlarının değişmesi durumunda bile erişilebilir olmasını sağlar. Consul veya Eureka gibi araçlar bu işlevi sağlar.

public class ConsulConfig
{
    public string Address { get; set; }
}

public static class ConsulExtensions
{
    public static IServiceCollection AddConsulConfig(this IServiceCollection services, IConfiguration configuration)
    {
        services.Configure(configuration.GetSection("ConsulConfig"));
        return services;
    }
}

Bu kod, Consul kullanarak hizmet keşfi ve kaydı için temel bir yapılandırmayı gösterir. ConsulConfig sınıfı, Consul’un adresini tutar ve hizmetlerin bu adrese kaydedilmesini sağlar.

4. Mesajlaşma ve İletişim

Mikro hizmetler arasında iletişim, genellikle mesajlaşma sistemleri aracılığıyla gerçekleştirilir. RabbitMQ veya Azure Service Bus gibi araçlar, mikro hizmetler arasında asenkron iletişimi sağlar.

public class RabbitMQPublisher
{
    private readonly IConnection _connection;
    private readonly IModel _channel;

    public RabbitMQPublisher()
    {
        var factory = new ConnectionFactory() { HostName = "localhost" };
        _connection = factory.CreateConnection();
        _channel = _connection.CreateModel();
    }

    public void Publish(string message)
    {
        _channel.BasicPublish(exchange: "",
                             routingKey: "task_queue",
                             basicProperties: null,
                             body: Encoding.UTF8.GetBytes(message));
    }
}

Bu örnek, RabbitMQ kullanarak basit bir mesaj yayınlama işlemini gösterir. Mikro hizmetler, bu tür mesajlaşma sistemleri aracılığıyla birbirleriyle iletişim kurabilir.

5. Güvenlik ve Kimlik Doğrulama

Mikro hizmetlerde güvenlik, kritik bir konudur. Her hizmetin kimlik doğrulama ve yetkilendirme mekanizmalarına sahip olması gerekir. JWT (JSON Web Tokens) genellikle bu amaçla kullanılır.

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "https://yourdomain.com",
            ValidAudience = "https://yourdomain.com",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YourSecretKey"))
        };
    });

Bu kod, ASP.NET Core uygulamanızda JWT ile kimlik doğrulama yapılandırmasını gösterir. Her mikro hizmet, bu tür bir yapılandırma ile güvenli hale getirilebilir.

Mikro Hizmetlerin Dağıtımı ve Yönetimi

Mikro hizmetlerin dağıtımı, genellikle konteyner tabanlı çözümlerle yapılır. Docker ve Kubernetes, mikro hizmetlerin ölçeklenebilir ve yönetilebilir bir şekilde dağıtılmasını sağlar. Ayrıca, Cloud Sunucular ve VDS Sunucular gibi bulut tabanlı çözümler, mikro hizmetlerin esnek bir şekilde barındırılmasına olanak tanır.

1. Docker ile Konteynerleştirme

Docker, mikro hizmetlerin konteynerler içinde çalıştırılmasını sağlar. Her mikro hizmet, kendi bağımsız konteyneri içinde çalışır ve bu sayede diğer hizmetlerden izole edilir.

FROM mcr.microsoft.com/dotnet/aspnet:5.0
COPY . /app
WORKDIR /app
EXPOSE 80
ENTRYPOINT ["dotnet", "YourMicroservice.dll"]

Bu Dockerfile, basit bir ASP.NET Core mikro hizmetini konteyner içinde çalıştırmak için gerekli adımları içerir.

2. Kubernetes ile Orkestrasyon

Kubernetes, konteynerlerin yönetimini ve orkestrasyonunu sağlar. Mikro hizmetler, Kubernetes üzerinde kolayca ölçeklenebilir ve yönetilebilir.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-microservice
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-microservice
  template:
    metadata:
      labels:
        app: my-microservice
    spec:
      containers:
      - name: my-microservice
        image: my-microservice-image:latest
        ports:
        - containerPort: 80

Bu Kubernetes YAML dosyası, bir mikro hizmetin üç replika halinde dağıtılmasını tanımlar. Kubernetes, bu replikaların sürekli çalışmasını ve yönetilmesini sağlar.

Performans ve İzleme

Mikro hizmetlerin performansı, düzenli olarak izlenmeli ve optimize edilmelidir. Prometheus ve Grafana gibi araçlar, mikro hizmetlerin performansını izlemek için kullanılabilir.

1. Prometheus ile İzleme

Prometheus, mikro hizmetlerin metriklerini toplar ve bu metrikleri izlemeyi sağlar. ASP.NET Core uygulamaları, Prometheus ile entegre edilebilir.

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddPrometheusCounters();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseHttpMetrics();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
        endpoints.MapMetrics();
    });
}

Bu kod, ASP.NET Core uygulamanızda Prometheus metriklerini toplamayı sağlar.

2. Grafana ile Görselleştirme

Grafana, Prometheus’tan gelen verileri görselleştirir ve anlamlı raporlar oluşturur. Mikro hizmetlerin performansını izlemek için güçlü bir araçtır.

Sonuç

ASP.NET Core ile mikro hizmet mimarisi oluşturmak, büyük ve karmaşık uygulamaların daha yönetilebilir ve esnek hale gelmesini sağlar. Bu makalede, mikro hizmetlerin temel yapı taşlarını ve ASP.NET Core ile nasıl uygulanabileceğini inceledik. Mikro hizmetlerinizi Sanal Sunucular veya Dedicated Sunucular üzerinde barındırarak performansınızı artırabilir ve ölçeklenebilirliğinizi geliştirebilirsiniz.