डेटाबेस शार्डिंग और प्रतिकृति
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
आईगेमिंग प्लेटफार्मों के लिए, ट्रैफिक ग्रोथ (दांव, जमा, पीएसपी वेबहूक, गेम इवेंट्स) और उपलब्धता आवश्यकताएं (≈99। 9–99. 99%) जल्दी से एक डीबी की सीमा से टकराया। प्रतिकृति क्षैतिज रीड स्केलिंग और गलती सहिष्णुता प्रदान करती है; शार्डिंग - रिकॉर्ड और डेटा का क्षैतिज स्केलिंग। कुंजी PACELC (विफलता के बाद: CA/P, अन्यथा: लेटेंसी बनाम कंसिस्टेंसी), स्पष्ट SLO और योजना/प्रमुख अनुशासन का सचेत समझौता है।
शर्तें और मॉडल
प्रतिकृति - साइटों के बीच डेटा की प्रतिलिपि।
नेता-अनुयायी (प्राथमिक-प्रतिकृति): एक प्रविष्टि - कई पढ़ ते हैं।
बहु-नेता (सक्रिय-सक्रिय): कई क्षेत्रों में प्रविष्टियाँ, संघर्ष/विलय।
सर्वसम्मति-प्रतिकृति (रफ/पैक्सोस, न्यूएसक्यूएल): कोरम रिकॉर्ड (कैसेंड्रा/स्काइला - एपी कोरम, कॉकरोचडीबी/युगाबाइट - सीपी कोरम)।
सिंक/सेमी-सिंक/Async: देरी संतुलन बनाम RPO।
शार्ड द्वारा तालिकाओं/कुंजियों का शार्डिंग - क्षैतिज विभाजन।
हैश-शार्डिंग (एकरूपता, कठिन रेंज)।
रेंज-शार्डिंग (प्रमुख रेंज, हॉट एंड रिस्क)।
लगातार हैशिंग।
भू-शार्डिंग (क्षेत्र/क्षेत्राधिकार द्वारा)।
कार्यात्मक शार्डिंग (डोमेन द्वारा: भुगतान/दरें/सीआरएम)।
IGaming में कब और क्या चुनना है
प्रतिकृति केवल (कोई शार्डिंग नहीं) - जब मुख्य समस्या पढ़ रही है: घटना फ़ीड, रिपोर्ट, सार्वजनिक निर्देशिका। रिकॉर्ड एक नेता में रखे जाते हैं, प्रतिकृतियों से पढ़ ते हैं।
शार्डिंग - जब राइट/होल्ड अड़ चन: दर प्रवाह, बैलेंस शीट लेनदेन, ट्रिगर इवेंट्स।
बहु-क्षेत्र:- खिलाड़ी/PSP विलंबता - स्थानीय प्रतिकृतियों से पढ़ ता है।
- विनियमन (डेटा स्थानीयकरण) → भू-शार्डिंग।
- Interregional DR asynchronous प्रतिकृति + स्विचओवर योजना।
PACELC और वारंटी गुण
सीएपी: एक विभाजन नेटवर्क के साथ, सी (स्थिरता) या ए (उपलब्धता) का चयन करें।
PACELC: यदि कोई विफलता नहीं है, तो लेटेंसी (L) और कंसिस्टेंसी (C) के बीच चयन करें।
नकद तरीके: आमतौर पर सी-ओरिएंटेड (सीपी/सख्त क्रमबद्ध या क्रमबद्ध + व्यावसायिक पहचान)।
कम महत्वपूर्ण सबसिस्टम (लॉग क्लिक, निर्देशिका): एल-उन्मुख (एपी/ईसी, अंतिम)।
प्रतिकृति अभ्यास
नेता-अनुयायी
→ नेता लिखते हैं, पढ़ ते हैं, → स्केलिंग पढ़ें।
पढ़ें-बाद में लिखें: उपयोगकर्ता संचालन के लिए, नेता से पढ़ें या लैग के लिए इंतजार करें ('अंतिम _ devent _ lsn '/' wate _ for _ repay _ lg').
महत्वपूर्ण रास्तों पर अर्ध-सिंक (विलंबता की लागत पर आरपीओ में कमी)।
विफल: स्वचालित (संरक्षक/बेड़ासमन्वयक) + बाड़ लगाना (ताकि कोई दोहरा नेता न हो)।
बहु-नेता
विभाजन डोमेन और कम विरोध के लिए उपयुक्त (उदा। सामग्री/सेटिंग्स), लेकिन विशेष उपायों के बिना एक खिलाड़ी खाते के लिए
नीतियों का विलय करें: अंतिम-राइट-विन, सीआरडीटी, डोमेन समेकन नियम।
सर्वसम्मति/कोरम डेटाबेस
कोरम लेखन (उदा। 'लिखें QUORUM'), कोरम पढ़ें ('READ QUORUM') → मजबूत/कॉन्फ़िगरेबल स्थिरता।
अंतर-AZ/क्षेत्र विलंबता और कोरम लागत पर विचार करें।
शार्डिंग: रणनीतियाँ और प्रमुख विकल्प
कुंजी कैसे चुनें
द्वारा स्थिर वितरण।
रेंज-शार्डिंग में नीरस कुंजी (ऑटो-वेतन वृद्धि) से बचें - "हॉट" पूंछ।
भुगतान के लिए - अक्सर 'player _ id' या 'खाता _ id'; लॉग के लिए - 'इवेंट _ टाइम' + बकेटिंग; सामग्री के लिए - 'किरायेदार _ id'।
रणनीति
Hash द्वारा हैश-शार्डिंग: दरों/संतुलन के प्रवाह पर संतुलन।
एनालिटिक्स/अभिलेखागार के लिए रेंज-आधारित समय-आधारित शार्डिंग।
जियो-शार्डिंग: यूरोपीय संघ के खिलाड़ी - यूरोपीय संघ-शार्द (स्थानीय कानूनों का अनुपालन)।
हाइब्रिड: क्षेत्राधिकार द्वारा क्षेत्र + भू के भीतर हैश।
गर्म कुंजियों से लड़ ना
कुंजी-नमकीन (कुंजी में नमक/बाल्टी जोड़ें)।
राइट-थ्रॉटलिंग अनिवार्य रूप से एक कमांड कतार (धारावाहिक निष्पादक) है।
एक अनुक्रम कतार के साथ एक अलग पंक्ति में "समुच्चय" (संतुलन) को भौतिक बनाएं।
क्रॉस-शार्ड संचालन
धन हस्तांतरण/मुआवजा: गर्म पटरियों पर 2PC से बचें।
सागा पैटर्न: स्थानीय लेनदेन + प्रतिपूरक क्रियाओं, कठिन पहचान और आउटबॉक्स में विभाजित।
2PC/commit प्रोटोकॉल: अनुमेय बिंदु (बैक-ऑफिस बैच), लेकिन विलंबता और दोष सहिष्णुता में महंगा।
अनुमान: क्रॉस-डोमेन स्क्रीन के लिए मॉडल पढ़ें, धारा से अद्यतन।
योजनाएं, सूचकांक और विकास
स्कीमा वर्शनिंग: बैक-कॉम्पैट से माइग्रेशन, कोड पर फीचर-फ्लैग।
शेडिंग कुंजियों और लगातार प्रश्नों पर सूचकांक; क्रॉस-शार्ड में शामिल होने से बचें (पूर्व-शामिल/विखंडन करें)।
JSON/डॉकिंग स्टोरेज के लिए - "शोर" संग्रह के लिए मान्य योजनाएं (JSON-Schema/Protobuf) और TTL।
ऑनलाइन स्केलिंग और री-हार्डिंग
वर्चुअल शार्ड्स (स्लॉट) → लचीले असंतुलन की संख्या को N≫tekushcheye करने की योजना।
नरम नोड जोड के लिए लगातार हैशिंग या "वर्चुअल नोड्स"।
ऑनलाइन पुनर्वास:- डबल एंट्री (पुराना + नया शार्ड), स्थिरता सत्यापन;
- चंक की पृष्ठभूमि प्रतियां (तार्किक डंप/टेबल चाल/स्ट्रीमिंग क्लोन);
- "मार्कर" + अवलोकन विंडो द्वारा स्विच करें, फिर डबल-रिकॉर्ड।
- डाउनटाइम के बिना नेता को स्थानांतरित करना: भूमिकाओं को स्विच करना, कनेक्शन
एसएलओ, अवलोकन और सतर्कता
SLO राइट/रीड: हॉट टेबल पर p99 ≤ X ms, वैध लैग प्रतिकृतियां ≤ Y सेकंड, उपलब्धता ≥ Z.
मेट्रिक्स: TPS, p95/p99, प्रतिकृति लैग, मल्टी-लीडर, रीट्री रेट, डेडलॉक, लॉक वेट, कैश हिट अनुपात, IOPS/लेटेंसी डिस्क।
ट्रेस: डेटाबेस अनुरोध में 'ट्रेस _ आईडी', ब्रोकर/इवेंट बस के साथ सहयोगी।
गिरावट का शीघ्र पता लगाने के लिए कैनरी प्रश्न और सिंथेटिक लेनदेन।
सुरक्षा और अनुपालन
विश्राम और पारगमन में गोपन (TLS), कुंजी घुमाव।
आरबीएसी/एसीएल, डोमेन/किरायेदार द्वारा विभाजन, भुगतान/एलसीसी के लिए अलग-अलग समूह।
डेटा स्थानीयकरण (ईयू/टीआर/एलटीएएम) - भू-शार्डिंग और प्रतिधारण नीतियों को मिलाएं।
लेखा परीक्षा: कौन और क्या पढ़ा/नियम; पीआईआई मास्किंग; लेखा परीक्षा निर्यात करें।
बैकअप, पीआईटीआर, डीआर
पूर्ण + वृद्धिशील बैकअप, ऑफसाइट भंडारण।
नेता समूहों के लिए PITR (पॉइंट-इन-टाइम रिकवरी)।
RPO/RTO:- महत्वपूर्ण डोमेन (शेष/भुगतान) - RPO≈0 -30 (अर्ध-सिंक या अक्सर WAL-शिपिंग), स्वचालित विफलता के साथ आरटीओ ≤ मिनट।
- कम महत्वपूर्ण - आरपीओ मिनट/घंटे तक।
- डीआर अभ्यास (खेल दिवस) और एक प्रलेखित स्विच रनबुक।
प्रदर्शन और ट्यूनिंग (संक्षिप्त)
मेमोरी/कैश: बफर्स बढ़ाएं (साझा बफर्स/इनोडब बफर पूल), कैश-हिट ≥ 95% की निगरानी करें।
पत्रिका/इंजन: तेज एनवीएमई, WAL/redo के तहत अलग मात्रा।
कनेक्शन पूल (PgBouncer/Hikari)।
प्लानर/आंकड़े: ऑटो-विश्लेषण/ऑटो-वैक्यूम (पोस्टग्रेस), जीसी संपीड़न/ट्यूनिंग (एलएसएम इंजन)।
कोरम/प्रतिकृति कारक: p99 और गलती सहिष्णुता के बीच संतुलन।
IGaming के लिए विशिष्ट टोपोलॉजी
1) बैलेंस और भुगतान (सीपी-लूप)
खिलाड़ी के क्षेत्र में नेता-अनुयायी, एक करीबी प्रतिकृति के लिए अर्ध-सिंक।
'खाता _ id' द्वारा हैश-शार्डिंग।
रीडिंग "लिखने के बाद" - नेता से; एपीआई-विलंबता के लिए रेडिस के अनुमान।
गणना/एनालिटिक्स के लिए आउटबॉक्स - इवेंट बस।
2) सट्टेबाजी इतिहास/गेमिंग इवेंट्स (एपी-ओरिएंटेड लॉग)
स्तंभ/एलएसएम भंडारण में 'प्लेयर _ आईडी' द्वारा समय या हैश द्वारा रेंज-शार्डिंग।
रिपोर्टिंग/OLAP के लिए अतुल्यकालिक प्रतिकृतियां।
अंततः स्थिरता स्वीकार्य है, बैंडविड्थ अधिक महत्वपूर्ण है।
3) प्रोफाइल/सीआरएम (बहु-क्षेत्र पढ़ा, स्थानीयकरण)
रीडिंग के लिए स्थानीय प्रतिकृतियां, अधिकार क्षेत्र द्वारा भू-शार्टिंग।
निकटतम नेता के माध्यम से प्रविष्टियां; क्रॉस-क्षेत्र - केवल गैर-महत्वपूर्ण क्षेत्रों के लिए अतुल्यकालिक +
उदाहरण (वैचारिक)
पोस्टग्रेस: 'प्लेयर _ id' द्वारा घोषणात्मक शार्टिंग
sql
CREATE TABLE player_wallet (
player_id BIGINT NOT NULL,
balance_cents BIGINT NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (player_id)
) PARTITION BY HASH (player_id);
CREATE TABLE player_wallet_p0 PARTITION OF player_wallet FOR VALUES WITH (MODULUS 32, REMAINDER 0);
--... p1..p31
-- Репликация: публикация WAL на реплики, синхронность для «горячего» региона.
ALTER SYSTEM SET synchronous_standby_names = 'FIRST 1 (replica_eu1, replica_eu2)';
कोरम रिकॉर्डिंग (छद्म)
WRITE CL=QUORUM -- запись подтверждена большинством реплик
READ CL=LOCAL_QUORUM -- локальный кворум для низкой задержки
2PC के बजाय सागा (सरलीकृत)
1. जमा को शार्ड-ए (अज्ञात) पर लिखें।
2. घटना "हटाया" → भुगतान सेवा (शार्ड-बी) भेजें।
3. यदि चरण 2 विफल हो जाता है, तो "वापसी" घटना के साथ चरण 1 की क्षतिपूर्ति करें।
कार्यान्वयन चेकलिस्ट
1. डेटा डोमेन और SLO (p99, RPO/RTO, प्रतिकृति लॉग) को परिभाषित करें।
2. प्रतिकृति मॉडल (नेता/अनुयायी, कोरम) और शार्डिंग रणनीति का चयन करें।
3. शार्डिंग कुंजी और योजना को ठीक करें (अपरिवर्तनीय!)।
4. रीड-आफ्टर-राइट पॉलिसी टाइप करें और रूटिंग पढ़ें।
5. ऑनलाइन पुनर्विक्रय (आभासी शार्क, डबल प्रविष्टि) डिजाइन करें।
6. घटनाओं/कमांड के लिए पहचान और आउटबॉक्स सुनिश्चित करें।
7. बैकअप, पीआईटीआर, डीआर और नियमित अभ्यास सेट करें।
8. अवलोकन शामिल करें: लैग, कोरम, हॉट कुंजी, विरोधाभास।
9. दस्तावेज़ रनबुक: विफल, विभाजित-मस्तिष्क, गिरावट।
10. मैच चोटियों के नीचे लोड/अराजकता परीक्षण करें।
एंटी-पैटर्न
एक विशाल शार्क "सब कुछ के लिए" और "फिर काट दिया।"
क्रॉस-शार्ड अनुरोध के गर्म तरीके से शामिल होते हैं।
कोई रीड-आफ्टर राइट पॉलिसी (फ्लोटिंग बग्स) नहीं।
योजनाओं के प्रवासन "ब्रेकिंग" शार्डिंग कुंजी।
सख्त संघर्ष समाधान के बिना नकद खातों के लिए बहु-नेता।
कोई PITR/DR - तार्किक त्रुटि से उबरने में असमर्थ।
परिणाम
प्रतिकृति हल पढ़ ता है और लचीलापन, शार्डिंग हल लिखता है और मात्रा। IGaming में सफल वास्तुकला स्पष्ट SLO और PACELC समझौता, स्थिर शार्डिंग कुंजियां, न्यूनतम क्रॉस-शार्ड समन्वय (2PC के बजाय गाथा), पढ़ ने के बाद अनुशासन, ऑनलाइन पुनर्जीवन और नियमित DR VarKs। यह दृष्टिकोण टूर्नामेंट चोटियों के लिए तराजू, डेटा स्थानीयकरण पर नियामक प्रतिबंधों का सामना करता है और संचालन में अनुमानित रहता है।