Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
11 yazı bulundu
Microservices Nedir, Ne Değildir? Independent Deployability ve Information Hiding
Yazılım Mimarisi SERİ 01

Microservices Nedir, Ne Değildir? Independent Deployability ve Information Hiding

Microservice, bir business domain etrafında modellenmiş ve diğerlerine dokunmadan deploy edilebilen service'tir; ölçüt boyut değil, independent deployability ve information hiding'dir. Lewis ve Fowler'ın dokuz özelliği, Newman'ın tanımı, contract ile iç modeli ayırmanın C#'taki karşılığı, SOA farkı ve Bookstore'un service adayları.

8 Kas 2026 11 dk 3
Microservice'lerin Bedeli: Ne Zaman Gereksiz, Ne Zaman Kaçınılmaz?
Yazılım Mimarisi SERİ 02

Microservice'lerin Bedeli: Ne Zaman Gereksiz, Ne Zaman Kaçınılmaz?

Microservices tek ekipli, ön koşulları (otomatik provisioning, monitoring, hızlı deploy) olmayan bir sistem için gereksizdir; birbirini bekleyen ekipler ve farklı ölçeklenen parçalar ölçülebilir hâle geldiğinde kaçınılmaz olur. Network çağrısının gerçek maliyeti ölçülerek, fallacies of distributed computing, Fowler'ın prerequisite'leri, Prime Video vakasının doğru okunuşu ve Bookstore için bir karar checklist'i.

8 Kas 2026 12 dk 4
Service Boundary'lerini Çizmek: Business Capability, Bounded Context ve Coupling Türleri
Yazılım Mimarisi SERİ 03

Service Boundary'lerini Çizmek: Business Capability, Bounded Context ve Coupling Türleri

Service sınırı tablolara ya da entity'lere göre değil, birlikte değişen iş kurallarına göre çizilir: bir service en fazla bir bounded context içerir ve tek bir ekibin sahipliğindedir. Business capability ile subdomain yaklaşımı, Microsoft'un sınır rehberi, Newman'ın domain, pass-through, common ve content coupling türleri, entity service anti-pattern'i ve Customer'ın üç context'teki üç ayrı modeli.

8 Kas 2026 12 dk 4
Data Ownership ve Database per Service: Shared Database'den Neden Kaçınılır?
Yazılım Mimarisi SERİ 04

Data Ownership ve Database per Service: Shared Database'den Neden Kaçınılır?

Shared database, hiçbir contract'ta görünmeyen bir coupling yaratır; her service'in verisi ona private olmalı ve başkaları bu veriye API composition, event'le replike edilen local kopya ya da CQRS read model ile ulaşmalı. SQL Server'da schema seviyesinde yetkiyle sınırı zorlamak, BookRenamed ile version kontrollü kopya, snapshot farkı, reference data ve raporlama için CDC.

8 Kas 2026 11 dk 2
Microservice'lerde Transaction Yok: Eventual Consistency'yi Tasarımla Kabullenmek
Yazılım Mimarisi SERİ 05

Microservice'lerde Transaction Yok: Eventual Consistency'yi Tasarımla Kabullenmek

Service'ler arasında distributed transaction (2PC) kullanılmaz; anında tutarlılık gereken kural tek service'te tutulur, birden fazla service'e yayılan akış saga ve compensating action'larla, event'ler outbox ile kurulur. TransactionScope'un Linux ve macOS'ta verdiği gerçek hata, choreography ile çalışan bir checkout saga'sı, domain'deki ara durumlar ve 202 Accepted ile kullanıcıya gösterilen eventual consistency.

8 Kas 2026 13 dk 3
Microservice İletişim Stilleri: Sync Request/Response, Async Event ve Temporal Coupling
Yazılım Mimarisi SERİ 06

Microservice İletişim Stilleri: Sync Request/Response, Async Event ve Temporal Coupling

Çağıran cevabı beklemek zorundaysa iletişim, kod ne kadar await'li olursa olsun senkrondur ve iki service'i temporal coupling ile birbirine bağlar; cevap şimdi gerekmiyorsa event ya da local kopya tercih edilir. REST, gRPC (deadline'ın server'a taşınması dahil) ve message karşılaştırması, Inventory deploy edilirken checkout simülasyonu, command ile event farkı ve bir karar tablosu.

