Litestream v0.5.0
(fly.io)- Litestream v0.5.0 एक ऐसा अपडेट है जो SQLite-आधारित एप्लिकेशनों की resilience को काफ़ी बेहतर बनाता है
- नया LTX फ़ाइल फ़ॉर्मेट पेश किया गया है, जो कुशल Point-In-Time Recovery (PITR) और डेटा compaction को सपोर्ट करता है
- कई Litestream instances के बीच generation की अवधारणा हटा दी गई है, जिससे management और operations सरल हो गए हैं
- JetStream support और modern Go SQLite driver में migration जैसी चीज़ों से development और integration environment अधिक सुविधाजनक हो गया है
- आगे चलकर VFS-आधारित read replicas जैसी और भी शक्तिशाली सुविधाएँ जोड़ी जाएँगी
अवलोकन और प्रमुख अपडेट
- Litestream, SQLite applications के लिए backup और recovery tool है, जो open source है और लगभग कहीं भी चल सकता है
- server failure recovery आसान होने की वजह से, यह SQLite-आधारित full-stack applications बनाने में बेहतर सुरक्षा देता है
- नया संस्करण (v0.5.0) speed improvements और Point-In-Time Recovery (PITR) को सपोर्ट करता है
LiteFS और Litestream का विकास क्रम
- Fly.io के Ben Johnson द्वारा विकसित प्रमुख SQLite-related projects हैं Litestream और LiteFS
- LiteFS, FUSE file system का उपयोग करके database के अंदर transaction-level live replication पर केंद्रित है
- लेकिन बाज़ार की मांग ज़्यादा सरल operations वाले Litestream पर केंद्रित रही, इसलिए LiteFS से मिली तकनीकी सीख को फिर से Litestream में लागू किया गया
LTX फ़ाइल फ़ॉर्मेट की शुरुआत
-
SQLite की पुरानी page-level backup method की सीमाओं और अक्षमताओं को दूर करने के लिए LTX (transaction-based format) पेश किया गया
-
LTX, transaction order के अनुसार page ranges को manage करने और duplicate pages के compaction की सुविधा देता है
- उदाहरण: कई LTX files को नए से पुराने क्रम में apply किया जा सकता है, और duplicate pages में केवल सबसे नया version लागू करके final database state को तेज़ी से restore किया जा सकता है
- file hierarchy के ज़रिए 30 सेकंड, 5 मिनट और 1 घंटे के अंतराल पर LTX files को merge करके restore के लिए ज़रूरी files की संख्या काफ़ी घटाई जाती है
-
data recovery speed केवल I/O throughput से सीमित होती है
generation की अवधारणा हटाई गई
- Litestream एक सामान्य Unix process की तरह चल सकता है और crash भी हो सकता है, और रुकने की स्थिति में data synchronization में mismatch हो सकता है
- पहले कई instances के बीच conflict रोकने के लिए generation नाम की management approach अपनाई गई थी,
- लेकिन LTX में migration के बाद transaction ID-आधारित recovery संभव हो गई, जिससे जटिल generation management की ज़रूरत नहीं रही
Litestream v0.5.0 अपग्रेड
- फ़ाइल फ़ॉर्मेट में बड़े बदलाव के कारण v0.3.x WAL segments से सीधे recovery संभव नहीं है
- upgrade काफ़ी सरल है: नया version चलाएँ → नई LTX files बनेंगी, और पुरानी WAL files भी सुरक्षित रहेंगी
- configuration file compatibility भी बरकरार रखी गई है
- मुख्य बदलाव: अब प्रति database केवल एक replication target की अनुमति है; यह development को आसान बनाने और replication conflicts से बचने के लिए किया गया है
- commands पहले जैसे ही हैं, लेकिन reference method अब transaction ID (TXID) पर आधारित है
अन्य सुधार
- LTX file format library में page-level compression और index जोड़ने से बड़ी files के भीतर selective page access और feature expansion संभव हुआ है
- आगे चलकर किसी खास समय बिंदु के डेटा पर query जैसी अतिरिक्त सुविधाएँ भी संभव होंगी
- CGO dependency हटाकर Go SQLite driver को modernc.org/sqlite में बदलने से automatic builds और cross-compilation environment में लाभ मिला है
- इसमें JetStream support replica type के साथ S3/Google Storage/Azure Blob Storage clients के updates और S3 API के नए version का support शामिल है
आगे की योजना
- read replication target environment के लिए Litestream VFS feature पर काम चल रहा है
- इस feature से S3 से केवल ज़रूरी pages तुरंत पढ़कर तेज़ replication creation संभव होगा
- इसका prototype पहले से मौजूद है और जल्द सार्वजनिक किया जाएगा
1 टिप्पणियां
Hacker News की राय
Fly.io पर SQLite ऐप्स डिप्लॉय करते समय developer experience कुछ निराशाजनक लगा; production Rails ऐप चलाने की कई घंटे कोशिश की, लेकिन database initialization, migration, writable state जैसी कई समस्याओं से टकराना पड़ा। समस्या की जड़ मेरे अपने gem का eager loading था, लेकिन उसके ऊपर runner की कई layers होने से diagnosis मुश्किल हो गया। काश DX सुधारने पर थोड़ा और काम हो, लेकिन बड़े ग्राहक शायद ऐसे workload इस्तेमाल नहीं करते, इसलिए Fly.io के लिए यह संभवतः प्राथमिकता नहीं होगी। सोच रहा हूँ कि जिन्होंने production में SQLite ऐप डिप्लॉय किए हैं, वे कौन-सा host इस्तेमाल कर रहे हैं।
पिछले साल Fly पर Rails 8 ऐप नया सेटअप किया था। मुख्य data store के रूप में PG इस्तेमाल कर रहा हूँ, लेकिन auxiliary solid stack dbs के लिए SQLite उपयोग हो रहा है। solid queue migration से जुड़ी Rails side पर कुछ छोटी समस्याएँ थीं, लेकिन वह Fly की समस्या नहीं थी। मुख्य PG को SQLite में migrate करने पर भी विचार कर रहा हूँ, और अभी कुछ हिस्सों में SQLite का अच्छा उपयोग हो रहा है।
मैं production environment में console app के लिए SQLite इस्तेमाल कर रहा हूँ। DB एक shared file drive पर स्थित है।
Fly ने 2 साल के development pause के बाद Litestream का development फिर से शुरू किया है, यह देखकर बहुत खुशी हुई। मैं Litestream हर बार इस्तेमाल करता हूँ और इससे बहुत संतुष्ट हूँ। “दिन में कुछ pennies” वाले विज्ञापन वाक्य से भी वास्तविक उपयोग लागत काफी कम है। एक वास्तविक production ऐप में S3 पर Litestream replication इस्तेमाल करने पर मासिक वास्तविक लागत सिर्फ 2~3 सेंट ($0.02~$0.03) थी। संबंधित अनुभव साझा कर रहा हूँ।
यह दिलचस्प है कि Litestream जल्द ही सभी s3-compatible destinations को support करेगा। अभी तक मैं SFTP solution इस्तेमाल कर रहा हूँ, क्योंकि मैं hardcoded cloud object storage service का उपयोग नहीं करना चाहता। डेवलपर्स को धन्यवाद। PR लिंक और guide लिंक
मैं जल्द Litestream आज़माना चाहता हूँ। असल restore time कितना लगता है, इस पर benchmark या demo देखना चाहूँगा। पहले मैंने खुद S3 backup implement किया था, और उस समय Litestream से 1,000 rows restore करने में 20 मिनट लग गए थे। यह काफी unoptimized लगा था। जानना चाहता हूँ कि आजकल restore speed कितनी बेहतर हुई है।
जानना चाहता हूँ कि Litestream के sqlite.org/rsync की तुलना में क्या फायदे हैं।
Litestream की अलग पहचान यह है कि दूसरी तरफ किसी “server” की ज़रूरत नहीं होती; सिर्फ object storage हो तो काम चल जाता है। लागत के हिसाब से यह अधिक सस्ता पड़ सकता है।
Litestream में point-in-time recovery संभव है। सिर्फ current replica ही नहीं, बल्कि किसी भी समय के snapshot से restore किया जा सकता है।
LiteFS और Litestream से जुड़ी एक दिलचस्प बात: “बाज़ार की प्रतिक्रिया ही जवाब है! users Litestream को ज़्यादा पसंद करते हैं।” सच कहूँ तो Litestream को operate करना और समझना आसान है, इसलिए फिर से इसी पर focus किया गया।
Litestream Revamped से जुड़े लिंक और Hacker News discussion post साझा कर रहा हूँ
ब्लॉग
HN चर्चा पोस्ट
हम अपने internal applications को बाहरी remote fleet पर डिप्लॉय कर रहे हैं, लेकिन internet अस्थिर होने से data collection system ठीक से बनाना कठिन है। जानना चाहता हूँ कि Litestream ऐसे unstable environments में backup को कैसे संभालता है, और क्या कई backups को एक central DB में merge करके query किया जा सकता है।
एक छोटी चेतावनी के तौर पर: एक बार legacy business app को Azure पर migrate करते समय मुझे ऐसी संरचना से जूझना पड़ा जिसमें app के साथ local MSSQL server भी चल रहा था, कुछ-कुछ Litestream pattern जैसा। ऐप को local access (1ms से कम latency) मानकर विकसित किया गया था, इसलिए हर जगह N+1 queries गंभीर स्तर पर थीं। इस वजह से किसी दूसरी architecture में बदलना लगभग असंभव हो गया। अगर आपको चिंता है कि इस तरह की hosting अपनाकर बाद में scale limit से टकराएँगे, तो मैं इसकी सिफारिश नहीं करूँगा। हालांकि, एक single machine पर भी काफी बड़े scale तक जाया जा सकता है, इसलिए व्यावहारिक रूप से यह शायद बड़ी समस्या न हो।
आज जब एक single instance में 20TB से अधिक RAM और सैकड़ों cores का support मिलता है, मुझे लगता है यह विकल्प पर्याप्त रूप से प्रतिस्पर्धी है। user/tenant unit पर cell architecture के साथ मिलाकर यह और भी कुशल तरीका हो सकता है।
मैंने भी पहले ऐसे product पर काम किया था जहाँ app server और database एक ही rack में थे, यानी similar low-latency setup। जब वह product सफल हुआ और N+1 queries हज़ारों तक पहुँच गईं, तो 1ms जल्दी ही 500ms या उससे ज़्यादा बनने लगा। हर दो महीने में NewRelic में slow segments खोजकर ठीक करने का काम दोहराना पड़ता था। Rails ऐप होने के कारण N+1 समस्याएँ आसानी से पैदा होती थीं, लेकिन उन्हें ठीक करना भी अपेक्षाकृत आसान था।
गलत query practices कभी न कभी ज़रूर समस्या पैदा करती हैं। इसे इस approach की अपनी कमी मानना ठीक नहीं होगा।
सच कहें तो ऐसे service इस्तेमाल करने पर अंततः बस यह सामने आता है कि आपके code में कितनी समस्या है, इसलिए मुझे यह बड़ा trade-off नहीं लगता। गलती service की नहीं, code की है।
N+1 क्या है, यह पूछा गया।
मुझे Litestream सच में बहुत पसंद है। इसका उपयोग आसान है और यह कभी crash नहीं हुआ। इसे systemd unit service के रूप में इस्तेमाल करने की सिफारिश करता हूँ। मैं इसे सिर्फ backup tool के रूप में नहीं, बल्कि database mirroring के लिए भी इस्तेमाल कर रहा हूँ। आगे आने वाले read-replica feature का भी इंतज़ार है।