GH GambleHub

डेटाबेस शार्डिंग और प्रतिकृति

डाटाबेस शार्डिंग और प्रतिकृति

1) आपको इसकी आवश्यकता क्यों है

जब सीपीयू/आईओ/रैम या एक क्लस्टर के खिलाफ डेटाबेस का ऊर्ध्वाधर उन्नयन समाप्त हो जाता है तो एसपीओएफ, प्रतिकृति (रीड/एचए के लिए) और शार्डिंग (लिखने/डेटा वितरण के लिए) आते हैं। उद्देश्य:
  • थ्रूपुट (QPS क्षैतिज विकास लिखें)।
  • उपलब्धता (तेजी से विफल, विफलता का कोई एक बिंदु नहीं)।
  • डेटा स्थानीयकरण (बहु-क्षेत्र, कम विलंबता)।
  • शोर करने वाले पड़ोसियों का अलगाव (गर्म किरायेदार/गर्म कुंजी)।

2) बुनियादी शर्तें और स्थिरता मॉडल

प्राथमिक/नेता - प्रतिकृति/अनुयायी: नेता पर लिखें, प्रतिकृतियों पर पढ़ें।

तुल्यकालिक प्रतिकृति: एन नोड्स (कम आरपीओ, उच्च विलंबता) पर लिखने के बाद लेनदेन की पुष्टि।

अतुल्यकालिक: नेता प्रतिबद्ध है और बाद में लॉग भेजता है (RPO> 0, कम विलंबता)।

कोरम (बेड़ा/पैक्सोस): अधिकांश नोड्स को लिखना; एक लॉग, स्वचालित नेता।

रीड-आफ्टर-राइट: इसके रिकॉर्ड्स की गारंटी (देखें) 5)।

हम इस तरह की बिक्री में सीएपी पढ़ ते हैं: नेटवर्क समस्याओं के मामले में, आप महत्वपूर्ण संचालन के लिए स्थिरता (सीपी) या उपलब्धता (एपी) चुनते हैं, अक्सर विभिन्न रास्तों पर स्तरों का संयोजन करते हैं।

3) प्रतिकृति: विकल्प और व्यवहार

3. 1 भौतिक और तार्किक

भौतिक (WAL/redo/binlog): ब्लॉक लॉग के करीब, सरल और तेज; सजातीय टोपोलॉजी/संस्करण तक सीमित।

लॉजिकल: DML/DDL स्ट्रीम पंक्ति/तालिका स्तर पर; आंशिक प्रतिकृतियाँ, क्रॉस-वर्जन माइग्रेशन, DWH/स्ट्रीमिंग के लिए CDC की अनुमति देता है

3. 2 सेटअप और प्रबंधन

लैग मॉनिटर करें (समय/बाइट्स/एलएसएन)।

प्रतिकृतियों पर हॉट-स्टैंडबाय प्रतिक्रिया और लंबे अनुरोधों को सीमित करें (ताकि VACUUM/सफाई को अवरुद्ध न करें)।

MySQL - GTID और ऑर्केस्ट्रेटर के लिए; для PostgreSQL - पैट्रोनी/प्रतिकृति स्लॉट, synchronous_standby_names।

PostgreSQL (तुल्यकालिक प्रतिकृति, टुकड़ा):
sql
-- on leader
ALTER SYSTEM SET synchronous_commit = 'on';
ALTER SYSTEM SET synchronous_standby_names = 'FIRST 1 (standby_a, standby_b)';
SELECT pg_reload_conf();
MySQL GTID (लेनदेन आईडी):
sql
SET GLOBAL enforce_gtid_consistency = ON;
SET GLOBAL gtid_mode = ON; -- restart
CHANGE MASTER TO MASTER_AUTO_POSITION=1;

3. 3 टोपोलॉजी

1→N (नेता → प्रतिकृति) + कैस्केड (प्रतिकृति आगे विलीन हो जाती है)।

बहु-प्राथमिक (सक्रिय-सक्रिय) - सख्त संघर्ष प्रबंधन के बिना OLTP में बचें।

कोरम क्लस्टर (बेड़ा) - कॉकरोचडीबी/युगाबाइट/पीजी-रफ ऐड-ऑन।

4) पढ़ें/लिखें स्प्लिट और रूटिंग

हमेशा एक नेता के रूप में लिखें; संकेत से पढ़ें, लेकिन अंतराल पर विचार करें।

पढ़ ने के बाद लिखने की रणनीति:

1. सत्र चिपचिपाहट: एक सफल रिकॉर्डिंग के बाद, ग्राहक 'टी' के दौरान नेता से पढ़ ता है।

