Engineering31 Ağu 2026
Bakiyeniz saklanmaz. Türetilir.

Veritabanımızda bakiyenizi tutan bir sütun yoktur.
Bu, saklanan bir bakiye ile işlem geçmişinin birbirini tutmadığını görene kadar tuhaf bir tercih gibi gelir. Tutmadıklarında hangisinin doğru olduğunu söyleyemezsiniz. Yeterli zaman ve yeterli eşzamanlı yazma verildiğinde ise her zaman tutmazlar.
Bu yüzden Zenboox çift girişli bir defter tutar ve bakiye, bu defter üzerinde bir sorgudur: hesabınızdaki hareketlerin toplamı.
TEK KURAL
Her kaydın en az iki hareketi vardır ve toplam borç, toplam alacağa eşit olmak zorundadır. Eşit değillerse kayıt hiç yazılmaz. Geriye yarım bir hareket bırakmaktansa işlemin tamamı başarısız olur. Sıfır tutarlı kayıtlar da reddedilir.
Bu, muhasebe estetiği değildir. Dengesi bozuk bir defterde “para nereye gitti” sorusunun cevabı yoktur ve dengesizlik ne kadar eskiyse, ona yol açan kaydı bulmak o kadar zordur.
Bakiyeler türetildiği için yön önemlidir. Bakiyeniz platformun bir yükümlülüğüdür: hesabınıza alacak yazmak, size olan borcumuzu artırır. Hazine rezervi ise bir varlıktır. Her hesabın normal tarafı tek bir yerde tanımlanır; çünkü kodun iki parçası bu konuda anlaşmazlığa düştüğü anda, ekranda negatif bir bakiye belirir.
ÇİFT GİRİŞİN YAKALAMADIĞI
Bunun gibi yazılarda genelde atlanan kısım şu.
Diyelim ki aynı hesap için iki çekim talebi tam olarak aynı anda geldi ve hesapta yalnızca birine yetecek kadar var. İkisi de bakiyeyi okur, ikisi de yeterli görür ve ikisi de dengeli bir kayıt yazar. Tutarlılık denetimi yeşil kalır, çünkü defterde tutarsız hiçbir şey yoktur: her kayıt kusursuzca dengelidir.
Bozulan şey başka bir kuraldır: bir kullanıcı sahip olmadığı parayı çekemez. Çift girişin bu konuda söyleyecek bir şeyi yoktur.
Çözüm defterde değil, yalıtım seviyesindedir. Çekimlerin para yolu serileştirilebilir bir işlem içinde koşar ve bakiye o işlemin içinde okunur. İki yarı da gereklidir. Bakiyeyi işlemin dışında okursanız o satırlar hiçbir zaman işlemin görüş alanına girmez, dolayısıyla serileştirilebilir seviye bile çakışmayı saptayamaz. Daha zayıf bir seviyede koşarsanız iki işlem birbirinin borcunu henüz göremez, çünkü hareketler eklemeyle yazılır ve kilitlenecek ortak bir satır yoktur; böylece ikisi de denetimden geçer.
Bunu biliyoruz, çünkü buna dair ilk testimiz beş para etmiyordu. Test HTTP ucundan geçiyordu; orada önce tek kullanımlık kod tüketiliyor ve bu da iki talebi fiilen sıraya diziyordu. Test, yarışı değil kod kapısını ölçüyordu: bakiye denetimini silmek testi düşürmüyordu. Bu yüzden para yolu, gerçekten iki eşzamanlı çağrı yapılabilen kendi modülüne taşındı ve koruma artık doğrudan test ediliyor.
Hiç kırmaya çalışmadığınız bir garanti, garanti değildir. Yorum satırıdır.