- AWS द्वारा बनाया गया और जारी किया गया PostgreSQL के लिए active-active replication extension
- जब कई PostgreSQL instances में data write और modify करना ज़रूरी हो, तब उस पारंपरिक active-standby model की जगह, जिसमें केवल एक specific instance ही changes स्वीकार करता है, कई instances पर एक साथ changes और replication संभव करने वाली संरचना बनाई जा सकती है
- यह high-availability database configuration को कई regions में बनाने, write latency को कम करने, application के blue/green updates, और bidirectional data migration जैसे scenarios के लिए उपयुक्त है
- logical replication का उपयोग करके conflict detection, write conflict resolution, target database format conversion आदि को support करता है
active-active replication की अवधारणा
- replication वह तकनीक है जो databases के बीच changes को synchronize करती है
- PostgreSQL की पारंपरिक active-standby architecture में केवल एक instance changes स्वीकार करता है और बाकी read-only रहते हैं, इसलिए एक ही स्थान single data source की भूमिका निभाता है
- pgactive active-active replication topology प्रदान करता है, जिससे कई instances पर एक साथ data write करना संभव होता है
- यह तरीका उन environments के लिए उपयुक्त है जहाँ कई write points की आवश्यकता होती है, जैसे multi-region deployment या bidirectional migration
- active-active model में conflicts, latency, और कुछ feature limitations के लिए अलग प्रबंधन की आवश्यकता होती है
मुख्य तकनीक: logical replication
- logical replication डेटा को ऐसे format में भेजता है जिसे external systems समझ सकें
- logical replication के माध्यम से target database पर conflict detection, write conflict resolution, query transformation जैसे कई अतिरिक्त features लागू किए जा सकते हैं
- PostgreSQL ने 2017 में version 10 से basic logical replication को शामिल किया था, लेकिन active-active replication के लिए अतिरिक्त capabilities की आवश्यकता होती है
- PostgreSQL की design characteristics के कारण, इन capabilities को extension के रूप में विकसित और लागू किया जा सकता है
- PostgreSQL developer community भी धीरे-धीरे इन सुविधाओं को मुख्य project में जोड़ रही है
1 टिप्पणियां
Hacker News राय
सबसे पहले आया और आज भी open source रहने वाला BDR1 है (लिंक), और pgactive उसी पर आधारित है
BDR2, BDR1 का closed source rewrite था, और अंततः उसे छोड़ दिया गया
pglogical v1 और v2 (दोनों open source, लिंक) जारी किए गए, जिनमें से v1 को बड़े पैमाने पर संशोधित करके Postgres 10 में merge किया गया
Postgres 10 की logical replication फीचर के अनुभव के आधार पर 2nd Quadrant ने pglogical v2 का विकास शुरू किया, और pgEdge भी यहीं से निकला
बाद में 2nd Quadrant ने closed source versions, pglogical v3 और BDR v3 बनाए, और दोनों मिलकर BDR v4 बने
उसके बाद BDR का product name बदलकर Postgres Distributed(PGD, लिंक) कर दिया गया
2ndQuadrant के EDB द्वारा अधिग्रहण के बाद EDB ने PGD v6 जारी किया
conflict होने पर timestamp के आधार पर आख़िर में लिखा गया value ही अंतिम रूप से लागू होता है
conflict हुए रिकॉर्ड pgactive_conflict_history नाम की special table में रह जाते हैं, इसलिए history देखना और manual resolution करना संभव है
अधिक जानकारी और docs के लिए यहाँ देखें
अगर इस फीचर को आधिकारिक रूप से Postgres में स्वीकार किया जा सके, तो यह दिलचस्प होगा
उदाहरण के लिए, production या staging से data पढ़ना हो, लेकिन बदलाव सिर्फ local में किए जा सकें और वे वापस upstream में न जाएँ—ऐसा secondary database चाहिए
अभी आम तौर पर cron जैसी scripts से नियमित data dump या queries चलाकर snapshot बनाया जाता है, उसे S3 में रखा जाता है, फिर local में डाउनलोड करके data restore किया जाता है
यह तरीका ज़्यादातर असरदार है, लेकिन कभी-कभी index build में बहुत समय लग जाता है
कानूनी और नैतिक मुद्दे बड़े होते हैं, इसलिए ज़्यादातर कंपनियाँ यह तरीका recommend नहीं करतीं
इससे primary पर असर डाले बिना सिर्फ local tables बदली जा सकती हैं
createdb --templateकमांड की सिफारिश की गईऐसा कोई merge strategy आसानी से नहीं सूझता जो हर स्थिति पर लागू हो
replica पर writes रोकी नहीं जातीं, बस उनके नतीजे दूसरी जगह propagate नहीं होते
सबसे अच्छा है architecture को इस तरह design करना कि सभी active instances में लिखे जाने वाले data areas आपस में overlap न करें
ऐसे मामलों में pgactive जैसा tool उपयोगी हो सकता है
नहीं तो शुरुआत से ही किसी distributed database (जैसे Yugabyte) का उपयोग करना ज़्यादा सही हो सकता है
सभी masters सभी schema पढ़ सकते हैं, लेकिन write केवल वही करे जिसकी ज़िम्मेदारी हो
schema के अलावा partition जैसी तकनीकें भी क्या ज़िम्मेदारी बाँटने में काम आ सकती हैं, यह पूछा गया
अपने products में वे इस feature का सीधा उपयोग कहाँ करते होंगे, यह स्पष्ट नहीं है
RDS block replication इस्तेमाल करता है, Aurora अपना अलग SAN replication इस्तेमाल करता है
अंदाज़ा है कि शायद DMS जैसे उपयोग के लिए इरादा रहा हो
मजबूत ACID relational database में इसकी ज़रूरत क्यों पड़े, इस पर संदेह है
लेकिन 1 महीने पहले इसे community के लिए open source के रूप में आधिकारिक तौर पर जारी करने की खबर आई थी (आधिकारिक समाचार)
रात में चैन से सोने के लिए इससे जितना हो सके बचना बेहतर है
patroni+etcd+haproxy संयोजन की काफ़ी सिफारिश होती दिखती है, और जिन्होंने वास्तव में इसका उपयोग किया है उनके उत्साह को देखकर लगता है कि इसके पीछे वजह होगी
हालाँकि docker compose पर आधारित example files देखकर यह थोड़ा भारी लगा
pgpool अपेक्षाकृत सरल लगता है क्योंकि उसे बस हर postgres के आगे रखना होता है
वास्तविक production काम में Postgres पसंद करने वाले लोगों की सिफारिशें या अनुभव जानने की जिज्ञासा है
लक्ष्य है docker compose आधारित setup के साथ जितना संभव हो उतना आसान, high availability, (कम-से-कम) minimal loss, और point-in-time recovery वाला cluster बनाना
<i>Pgactive: Active-Active Replication Extension for PostgreSQL on Amazon RDS</i>
Hacker News पोस्ट (अक्टूबर 2023 की पोस्ट, 1 comment)
यानी हर किसी को अपनी परिस्थिति के अनुसार इसके फ़ायदे और नुकसान स्वीकार करने होंगे