در سال ۲۰۱۴، اگر میخواستی سرورهای Postgres را در چند قاره داشته باشی که هر کدام قابلیت نوشتن و اشتراکگذاری دادهها را داشته باشند، تنها راهحل جدی open source، BDR از 2ndQuadrant بود. این راهحل نیاز به PostgreSQL 9.4 اصلاحشده و یک پلاگین داشت، به این معنی که به سروری نیاز بود که Postgres نبود. طی ده سال کار بر روی replication منطقی، بیشتر نیازهای BDR به سرور اصلی منتقل شده است. در این مقاله، با استفاده از Postgres 19 release candidate 1 و ابزار pg_auto_failover، همان نوع سیستم را میسازیم تا ببینیم این پیشرفتهای تدریجی ما را تا کجا رسانده و چه چیزهایی باقی مانده است.
این مقاله آخرین بخش از سری مقالاتی درباره replication منطقی است و به تنهایی نیز قابل فهم است. در بخش اول، سیستمی از نوع hub-and-workers برای افزایش قابلیت نوشتن ساختیم، در بخش دوم چندین database را در یک انبار داده تجمیع کردیم و در بخش سوم یک ارتقاء بزرگ بدون توقف انجام دادیم.
در این مقاله، پنج منطقه با استفاده از گروههای pg_auto_failover و replication منطقی اصلی ساختیم و با کشتن primaryها تحت بار آنها را آزمایش کردیم. هر ردیف تأیید شده زنده ماند، هر منطقه با همان ردیفها به پایان رسید و یک منطقه پنجم با پنج دستور و بدون توقف به سیستم در حال اجرا پیوست. هسته اکنون کارهای سخت را انجام میدهد: فیلترهای ردیف، جلوگیری از حلقه، slotهای ایمن در مقابل failover، همگامسازی sequence و شمارش تضادها. هنوز DDL را تکرار نمیکند، بنابراین تغییرات schema یک توقف کوتاه دارند یا از pglogical یا pgcopydb استفاده میشود وقتی توقف گزینهای نیست. همچنین تضادها را حل نمیکند یا شناسههای یکتا به چند نویسنده نمیدهد و ما با ساختار از هر دو اجتناب میکنیم.



