- पिछले हफ़्ते Uber के अतिरिक्त purpose-built ledger-style database, LedgerStore(LSG), का अध्ययन किया गया था.
- इस हफ़्ते यह देखा गया है कि Uber ने अपने business-critical ledger डेटा को LSG में कैसे migrate किया.
- 1 trillion से अधिक entries (कई petabytes डेटा) को बिना रुकावट और पारदर्शी तरीके से कैसे move किया गया, और इस प्रक्रिया में क्या सीखा गया, इस पर चर्चा की गई है.
इतिहास
- Gulfstream, Uber का payments platform है, जिसे 2017 में DynamoDB का उपयोग करके launch किया गया था.
- Uber के scale पर DynamoDB महँगा पड़ने लगा, इसलिए केवल 12 हफ़्तों का डेटा (hot data) DynamoDB में रखा गया और पुराना डेटा (cold data) Uber के blobstore, TerraBlob, में store किया जाने लगा.
- लंबी अवधि के समाधान के रूप में LSG का उपयोग करना लक्ष्य था. LSG को payments-style डेटा store करने के लिए purpose-built बनाया गया था.
- LSG की मुख्य विशेषताएँ:
- verifiable immutability (cryptographic signatures का उपयोग कर यह सत्यापित किया जा सकता है कि records बदले नहीं गए हैं)
- cost management के लिए tiered storage (hot data को request serve करने के लिए उपयुक्त स्थान पर, cold data को storage-optimized स्थान पर रखा जाता है)
- eventually consistent secondary indexes के latency में सुधार
- 2021 तक Gulfstream डेटा store करने के लिए DynamoDB, TerraBlob, और LSG के संयोजन का उपयोग कर रहा था.
- DynamoDB: पिछले 12 हफ़्तों का डेटा
- TerraBlob: cold data
- LSG: डेटा लिखने और migration के target के रूप में
migration क्यों करना था?
- immutability के कारण LSG, ledger-style डेटा store करने के लिए अधिक उपयुक्त है.
- LSG पर जाने से recurring cost savings काफ़ी अधिक थीं.
- तीन storage systems से एक storage system पर आने से Gulfstream service के code और design को सरल बनाया जा सकता था.
- LSG ने कम indexing latency का वादा किया, और Uber के data centers के भीतर on-premises चलने के कारण तेज़ network latency भी प्रदान की.
डेटा की प्रकृति से जुड़े जोखिम
- migrate किया जाने वाला डेटा 2017 के बाद से Uber का पूरा business ledger डेटा था:
- immutable records: compressed size 1.2 PB
- secondary indexes: uncompressed size 0.5 PB
- immutable records को बदला नहीं जा सकता, जबकि secondary index डेटा में समस्याएँ ठीक करने के लिए संशोधन की कुछ flexibility होती है.
validation
- यह सुनिश्चित करने के लिए कि backfill हर पहलू में सही और स्वीकार्य है, यह जाँचना ज़रूरी था कि क्या यह current traffic संभाल सकता है और जो डेटा अभी access नहीं हो रहा वह भी सही है.
- validation criteria:
- completeness: क्या सभी records backfill किए गए
- correctness: क्या सभी records सही हैं
- load: क्या LSG वर्तमान load संभाल सकता है
- latency: क्या LSG की P99 latency स्वीकार्य सीमा में है
- lag: क्या secondary index generation lag स्वीकार्य सीमा में है
shadow validation
- migration से पहले और बाद के responses की तुलना की गई ताकि current traffic डेटा migration समस्याओं या code bugs से प्रभावित न हो.
- shadow validation के ज़रिए यह सुनिश्चित किया गया कि backfill कम-से-कम 99.99% complete और correct है, और upper bound 99.9999% रखा गया.
- shadow validation ने यह जाँचने में मदद की कि LSG production traffic संभाल सकता है, और data access code पर भरोसा दिया.
- shadow validation ने वर्तमान में access हो रहे डेटा की completeness और correctness पर विश्वास प्रदान किया.
offline validation और incremental backfill
- LSG के पूरे डेटा की तुलना DynamoDB के data dump से की गई.
- offline validation यह सुनिश्चित करने के लिए था कि data backfill सही तरीके से हुआ है, और यह पूरे डेटा को कवर करता है.
- offline validation को shadow validation के साथ किया जाना चाहिए.
backfill की समस्याएँ
- हर backfill जोखिमपूर्ण होता है. Uber ने backfill के लिए Apache Spark का उपयोग किया.
- समस्याओं से निपटने के तरीके:
- scalability: छोटे scale से शुरू करके धीरे-धीरे विस्तार करना
- incremental backfill: डेटा को छोटे batches में बाँटकर backfill करना
- rate control: backfill jobs की गति नियंत्रित करना
- dynamic rate control: मौजूदा system state की निगरानी करके गति समायोजित करना
- emergency stop: overload की आशंका होने पर backfill को जल्दी रोक सकने की क्षमता देना
- data file size: data dump files का आकार उचित रखना
- fault tolerance: data quality/corruption समस्याओं को संभालना
- logging: logs को सीमित रखना ताकि logging infrastructure पर बोझ न पड़े
जोखिम कम करना
- विभिन्न validation और backfill statistics का विश्लेषण किया गया और LSG का rollout सावधानीपूर्वक किया गया.
- शुरुआत में, यदि backfill विफल हो जाए तो DynamoDB से डेटा लाने वाला fallback इस्तेमाल किया गया.
- fallback logs की जाँच कर यह सुनिश्चित किया गया कि LSG में वास्तव में डेटा missing नहीं है.
निष्कर्ष
- इस लेख में बड़े पैमाने पर business-critical ledger डेटा को एक data store से दूसरे data store में migrate करने की प्रक्रिया को कवर किया गया है.
- migration criteria, validation, backfill समस्याएँ, और safety सहित कई पहलुओं पर चर्चा की गई.
- 2 साल में migration बिना किसी interruption या outage के पूरा किया गया.
GN⁺ की राय
- data migration का महत्व: बड़े पैमाने का data migration जटिल और जोखिमपूर्ण होता है, लेकिन cost savings और system simplification के ज़रिए लंबे समय में बड़े फ़ायदे देता है.
- shadow validation की उपयोगिता: shadow validation एक शक्तिशाली tool है, जो वास्तविक traffic को प्रभावित किए बिना डेटा की completeness और correctness की जाँच कर सकता है.
- offline validation की आवश्यकता: shadow validation से न दिखने वाली समस्याएँ खोजने के लिए offline validation भी आवश्यक है.
- backfill का चरणबद्ध दृष्टिकोण: backfill jobs को छोटे batches में बाँटकर चरणबद्ध तरीके से चलाना system overload रोकने में प्रभावी है.
- emergency stop feature: backfill के दौरान समस्या आने पर तुरंत रोक सकने की क्षमता system stability बनाए रखने के लिए महत्वपूर्ण है.
1 टिप्पणियां
Hacker News राय
Hacker News टिप्पणियों का संक्षिप्त सार
प्रति तिमाही 2 billion rides
DynamoDB का खराब उपयोग
Google के reject किए हुए प्रोजेक्ट
एक single server पर SQLite
LedgerStore open source नहीं है
custom infrastructure का दौर
महंगा proprietary cloud
TigerBeetle पर विचार किया?
DynamoDB महंगा है
टीम चलाने की लागत