2. LSN/GTID गेट: क्लाइंट का कहना है कि "मैं पुराना LSN = X नहीं प्राप्त करना चाहता हूं", राउटर प्रतिकृति को भेजता है, जिसका LSN ≥ X.

3. बासी-ओके: कुछ प्रश्न बासी डेटा (निर्देशिका/टेप) की अनुमति देते हैं।

उपकरण: Pgbouncer/Pgpool-II (Postgres), ProxySQL/MaxScale (MySQL), Vitess (शार्ड रूटिंग)।

एक LSN गेट (विचार) का उदाहरण: 'pg _ corner _ wal _ lsn ()' को HTTP हेडर/कुकी पर सहेजें और राउटर को 'pg _ last _ wal _ repay _ lsn () ≥ LSN' के साथ प्रतिकृति बनाने की आवश्यकता है।

5) शार्डिंग रणनीतियाँ

5. 1 कुंजी चयन

कुंजी अनुरोधों की एकरूपता और इलाके को सुनिश्चित करेगी:
  • 'किरायेदार _ id '/' user _ id' द्वारा हैश समान रूप से, लेकिन रेंज स्कैन से वंचित करता है।
  • समय/आईडी में रेंज - समय-श्रृंखला/संग्रह के लिए महान, लेकिन हॉट-शार्ड जोखिम।
  • लगातार हैशिंग - शार्क को जोड़ ना/हटाना आसान बनाता है।
  • निर्देशिका/लुकअप तालिका - लचीला (कोई एल्गोरिथ्म), लेकिन अन्य तालिका/कैश।

5. 2 पैटर्न

साझा-कुछ भी नहीं: प्रत्येक शार्ड एक अलग डेटाबेस/क्लस्टर है, एप्लिकेशन रूटिंग जानता है।

मिडिलवेयर-शार्डिंग: विटेस (MySQL), सिटस (पोस्टग्रेस), प्रॉक्सी-लेवल टोपोलॉजी छिपाता है।

फेडरेशन: सेवाओं द्वारा डेटा डोमेन का पृथक्करण (कैटलॉग, भुगतान, ऑथ)।

5. 3 समग्र कुंजियाँ

कुंजी स्थान का उपयोग करें: '{tenant}: {entity}: {id}' और इसे अनुप्रयोग और कैश में संग्रहीत करें. Для पोस्टग्रेस - हैश पार्टिशनिंग + LIST/RANGE सबपार्टिशन।

PostgreSQL पार्टिशनिंग (खंड):
sql
CREATE TABLE orders (
tenant_id int,
id     bigint,
created_at timestamptz,
...,
PRIMARY KEY (tenant_id, id)
) PARTITION BY HASH (tenant_id);

CREATE TABLE orders_t0 PARTITION OF orders FOR VALUES WITH (MODULUS 16, REMAINDER 0);
--... t1..t15

6) आईडी पीढ़ी

शार्डिंग पर "हॉट" नीरस ऑटो-वेतन वृद्धि से बचें।

स्नोफ्लेक जैसे 64-बिट आईडी (समय + क्षेत्र + शार्ड + seq) या ULID/KSUID (एकरसता और वितरण) का उपयोग करें।

Для पोस्टग्रेस - प्रति शार्ड अनुक्रम; MySQL के लिए - ((शार्द नेताओं पर विभिन्न ऑफसेट)।

7) ऑनलाइन ओवरशेयरिंग और माइग्रेशन

प्रमुख सिद्धांत: दोहरे लेखन, पहचान, अस्थायी दोहरे मार्ग।

चरण (सामान्यीकृत):

1. नया शार्ड/क्लस्टर जोड़ें।

2. डुअल रीड (स्थिरता जाँच) सक्षम करें।

3. दोहरे लेखन (दोनों शार्क में), रिकॉर्ड विसंगतियों को शामिल करें।

4. बैकफिल ऐतिहासिक डेटा (बैच, तार्किक/सीडीसी प्रतिकृति)।

5. एक नए शार्ड में "सत्य का स्रोत" स्विच करें; "पूंछ" तुल्यकालन छोड़ दें।

6. पुराने को बंद करो।

उपकरण: Vitess Resharding, Citus चाल shards, pg_logical/pgoutput, Debezium (CDC), gh-ost/pt-online-schema-change (ताले के बिना DDL)।

8) बहु-क्षेत्र और भू-वितरण

