Slide 1

Slide 1 text

.NET Core Mikroservis Uygulamalarında Konfigürasyon Yönetimi

Slide 2

Slide 2 text

ustasoglu /in/selcukusta selcukusta selcukusta.com selcukusta SELÇUK USTA Yazılım Mimarı @ Demirören Medya Bilge Adam, Lynx S.p.A, Hürriyet, KoçSistem

Slide 3

Slide 3 text

Ajanda ▪ Mikroservis mimarilerde "cross-cutting concerns" ▪ Concern#1 – Merkezi Konfigürasyon Yönetimi ▪ Spring Boot ▪ Hashicorp Vault ▪ Steeltoe Client Library ▪ Demo

Slide 4

Slide 4 text

If you can’t build a monolith, what makes you think microservices are the answer? Simon Brown

Slide 5

Slide 5 text

Cross-cutting Concerns 1.

Slide 6

Slide 6 text

Ortak iş kurguları, mikro uygulamaların akışından ayrıca planlanmalıdır. Service Discovery Logging State Management

Slide 7

Slide 7 text

public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() .ConfigureLogging(logging => { logging.ClearProviders(); logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace); }) .UseNLog() .Build();

Slide 8

Slide 8 text

public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddDistributedMemoryCache(); services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(10); options.Cookie.HttpOnly = true; }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseSession(); } }

Slide 9

Slide 9 text

{ "Services": { "ProductService": "http://192.168.1.101" } } public void ConfigureServices(IServiceCollection services) { var productServiceUrl = Configuration["Services:ProductService"]; } appsettings.json Startup.cs

Slide 10

Slide 10 text

2. Concern#1 Merkezi Konfigürasyon Yönetimi

Slide 11

Slide 11 text

Problem Uygulama, herhangi bir modifikasyon ya da tekrar derleme gerektirmeden; ortam bağımlılığına göre konfigürasyon okuyabiliyor mu?

Slide 12

Slide 12 text

{ "ShowPromotedProducts" : true } public void ConfigureServices(IServiceCollection services) { var showPromotedProducts = Configuration.GetValue("ShowPromotedProducts"); } appsettings.Development.json Startup.cs

Slide 13

Slide 13 text

GO Micro JAVA Spring Boot .NET ASP.NET Boilerplate Çözüm Her servis oluşturmada aynı implementasyonları tekrar tekrar yapmak yerine, servis şablonları oluşturmak/kullanmak

Slide 14

Slide 14 text

3. Spring Boot

Slide 15

Slide 15 text

Java, Kotlin ya da Groovy dilleriyle; Spring altyapısı ile güçlendirilmiş ve minimum geliştirme eforuyla production ortamına hazır servis ve uygulama şablonları oluşturulmasını sağlayan kütüphanedir. Bazı örnekler; - spring-boot-sample-data- elasticsearch - spring-boot-sample-data-ldap - spring-boot-sample-data- mongodb - spring-boot-sample-tomcat-ssl - spring-boot-sample-web-jsp - spring-boot-sample-websocket- tomcat

Slide 16

Slide 16 text

start.spring.io

Slide 17

Slide 17 text

4. Hashicorp Vault

Slide 18

Slide 18 text

Vault, Hashicorp tarafından geliştirilen; şifre, token, sertifika, API anahtarı gibi gizli bilgileri ya da uygulamalara özel konfigürasyon tanımlarını üzerinde saklayan ve RESTful servisi yardımıyla dışarıya servis eden bir uygulamadır. Bazı özellikleri; - Key rolling özelliği ile, tanımın tutulduğu anahtarın versiyonlanması ve T anında ilgili versiyona geri dönülmesi sağlanır. - Audit logları sayesinde, anahtarlar ve değerleri üzerinde yapılan değişiklikler; kullanıcı bazlı olarak kayıt altında tutulur. - Policy’ler ile, saklanan değerler üzerinde yapılacak operasyonlar sınırlandırılabilir.

Slide 19

Slide 19 text

public static IVaultClient GetVaultClient(string token, string vaultUri) { IAuthMethodInfo authMethod = new TokenAuthMethodInfo(token); var vaultClientSettings = new VaultClientSettings(vaultUri, authMethod); IVaultClient vaultClient = new VaultSharp.VaultClient(vaultClientSettings); return vaultClient; } Create Vault client public static async Task WriteSecretAsync(IVaultClient client, string path, IDictionary data) => await client.V1.Secrets.KeyValue.V2.WriteSecretAsync(path, data); Write secret public static async Task> ReadSecretAsync(IVaultClient client, string path) => await client.V1.Secrets.KeyValue.V2.ReadSecretAsync(path); Read secret

Slide 20

Slide 20 text

5. steeltoe.io

Slide 21

Slide 21 text

Steeltoe, Pivotal tarafından geliştirilen; .NET tabanlı cloud-native mikroservis uygulamaları geliştirilmesine yardımcı fonksiyonaliteleri sağlayan, .NET Foundation çatısı altındaki kütüphanedir. Sağladığı bazı servisler; - Netflix Eureka tabanlı Service Discovery modülü, - Spring Cloud Config Server tabanlı Config Server modülü, - Netflix Hystrix tabanlı Circuit Breaker modülü - Pivotal Cloud Foundry (PCF) ürünü üzerinde tanımlı servis ve uygulamaların entegrasyonunda kullanılan Service Connectors modülü

Slide 22

Slide 22 text

3 adımda Steeltoe kullanımı Nuget paket(ler)inin eklenmesi Konfigürasyo n tanımları Middleware implementasy onu

Slide 23

Slide 23 text

6. Demo

Slide 24

Slide 24 text

Config Server Vault Git .NET Core Mikroservis Uygulamaları