सबसे हाल के वेब सर्वर प्रश्नों के परिणामों को बचाने के लिए एक कुंजी-मूल्य कैश कैसे डिज़ाइन करें
📚 शिक्षण

सबसे हाल के वेब सर्वर प्रश्नों के परिणामों को बचाने के लिए एक कुंजी-मूल्य कैश कैसे डिज़ाइन करें

5 min read 902 words
5 min read
ShareWhatsAppPost on X
  • 1Designing a key-value cache requires outlining use cases, constraints, and assumptions to effectively manage query results.
  • 2A least recently used (LRU) approach is essential for expiring older entries in a limited-capacity cache.
  • 3Utilizing a Memory Cache like Redis significantly reduces read latency compared to SSDs and traditional disk storage.

AI-generated summary · May not capture all nuances

Key Insight
AskGif

"Designing a key-value cache requires outlining use cases, constraints, and assumptions to effectively manage query results."

सबसे हाल के वेब सर्वर प्रश्नों के परिणामों को बचाने के लिए एक कुंजी-मूल्य कैश कैसे डिज़ाइन करें

चरण 1: मामलों और बाधाओं का उपयोग करें आवश्यकताओं को इकट्ठा करें और समस्या को हल करें। उपयोग के मामलों और बाधाओं को स्पष्ट करने के लिए प्रश्न पूछें। मान्यताओं पर चर्चा करें।

साक्षात्कारकर्ता के बिना स्पष्ट प्रश्नों को संबोधित करने के लिए, हम कुछ उपयोग मामलों और बाधाओं को परिभाषित करेंगे।

बक्सों का इस्तेमाल करें हम केवल निम्नलिखित उपयोग के मामलों को संभालने के लिए समस्या को हल करेंगे उपयोगकर्ता एक खोज अनुरोध भेजता है जिसके परिणामस्वरूप कैश हिट होता है उपयोगकर्ता एक खोज अनुरोध भेजता है जिसके परिणामस्वरूप कैश मिस होता है सेवा की उच्च उपलब्धता है अड़चनें और धारणाएँ राज्य की धारणाएँ यातायात समान रूप से वितरित नहीं किया जाता है लोकप्रिय क्वेरी लगभग हमेशा कैश में होनी चाहिए यह निर्धारित करने की आवश्यकता है कि समाप्ति / ताज़ा कैसे करें कैश से सेवा करने के लिए तेज़ लुकअप की आवश्यकता होती है मशीनों के बीच कम विलंबता कैश में सीमित मेमोरी यह निर्धारित करने की आवश्यकता है कि क्या रखना / निकालना है लाखों प्रश्नों को कैश करने की आवश्यकता है 10 मिलियन उपयोगकर्ता प्रति माह 10 बिलियन क्वेरी उपयोग की गणना करें अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि क्या आपको बैक-ऑफ-द-लिफाफा उपयोग गणनाओं को चलाना चाहिए।

कैश स्टोर ने कुंजी की सूची का आदेश दिया: क्वेरी, मूल्य: परिणाम क्वेरी - 50 बाइट्स शीर्षक - 20 बाइट्स स्निपेट - 200 बाइट्स कुल: 270 बाइट्स 2.7 टीबी कैश डेटा प्रति माह यदि सभी 10 बिलियन प्रश्न अद्वितीय हैं और सभी संग्रहीत हैं प्रति खोज 270 बाइट्स * प्रति माह 10 बिलियन खोजें मान्यताओं को सीमित स्मृति होती है, यह निर्धारित करने की आवश्यकता होती है कि सामग्री को कैसे समाप्त किया जाए प्रति सेकंड 4,000 अनुरोध आसान रूपांतरण गाइड:

2.5 मिलियन सेकंड प्रति माह 1 प्रति सेकंड अनुरोध = प्रति माह 2.5 मिलियन अनुरोध 40 प्रति सेकंड अनुरोध = प्रति माह 100 मिलियन अनुरोध प्रति माह 400 अनुरोध = प्रति माह 1 बिलियन अनुरोध चरण 2: एक उच्च स्तरीय डिज़ाइन बनाएं सभी महत्वपूर्ण घटकों के साथ एक उच्च स्तरीय डिजाइन की रूपरेखा।

Imgur

चरण 3: डिजाइन कोर घटक प्रत्येक मुख्य घटक के लिए विवरण में गोता लगाएँ।

मामले का उपयोग करें: उपयोगकर्ता एक अनुरोध भेजता है जिसके परिणामस्वरूप कैश हिट होता है लोकप्रिय प्रश्नों को मेमोरी कैश से पढ़ा जा सकता है जैसे कि रेडिस या मेमक्च्ड को रीड लेटेंसी को कम करने और रिवर्स इंडेक्स सर्विस और डॉक्यूमेंट सर्विस को ओवरलोड करने से बचने के लिए। मेमोरी से 1 एमबी क्रमिक रूप से पढ़ने में लगभग 250 माइक्रोसेकंड लगते हैं, जबकि एसएसडी से पढ़ने में 4x लगते हैं और डिस्क से 80x5 मिनट लगते हैं

