Teknoloji

Çok Bölgeli Mimariler Nasıl Kurulur? DNS Geo‑Routing ve Veritabanı Replikasyonu ile Korkusuz Felaket Dayanıklılığı

Küçük Bir Kesinti, Büyük Bir Uyanış: Neden Çok Bölgeli?

Bir akşam ofiste ışıklar hafif sönük, monitördeki grafikleri izliyorum. Trafik haritası sanki bir kalp ritmi gibi, düzenli ama aniden bir kıpırtı. Küresel trafiğimizin belli bir dilimi bir anda yavaşladı. Ne internet çöktü ne de sunucular gitti; sadece belirli bir bölgede beklenmedik bir gecikme, kullanıcıların o iç çekişleriyle hissedilen bir rahatsızlık. İşte o an, aklımdan şu geçti: “Bugün ufak bir aksama, yarın büyük bir kesintinin işareti olabilir.”

Hiç başınıza geldi mi? Her şey yolundayken bir anda bir bölge, tek bir bağlantı noktası veya tek bir zayıf halka tüm deneyimi gölgeleyiverir. İşte bu yüzden çok bölgeli mimari aslında bir lüks değil; bir akşamüstü kahvesini rahat içebilmenin yolu. Bu yazıda, DNS geo‑routing ile istekleri en yakın ve sağlıklı bölgeye nasıl yönlendirebileceğinizi, veritabanı replikasyonu ile veriyi nasıl güvenle çoğaltabileceğinizi ve felaket anında paniğe kapılmadan nasıl ayağa kalkabileceğinizi, kendi deneyimlerimden ve saha pratiklerinden yola çıkarak paylaşacağım.

Önce resmi birlikte çizeceğiz: Kullanıcı isteği nereden gelir, nasıl doğru yere düşer, veritabanı hangi bölgede yazılır, diğer bölgeler nasıl eşlik eder? Sonra, o kritik soruya varacağız: “Bir bölge gidince veri kaybı yaşamadan, kullanıcıyı üzmeden ve ekip uykusunu kaçırmadan nasıl devam ederiz?” Yavaş yavaş, ama sağlam adımlarla.

DNS Geo‑Routing Nasıl İşler? Trafiğin Kibar Yolculuğu

En Yakına, En Sağlam Olanına

Bir kullanıcı tarayıcıya adresinizi yazdığında, aslında küçük bir yolculuk başlar. DNS çözümlenir, isimler IP’lere dönüşür ve trafik en kısa, en sağlıklı yoldan hedefe varmak ister. Geo‑routing işte bu anda devreye girer: Kullanıcının konumuna göre en yakın veri merkezine yönlendirme yapar, ya da ölçülen gecikmeye göre en hızlı bölgeyi seçer. Bazı sağlayıcılar buna gecikme odaklı der, bazıları bölge bazlı; ama amaç hep aynıdır: yakınlık ve sağlamlık.

Bunu pratikte ayarlarken birkaç püf noktası var. İlki, TTL süresi. Çok kısa tutarsınız, değişiklikler hızlı yayılır; ama çözümleme trafiği artar ve bazen istemci önbellekleri sizi dinlemez. Çok uzun tutarsınız, kesintide yön değişimi gecikir. İkincisi, sağlık kontrolleri. DNS’iniz bir bölgenin “iyi” olup olmadığını anlayabilmeli. Basit bir HTTP kontrolü bile çoğu zaman yeterli olur; ama iş kritikse, birden çok uç noktayı ve farklı protokolleri yoklamak iç rahatlatır.

Bu noktada “Nasıl yapılıyor?” diye sorarsanız, pratikte seçenek çok. Örneğin Cloudflare Load Balancer ile geo‑steering kurarken, bölgeleri mantıksal havuzlara ayırıp sağlık kontrollerini özelleştirmek hoş bir esneklik sunuyor. Benzer şekilde, AWS tarafında Route 53 health check ve failover mantığı ile, bozuk bir bölgeyi otomatik dışarıda bırakmak gayet nazik çalışıyor. Çok sağlayıcı kullanmayı düşünüyorsanız, çoklu sağlayıcı DNS ve octoDNS ile zero‑downtime geçiş notlarımı bırakayım; kritik durumlarda iki ayrı DNS’i koordine etmek bazen hayat kurtarıyor.

Sağlık Kontrolü ve Yapışkanlık

