Master-master çoğaltma düşündüğünüz kadar iyi değil, aynı şekilde round-robin proxy'ye ve benzer 'kolay' çözümlere gider. Verileri ayrı sunucularda hızlı bir şekilde (üretim sunucularında tam saniyeye kadar sürebilen sunucular arasındaki gecikmeden daha hızlı) ayırmayı taahhüt ederseniz *
, her ikisi de verileri kabul eder. Bir açık artırma sunucunuz varsa, aynı arabayı iki kez sattınız . Kim aldı? Hangi DB'ye soracağınıza bağlıdır!
Uygulama aslında orada 2 veritabanı olduğunu bilmelidir ve her iki ip adreslerini bilmek zorundadır. "Satmak" istiyorsanız, fe gerekir
DB_number = `auction_number` % `number_of_databases`
( %
için modulo
)
... ve DB_number veritabanına kaydeder. Bir bağlantı hatası alırsanız, belki de diğeriyle yapın (ancak bir açık artırma sunucusunda, sadece bir hata görüntülerim).
Ayrıca, IP adreslerinin her iki sunucu arasında wackamole -d olması gerekir . Bir veritabanı sunucusunun en yüksek kullanım süresinde birkaç saatliğine düştüğü bir felaket senaryosunda, uygulamanın yok sunucuya bağlanmaya çalışacağını ve TIMEOUT, örneğin 3s'ye kadar askıda kalacağını göreceksiniz. Anketlerinizin yarısı aniden 3 sn daha uzun süre çalışır (ve sonuçta hepsi aynı veritabanına gider - bu da felaketten daha hızlı çalışmasını sağlamaz). Bu, muhtemelen eşzamanlı istek işleyici iş parçacıklarının sınırlı bir bağlantı havuzuna sahip olduğundan, httpd'nizi mutlu etmez ...
*
üretim sunucularında çoğaltma gecikmesi tam bir saniyeye kadar olabilir - Bunu uzak bir yerde ve veri merkezimizde test ettim ve zamanın yaklaşık% 99'u 0, ancak bazen mysql 1s gösteriyor. Yoğun trafikte, istemci uygulamasının iki sorgulama, ekleme ve seçme ile sonuçlanan iki istekte bulunması nedeniyle birçok çarpışma yaşadım. Bazı durumlarda, satır henüz orada değildi , bu yüzden userID'nin karma değerini kullandık ve sorunu düzelttik
Umarım hatalarımdan öğrenirsin ;-)