8 Kas 2026 12 dk 3
Service Contract'ları ve Versioning: Expand-Contract, Tolerant Reader ve Consumer-Driven Contract Test
Yazılım Mimarisi SERİ 07

Service Contract'ları ve Versioning: Expand-Contract, Tolerant Reader ve Consumer-Driven Contract Test

Bir değişikliğin breaking olup olmadığı yalnız provider'ın koduna bakarak anlaşılmaz; consumer'ların ne okuduğunu bilmek gerekir, bu yüzden consumer tolerant reader olur, provider kırıcı değişikliği expand-contract ile adımlara böler ve consumer-driven contract test'le deploy'dan önce kimi kıracağını görür. TypeScript consumer ve .NET provider arasında Pact ile gerçek doğrulama çıktıları, Deprecation/Sunset header'ları ve versioning'in service seviyesindeki bedeli.

8 Kas 2026 13 dk 3
API Gateway ve Backend for Frontend: Edge'de Ne Olur, Ne Olmamalı?
Yazılım Mimarisi SERİ 08

API Gateway ve Backend for Frontend: Edge'de Ne Olur, Ne Olmamalı?

API Gateway her client için aynı olan edge işlerini (routing, TLS termination, token doğrulama, rate limiting) yapar; bir kullanıcı deneyimine özgü aggregation, response şekillendirme ve token handling ise o deneyimin ekibine ait Backend for Frontend'e aittir, iş kuralı ikisine de girmez. Kitap detay sayfası için üç service'i paralel çağıran ve Inventory çöktüğünde sayfayı düşürmeyen gerçek bir BFF endpoint'i, RFC 10017'nin BFF önerisi ve god gateway tuzağı.

8 Kas 2026 11 dk 5
Service Discovery: Client-Side, Server-Side, Kubernetes DNS ve .NET Service Discovery
Yazılım Mimarisi SERİ 09

Service Discovery: Client-Side, Server-Side, Kubernetes DNS ve .NET Service Discovery

Service discovery, client'ın "Inventory" gibi mantıksal bir adı o an sağlıklı çalışan instance adreslerine çevirmesidir; Kubernetes bunu Service ve DNS ile server-side yapar, .NET'te Microsoft.Extensions.ServiceDiscovery aynı kodla geliştirme ortamında configuration'dan, cluster'da platformun DNS'inden adres bulur. Round robin'in gerçek çıktısı, listede kalan ölü bir instance'ın isteklerin üçte birini düşürmesi ve service mesh'in ne zaman gerekmediği.

8 Kas 2026 10 dk 2
Production'da Microservice: Distributed Tracing, Resilience ve Independent Deployment
Yazılım Mimarisi SERİ 11

Production'da Microservice: Distributed Tracing, Resilience ve Independent Deployment

Production'da microservice işletmek üç şey ister: bir isteği service'ler boyunca izleyen distributed tracing (W3C traceparent ile), service seviyesinde düşünülmüş timeout, retry ve circuit breaker, ve her service'in kendi pipeline'ıyla, backward compatibility ve contract test'lerle bağımsız deploy edilmesi. .NET'in Activity'siyle gerçek bir trace çıktısı, katman başına retry'ın 64 isteğe dönüşmesi, readiness'ı downstream'e bağlama tuzağı ve can-i-deploy'un CI'daki yeri.

8 Kas 2026 10 dk 3
Monolith'ten Microservice'e: Strangler Fig, Branch by Abstraction ve Distributed Monolith Tuzağı
Yazılım Mimarisi SERİ 12

Monolith'ten Microservice'e: Strangler Fig, Branch by Abstraction ve Distributed Monolith Tuzağı

Monolith'ten microservice'e sıfırdan yeniden yazarak değil, monolith'in önüne bir proxy koyup yetenekleri tek tek dışarı alarak (strangler fig) geçilir; proxy'den geçmeyen iç çağrılar branch by abstraction ile ayrılır, yeni yol parallel run'da gölgede doğrulanır ve hedef bağımsız deploy edilebilen service'ler olur, distributed monolith değil. YARP ile gerçek route çıktısı, dry run'lı parallel run'ın yakaladığı bir fark, önce veri mi önce kod mu kararı ve service konsolidasyonu.

8 Kas 2026 11 dk 2
Blog Haritası