प्रति क्षेत्र नेता-अनुयायी: वैश्विक नेता (सरल मॉडल, लेकिन क्रॉस-क्षेत्र आरटीटी) के माध्यम से स्थानीय पढ़ ता है, लिखता है

बहु-नेता: दोनों क्षेत्रों में रिकॉर्डिंग - आपको संघर्ष-मेरिंग (टाइमस्टैम्प/संस्करण/सीआरडीटी) की आवश्यकता है।

सही वितरित SQL (बेड़ा): CockroachDB/Yugabyte - डेटा इस क्षेत्र से "चिपका हुआ" है, प्रश्न स्थानीय कोरम में जाते हैं।

सिफारिशें:
  • धन/आदेश - सीपी (कोरम/नेता), निर्देशिका/टेप - एपी (कैश, अंतिम)।
  • हमेशा एक संभावित विभाजन-मस्तिष्क के साथ बाड़ लगाने (अद्वितीय कुंजी/संस्करण) लिखने की योजना बनाएं

9) व्यवहार में निरंतरता

पढ़ें-आपके लिखते हैं: एलएसएन/जीटीआईडी के साथ नेता या क्यू जो "पकड़ागया"।

मोनोटोनिक पढ़ ता है: अंतिम एलएसएन पढ़ ने की तुलना में "कोई पुराना नहीं"।

विरोध नियंत्रण लिखें: 'चुनें... अद्यतन के लिए ', संस्करण (' xmin '/' rowversion '), संस्करण जाँच के साथ UPSERT।

पहचान: भुगतान/घटनाओं पर पहचान कुंजी।

10) अवलोकन, एसएलओ और अलर्ट

प्रतिकृति लैग: समय (सेकंड), एलएसएन दूरी (बाइट्स), seconds_behind_master (MySQL)।

जबरन रोलबैक/संघर्ष, प्रतिकृति त्रुटियां।

p95/p99 विलंबता по मार्ग (पढ़ें नेता बनाम प्रतिकृति, लिखें)।

थ्रूपुट: TPS/लॉक/रो-कॉन्टेबल्स।

Bloat/VACUUM (PG), InnoDB बफर पूल हिट अनुपात (MySQL)।

डैशबोर्ड: प्रति-शार्ड लोड, "हॉट" शार्क, प्रमुख वितरण।

11) बैकअप, पीआईटीआर और डीआर

PITR (प्वाइंट-इन-टाइम रिकवरी) के लिए पूर्ण बैकअप + WAL/binlog।

दूसरे क्षेत्र/क्लाउड में स्टोर करें, नियमित रूप से परीक्

शार्क के लिए, एक सुसंगत "स्लाइस" (समय समन्वय/एलएसएन) या वसूली पर आवेदनकर्ता की पहचान।

RPO/RTO को गेम-डे पर लिखा और परीक्षण किया जाता है।

PostgreSQL बेस बैकअप (विचार):
bash pg_basebackup -D/backups/base -X stream -C -S slot_replica_1 WAL archiving via archive_command or pgBackRest/Barman

12) सुरक्षा और पहुंच

VPC/ACL द्वारा विभाजन, प्रॉक्सी द्वारा mTLS।

न्यूनतम अधिकारों के सिद्धांत पर भूमिकाएं/अनुदान; व्यक्तिगत उपयोगकर्ता प्रति शार्ड/भूमिका

ऑडिट डीडीएल/डीसीएल, प्रतिकृतियों पर "भारी" अनुरोधों पर सीमित है।

विश्राम (KMS) और पारगमन (TLS) में एन्क्रिप्शन।

पैनिक बटन: घटना/जांच की अवधि के लिए ग्लोबल 'रीड ओनली'।

13) उपकरण और ईंटें

PostgreSQL: Patroni (HA), Pgbouncer (पूलिंग/RO-routing), Repmgr, pgBackRest/Barman (бэкап), Citus (шардинг), pglogical/logical Replication, pgbadger/pg_stat_statements।

MySQL: ऑर्केस्ट्रेटर (टोपोलॉजी/ऑटो-फेलओवर), प्रॉक्सीस्क्यूएल/मैक्सस्केल (रूटिंग), पेरकोना एक्सट्राबैकअप (बैकअप), ग्रुप रेप्लिकेशन/इनोडीबी क्लस्टर, विटेस (शार्डिंग/रेसिंग)।

वितरित SQL: CockroachDB, YugabyteDB (कोरम, बिल्ट-इन शार्डिंग/जियोलोकेशन)।

सीडीसी: घटनाओं/ईटीएल के लिए डेबेजियम + काफ्का/पल्सर।

14) एंटी-पैटर्न