Bir kez daha altını çizeyim: Sağlık kontrolü sadece “yaşıyor mu?” değildir; “iyi mi?” sorusuna da cevap arar. Uygulama 200 dönüyor olabilir ama veritabanı bağlantısı mutsuzsa, kullanıcı deneyimi kırılacaktır. Bu yüzden küçük bir status endpoint düşünün; cache, veritabanı ve bağımlılıkları hızlıca tartan, basit ama dürüst bir kontrol. Ayrıca oturum yönetimi yapıyorsanız, yapışkanlık konusunu da düşünmek gerek. Bir kullanıcı bir bölgeye düşüp başka bölgede oturumunu bulamazsa, DNS ne kadar hızlı olursa olsun, deneyim dağılır. Buna birazdan geleceğiz.

Veritabanı Replikasyonu: Gerçeğin Ağırlığı

Yazı Nerede, Okuma Nerede?

Çok bölgeli mimaride asıl meydan okuma veritabanındadır. Uygulama katmanını kopyalarsınız, dosyaları çoğaltırsınız, DNS ile yönlendirirsiniz; ama veri tektir ve kıymetlidir. Genellikle iki ana yaklaşım var: Yazma için tek bir bölgeyi lider yapıp diğer bölgeleri okuma kopyaları olarak kullanmak; ya da birden çok bölgede yazmayı mümkün kılan çoklu lider stratejisi. İlki daha basit, tutarlılığı kolay; ikincisi çeviklik ve yakınlık sağlar ama uyuşmazlıkları çözmek emek ister.

Benim sahada en sık tercih ettiğim yol, yazmayı tek bir bölgeye koyup, okuma ağırlıklı akışları diğer bölgelerde hızlandırmak oldu. Özellikle içerik ağırlıklı uygulamalarda bu yaklaşım tatlı çalışıyor. Post’ların görüntülenmesi, ürün listesinin dolaşılması gibi akışları yerel okuma kopyalarıyla terbiye ediyor, sepet veya ödeme gibi kritik yazmaları lider bölgeye emanet ediyorsunuz. PostgreSQL için PostgreSQL logical replication esnekliği güzel; tablolar bazında seçici çoğaltma, bazı iş yüklerinde nefes aldırıyor.

Gecikme, Çakışma ve Gerçekler

Çoklu liderde, iki bölgede aynı kaydın aynı anda güncellenmesi kadar insana “Peki şimdi ne yapacağız?” dedirten az şey vardır. Çakışmayı çözmek için zaman damgaları, versiyon numaraları veya iş kurallarını kullanırsınız; ama asıl mesele, buna ekipçe hazır olup olmadığınızdır. Gecikme kaçınılmazsa, iki yazma arasında minik de olsa bir eventual consistency payı kalır. Zaman damgası derken de basit bir duvar saati değil, arada kaymaları tolere eden, idempotent işlemlere dayanan bir tasarım düşünmek gerekir.

Bir not daha: Bazı ekipler, yazan servisi olay tabanlı hale getirip “outbox” deseniyle değişiklikleri sıraya atmayı tercih ediyor. Böylece veri önce tek bir yerde sağlamca yazılıyor, sonra olay olarak diğer bölgelere taşınıyor. Bu da farklı bir sadeleşme yöntemi. Ne kadar basit kalırsanız o kadar iyidir; en başta, ihtiyaç dışı karmaşıklığı eklememek büyük kazanım.

Tutarlılık, Oturumlar ve Durum: İnce Ayar

Stateless Olmanın İnceliği

Uygulama sunucularını stateless kılmak çok bölgeli mimarinin gizli kahramanı. Oturumları yerel hafızada tutarsanız, DNS sizi farklı bir bölgeye gönderdiğinde kullanıcı kendini yabancı bir yerde bulur. Oturumları paylaşımlı bir cihaza yığmak da cazip görünür ama tek bir merkezi bağımlılık, yine zayıf halka. Pratik çözüm, oturumları token bazlı taşımak veya her bölgede yeniden üretilebilir, kısa ömürlü ve şifreli bir yapı kullanmak. Kullanıcı “Ben geldim” dediğinde, hangi bölgede olursa olsun, bilet geçerli olmalı.

