# Saga Deseni

Adres: https://softwaredictionary.org/tr/terimler/saga-pattern
Kategori: Yazılım Mimarisi
Son güncelleme: 2026-09-30
İngilizcesi: Saga Pattern
Okunuşu: saga petırn

Kısaca: Saga deseni, birkaç servise yayılan bir işlemi yerel adımlar dizisi olarak çalıştırır ve bir adım başarısız olursa tamamlananları telafi eylemleriyle geri alır.

## Saga deseni nedir?

Bir mikroservis sisteminde her servisin genellikle kendi veritabanı vardır; bu yüzden sipariş vermek gibi tek bir iş eylemi birkaç servisteki veriyi güncellemeyi gerektirebilir. Normal bir veritabanı işlemi (transaction) hepsini kapsayamaz ve iki aşamalı commit (two-phase commit) gibi dağıtık kilitleme protokolleri ölçekte yavaş ve kırılgandır. Saga deseni, eylemi her servis için bir tane olmak üzere, her biri kendi başına commit edilen bir yerel işlemler dizisine bölerek bunu çözer.

Her adım başarılı olursa saga tamamlanır. Bir adım başarısız olursa saga, halihazırda biten adımlar için, etkilerini geri almak üzere, ayrılmış stoku serbest bırakmak ya da ödemeyi iade etmek gibi telafi edici işlemleri (compensating transactions) ters sırayla çalıştırır. Bir saga iki şekilde koordine edilebilir: orkestrasyonda merkezi bir orkestratör her servise sıradaki adımı söyler; koreografide ise her servis diğerlerinden gelen olayları dinler ve merkezi bir denetleyici olmadan tepki verir. Mesajlar birden fazla kez iletilebileceği için her adım ve telafi idempotent olmalıdır.

Klasik benzetme bir seyahat rezervasyonudur. Önce uçak, sonra otel, sonra kiralık araba ayırtırsınız; araba bulunmazsa tüm seyahat hiç olmamış gibi davranmak yerine oteli ve uçağı iptal edersiniz. Sagalar sipariş işlemede, ödemelerde, seyahat ve bilet rezervasyonunda ve servis sınırlarını aşan her iş akışında kullanılır; fikir, uzun ömürlü işlemler üzerine 1987 tarihli bir veritabanı makalesine dayanır.

Saga çoğunlukla bir ACID işlemiyle karıştırılır ama daha zayıf garantiler sunar. İzolasyon yoktur: diğer istekler, ödenmiş ama henüz onaylanmamış bir sipariş gibi ara durumları görebilir; bu yüzden sistem anında değil, nihai olarak tutarlıdır. Telafi de gerçek bir geri alma (rollback) değildir; yeni bir iş eylemidir ve gönderilmiş bir e-posta ya da çekilmiş bir kart yalnızca düzeltilebilir, silinemez.

## Önemli noktalar

- Saga, servisler arası bir işlemi bağımsız commit edilen yerel adımlara böler.
- Bir adım başarısız olursa telafi edici işlemler önceki adımları ters sırayla geri alır.
- Orkestrasyon merkezi bir koordinatör kullanır; koreografi servisler arasındaki olayları kullanır.
- Sagalar nihai tutarlılık sağlar, ACID işleminin izolasyonunu değil.
- Mesajlar tekrarlanabileceği için adımlar ve telafiler idempotent olmalıdır.

## Örnek: Telafili, orkestre edilen bir saga

```typescript
// Orchestrated saga: run each step, and undo finished steps if one fails
const steps = [
  { run: () => orders.create(order), undo: () => orders.cancel(order.id) },
  { run: () => payments.charge(order), undo: () => payments.refund(order.id) },
  { run: () => stock.reserve(order), undo: () => stock.release(order.id) },
];
async function placeOrder() {
  const done: typeof steps = [];
  try {
    for (const step of steps) { await step.run(); done.push(step); }
  } catch (err) {
    for (const step of done.reverse()) await step.undo(); // compensate in reverse
    throw err;
  }
}
```

## Sık sorulan sorular

**Sagalarda orkestrasyon ile koreografi arasındaki fark nedir?**

Orkestrasyonda merkezi bir orkestratör sıradaki adımın hangisi olacağına karar verir ve her servisi çağırır. Koreografide servisler olayları yayınlar ve dinler, her biri belirli bir olay geldiğinde ne yapacağını bilir; bu, merkezi bir koordinatörü ortadan kaldırır ama genel akışı takip etmeyi zorlaştırır.

**Telafi edici işlem (compensating transaction) nedir?**

Telafi edici işlem, bir ödemeyi iade etmek ya da ayrılmış stoku serbest bırakmak gibi daha önceki bir adımın iş etkisini geri alan eylemdir. Geçmişi silmez; eskisini iptal eden yeni bir değişiklik kaydeder.

**Neden saga yerine iki aşamalı commit kullanılmıyor?**

İki aşamalı commit, hepsi anlaşana kadar katılan her veritabanındaki kaynakları kilitler; bu da erişilebilirliği ve performansı olumsuz etkiler ve birçok modern veritabanı ile mesaj aracısı tarafından zayıf desteklenir. Sagalar uzun kilitlerden, daha zayıf tutarlılık pahasına kaçınır.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
