रेडिस के साथ सत्रों को संग्रहीत करना कितना सुरक्षित है?


92

मैं वर्तमान में अपने सत्रों को संग्रहीत करने के लिए MySql का उपयोग कर रहा हूं। यह बहुत अच्छा काम करता है, लेकिन यह थोड़ा धीमा है।

मुझे रेडिस का उपयोग करने के लिए कहा गया है, लेकिन मैं सोच रहा हूं कि क्या यह एक अच्छा विचार है क्योंकि मैंने सुना है कि रेडिस देरी से ऑपरेशन लिखते हैं। मुझे थोड़ा डर है क्योंकि सत्रों को वास्तविक समय में होना चाहिए।

क्या किसी ने ऐसी समस्याओं का अनुभव किया है?


1
चूंकि रेडिस का कहना है कि इसमें वैकल्पिक स्थायित्व है, तो मैं कहूंगा कि यदि आप एचडीडी पर दृढ़ता के लिए चुनते हैं तो इसका उपयोग करना सुरक्षित है। हालाँकि, सत्र डेटा के लिए - मैं निश्चित रूप से उन्हें RAM में सहेजूंगा (जिसका अर्थ है कि मैं पूरे परीक्षा के स्थायित्व वाले भाग के बारे में चिंता नहीं करूँगा)। आपके द्वारा सत्र डेटा खो देने की स्थिति में सबसे खराब स्थिति में आपके उपयोगकर्ता लॉग आउट होना चाहिए।
एनबी

1
हाँ, लेकिन यह मेरी आवश्यकता का एक हिस्सा है, उपयोगकर्ताओं को वापस लॉग इन नहीं करना चाहिए, वैसे कुछ उपयोगकर्ता डेटा सत्र में बने रहते हैं जबकि उपयोगकर्ता (अतिथि उपयोगकर्ता) लॉग इन नहीं होते हैं। वे Redis RAM के लिए जाएंगे, लेकिन लॉगिंग और / या बैकअप सक्षम होने के साथ। अगर हम कुछ सत्र हार गए तो यह स्वीकार्य है।
ट्रेंट

1
मेरी मुख्य चिंताएं देरी से लिखने के बारे में हैं, अगर उपयोगकर्ता लॉग इन करता है और सत्र देरी से लिखा जाता है तो क्या होता है, उसे पुनर्निर्देशित किया जाएगा लेकिन लॉग इन नहीं किया गया
ट्रेंट

2
एक ई-कॉमर्स साइट की कल्पना करें, यदि सत्र खो जाता है, तो वर्तमान गाड़ी भी खो जाती है, यह भयानक नहीं है लेकिन यह उपयोगकर्ताओं के लिए अजीब हो सकता है। अतिथि उपयोगकर्ताओं को केवल एक सत्र के साथ पहचाना जाता है ताकि उनकी कार्ट को पुनर्प्राप्त करने का कोई तरीका न हो।
बोरिस गुएरी

1
@ बोरिसग्यूरी - ऐसा नहीं है कि मैं असहमत हूं, लेकिन अगर किसी को प्रदर्शन को बढ़ावा देना है - कुछ गलत होने पर समझौता करना होगा। हां, उपयोगकर्ताओं के लिए अचानक लॉग आउट हो जाना अजीब होगा, यह सुनिश्चित करने के लिए है - लेकिन सवाल यह है कि ऐसा होने की कितनी बार उम्मीद है? यदि यह साल में एक या दो बार होता है कि सभी रेडिस नोड्स नीचे जाते हैं, तो मुझे पूरे पृथक क्लस्टर अनुपलब्ध होने पर कुछ अलग-थलग समय के लिए प्रदर्शन को कम करने का कोई कारण नहीं दिखता है। लेकिन वह सिर्फ मैं हूं।
NB

जवाबों:


147

रेडिस सत्रों के भंडारण के लिए एकदम सही है। सभी ऑपरेशन मेमोरी में किए जाते हैं, और इसलिए पढ़ना और लिखना तेजी से होगा।

