Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Distributed Transaction ve Two-Phase Commit: Neden Microservice'lerde Kullanılmaz?
Two-phase commit (2PC), birden fazla participant'ın bir transaction'ı birlikte commit ya da abort etmesini sağlar, ama coordinator karar vermeden çökerse YES oyu veren participant'lar kilitleri tutarak bekler. System.Transactions'ın 2PC'si volatile participant'larla çalışıyor; ikinci durable participant ise macOS ve Linux'ta PlatformNotSupportedException veriyor. Microservice'lerde availability, coupling ve broker desteği yüzünden yerine saga ve outbox kullanılır.
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.