Statik dosyalar ve medya için ise dağıtık bir CDN ile nesne depolama ikilisi gerçekten omuzdan yük alıyor. İçerik kullanıcıya yakın bir uçtan sunulunca, uygulama ve veritabanına düşen baskı azalıyor. İlla merkezde tutmanız gerekmeyen her şeyi kenarlara itmek, felaket anında da manevra alanı sağlıyor.

Cache, Tutarlılık ve Küçük Tuzaklar

Cache söz konusu olduğunda iki uca kapılmamak gerekiyor. Her şeyi önbelleğe almak kolaydır ama tutarlılığı bozar; hiçbir şey almamak ise sistemi gereksiz yorar. Arada bir yer var: Sık okunan ama nadir değişen içerikleri bölgesel cache’lerde tutmak, kritik değişikliklerde hedefli invalidation yapmak ve oturumla bağlantılı veriyi cache’e bağımlı kılmamak. Bu yaklaşım, DNS yönlendirmesinin getirdiği küçük oynamaları kullanıcıya hissettirmez.

Güvenlik tarafında ise bir cümle: Çok bölgeli demek, çok kapı demek. Her kapının kilidi sağlam olmalı. Arka uçlarınıza doğrudan trafiği kapatıp sadece güvenilir bir önden geçişe izin vermek için Authenticated Origin Pulls ve mTLS ile orijini koruma yazısındaki yaklaşım iş görür. Sertifika otomasyonunda, çok bölgeli ve çok kiracılı düzenlerde ACME challenge türlerini ve DNS‑01’ı derinlemesine anlattığım notlar, wildcard veya bölgesel sertifika yönetimini tatlandırabilir.

Felaket Akışı: Failover, Geri Dönüş ve Zamanı Yumuşatma

Planlı Kayıp, Plansız Panikten İyidir

Bir gün bir bölgenin ayağı kayacak; mesele, sizin o anda ne kadar soğukkanlı kalacağınız. DNS’te sağlık kontrolü bozuldu mu, failover tetiklenir ve kullanıcılar başka bir bölgeye akar. Bu akışta iki soru belirir: Oturumlar ne durumda, veri kaybı var mı? Eğer yazmalar tek bölgede toplanıyorsa, failover anında yazma yükünü devralacak bölgenin güncel olduğundan emin olmanız gerekir. Bu, senkron replikasyonla düşük gecikmede mümkün; ama bölgeler arası çoğu senaryoda asenkron ilerlemek zorunda kalırız. O zaman da küçük bir RPO penceresi kabul eder, kritik işlemler için kuyruk veya onay adımı ekleriz.

Geri dönüş (failback) ise ayrı bir hikâye. Eski lideri yeniden lider yapmak aceleye gelmez. Önce yeni liderden tüm değişiklikleri eksiksiz çektiğinden emin olmalı, sonra kararı trafik yığılmadan ve kullanıcı fark etmeden uygulamalısınız. Bu esnada TTL değerini geçici olarak kısaltmak ve sağlık kontrollerini sıklaştırmak, geçişi yumuşatır.

Runbook ve Oyun Günü

Bir ekip, ancak pratik yaptığı senaryoda hızlı olur. Runbook deriz ya; işte o sayfalar sadece wiki’de durmasın. Bazen küçük bir pazar akşamı, ekipçe buluşup kontrollü bir “oyun günü” yapın. Bir bölgeyi bilinçli devre dışı bırakın, DNS’in tepkisini izleyin, log’ları notlayın, kullanıcı deneyimini gözlemleyin. O günkü notlar, gerçek felaket anında en kıymetli pusulanız olur.

Uygulama tarafında, küme düzenine geçenler için küçük bir parantez: Bölge bazında cluster yönetimi yapacaksanız, 3 VPS ile K3s yüksek erişilebilirlik kümesi kurulum notlarım bir perspektif verebilir. Elbette bölge sınırları arasında tek bir orkestrasyon katmanı yerine, her bölgede bağımsız ama aynı tanıma sahip kümeler kurmak çoğu zaman daha sakin bir yol.

Maliyet, Karmaşıklık ve Ekip Rutinleri: Dengeyi Bulmak

Her Şeyi İstemek Başka, Doğru Şeyi Kurmak Başka

