Microservice Veritabanlarında Nasıl Data Tutulmalı? (Eventual Consistency)

Microservice en güzel özelliklerinden biri, birbirinden bağımsız servislerin birbirlerini etkilemeden çalışmasıdır. Bir servis durduğunda her bir service kendi süreçlerine devam etmelidir. Çünkü veritabanına kadar bütün bileşenlerinin diğer servislerle bağlantısı API istekleri haricinde yoktur.

Konuyu daha iyi anlamak için e-ticaret siteleri üzerinden örneklendirmek istiyorum.

E-ticaret sitelerinde servislerimizi ayırırken ürün, sepet, üyelik, sipariş vb. şeklinde ayırabiliriz.

Bir müşteri, ürünü sepete attığında sepet öğelerini tutan veritabanında öğenin ID değerini mi yoksa, ürün tablosundaki bir kaç ilgili alanı mı tutması gerekiyor?

Bu soruyu cevaplamak için, microservice mimari metodolojisini düşünürsek, bir servis dursa dahi diğer servisler çalışabilmesi gerekiyor.

Sepet servisi eğer sadece ürün ID’sini tutsaydı, sepetteki ürünleri çekmek istediğimizde ürün adı ve fiyatını almak için ürün servisinden bilgi talep edecekti. Bu iki servisin birbirine bağımlılığını arttırmaktadır. Yani sepet servisi, ürüm servisi olmadan çalışamayacaktır. Bu istemediğimiz bir durumdur.

Eğer ki sepet servisindeki veritabanında ürün adı ve fiyatını tutarsak, sepet servisine bir istek geldiğinde tek başına görevini yerine getirecektir.

Peki ürünün fiyatı değişirse, sepet servisindeki ürünün fiyatı nasıl değişecek? Bu distributed transaction ile ilgili bir konudur. Bununla ilgili makale hazırlayacağım 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.