Mikroservis Dönüşüm Yolculuğu — E02: Geliştirme Başlıyor

Ozgur Sari
Intertech
Published in
2 min readApr 26, 2023

İlk yazıda belirttiğim Mikroservis Tasarım Komitesi tamamlandıktan sonra, komitede kararlaştırılan mikroservisler için Repo oluşturma adımına geçiyoruz.

Jenkins Pipeline ile yönetilen bir boiler plate yapımız bulunuyor, proje ekibi bu pipeline’ı tetiklediğinde api, gw, ui, nuget vb projeleri için Git Repoları daha önce tanımladığımız şablonlar ile üretilirken, Sonar jobları, Jenkins Pipeline, Deployment tanımları, Kubernetes objeleri, varsa yeni veritabanı ve DB bağlantıları, Jaeger — Dynatrace vb izleme tanımları otomatik olarak oluşuyor.

Git repoları için her mikroservis türüne özel şablonlarımız bulunuyor, örneğin API oluşturulurken güncel .net7 framework içeren, DB, RabbitMQ, ELK ve bir sonraki yazının konusu olacak ORION bağlantıları startup’ta tanımlanmış ve Unit Test için klasör yapısı oluşturulmuş şekilde repolar oluşturuluyor. Geliştirme yapacak arkadaşımız ihtiyaç duyduğu altyapı nuget paketlerini ekledikten sonra geliştirmelerini Feature Branch’inde tamamlayıp PR oluşturuyor.

Her PR henüz feature branch’teyken bir Sonar kontrolünden geçiyor ve yeni mikroservisler için 0 bulgu ve %65 Unit Test eşik değerleri ile Quality Gate kontrolleri yapılıyor. Sonar’da çıkan bulguları SonarLint extension ile Visual Studio üzerinde görebiliyor ve commit öncesi düzenleyebiliyoruz.

PR Sonar analizinden geçtikten sonra GCP’de çalışan DEV ortamına deploy oluyor.

Yaml dosyalarımızda ortamlara göre pod sayıları ve memory/cpu request’leri uygulama boyutuna göre tanımlanıyor ve cpu request’in %80 yüküne göre otomatik scale oluyor.

replicas: $Global_Small_Pod_Count
containers:
- resources:
requests:
cpu: $Global_Cpu_Request_1x
memory: $Global_Memory_Request_1x

Oluşturduğumuz mikroservisler bir bankanın farklı ortamlarında çalıştığı gibi farklı bankaların on-prem cloud ortamlarına da deploy oluyor, bu nedenle tüm konfigürasyon değerleri DSC (Desired State Configuration) ile yönetiliyor, deploy sırasında ilgili ortama göre atanıyor.

- name: Orion__RabbitMq__HostName
value: $Global_Microservice_RabbitMQ_DNS
- name: Orion__RabbitMq__Port
value: "$Global_RabbitMQ_TlsPort"

Geliştirdiğimiz mikroservisler kurumların ihtiyaçlarına göre farklı cloud platformlarında çalışabiliyor, Cloud Agnostic ürün geliştirmek bizim için önemli, çünkü Intertech Development ortamı GCP’de çalışırken, bankalarımız Google Anthos, Openshift gibi farklı on-prem cloud çözümleri kullanıyor. Bu bilinçle bir sonraki yazının konusu olacak Orion vb altyapı kütüphanelerini ürün ekiplermize sunuyoruz.

Okuduğunuz için teşekkür ederim, bir sonraki yazıda görüşmek üzere…

--

--

Ozgur Sari
Intertech

DevStudio & Enterprise Architect @IntertechIT