ASP.NET Core ile Mikroservis Mimarisi Uygulama Rehberi
Mikroservis mimarisi, günümüz yazılım geliştirme dünyasında esneklik ve ölçeklenebilirlik sağlamak için tercih edilen bir yöntemdir. ASP.NET Core, mikroservis tabanlı uygulamaların geliştirilmesi için güçlü bir çerçeve sunar. Bu makalede, ASP.NET Core kullanarak mikroservis mimarisini nasıl uygulayabileceğinizi, teknik detaylar ve örneklerle inceleyeceğiz.
Mikroservis Mimarisi Nedir?
Mikroservis mimarisi, bir uygulamanın küçük, bağımsız çalışan servisler halinde geliştirilmesini ve dağıtılmasını öngören bir yaklaşımdır. Her bir servis, belirli bir işlevi yerine getirir ve diğer servislerle API’ler aracılığıyla iletişim kurar. Bu yapı, uygulamanın ölçeklenebilirliğini artırır ve bakımını kolaylaştırır.
Mikroservislerin Avantajları
1. Ölçeklenebilirlik: Her bir servis bağımsız olarak ölçeklenebilir, bu da kaynakların verimli kullanılmasını sağlar.
- Esneklik: Servisler bağımsız olduğu için farklı teknolojilerle geliştirilebilir ve güncellenebilir.
ASP.NET Core ile Mikroservis Geliştirme
ASP.NET Core, mikroservis geliştirme için hafif, modüler ve yüksek performanslı bir platform sunar. .NET Core’un çapraz platform desteği, mikroservislerin farklı işletim sistemlerinde çalışmasını kolaylaştırır.
Proje Yapısı
Mikroservis tabanlı bir uygulama geliştirirken, her bir mikroservis için ayrı bir ASP.NET Core projesi oluşturmanız önerilir. Bu yapı, servislerin bağımsız olarak geliştirilmesine ve dağıtılmasına olanak tanır.
Örnek Proje Yapısı
– ProductService
– Controllers
– Models
– Services
– OrderService
– Controllers
– Models
– Services
Her bir servis, kendi bağımsız proje dosyalarına ve bağımlılıklarına sahip olmalıdır.
API Gateway Kullanımı
API Gateway, mikroservis mimarisinde önemli bir rol oynar. Tüm istemci istekleri, API Gateway üzerinden yönlendirilir ve ilgili mikroservise iletilir. Bu yapı, istemci ile mikroservisler arasındaki iletişimi basitleştirir ve merkezi bir güvenlik katmanı sağlar.
Ocelot ile API Gateway
Ocelot, ASP.NET Core tabanlı bir API Gateway kütüphanesidir. Mikroservis mimarinizde Ocelot kullanarak API Gateway oluşturabilirsiniz.
{ "Routes": [ { "DownstreamPathTemplate": "/api/products", "DownstreamScheme": "http", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 5001 } ], "UpstreamPathTemplate": "/products", "UpstreamHttpMethod": [ "Get" ] } ] }
Bu konfigürasyon, /products
isteğini localhost:5001/api/products
adresine yönlendirir.
Servis Keşfi ve Yük Dengeleme
Mikroservislerin dinamik olarak keşfedilmesi ve yük dengelenmesi, uygulamanın ölçeklenebilirliğini artırır. Consul veya Eureka gibi araçlar, servis keşfi ve yük dengeleme için kullanılabilir.
Consul ile Servis Keşfi
Consul, servis keşfi ve yapılandırma yönetimi için popüler bir araçtır. ASP.NET Core uygulamalarında Consul kullanarak mikroservislerinizi dinamik olarak keşfedebilirsiniz.
public void ConfigureServices(IServiceCollection services) { services.AddConsulConfig(Configuration); }
Bu kod, ASP.NET Core uygulamanıza Consul yapılandırmasını ekler.
Veritabanı ve Veri Yönetimi
Her mikroservis, kendi veritabanına sahip olmalıdır. Bu yapı, servislerin bağımsızlığını artırır ve veri tutarlılığını sağlar. Veritabanı seçiminde, servislerin ihtiyaçlarına göre SQL veya NoSQL çözümleri tercih edilebilir.
Örnek Veri Yönetimi
public class ProductContext : DbContext { public ProductContext(DbContextOptionsoptions) : base(options) { } public DbSet Products { get; set; } }
Bu kod, bir mikroservis için Entity Framework Core kullanarak veritabanı yönetimini sağlar.
Güvenlik
Mikroservis mimarisinde güvenlik, her bir servis için ayrı ayrı ele alınmalıdır. OAuth 2.0 ve OpenID Connect gibi protokoller, güvenli kimlik doğrulama ve yetkilendirme sağlar.
JWT ile Kimlik Doğrulama
JSON Web Token (JWT), mikroservisler arasında güvenli iletişim için yaygın olarak kullanılır.
services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = Configuration["Jwt:Issuer"], ValidAudience = Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"])) }; });
Bu kod, ASP.NET Core uygulamanızda JWT kimlik doğrulamasını yapılandırır.
Dağıtım ve Ölçekleme
Mikroservislerinizi dağıtırken, konteyner tabanlı çözümler kullanmak ölçeklenebilirlik ve yönetilebilirlik açısından avantaj sağlar. Docker ve Kubernetes, mikroservislerin konteynerize edilmesi ve yönetilmesi için popüler araçlardır.
Docker ile Mikroservis Dağıtımı
Docker, uygulamalarınızı konteynerler içinde paketleyerek, bağımlılıklarıyla birlikte taşınabilir hale getirir.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 COPY ./bin/Release/net5.0/publish/ App/ WORKDIR /App ENTRYPOINT ["dotnet", "ProductService.dll"]
Bu Dockerfile, bir ASP.NET Core mikroservisini konteyner içinde çalıştırmak için gerekli yapılandırmayı sağlar.
Performans ve İzleme
Mikroservislerin performansını izlemek ve optimize etmek, uygulamanızın sağlıklı çalışması için kritik öneme sahiptir. Prometheus ve Grafana gibi araçlar, izleme ve analiz için kullanılabilir.
Prometheus ile İzleme
Prometheus, mikroservislerinizin performansını izlemek için güçlü bir araçtır. ASP.NET Core uygulamalarınızda Prometheus kullanarak metrikleri toplayabilirsiniz.
services.AddPrometheusMetrics();
Bu kod, ASP.NET Core uygulamanıza Prometheus metriklerini ekler.
Sonuç
ASP.NET Core ile mikroservis mimarisi uygulamak, esnek ve ölçeklenebilir yazılım çözümleri geliştirmenizi sağlar. Bu makalede ele alınan teknik detaylar ve örnekler, mikroservis tabanlı bir uygulama geliştirirken karşılaşabileceğiniz zorlukları aşmanıza yardımcı olacaktır. Mikroservislerinizi barındırmak için Cloud Sunucular veya VDS Sunucular gibi çözümleri değerlendirerek, altyapınızı güçlendirebilirsiniz.