Google PCD: Uygulama Verisi, Durum ve Depolama Desenleri — Çalışma kılavuzu
Şunun bir parçası: Google Professional Cloud Developer — Çalışma kılavuzu. Doğrulanmış cevaplarla şurada pratik yapın: Google sınav merkezi, veya şurada süreli deneme sınavları çözün: ExamRoll.io.
Genel Bakış
Google Cloud’daki modern uygulamalar; gecikme, tutarlılık, ölçeklenebilirlik, maliyet ve operasyonel karmaşıklığı dengelemek için rutin olarak birden fazla veri deposunu birleştirir. Amaca uygun hizmetleri ve desenleri seçmek ve bunların hata modlarını anlamak, dayanıklı tasarımın merkezinde yer alır. Bu bölüm, Cloud SQL, Cloud Spanner, Firestore, Bigtable, Memorystore ve Cloud Storage için pratik rehberliği özetlemekte ve geçişleri, bölümlemeyi ve veri korumayı ele almaktadır.
Cloud SQL üzerinde İlişkisel Veri
Cloud SQL, yönetilen MySQL, PostgreSQL ve SQL Server’ı tanıdık RDBMS semantiğiyle sunar.
Özel bağlantı
- Veritabanı trafiğini VPC’nizde tutmak için özel IP kullanın. Bu, genel giriş (ingress) kurallarını ve IP izin listelerini ortadan kaldırır ve NAT çıkış (egress) karmaşıklığını önler.
- Rotaların ve güvenlik duvarı kurallarının VPC’den örneğe (instance) trafiğe izin verdiğinden emin olun. Özel IP etkinleştirildiğinde, özel IP için ad çözümlemesi otomatik olarak gerçekleştirilir.
- Sunucusuz (Cloud Run, App Engine, Cloud Functions) için, özel IP ile bile IAM kimlik doğrulamasını ve TLS’yi yöneten Cloud SQL bağlayıcılarını (connector) tercih edin.
Yüksek erişilebilirlik ve replikalar
- Bölgesel HA (Yüksek Erişilebilirlik), birincil (primary) ve yedek (standby) sunucuları senkron disk replikasyonu ile farklı zone’lara yerleştirir. Yük devretme (failover) sırasında kısa bir bağlantı kesintisi bekleyin; uygulamalar geçici hataları yeniden denemeli ve yeniden bağlanmalıdır.
- Okuma replikaları (read replica) asenkrondur ve okuma trafiğinin yükünü azaltır. Replikaların nihai olarak tutarlı (eventually consistent) olacağını anlayarak, DR (Felaket Kurtarma) ve okuma yakınlığı için bölgeler arası (cross-region) replikaları kullanın.
- Kurtarma veya planlı rol değişiklikleri için bir okuma replikasını birincil (promote) yapın. Birincil yapma prosedürlerini düzenli olarak test edin.
Yedeklemeler ve belirli bir zamana kurtarma (point-in-time recovery)
- Otomatik yedeklemeleri ve işlem/PITR günlüklerini etkinleştirin. IO çekişmesini azaltmak için yedeklemeleri yoğun olmayan saatlerde planlayın.
- Birden fazla kopya saklayın ve geri yüklemeleri periyodik olarak ayrı bir örneğe doğrulayın. Geri yükleyemediğiniz bir yedek, operasyonel olarak hiç yedek olmamasına eşdeğerdir.
Bağlantı havuzları ve limitler
- Cloud SQL maksimum bağlantı sayısını zorunlu kılar; aşırı sayıda kısa ömürlü bağlantı, CPU’da aşırı yüklenmeye (thrash) ve gecikmeye neden olur. Uygulama tarafında havuzlama (pooling) kullanın (ör. HikariCP, PgBouncer, ProxySQL).
- Havuzları yalnızca örnek belleğine göre değil, CPU çekirdeklerine ve iş yükü eşzamanlılığına göre boyutlandırın. Küçük başlayın ve deneysel olarak ölçeklendirin.
- Kısa ömürlü/sunucusuz işlem (compute) ortamları için, dile özgü Cloud SQL bağlayıcısı her revizyon için bir havuz tutar; yine de soğuk başlatmalardan (cold start) sonra bağlantı fırtınalarını önlemek için eşzamanlılığı sınırlayın.
Veri bölümleme ve performans
- Çekişmeyi azaltmak için büyük çok kiracılı (multi-tenant) şemaları müşteriye veya bölgeye göre parçalara (shard) ayırın. Mümkün olduğunca yoğun kullanılan (hot) kiracıları izole tutun.
- Kapsayan indeksleri (covering index) dikkatli oluşturun; aşırı indeksleme yazmaları yavaşlatır ve depolamayı artırır. Kardinaliteyi ve yüklem seçiciliğini (predicate selectivity) doğrulayın.
- Yoğun kullanılan satırlar (hot rows) için iyimser kilitleme (optimistic locking) veya SELECT FOR UPDATE kullanın; sürekli yazma iş yükleri için autovacuum (PostgreSQL) veya InnoDB ayarlarını (MySQL) ayarlayın.
Yaygın hata modları ve azaltma yöntemleri:
- VM/düğüm yeniden başlatmalarından sonra ’thundering herd’ (ani ve yoğun istek) durumu: havuz boyutlarını sınırlayın ve üssel geri çekilme (exponential backoff) kullanın.
- Yazdığını-okuma (read-your-writes) senaryolarında replika gecikmesi (lag): oturum tutarlılığı gerektiğinde okumaları birincil (primary) sunucuya sabitleyin.
- Gürültülü komşular (noisy neighbors) veya bakım nedeniyle HA yük devretme (failover) kararsızlıkları: bağlantı ve işlem yeniden denemelerini tekrarlanabilirlik (idempotency) ile uygulayın.
Cloud Spanner üzerinde Gezegen Ölçeğinde İlişkisel Veri
Cloud Spanner, küresel tutarlılık seçenekleriyle yatay ölçeklenebilirlik sunar.
Tutarlılık ve işlemler
- Güçlü okumalar (strong read) ve okuma-yazma işlemleri, TrueTime kullanarak katı harici tutarlılık (strict external consistency) sağlar; commit’ler, doğrusallaştırılabilirliği (linearizability) sağlamak için kısa bir süre bekler.
- Eski (stale) ve sınırlı eskiliğe sahip (bounded-staleness) okumalar, güncelliğin biraz esnetilebildiği okuma ağırlıklı iş yükleri için gecikmeyi düşürür ve erişilebilirliği artırır.
- Salt okunur (read-only) işlemler, kilit olmadan belirli bir zaman damgasında birden çok okumayı kapsar; tutarlı analitik anlık görüntüler (snapshot) için kullanın.
Bölgesellik, erişilebilirlik ve gecikme
- Bölgesel örnekler (instance) bir bölge içinde yüksek erişilebilirlik sağlar. Çok bölgeli (multi-regional) yapılandırmalar (örneğin, nam-asia-eur1), küresel olarak tutarlı yazmalarla kıtalar arasında çok yüksek erişilebilirlik ve düşük gecikmeli yerel okumalar sunar.
- Kullanıcılarınızın coğrafyasıyla uyumlu örnek yapılandırmaları seçin; yazma gecikmeleri kıtalararası çekirdek grup (quorum) boyutuyla artar.
Ölçeklenebilirlik ve şema tasarımı
- Spanner, veriyi birincil anahtar (primary key) aralıklarına göre bölümlere (split) ayırır ve bunları düğümler (node) arasında dağıtır. Sıcak nokta (hotspotting) oluşumu, anahtarların monoton olarak artması durumunda meydana gelir. Otomatik artan ID’ler veya her zaman artan zaman damgaları gibi anahtarları baş pozisyonda kullanmaktan kaçının.
- Yazmaları dağıtan bileşik birincil anahtarlar (composite primary key) kullanın (örneğin, customer_hash, customer_id, reverse_timestamp).
- İç içe geçmiş tablolar (interleaved table), yerellik ve verimli join işlemleri için alt satırları üst (parent) satırlarla aynı konuma yerleştirir. Alt öğe kardinalitesi ve erişiminin üst öğeyle güçlü bir şekilde ilişkili olduğu durumlarda kullanın. İkincil indekslerle (secondary index) tamamlayın; tablo aramalarını azaltmak için STORING ifadelerini kullanmayı düşünün.
- CPU, depolama ve yüksek öncelikli ile en iyi çaba (best-effort) operasyonlarını izleyin; P95 gecikmelerinin altında pay bırakmak için düğümleri ölçeklendirin.
Operasyonel desenler
- İstemciler oturum havuzları (session pool) kullanır; oturum oluşturma fırtınalarını önlemek için min/maks oturum sayılarını ayarlayın. Yeniden denemeler sınırlı ve tekrarlanabilir (idempotent) olmalıdır; ABORTED durumunda, okuma-yazma işlemlerini geri çekilme (backoff) ile yeniden deneyin.
- Yedeklemeler hafif ve tutarlıdır; geri yüklemeleri ayrı örneklere doğrulayın. Değişiklik akışları (change stream) ve CDC entegrasyonları, alt sistemleri (downstream system) besleyebilir.
Ödünleşimler:
- Güçlü küresel yazmalar, commit beklemesi ekler; kullanıcı deneyimi (UX) açısından kritik, çoğunlukla okuma yapılan yollar için eski (stale) okumaları kullanın.
- İç içe geçirme (interleaving) yerelliği artırır ancak yazma baskısını bir noktada toplayabilir; üretim benzeri trafikle test edin.
NoSQL Operasyonel Veri Depoları: Firestore ve Bigtable
Sorgu desenlerinize ve iş hacmi profilinize uyan NoSQL modelini seçin.
Firestore (doküman)
- Veri modeli: koleksiyonlar dokümanları içerir; dokümanların alt koleksiyonları olabilir. Sorgu desenlerine göre modelleyin; tek bir “yoğun” (hot) dokümana yönelik derin yelpaze (fan-out) yazmalarından kaçının.
- Erişim ve işlemler: doküman okumaları ve sorguları Native modda güçlü tutarlıdır (strongly consistent). Birden çok dokümanda en fazla bir kez (at-most-once) atomiklik için toplu yazmaları (batched writes), çekişme kontrolleri (contention checks) ile okuma-değiştirme-yazma (read-modify-write) işlemleri için ise transaction’ları kullanın.
- İndeksler: tek alanlı indeksler otomatiktir. Birden çok aralık/eşitsizlik filtresi veya sıralama düzeni kullanırken çok alanlı bileşik (composite) indeksler tanımlanmalıdır. Sorguları yalnızca indeks kullanacak hale getirmek için denormalizasyon yaygın bir yöntemdir.
- İstemci senkronizasyonu: gerçek zamanlı dinleyiciler (listeners) değişiklikleri akış olarak iletir; çevrimdışı önbellekler (offline caches) son yazan kazanır (last-write-wins) semantiği ile eşitleme yapar. Sınırsız dinleyici yelpazesine (listener fan-out) karşı önlem alın; sorgu imleçlerini (query cursors) ve filtreleri tercih edin.
- Limitler ve hata modları: tek bir dokümana yazma hızı serileştirilir; bir dokümana yönelik sürekli yüksek QPS’li güncellemeler çekişme (contention) yaratır. N alt dokümanlı parçalanmış (sharded) sayaçlar kullanın ve okuma sırasında toplayın (aggregate).
Cloud Bigtable (geniş sütunlu)
- Satır anahtarı (row-key) tasarımı çok önemlidir. Bigtable satırları sözlükbilimsel (lexicographically) olarak bölümlere ayırır; anahtarın başındaki segmentler yoğun erişim noktası (hotspotting) oluşumunu belirler. Zaman damgası öncelikli veya parçalanmamış (unsharded) kullanıcı ID’leri gibi sıralı anahtarlardan kaçının.
- Desenler:
- Zaman serisi okumaları için anahtar içinde ters zaman damgası:
undefined
. - Yazmaları dağıtmak için ilk bileşeni hash’leyin veya bucket’lara ayırın:
undefined
.
- Küçük, çok sütunlu hücreler depolayın; tabletlere yayılan büyük satırlardan kaçının. Erişim kontrolü ve GC politikası ayrımı için birden çok sütun ailesinden (column families) yararlanın.
- İş hacmi ve sunum (serving):
- Replikasyon ve bölgesel okuma yakınlığı için birden çok küme kullanın; kümeler arası yazmalar nihai tutarlı (eventually consistent) hale gelir.
- Uygulama profillerini ve yönlendirmeyi (routing) ayarlayın; istemci tarafında geniş iş parçacığı havuzları (thread pools) ve kanal havuzları (channel pools) bulundurun.
- GC ve TTL: sürüm ve zaman tabanlı GC, eski hücreleri asenkron olarak kaldırır; veriler sıkıştırmaya (compaction) kadar kalır, bu nedenle yasal son tarihler için anında silinmeye güvenmeyin.
Önbellekleme ve Nesne Depolama Desenleri
Memorystore (Redis/Memcached)
- Önbellekleme stratejileri:
- Read-through: uygulama veriyi önbellekten çeker; önbellekte bulamazsa (cache miss), kaynaktan yükler ve önbelleği doldurur.
- Write-through: yazmalar senkron olarak hem önbelleğe hem de kaynağa gider.
- Write-behind: yazmaları önbellekte tamponlar ve asenkron olarak yazar (flush); veri kaybı riski nedeniyle dikkatli kullanın.
- Sona erme ve geçersiz kılma:
- Veri eskime toleransıyla tutarlı TTL’ler uygulayın. Ana veri kaynağındaki (source-of-truth) değişikliklerde anahtarları geçersiz kılın; toplu (aggregate) önbellekler için, yığılmaları (stampedes) önlemek amacıyla sürümlü anahtarlar kullanın.
- Popüler anahtarlarda önbellek yığılmalarını (cache stampedes) önlemek için mutex veya single-flight kullanın.
- Oturumlar (Sessions): geçici oturum verilerini TTL ile saklayın; hassas ise değerleri şifreleyin veya yalnızca anlamsız (opaque) token’ları saklayın.
- Redis ile hız sınırlama (Rate limiting):
- Sabit pencere (Fixed-window): kimlik başına bir anahtar üzerinde INCR ve EXPIRE ile.
- Daha pürüzsüz sınırlar için kayan pencere (sliding-window) veya token-bucket; atomiklik için Lua betiklerini (scripts) değerlendirin.
- Kullanılabilirlik: Basic katmanında yük devretme (failover) yoktur; Standard katmanı bölgesel yüksek kullanılabilirlik (HA) sağlar. Önbelleği geçici (volatile) olarak kabul edin; asla yetkili (authoritative) depolama olarak görmeyin.
Örnek: basit bir sabit pencere hız limiti
Komutlar:
- Önbellekleme stratejileri:
undefined
-
undefined
Cloud Storage
- Nesneler ve tutarlılık: okuma, yazma, üzerine yazma, silme ve listeleme işlemleri için güçlü küresel tutarlılık (strong global consistency). Nesneler değiştirilemez (immutable); güncellemeler yeni nesiller (generations) oluşturur.
- İmzalı URL’ler (Signed URLs): büyük yükleme/indirme işlemlerini uygulamanız üzerinden proxy’lemeden doğrudan istemciler ve bucket’lar arasında gerçekleştirin. Kısa sona erme süreleri belirleyin; metot, yol ve içerik başlıklarını kısıtlayın.
- Devam ettirilebilir yüklemeler (Resumable uploads): 5 MB’den büyük dosyalar ve güvenilir olmayan ağlar için kullanın; 5xx/429 hatalarını kesilmiş üssel geri çekilme (truncated exponential backoff) ve devam etme token’ları ile yönetin.
- Yaşam döngüsü (Lifecycle): depolama sınıfları arasında geçiş yapmak, eski sürümleri silmek ve saklama (retention) politikalarını uygulamak için kurallar tanımlayın. Dağıtımlar (rollouts) sırasında güvenlik için nesne sürümleme (object versioning) ile birleştirin.
- Bildirimler (Notifications): nesne sonlandırma/silme (finalize/delete) işlemlerinde sonraki adımları tetiklemek için Pub/Sub bildirimlerini entegre edin ve yarış koşullarına (races) karşı koruma sağlamak için ön koşulları (ör. ifGenerationMatch) dahil edin.
Örnek: yerel dosyaları yükleme
undefined
Geçiş, Tutarlılık, Bölümleme ve Veri Koruma
Veritabanı geçişi
- Çevrimiçi ve çevrimdışı arasında seçim yapın: minimum kesinti süresi için Database Migration Service ile çevrimiçi; bakım pencerelerinin kabul edilebilir olduğu durumlarda basitlik için çevrimdışı.
- Önce şema: türleri ve kısıtlamaları uyumlu hale getirin; Spanner için, MySQL/PostgreSQL şemalarını ve verilerini eşleştirmek üzere araçları değerlendirin, ardından anahtarları ve dizinleri dağıtım için ayarlayın.
- İkili çalıştırma ve geçiş: çevrimiçi geçiş sırasında, ikili yazma yapın veya değişiklik günlüklerini çoğaltın. Nihai geçişten önce satır sayılarını, sağlama toplamlarını (checksum) ve kritik sorgu davranışlarını doğrulayın.
Şema geçişleri ve geri alma
- CI/CD’nin bir parçası olarak (örneğin, bir geçiş aracıyla) sürüm kontrollü, otomatikleştirilmiş geçişler kullanın. Eklemeli, geriye dönük uyumlu değişiklikler tasarlayın: sütunlar ve dizinler ekleyin, geriye dönük doldurma yapın, hem eski hem yeni yapıyı okuyup yazan kodu dağıtın, ardından kullanımdan kaldırılmış yapıları kaldırın.
- Veri dönüşümleriyle geri almayı planlayın: kod dağıtımı başarısız olursa, yeni yazmaları devre dışı bırakmaya ve özellik bayraklarına (feature flags) güvenmeye hazır olun; geri almayı engelleyen yıkıcı geçişlerden kaçının.
İşlemsel ve nihai tutarlı iş akışları
- Değişmezlerin eşzamanlı olarak korunması gerektiğinde (para transferleri, envanter azaltmaları) ACID işlemlerini kullanın.
- Gecikmenin baskın olduğu, çoğunlukla okuma yapılan, kullanıcıya yönelik özellikler (akışlar, arama, sayaçlar) için nihai tutarlılığı tercih edin. Idempotency (tekrar etkisiz) anahtarları, outbox/Saga desenleri ve gecikmeli yeniden deneme (backoff) mekanizmalarını uygulayın.
- Birleştirin: yetkili durumu işlemsel bir depoda kesinleştirin (commit); nihai tutarlı projeksiyonlar için olaylar (events) yayınlayın.
Veri bölümleme ve bağlantı yönetimi
- Yoğun erişim noktalarını (hotspot) izole etmek için kiracıya, coğrafyaya veya iş yükü türüne göre bölümleme yapın. Bigtable ve Spanner için, bölümleme anahtarlarını birincil anahtarların içine kodlayın; Cloud SQL için, kiracı başına şema veya yönlendiricilerle tablo parçalama (sharding) kullanın.
- Bağlantıları yönetme:
- Cloud SQL: havuzlayın ve yeniden kullanın; eşzamanlılığı sınırlayın; soğuk başlangıçları kademelendirin.
- Spanner: oturumları yeniden kullanın; başlangıçta havuzları ısıtın; yeniden denemeleri sınırlayın.
- Memorystore: TCP bağlantılarını yeniden kullanın; istek başına bağlantı kurmaktan kaçının.
Veri koruma, arşivleme, geri yükleme doğrulaması ve silme davranışı
- Yedeklemeler ve arşivleme:
- Cloud SQL: otomatik yedeklemeler + PITR (belirli bir zamana geri yükleme); geri yüklemeleri test edin.
- Spanner: yönetilen yedeklemeler; üretim dışı ortama geri yüklemeyi test edin.
- Firestore: Cloud Storage’a zamanlanmış dışa aktarımlar; içe aktarımları doğrulayın.
- Bigtable: yedeklemeler ve anlık görüntüler (snapshot); klonla ve geri yükle yöntemini test edin.
- Cloud Storage: yönetişim için saklama politikaları, nesne kilitleri ve paket düzeyinde tek tip erişim; yaşam döngüsü aracılığıyla daha soğuk sınıflara arşivleyin.
- Geri yükleme doğrulaması: periyodik olarak izole ortamlara geri yükleme yapın ve doğrulama sorguları ile uygulama duman testleri (smoke test) çalıştırın. RTO/RPO’yu politikaya göre izleyin.
- Silme davranışı:
- Bigtable GC (çöp toplama) ve yaşam döngüsü eşzamansızdır—anında silme sözü vermeyin.
- Cloud Storage sürüm oluşturma, yaşam döngüsü onları kaldırana kadar nesil sürümlerini korur.
- Firestore TTL ve dışa aktarma tabanlı silmeler eşzamansızdır.
- Kesin silme SLA’ları için, silmek üzere işaretleyen, kuyruğa alan ve kaldırmayı doğrulayan, denetim günlükleri içeren süreçler tasarlayın.
- Yedeklemeler ve arşivleme:
Pratik Problem Senaryosu
Aurora Outfitters, monolitik bir e-ticaret platformunu Google Cloud’a taşıyor. Yapmaları gerekenler: 1) riski azaltmak için MySQL’i olduğu gibi Cloud SQL’e taşımak (lift-and-shift), 2) uygulamayı aşırı yüklemeden 500 MB’lık ürün medyası yüklemelerini yönetmek, 3) ürün katalogları için okuma verimini (throughput) ölçeklendirmek ve 4) yoğun satış dönemlerinde kullanıcı başına hız limitleri uygulamak.
Yaklaşım:
MySQL’i özel IP ve bölgesel HA (yüksek erişilebilirlik) ile Cloud SQL’e taşıma
- Gerekçe: Özel IP, genel erişimi ve IP izin listelerini ortadan kaldırarak GKE ve Compute Engine’den güvenli bağlantıyı basitleştirir. Bölgesel HA, bölgesel (zonal) arızalara karşı koruma sağlar; kısa süreli yük devretme bağlantı kesintileri beklenir, bu nedenle uygulama yeniden denenebilir işlemler ve yeniden bağlanma mantığı uygulayacaktır.
Otomatik yedeklemeleri ve PITR’yi etkinleştirme ve geri yüklemeyi doğrulama
- Gerekçe: Otomatik yedeklemeler ve işlem günlükleri, kullanıcı veya uygulama hatalarından sonra belirli bir zamana geri kurtarmayı (point-in-time recovery) mümkün kılar. Her hafta üretim dışı bir örneğe (instance) zamanlanmış bir geri yükleme, yedeklerin kullanılabilir olduğunu doğrular ve RTO’yu ölçer.
Katalog okumaları için bir okuma replikası ekleme
- Gerekçe: Katalog sorgularını bir okuma replikasına taşımak, birincil (primary) veritabanı üzerindeki çekişmeyi azaltır. Uygulama, okuma sonrası yazma gerektiğinde (sepet/ödeme) birincilden, katalog gezinmesi için ise replikadan okuma yapar ve replika gecikmesi (lag) ödünleşimlerini anlar.
Uygulama tarafında bağlantı havuzlama ve eşzamanlılığı sınırlama
- Gerekçe: PgBouncer/HikariCP, bağlantıları sınırlar ve yeniden kullanarak otomatik ölçeklendirme ve HA yük devretmeleri sırasında bağlantı fırtınalarını önler. Havuzlar, maksimum pod sayısına göre değil, CPU çekirdeklerine göre boyutlandırılarak aşırı yüklenmeyi engeller.
Medya yüklemelerini imzalı URL’ler ve devam ettirilebilir yüklemeler ile Cloud Storage’a devretme
- Gerekçe: Uygulama, istemcilerin doğrudan yükleme yapması için kısa ömürlü imzalı URL’ler oluşturur. Devam ettirilebilir yüklemeler, güvenilir olmayan ağlara uyum sağlar; medya hizmeti, işlemeyi tetiklemek için Pub/Sub tamamlanma bildirimlerini dinler. Ön koşul başlıkları (ifGenerationMatch), üzerine yazma yarış koşullarına (race condition) karşı koruma sağlar.
Sayfa önbellekleme, oturumlar ve hız sınırlama için Memorystore for Redis’i uygulama
- Gerekçe: Read-through (okuma sırasında doldurulan) önbellekler, güncelleme sıklığına göre ayarlanmış TTL’ler ile ürün sayfaları için veritabanı yükünü azaltır. Oturum verileri, kısa TTL’ler ile Redis’te geçici olarak tutulur; uygulama durumu Cloud SQL’de kalır. Sabit pencereli jeton (token) stratejisi, kullanıcı başına istek sınırları için INCR/EXPIRE komutlarını kullanır. Önbellek, yetkili olmayan bir kaynak olarak kabul edilir; uygulama, önbellek kaybını tolere eder ve isabetsiz durumlarda (miss) yeniden doldurur.
Yüksek verimli katalog gezinme özellikleri için Cloud Bigtable’a aşamalı bir geçiş yolu hazırlama
- Gerekçe: Trafik arttıkça, denormalize edilmiş, okuma için optimize edilmiş katalog görünümleri Bigtable’a taşınır. Satır anahtarları, yazma işlemlerini dağıtmak ve yoğun erişim noktası (hotspot) oluşturmadan zamana göre sıralanmış listelemeleri desteklemek için
paket#kategori#ters_zaman_damgasıolarak tasarlanmıştır.
- Gerekçe: Trafik arttıkça, denormalize edilmiş, okuma için optimize edilmiş katalog görünümleri Bigtable’a taşınır. Satır anahtarları, yazma işlemlerini dağıtmak ve yoğun erişim noktası (hotspot) oluşturmadan zamana göre sıralanmış listelemeleri desteklemek için
Şema geçişi ve geri alma prosedürlerini oluşturma
- Gerekçe: Geçişler eklemelidir: sütunlar/dizinler eklenir, idempotent (tekrar etkisiz) işlerle geriye dönük doldurma yapılır, hem eski hem yeni yapıyı okuyup yazan kod dağıtılır, ardından eski alanlar daha sonra kaldırılır. Özellik bayrakları (feature flags) yeni yolları korur; geri alma, yıkıcı DDL olmadan yeni alanlara yazmayı devre dışı bırakır.
Veri yaşam döngüsü ve koruma politikalarını belirleme
- Gerekçe: Cloud Storage paketleri, küçük resimleri (thumbnail) daha soğuk depolamaya geçirmek ve süresi dolmuş geçici yüklemeleri silmek için yaşam döngüsü kurallarını kullanır. Cloud SQL yedekleri ve (benimsendikçe) Spanner/Bigtable yedekleri, doğrulama için düzenli olarak geri yüklenir. Denetim günlükleri silme iş akışlarını yakalar; Bigtable GC’nin eşzamansız olduğu uyumluluk belgelerinde kabul edilir.
Kesilmiş üstel geri çekilme (truncated exponential backoff) ile istemci ve sunucu yeniden denemelerini uygulama
- Gerekçe: Cloud Storage, yoğun zamanlarda 429/5xx döndürebilir; geri çekilme (backoff) yükü yumuşatır ve hata oranlarını azaltır. Veritabanı ve önbellek işlemleri, özellikle yük devretme ve ağdaki anlık kesintiler sırasında güvenli yeniden denemeleri sağlamak için idempotency (tekrar etkisiz) anahtarları kullanır.
Bu plan, özel bağlantı ve HA ile Cloud SQL aracılığıyla anında risk azaltma sağlar, önbellekleme ve imzalı URL yüklemeleri ile uygulamanın duyarlı ve uygun maliyetli kalmasını sağlar ve trafik arttıkça okuma verimini ve veri dayanıklılığını ölçeklendirmek için net bir yol oluşturur.
← API Tasarımı · Tüm alanlar · Kimlik →
Bu soruları çözün → · ExamRoll.io’da süreli pratik →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
Sınavınızı geçin →