चूंकि कैश की सीमित क्षमता है, हम पुरानी प्रविष्टियों को समाप्त करने के लिए कम से कम हाल ही में उपयोग किए गए (LRU) दृष्टिकोण का उपयोग करेंगे।

क्लाइंट एक रिवर्स प्रॉक्सी के रूप में चल रहा है, वेब सर्वर के लिए एक अनुरोध भेजता है वेब सर्वर क्वेरी API सर्वर के लिए अनुरोध को अग्रेषित करता है क्वेरी API सर्वर निम्न कार्य करता है: क्वेरी को पार्स करता है मार्कअप को हटाता है पाठ को शब्दों में तोड़ता है टाइपो को ठीक करता है पूंजीकरण को सामान्य करता है बूलियन संचालन का उपयोग करने के लिए क्वेरी को कनवर्ट करता है क्वेरी से मेल खाने वाली सामग्री के लिए मेमोरी कैश की जाँच करता है यदि मेमोरी कैश में कोई हिट है, तो मेमोरी कैश निम्न कार्य करता है: एलआरयू सूची के सामने कैश्ड प्रविष्टि की स्थिति को अद्यतन करता है कैश्ड सामग्री लौटाता है Else, क्वेरी API निम्न कार्य करता है: क्वेरी से मेल खाते दस्तावेज़ खोजने के लिए रिवर्स इंडेक्स सेवा का उपयोग करता है रिवर्स इंडेक्स सर्विस मिलान परिणामों को रैंक करती है और शीर्ष लोगों को वापस लौटाती है शीर्षक और स्निपेट वापस करने के लिए दस्तावेज़ सेवा का उपयोग करता है एलआरयू सूची के सामने प्रविष्टि को रखकर, सामग्री के साथ मेमोरी कैश को अपडेट करता है कैश कार्यान्वयन कैश एक दोहरी-लिंक की गई सूची का उपयोग कर सकता है: नई वस्तुओं को सिर में जोड़ा जाएगा जबकि समाप्त होने वाली वस्तुओं को पूंछ से हटा दिया जाएगा। हम प्रत्येक लिंक किए गए सूची नोड में तेज़ लुकअप के लिए हैश टेबल का उपयोग करेंगे।

अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि आपको कितने कोड लिखने की उम्मीद है।

क्वेरी API सर्वर कार्यान्वयन:

वर्ग QueryApi (ऑब्जेक्ट):

def __init __ (स्व, मेमोरी_ कैश, रिवर्स_इंडेक्स_ सर्विस): self.memory_cache = memory_cache self.reverse_index_service = रिवर्स_इंडेक्स_ सर्विस

def parse_query (स्वयं, क्वेरी): "" "मार्कअप हटाएं, टेक्स्ट को शब्दों में तोड़ें, टाइपो से निपटें, पूंजीकरण को सामान्य करें, बूलियन संचालन का उपयोग करने के लिए परिवर्तित करें। "" " ...

def process_query (स्वयं, क्वेरी): क्वेरी = self.parse_query (क्वेरी) परिणाम = self.memory_cache.get (क्वेरी) यदि परिणाम कोई नहीं है: परिणाम = self.reverse_index_service.process_search (क्वेरी) self.memory_cache.set (क्वेरी, परिणाम) वापसी के परिणाम नोड कार्यान्वयन:

वर्ग नोड (वस्तु):

def __init __ (स्व, क्वेरी, परिणाम): self.query = क्वेरी self.results = परिणाम लिंक्डलिस्ट कार्यान्वयन:

क्लास लिंक्डलिस्ट (ऑब्जेक्ट):

def __init __ (स्व): self.head = कोई नहीं self.tail = कोई नहीं

def Move_to_front (स्वयं, नोड): ...

def app_to_front (स्वयं, नोड): ...

def remove_from_tail (स्व): ... कैश कार्यान्वयन:

कक्षा कैश (ऑब्जेक्ट):

def __init __ (स्व, MAX_SIZE): self.MAX_SIZE = MAX_SIZE स्व.सिसे = ० self.lookup = {} # कुंजी: क्वेरी, मान: नोड self.linked_list = लिंक्डलिस्ट ()

डीईएफ़ गेट (स्व, क्वेरी) "" "कैश से संग्रहीत क्वेरी परिणाम प्राप्त करें।

एक नोड तक पहुंच एलआरयू सूची के सामने अपनी स्थिति को अपडेट करता है। "" " नोड = self.lookup [क्वेरी] यदि नोड कोई नहीं है: कोई नहीं लौटा self.linked_list.move

Enjoyed this article?

Share it with someone who'd find it useful.

ShareWhatsAppPost on X

sumitc91

Published on 20 November 2020 · 5 min read · 902 words

Part of AskGif Blog · शिक्षण

You might also like