İçeriğe geç

Çok Bölgeli Kurulum — Bir Bölge Kararınca Banka Çalışmaya Devam Eder mi?

İleri 8 dk Sık karşılaşılır

Önce şunu oku: Replikasyon ve Okuma Replikaları — Yazdım Ama Göremiyorum

30 saniyede özet

Tek bölge kararınca bütün müşteriler bekler. Bekleyen kopya devralır ama gecikmeli kopyada son yazmalar kaybolur. İki bölge de her hesaba yazarsa para iki kez çekilebilir; her hesaba bir ev bölgesi vermek bunu önler.

Bir bankanın tek şubesi var; elektrik kesilince banka kapanıyor. İkinci bir şube açılıyor, ama defteri birkaç dakika geç kopyalıyor. İki şube de aynı hesaptan ödeme yapmaya başlarsa, aynı para iki kez çıkabilir.

  1. Bayt: Bütün sistemimiz İstanbul bölgesinde. Bugün o bölge karardı; kimse havale yapamadı.

  2. Sen: Frankfurt'a bekleyen bir kopya kurduk. Devraldı! Ama son üç havale kayıp.

  3. Bayt: Peki iki bölge de yazı kabul etseydi? Bir müşteri iki telefondan aynı anda çekim yaptı; ikisi de geçti!

  4. Bayt: Her hesabın tek bir ev bölgesi olsun; o hesaba yalnızca orada yazılsın.

Tek sepet, bekleyen kopya

Uygulama tek bir bölgedeyse, o bölge kararınca bütün müşteriler bekler. Hiçbir veri kaybolmayabilir, ama hizmet durur.

aktif-pasifBir bölgenin çalıştığı, diğerinin veriyi kopyalayıp beklediği kurulum. Ana bölge kararınca bekleyen bölge devralır.Sözlükte gör → kurulumda ikinci bir bölge veriyi kopyalayıp bekler. Kopyalama gecikmeliyse, ana bölge karardığında son yazmalar henüz karşı tarafa ulaşmamış olabilir; bu replication lagBir replikanın primary'deki değişiklikleri ne kadar geriden uyguladığı. Bu süre boyunca replikadan yapılan okumalar eski veriyi gösterir.Sözlükte gör → devirde kayıp olarak geri döner.

Kafam karıştı, daha basit anlat

Tek bölge: hepsi durur. Bekleyen kopya: devralır, ama son yazmaları kaybedebilir.

Hızlı kontrolBaşlangıç

Uygulamanın yalnızca bir bölgede çalışmasının riski nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aktif-pasif kurulumda kopyalama gecikmeliyse devirde ne olur?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Her yerden yazmak

İki bölge de her hesaba yazı kabul ediyor. Bir müşterinin iki telefonu aynı anda, biri İstanbul'a biri Frankfurt'a, 1000 TL'lik çekim gönderiyor; hesapta 1000 TL var. Ne olur? Cevabı göster

İkisi de kabul edilir ve 2000 TL çekilir. Her bölge kendi kopyasında 1000 TL görür; öbür bölgedeki çekimi henüz bilmez. Kesinti olmadı, ama aynı para iki kez çıktı.

Her hesabın tek bir ev şubesi olsun.
Adım adım oku
  1. Tek şube: elektrik gitti, banka kapandı.
  2. Geç kopyalayan şube: son kayıtlar eksik.
  3. İki şube aynı hesaptan öderse: iki kez.
  4. Her hesabın tek bir ev şubesi olsun.

aktif-aktifBirden çok bölgenin aynı anda istek ve yazma kabul ettiği kurulum. Aynı kayda iki yerden yazılırsa çakışma olur.Sözlükte gör → kurulumda iki bölge de istek ve yazma kabul eder; bölge kararsa bile kesinti olmaz. Ama aynı kayda iki yerden yazılırsa çakışma çıkar.

Para gibi veriler için güvenli yol, her hesaba bir ev bölgesi vermektir. Hesaba yalnızca orada yazılır; çift çekim tasarım gereği olamaz. Bedeli, kararan bölgenin müşterilerinin o bölge dönene ya da sahiplik devredilene kadar beklemesidir.

Kafam karıştı, daha basit anlat

Her yerden yazmak çakışma getirir. Her hesabın tek bir sahip bölgesi olsun.

Hızlı kontrolOrta

İki bölge de aynı hesaba yazı kabul ediyor. Aynı anda iki çekim gelirse ne olabilir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

'Ev bölgesi' yaklaşımı nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Kendin gör

İstanbul bölgesi karardı

Tohum 520533
İstanbul (A)
✓ çalışıyor
Frankfurt (B)
· yok
Hız
Adım 0

Şu an ne oldu?

Tek bölge (yalnızca İstanbul)

Bir bölge kararınca ne olacağına bakıyoruz.

Görevler0/3

  • Bölge kararınca kimse havale yapamasınaçık

    İpucu

    Tek bölge.

  • Aynı para iki kez çekilsinaçık

    İpucu

    İki bölge de her yazmayı kabul etsin.

  • Ne kayıp ne çift çekim olsun, ve bir kısım müşteri çalışmaya devam etsinaçık

    İpucu

    Ev bölgesi.