Çok bölgeli mimari kulağa hep hoş gelir; ama her iş yükü bu emeği hak etmez. Kullanıcı tabanınız tek bir kıtadaysa, ilk yatırımınızı o bölgede sağlamlığa yapmak daha iyi olabilir. Ama küresel bir kullanıcı tabanında, hatta sadece iki kıyı arasında bile, çok bölgeli düzen bir gün mutlaka karşılığını verir. Önemli olan, kritik akışları tek tek işaretlemek ve her biri için “Bunu neden çok bölgeli yapıyoruz?” sorusuna net bir cevap vermek.

Küçük bir tavsiye: İlk adımda her şeyi çok bölgeli yapmak yerine, “okuma ağırlıklı içerik”, “giriş ve oturum”, “ödeme” gibi akışları ayırıp sırayla taşımak stresi azaltır. Böylelikle hem sistemi hem ekibin ritmini boğmazsınız. DNS tarafında düzeni oturttuktan sonra, veritabanı replikasyonunu devreye almak; ardından oturum ve cache düzenini taşımak; en son da karmaşık yazma senaryolarına girmek, ekibi yormadan ilerletir.

Bu yolculukta sertifika, DNS, ve kenar güvenliği gibi yan konular görünenden çok daha önemli. Çoklu sağlayıcı kullanırken kayıt yönetimi ve geçişleri risksiz yapmak için octoDNS ile zero‑downtime geçiş rehberini tekrar anmak isterim. Sertifikayı otomatiklemek gerekiyorsa da, çok bölgede yetkilendirme sınırları ve TXT kayıtlarının yayılımını hesaba katmak gerekir; bunun için DNS‑01’ın pratik yanlarını özetlediğim yazı yol gösterir.

Kapanış: Yarın Sakin Geçsin Diye Bugün Hazırlık

Toparlayalım. Çok bölgeli mimarinin özü, kullanıcıyı yakına ve sağlama götürmek. DNS geo‑routing ile kapıyı doğru bölgeye açıyor, veritabanı replikasyonu ile içeri giren veriyi güvenle çoğaltıyor, felaket anında ise paniğe kapılmadan trafiği başka bir bölgeye akıtıyorsunuz. Bunu yaparken aşırı teknik cambazlıklara girmeden, küçük adımlarla, ölçerek ve gözlemleyerek ilerlemek en sağlıklısı. Sağlık kontrolleri açık, TTL’ler akıllı, oturumlar taşınabilir oldukça, “Bölge X gitti” cümlesi sizi irkiltmez.

Uygulamayı stateless kılmak, cache stratejisini netleştirmek, yazma‑okuma akışlarını ayırmak ve replikasyon konusunu gereksiz karmaşadan arındırmak, günlük işinizi de hafifletir. Bir de lütfen runbook’unuzu güncel tutun ve arada bir küçük oyun günleri yapın. DNS ve güvenlik sınırlarınıza gözü gibi bakın; burada aldığı önlemler, yarın yetişmenize bile gerek kalmadan işi çözer. İsterseniz kenar güvenliğine dair mTLS ve orijin doğrulaması yazısına göz atıp notlarınızı ekleyin; küçük bir kontrol listesi bile büyük fark eder.

Umarım bu yazı, “Çok bölgeli mimari bize ağır mı gelir?” sorusuna daha net bakmanıza yardımcı olmuştur. Küçükten başlayın, adım adım çoğaltın, ölçerek ilerleyin. Bir dahaki yazıda görüşmek üzere; umarım o zamana kadar kesinti grafikleri sadece huzurlu dalgalar çizer.

Sıkça Sorulan Sorular

Önce sağlık kontrollerini güvenilir kıl. TTL değerini ne çok kısa ne de çok uzun seç; geçişler hızlı olsun ama gereksiz oynaklık yaratmasın. Trafiği bölgelere ayırırken oturum yapını ve cache davranışını da düşün; kullanıcı bölge değiştirdiğinde deneyimi kopmamalı.

İşin karmaşıklığını ve ekip tecrübeni düşün. Çoğu senaryoda tek lider ile başlamak daha sakin; okuma yükünü diğer bölgelere dağıt, kritik yazmaları liderde topla. Çakışma çözmek, çoklu liderin en zor tarafı; gerçekten ihtiyacın yoksa ertelemek daha mantıklı.

Uygulamayı stateless tasarla ve oturumları kısa ömürlü, imzalı token’larla yönet. Sunucu tarafı hafızaya bağımlı kalma; kullanıcı farklı bölgeye düşünce de aynı biletle devam edebilsin. Cache’i destek olarak kullan ama oturumun tek kaynağı yapma.