Microservice Mimarilerde DevOps: Antik Mısır’dan Modern Yazılım Mimarilerine

Umut Akbulut
BilgeAdam Teknoloji
3 min readJun 20, 2024

Piramitlerin İnşası ve DevOps

Antik Mısır’da, piramitlerin inşası büyük bir organizasyon ve koordinasyon gerektiriyordu. İşçiler, mühendisler, taş ustaları ve yöneticiler birlikte çalışarak bu devasa yapıları inşa ediyordu. Herkesin rolü ve sorumluluğu belliydi ve birbirleriyle uyum içinde çalışmaları gerekiyordu. Günümüzde yazılım geliştirme dünyasında da benzer bir koordinasyon ve uyum gereklidir. İşte bu noktada, DevOps ve microservice mimarileri devreye girer.

Microservice DevOps Nedir ve Nasıl Kurgulanmalı?

DevOps, yazılım geliştirme (development) ve BT operasyonlarının (operations) birleşimini ifade eder. DevOps, yazılım geliştirme sürecinin otomasyonunu ve izlenebilirliğini artırarak, daha hızlı ve güvenilir yazılım teslimatı sağlar. Microservice mimarisi ise, büyük ve karmaşık yazılım sistemlerini bağımsız ve küçük bileşenlere bölerek yönetilebilirliği artırır.

DevOps Nasıl Kurgulanmalı?

  1. Sürekli Entegrasyon (CI): Kod değişikliklerinin sürekli olarak entegre edilmesi.
  2. Sürekli Teslimat (CD): Kodun otomatik olarak test edilmesi ve dağıtılması.
  3. Otomasyon: Tüm süreçlerin otomasyon ile yönetilmesi.
  4. İzleme ve Geri Bildirim: Uygulamanın sürekli olarak izlenmesi ve geri bildirim alınması.

Nelere Dikkat Edilmeli?

  1. Kültür: DevOps bir kültürdür ve ekiplerin işbirliği yapmasını gerektirir. Antik Mısır’daki işçilerin piramit inşa ederken birlikte çalışmaları gibi, ekiplerin de uyum içinde çalışması gereklidir.
  2. Araçlar: Doğru araçlar seçilmeli ve etkin bir şekilde kullanılmalıdır.
  3. Otomasyon: Mümkün olan her sürecin otomasyon ile yönetilmesi gereklidir.
  4. Güvenlik: Süreçlerin güvenli olması ve güvenlik açıklarının kapatılması önemlidir.

Hangi Teknolojiler Hangi Amaç İçin Seçilmeli?

1. Jenkins:

  • Amaç: Sürekli entegrasyon ve sürekli teslimat (CI/CD) süreçlerinin otomasyonu.
  • Ne İşe Yarar: Kodun otomatik olarak test edilmesi ve dağıtılması.

2. Kubernetes:

  • Amaç: Konteyner tabanlı uygulamaların yönetimi ve ölçeklendirilmesi.
  • Ne İşe Yarar: Uygulamaların otomatik olarak dağıtılması, ölçeklendirilmesi ve yönetilmesi.

3. Docker:

  • Amaç: Uygulamaların konteynerler içinde çalıştırılması.
  • Ne İşe Yarar: Uygulamaların bağımsız ve taşınabilir hale getirilmesi.

4. Prometheus ve Grafana:

  • Amaç: Uygulamaların izlenmesi ve izleme verilerinin görselleştirilmesi.
  • Ne İşe Yarar: Uygulamaların performansını ve sağlığını izlemek ve analiz etmek.

Hangi Design Patternler Uygulanmalı?

1. Continuous Integration/Continuous Deployment (CI/CD) Pattern:

  • Kodun sürekli entegrasyonu ve dağıtımını sağlar.

2. Infrastructure as Code (IaC) Pattern:

  • Altyapının kod olarak yönetilmesini sağlar.

3. Immutable Infrastructure Pattern:

  • Altyapı bileşenlerinin değiştirilemez şekilde yönetilmesini sağlar.

Neleri Gözden Kaçırmamak Gerekiyor?

  1. Otomasyon: Tüm süreçlerin otomasyon ile yönetildiğinden emin olun.
  2. İzleme: Uygulamaların sürekli olarak izlendiğinden ve performans sorunlarının erken tespit edildiğinden emin olun.
  3. Güvenlik: Güvenlik açıklarının kapatıldığından ve süreçlerin güvenli olduğundan emin olun.

Microservice Mimari için Bazı Örnekler

  1. Jenkins Pipeline ile CI/CD:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
stage('Deploy') {
steps {
sh 'kubectl apply -f deployment.yaml'
}
}
}
}
  • Build Stage: Kodun derlenmesini sağlar.
  • Test Stage: Otomatik testlerin çalıştırılmasını sağlar.
  • Deploy Stage: Uygulamanın Kubernetes clusterına dağıtılmasını sağlar.

2. Kubernetes Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service
spec:
replicas: 3
selector:
matchLabels:
app: user-service
template:
metadata:
labels:
app: user-service
spec:
containers:
- name: user-service
image: user-service:latest
ports:
- containerPort: 8080
  • replicas: Uygulamanın kaç kopyasının çalıştırılacağını belirtir.
  • selector: Hangi etiketlerin bu dağıtımı seçtiğini belirtir.
  • template: Uygulamanın çalıştırılacağı pod’un yapılandırmasını belirtir.

3. Dockerfile:

FROM openjdk:11
COPY target/myapp.jar myapp.jar
ENTRYPOINT ["java", "-jar", "myapp.jar"]
  • FROM: Kullanılacak temel görüntüyü belirtir.
  • COPY: Hedef dosyayı konteynere kopyalar.
  • ENTRYPOINT: Konteyner başlatıldığında çalıştırılacak komutu belirtir.

Piramitlerden Modern Mimari Çözümlere

Antik Mısır’da piramitlerin inşasında olduğu gibi, yazılım geliştirme dünyasında da koordinasyon ve uyum gereklidir. DevOps ve microservice mimarisi, bu uyumu ve koordinasyonu sağlayarak, daha hızlı, güvenilir ve ölçeklenebilir yazılım çözümleri sunar. Doğru araçlar ve yaklaşımlarla, yazılım projelerinizi modern ve etkili bir şekilde yönetebilirsiniz.

--

--

Umut Akbulut
BilgeAdam Teknoloji

"Tech leader & Software Architect. Passionate about digital transformation, microservices, and innovation in the finance and tech sectors."