Okuma/yazma ayrımı, yazma isteklerini birincil RDS örneğine ve okuma isteklerini salt okunur RDS örneklerine otomatik olarak yönlendiren bir veritabanı proxy özelliğidir. Tek bir veritabanı proxy uç noktasına bağlanın; proxy yönlendirmeyi şeffaf şekilde yönetir, böylece uygulama kodunuz değişmez.
Yukarıdaki diyagram, tek bir veritabanı proxy uç noktasının gelen tüm istekleri nasıl kabul edip yönlendirdiğini gösterir: Yazma işlemleri birincil RDS örneğine giderken okuma işlemleri salt okunur RDS örnekleri arasında dağıtılır.
Veritabanı proxy'leri hakkında arka plan bilgisi için bkz. Veritabanı proxy'leri nelerdir?
Okuma/yazma ayrımını ne zaman kullanmalısınız?
Okuma/yazma ayrımı, yoğun okuma ve az yazma içeren iş yükleri için uygundur. Birincil RDS örneğiniz okuma istekleri nedeniyle aşırı yükleniyorsa okuma/yazma ayrımı, uygulamanızın yapılandırmasını değiştirmeden salt okunur RDS örnekleri ekleyerek okuma kapasitesini ölçeklendirmenizi sağlar.
Avantajlar
Basitleştirilmiş bağlantı yönetimi
Okuma/yazma ayrımı olmadan hem birincil RDS örneğinin hem de her bir salt okunur RDS örneğinin uç noktalarını uygulamanıza eklemeniz gerekir. Yeni bir salt okunur örnek eklemek için uygulama yapılandırmasını değiştirmeniz gerekir.
Okuma/yazma ayrımı ile uygulamanız tek bir veritabanı proxy uç noktasına bağlanır. Proxy, istekleri otomatik olarak yönlendirir. Salt okunur RDS örneklerini eklemek veya kaldırmak için uygulamanızı değiştirmenize gerek kalmaz.
Daha düşük gecikme süresi için yerel entegrasyon
Okuma/yazma ayrımı, ApsaraDB RDS ekosistemine doğrudan entegre edilmiştir. İstekler ek ayrıştırma ve iletme katmanlarından geçmeden veritabanına ulaşır; bu durum yanıt gecikme süresini azaltır ve bakım yükünü düşürür.
Otomatik durum kontrolleri
Okuma/yazma ayrımı, birincil RDS örneğinin ve tüm salt okunur RDS örneklerinin durumunu sürekli izler. Bir salt okunur örnek başarısız olursa veya veri çoğaltma gecikme süresi yapılandırılan eşiği aşarsa proxy o örneğe okuma isteği göndermeyi durdurur ve istekleri sağlıklı örneklere yönlendirir. Örnek kurtarıldığında proxy okuma isteklerini o örneğe otomatik olarak yeniden göndermeye başlar.
Okuma yolunda tek hata noktasından (SPOF) kaçınmak için en az iki salt okunur RDS örneği oluşturun.
Yapılandırılabilir yönlendirme ağırlıkları ve eşikleri
Okuma işlemlerinin nasıl dağıtılacağını kontrol etmek için birincil RDS örneğine ve her bir salt okunur RDS örneğine okuma ağırlıkları atayın. Bir salt okunur örneğin okuma isteklerini karşılamak için çok geride kaldığı anı tanımlamak üzere bir çoğaltma gecikme süresi eşiği belirleyin.
İstekler nasıl yönlendirilir?
Salt okunur RDS örnekleri yalnızca okuma işlemlerine hizmet verir; yazma işlemlerini kabul etmez:
| İşlem türü | Birincil RDS örneği | Salt okunur RDS örnekleri |
|---|---|---|
| Yazma (INSERT, UPDATE, DELETE, SELECT FOR UPDATE) | Evet | Hayır |
| Okuma (SELECT) | Evet | Evet |
Aşağıdaki tabloda tüm istek türleri için tam yönlendirme davranışı gösterilmektedir.
| Hedef | İstek türleri |
|---|---|
| Yalnızca birincil RDS örneği | INSERT, UPDATE, DELETE ve SELECT FOR UPDATE deyimleri; DDL işlemleri (veritabanı ve tablo oluşturma veya silme, şema veya izinleri değiştirme); işlem içindeki istekler; kullanıcı tanımlı işlev çağrıları; saklı yordam çağrıları; çoklu deyimler; geçici tabloları içeren istekler; sistem tabloları için okuma ve yazma istekleri; hazırlanmış deyimlerdeki yazma işlemleri |
| Birincil RDS örneği veya salt okunur RDS örnekleri | İşlem içinde olmayan SELECT deyimleri; işlem bölme etkinleştirildiğinde bir işlemin ilk yazmasından önceki istekler; hazırlanmış deyimlerdeki okuma işlemleri; salt okunur örneklerde çalıştırılması güvenli olan sistem işlevleri (örneğin, pg_sleep) |
| Birincil RDS örneği ve salt okunur RDS örnekleri | Sistem değişkeni yeniden yapılandırma istekleri; hazırlanmış deyimlerdeki ayrıştırma işlemleri; BEGIN, START, END, ROLLBACK ve COMMIT; CANCEL |
Çoklu deyimleri yürüttükten veya saklı yordamları çağırdıktan sonra mevcut bağlantıdaki sonraki tüm istekler birincil RDS örneğine iletilir. Okuma/yazma ayrımını yeniden başlatmak için mevcut bağlantıyı kapatın ve yeni bir bağlantı açın.