ऑटो-फेलओवर के बिना और डीआर परीक्षणों के बिना एकल-प्राथमिक।

"मैजिक" लैग-फैंटम त्रुटियों/संदिग्ध कीड़े को छोड़ कर रीड-स्प्लिट।

शार्डिंग "शार्डिंग के लिए": ऊर्ध्वाधर पैमाने/सूचकांक/कैश के बजाय समय से पहले जटिलता।

समय-बाल्टी/हैश-नमक के बिना हॉट रेंज (टाइम-रेंज) - एक शार्ड पिघलता है।

वैश्विक लेनदेन - OLTP में दर्जनों शार्ड के शीर्ष पर - उच्च p99 पूंछ और लगातार ताले।

माइग्रेशन के दौरान डुअल-राइट/डुअल-रीड की कमी → सिंक से हानि/आउट।

ऑनलाइन टूल्स के बिना और बिना संगतता के फ्लैग्स में डीडीएल।

15) कार्यान्वयन चेकलिस्ट (0-60 दिन)

0-15 दिन

DB SLO, RPO/RTO को परिभाषित करें।

प्रतिकृति, लैग मॉनिटरिंग, बेसिक बैकअप + PITR सक्षम करें।

राउटर (PgBouncer/ProxySQL) और रीड-आफ्टर राइट पॉलिसी भरें.

16-30 दिन

एक शार्डिंग रणनीति चुनें, कुंजियों और योजनाओं का वर्णन करें।

ओवर-चार्जिंग टूल (Vitess/Citus/CDC) तैयार करें।

सेवाओं/तालिकाओं की निर्देशिका "रीड-स्टेल-ओके" बनाम "सख्त" चिह्नित है।

31-60 दिन

पायलट-शार्ड, डुअल-रीड और बैकफिल चलाएं।

खेल-दिवस: नेता विफल, पीआईटीआर से वसूली, क्षेत्र स्विच।

हॉट शार्ड कुंजी और असमानता रिपोर्टिंग स्वचालित करें।

16) परिपक्वता मैट्रिक्स

प्रतिकृति अंतराल p95 <लक्ष्य (उदा। 500 ms) महत्वपूर्ण पढ़ ने के लिए।

सफल डीआर परीक्षण 1/तिमाही (RTO को बहाल करें, RPO का नुकसान)।

शार्ड द्वारा वितरण लोड करें: असंतुलन <20% QPS/भंडारण द्वारा।

सख्त-स्थिरता के साथ अनुरोधों का प्रतिशत सही ढंग से रूट = 100%।

सीपी गारंटी (धन/आदेश) की आवश्यकता वाली घटनाओं में शून्य-डेटा-हानि।

ऑनलाइन DDL/माइग्रेशन डाउनटाइम के बिना, संगतता झंडे के साथ।

17) नुस्खा उदाहरण

समय-सीमा के लिए हैश-नमक (ताकि एक शार्क को गर्म न करें):
sql
-- calculate bucket = hash (user_id)% 16, store (bucket, created_at)
PARTITION BY LIST (bucket) SUBPARTITION BY RANGE (created_at)
रीड-माय-राइट्स मिडिलवेयर (स्यूडोकोड):
python lsn = db. leader_query("SELECT pg_current_wal_lsn()")
ctx. sticky_until = now()+5s ctx. min_lsn = lsn in the read router: select a replica with last_lsn> = ctx. min_lsn, otherwise the leader
Vitess VSchema (टुकड़ा):
json
{
"tables": {
"orders": { "column_vindexes": [{ "column": "tenant_id", "name": "hash" }] }
}
}

18) निष्कर्ष

शार्डिंग और प्रतिकृति न केवल एक तकनीक है, बल्कि प्रक्रियाएं भी हैं: स्थिरता-जागरूक मार्ग, प्रवासन अनुशासन (दोहरी-लिखना/पढ़ना, बैकफिल), नियमित डीआर परीक्षण, और लैग/हॉट शार्ड अवलोकन। एक सरल + रीड-आफ्टर-राइट leader→replica के साथ शुरू करें, फिर शार्डिंग जोड़ें जहां लोड प्रोफाइल को वास्तव में इसकी आवश्यकता होती है। तैयार किए गए प्लेटफार्मों (Vitess/Citus/वितरित SQL) का उपयोग करें और CP मोड में व्यवसाय-महत्वपूर्ण डेटा रखें - इस तरह आधार एक अड़ चन बन जाएगा और प्लेटफ़ॉर्म का एक पूर्वानुमान, लोचनात्मक नींव बन जाएगा।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।