दूसरा पहलू सत्र राज्य की दृढ़ता है। Redis आपको बहुत अधिक लचीलापन देता है कि आप अपनी हार्ड-डिस्क को सत्र स्थिति कैसे बनाए रखना चाहते हैं। आप अधिक जानने के लिए http://redis.io/topics/persistence से गुजर सकते हैं , लेकिन उच्च स्तर पर, यहां आपके विकल्प हैं:

  1. यदि आप किसी भी सत्र को खोने का जोखिम नहीं उठा सकते हैं, तो appendfsync alwaysअपनी कॉन्फ़िगरेशन फ़ाइल में सेट करें। इसके साथ, Redis गारंटी देता है कि कोई भी लिखने का संचालन डिस्क पर सहेजा जाता है। नुकसान यह है कि लिखने का कार्य धीमा हो जाएगा।
  2. यदि आप लगभग 1s मूल्य के डेटा को खोने के साथ ठीक हैं, तो उपयोग करें appendfsync everysec। यह उचित डेटा गारंटी के साथ शानदार प्रदर्शन देगा

14

मूल रूप से दो मुख्य प्रकार उपलब्ध हैं: async स्नैपशॉट और fsync()। उन्हें क्रमशः RDB और AOF कहा जाता है। आधिकारिक पृष्ठ पर दृढ़ता मोड पर अधिक ।

डैमिनेटेड प्रक्रिया का सिग्नल हैंडलिंग डिस्क के लिए सिंक करता है जब इसे उदाहरण के लिए SIGTERM प्राप्त होता है, तो डेटा रिबूट के बाद भी रहेगा। मुझे लगता है कि डिफ़ॉल्ट सेटिंग्स (RDB स्नैपशॉट) के साथ भी आपको एक अखंडता के भ्रष्टाचार को देखने से पहले डेमॉन या ओएस को क्रैश करना होगा।

एओएफ सेटिंग एपेंड ओनली फाइल का उपयोग करती है जो सर्वर द्वारा प्राप्त कमांड को लॉग करता है, और डीबी को ठंडी शुरुआत में खरोंच से बचाया जाता है, सेव की गई फाइल से। डिफॉल्ट डिस्क-सिंक पॉलिसी को हर सेकंड (IIRC) में एक बार फ्लश किया जाता है, लेकिन हर कमांड पर लॉक और लिखने के लिए सेट किया जा सकता है।

स्नैपशॉट और वृद्धिशील लॉग दोनों का उपयोग करने से लगता है कि दोनों लंबी अवधि के मत-मान-अगर-आई-मिस-ए-मिस--ए-मिस--ए-डेटा डेटा दृष्टिकोण के साथ अधिक सुरक्षित हैं, लेकिन महंगा वृद्धिशील लॉग। रेडिस बॉक्स के बाहर क्लस्टरिंग का समर्थन करता है, इसलिए प्रतिकृति भी किया जा सकता है ऐसा लगता है।

मैं डिफ़ॉल्ट आरडीबी का उपयोग खुद कर रहा हूं और स्नैपशॉट को दूरस्थ एफ़टीपी में सहेज रहा हूं। मैंने एक विफलता नहीं देखी है जो अभी तक डेटा हानि का कारण है। तीव्र हार्डवेयर विफलता या पावर आउटेज की सबसे अधिक संभावना है, लेकिन मुझे एक वीपीएस पर होस्ट किया गया है। ऐसा होने की पतली संभावना :)


12

यह सवाल वास्तव में वास्तविक समय के सत्रों के बारे में है , और लगता है कि 'देरी से लिखने के संचालन' वाक्यांश की गलतफहमी के कारण आंशिक रूप से उत्पन्न हुआ है, जबकि विवरण अंततः टिप्पणियों में छेड़े गए थे, मैं सिर्फ इसे सुपर-डुपर स्पष्ट करना चाहता था। ..

आपको वास्तविक समय सत्रों को लागू करने में कोई समस्या नहीं होगी।

Redis एक इन-मेमोरी की-वैल्यू स्टोर है जिसमें डिस्क के लिए वैकल्पिक दृढ़ता है। 'डिलीटेड राइट ऑपरेशंस' डिस्क को राइट्स को संदर्भित करता है , सामान्य रूप से डेटाबेस को नहीं, जो मेमोरी में मौजूद है। यदि आप एक कुंजी / मूल्य जोड़ी सेट करते हैं, तो आप इसे तुरंत प्राप्त कर सकते हैं (अर्थात वास्तविक समय में)। दृढ़ता के संबंध में आपके द्वारा चुनी गई नीति (आप लिखने में कितना विलंब करते हैं) ऊपरी-बाउंड को निर्धारित करेगा कि किसी दुर्घटना में कितना डेटा खो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.