Olay günlüğü (0)

Henüz olay yok. Oynat veya adımla.

  1. Varsayılanla oynat. Tek bölge: İstanbul kararınca kimse havale yapamadı.
  2. “Aktif-pasif” seç. Frankfurt devraldı; kopyalanmamış üç havale kayboldu.
  3. “Aktif-aktif” seç. Kesinti yok; ama aynı çekim iki bölgede de kabul edildi.
  4. “Ev bölgesi” seç. Frankfurt hesapları çalıştı, İstanbul hesapları bekledi; hiçbir şey kaybolmadı ya da çakışmadı.
Hızlı kontrolOrta

Ev bölgesi yaklaşımında İstanbul kararırsa İstanbul hesaplarına ne olur?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Çok bölgeli kurulumun maliyeti nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Tuzaklar

Devri hiç denememek. Bekleyen bölgenin gerçekten devralabildiğini bilmenin tek yolu, düzenli olarak devir yapıp ölçmektir.

Kayıpsızlığı bedava sanmak. Devirde hiç yazma kaybolmasın istiyorsan kopyalama senkron olmalı: her yazma iki bölgede de kaydedilmeden onaylanmaz. Bunun bedeli, her yazmanın bölgeler arası gecikme kadar yavaşlamasıdır.

Her veriyi aynı kurala bağlamak. Para için tek sahip gerekir; ama beğeni sayısı gibi birleştirilebilir veriler aktif-aktif yazılabilir. Veriye göre seç.

Kafam karıştı, daha basit anlat

Devri dene, kayıpsızlığın bedelini bil, kuralı veriye göre seç.

Hızlı kontrolİleri

Aktif-pasif kurulumda kayıpsız devir isteniyorsa ne gerekir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.
Derinleş · Mobil bankacılık: her hesabın bir ev bölgesi 3 dosya · ~53 satır · ilk okumada atlayabilirsin
Proje dosyaları

accounts/src/main/java/com/bank/accounts/region/ HomeRegionRouter.java Yönlendirme: istek hesabın ev bölgesine gider; yanlış bölgeye gelen yazma oraya iletilir.

accounts/src/main/java/com/bank/accounts/region/HomeRegionRouter.java
@Component
class HomeRegionRouter {
private final AccountDirectory directory;
private final String localRegion;
HomeRegionRouter(AccountDirectory directory, @Value("${bank.region}") String localRegion) {
this.directory = directory;
this.localRegion = localRegion;
}
/** Where a write for this account must happen. */
String homeOf(UUID accountId) {
return directory.homeRegion(accountId); // e.g. "ist" or "fra"
}
boolean isLocal(UUID accountId) {
return localRegion.equals(homeOf(accountId));
}
}

accounts/src/main/java/com/bank/accounts/ WithdrawalService.java Yazma kontrolü: bölge, ev bölgesi olmadığı bir hesaba yazmayı reddeder.

accounts/src/main/java/com/bank/accounts/WithdrawalService.java
@Service
class WithdrawalService {
private final HomeRegionRouter router;
private final AccountRepository accounts;
private final RemoteRegionClient remote;
WithdrawalService(HomeRegionRouter router, AccountRepository accounts, RemoteRegionClient remote) {
this.router = router;
this.accounts = accounts;
this.remote = remote;
}
@Transactional
Receipt withdraw(UUID accountId, Money amount, String idempotencyKey) {
if (!router.isLocal(accountId)) {
// Only the home region may write; forward instead of writing here.
return remote.withdraw(router.homeOf(accountId), accountId, amount, idempotencyKey);
}
Account account = accounts.lockById(accountId);
account.withdraw(amount);
return Receipt.of(account, amount, idempotencyKey);
}
}

accounts/src/main/resources/sql/ move-home-region.sql Devir: bir bölge uzun süre karanlıksa sahiplik elle ve kayıtlı bir işlemle devredilir.

accounts/src/main/resources/sql/move-home-region.sql
-- Region failover for accounts, done deliberately and recorded.
-- Only after the old home region is confirmed down and its last writes are known.
BEGIN;
UPDATE account_directory
SET home_region = 'fra', moved_at = now(), moved_by = :operator
WHERE home_region = 'ist';
INSERT INTO region_moves (from_region, to_region, operator, reason)
VALUES ('ist', 'fra', :operator, :reason);
COMMIT;

Kendini sına

Şimşek turu1/4

Tek bölgeli bir uygulama, bölge kararınca çalışmaya devam eder.

Soru 1/3Başlangıç

Aktif-pasif kurulum nedir?

Cevabı biliyor musun?Önce birini seç. Tekrar zamanlaması buna göre ayarlanıyor.

Aklında kalacak üç şey

  1. 1 Tek bölge basittir; o bölge kararınca bütün hizmet durur.
  2. 2 Aktif-pasif kurulumda gecikmeli kopya, devirde ana bölgenin son yazmalarını kaybettirebilir.
  3. 3 İki bölge aynı hesaba yazarsa çakışma olur. Her hesabın tek bir ev bölgesi olması, çift çekimi tasarımla önler; bedeli kısmi kesintidir.
0/4 kart bu dersten toplandı