डिज़ाइन Bit.ly - एक समान प्रश्न है, सिवाय इसके कि पेस्टिबिन को मूल अप्रशिक्षित यूआरएल के बजाय पेस्ट सामग्री को संग्रहीत करने की आवश्यकता होती है।
चरण 1: मामलों और बाधाओं का उपयोग करें आवश्यकताओं को इकट्ठा करें और समस्या को हल करें। उपयोग के मामलों और बाधाओं को स्पष्ट करने के लिए प्रश्न पूछें। मान्यताओं पर चर्चा करें।
साक्षात्कारकर्ता के बिना स्पष्ट प्रश्नों को संबोधित करने के लिए, हम कुछ उपयोग मामलों और बाधाओं को परिभाषित करेंगे।
बक्सों का इस्तेमाल करें हम केवल निम्नलिखित उपयोग के मामलों को संभालने के लिए समस्या को हल करेंगे उपयोगकर्ता पाठ के एक ब्लॉक में प्रवेश करता है और एक यादृच्छिक रूप से उत्पन्न लिंक प्राप्त करता है समय सीमा समाप्ति डिफ़ॉल्ट सेटिंग समाप्त नहीं होती है वैकल्पिक रूप से एक समय समाप्त समाप्ति सेट कर सकते हैं उपयोगकर्ता एक पेस्ट के यूआरएल में प्रवेश करता है और सामग्री को देखता है उपयोगकर्ता अनाम है सेवा पृष्ठों के विश्लेषण को ट्रैक करती है मासिक आँकड़े देखें सेवा समाप्त हो चुकी है सेवा की उच्च उपलब्धता है दायरे से बाहर उपयोगकर्ता एक खाते के लिए रजिस्टर करता है उपयोगकर्ता ईमेल की पुष्टि करता है उपयोगकर्ता एक पंजीकृत खाते में प्रवेश करता है उपयोगकर्ता दस्तावेज़ संपादित करता है उपयोगकर्ता दृश्यता सेट कर सकते हैं उपयोगकर्ता शॉर्टलिंक सेट कर सकता है अड़चनें और धारणाएँ राज्य की धारणाएँ यातायात समान रूप से वितरित नहीं किया जाता है एक छोटी कड़ी के बाद तेजी से होना चाहिए अतीत केवल पाठ हैं पृष्ठ दृश्य विश्लेषण के लिए वास्तविक समय की आवश्यकता नहीं है 10 मिलियन उपयोगकर्ता प्रति माह 10 मिलियन पेस्ट लिखते हैं प्रति माह 100 मिलियन पेस्ट पढ़ता है 10: 1 अनुपात लिखने के लिए पढ़ें उपयोग की गणना करें अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि क्या आपको बैक-ऑफ-द-लिफाफा उपयोग गणनाओं को चलाना चाहिए।
प्रति पेस्ट आकार प्रति पेस्ट 1 केबी सामग्री शॉर्टलिंक - 7 बाइट्स expiration_length_in_minutes - 4 बाइट्स create_at - 5 बाइट्स पेस्ट_पथ - 255 बाइट्स कुल = ~ 1.27 केबी प्रति माह 12.7 जीबी नई पेस्ट सामग्री 1.27 केबी प्रति पेस्ट * 10 मिलियन पेस्ट प्रति माह ~ 3 साल में 450 जीबी का नया पेस्ट कंटेंट 3 साल में 360 मिलियन शॉर्टलिंक मान लें कि मौजूदा वाले अपडेट के बजाय अधिकांश नए पेस्ट हैं 4 पेस्ट औसतन प्रति सेकंड लिखते हैं औसत पर प्रति सेकंड 40 रीड अनुरोध आसान रूपांतरण गाइड:
2.5 मिलियन सेकंड प्रति माह 1 प्रति सेकंड अनुरोध = प्रति माह 2.5 मिलियन अनुरोध 40 प्रति सेकंड अनुरोध = प्रति माह 100 मिलियन अनुरोध प्रति माह 400 अनुरोध = प्रति माह 1 बिलियन अनुरोध चरण 2: एक उच्च स्तरीय डिज़ाइन बनाएं सभी महत्वपूर्ण घटकों के साथ एक उच्च स्तरीय डिजाइन की रूपरेखा।
Imgur
चरण 3: डिजाइन कोर घटक प्रत्येक मुख्य घटक के लिए विवरण में गोता लगाएँ।
मामले का उपयोग करें: उपयोगकर्ता पाठ के एक ब्लॉक में प्रवेश करता है और एक यादृच्छिक रूप से उत्पन्न लिंक प्राप्त करता है हम एक बड़े हैश टेबल के रूप में एक रिलेशनल डेटाबेस का उपयोग कर सकते हैं, उत्पन्न यूआरएल को एक फ़ाइल सर्वर पर पेस्ट कर सकते हैं और पेस्ट फाइल वाले पथ पर ले जा सकते हैं।
एक फ़ाइल सर्वर के प्रबंधन के बजाय, हम एक प्रबंधित ऑब्जेक्ट स्टोर जैसे कि अमेजन S3 या NoSQL दस्तावेज़ स्टोर का उपयोग कर सकते हैं।
एक बड़े हैश टेबल के रूप में अभिनय करने वाले एक रिलेशनल डेटाबेस का विकल्प, हम एक NoSQL कुंजी-मूल्य स्टोर का उपयोग कर सकते हैं। हमें SQL या NoSQL को चुनने के बीच ट्रेडऑफ पर चर्चा करनी चाहिए। निम्नलिखित चर्चा संबंधपरक डेटाबेस दृष्टिकोण का उपयोग करती है।
क्लाइंट एक रिवर्स प्रॉक्सी के रूप में चल रहा है, वेब सर्वर के लिए एक पेस्ट पेस्ट अनुरोध भेजता है वेब सर्वर एपीआई सर्वर को लिखने के अनुरोध को आगे बढ़ाता है निम्न API सर्वर लिखें: एक अद्वितीय यूआरएल उत्पन्न करता है जाँचता है कि डुप्लिकेट के लिए SQL डेटाबेस को देखकर url अद्वितीय है या नहीं यदि url अद्वितीय नहीं है, तो यह एक और url उत्पन्न करता है यदि हमने एक कस्टम url का समर्थन किया है, तो हम उपयोगकर्ता-आपूर्ति (एक डुप्लिकेट के लिए भी जांच कर सकते हैं) का उपयोग कर सकते हैं SQL डेटाबेस पेस्ट तालिका में सहेजता है पेस्ट डेटा को ऑब्जेक्ट स्टोर में सहेजता है यूआरएल लौटाता है अपने साक्षात्कारकर्ता के साथ स्पष्ट करें कि आपको कितने कोड लिखने की उम्मीद है।
चिपकाने की मेज में निम्नलिखित संरचना हो सकती है:
शॉर्लिंक चार (7) पूरी नहीं expiration_length_in_minutes पूर्ण नहीं है create_at डेटाटाइम नहीं NULL paste_path varchar (255) पूर्ण नहीं है प्राथमिक कुंजी (शालिंक) शॉर्टलिंक कॉलम पर आधारित होने वाली प्राथमिक कुंजी सेट करने से एक इंडेक्स बनता है जिसका उपयोग डेटाबेस अद्वितीयता को लागू करने के लिए करता है। हम लुकअप को तेज करने के लिए create_at पर एक अतिरिक्त इंडेक्स बनाएंगे (संपूर्ण तालिका को स्कैन करने के बजाय लॉग-टाइम) और डेटा को मेमोरी में बनाए रखने के लिए। मेमोरी से 1 एमबी क्रमिक रूप से पढ़ने में लगभग 250 माइक्रोसेकंड लगते हैं, जबकि एसएसडी से पढ़ने में 4x लगते हैं और डिस्क से 80x5 मिनट लगते हैं
अद्वितीय url उत्पन्न करने के लिए, हम कर सकते हैं:
उपयोगकर्ता के ip_address + टाइमस्टैम्प का MD5 हैश लें MD5 एक व्यापक रूप से उपयोग किया जाने वाला हैशिंग फ़ंक्शन है जो 128-बिट हैश मान का उत्पादन करता है MD5 समान रूप से वितरित किया जाता है वैकल्पिक रूप से, हम यादृच्छिक रूप से उत्पन्न डेटा के MD5 हैश भी ले सकते हैं बेस 62 एमडी 5 हैश को एनकोड करता है बेस 62 इनकोड [a-zA-Z0-9] के लिए अच्छी तरह से काम करता है, जो उरोजों के लिए अच्छा काम करता है, जिससे महत्वपूर्ण चरित्रों से बचने की आवश्यकता समाप्त हो जाती है मूल इनपुट के लिए केवल एक हैश परिणाम है और बेस 62 नियतात्मक है (कोई यादृच्छिकता शामिल नहीं) बेस 64 एक और लोकप्रिय एन्कोडिंग है, लेकिन अतिरिक्त + और / वर्णों के कारण यूआरएल के लिए समस्याएँ प्रदान करता है निम्नलिखित बेस 62 pseudocode O (k) समय में चलता है जहां k अंकों की संख्या = 7 है: def base_encode (संख्या, आधार = 62): अंक = [] जबकि अंक> 0 शेष = मोडुलो (संख्या, आधार) digits.push (शेष) संख्या = विभाजन (संख्या, आधार) digits = digits.reverse


