स्नैपच्याट ट्वीन्स र किशोरकिशोरीहरू बीच राम्रोसँग परिचित छ। यदि तपाइँ यो कसरी काम गर्दछ भनेर थाहा पाउन सक्नुहुन्न भने तपाइँ सायद 25 भन्दा माथि हुनुहुन्छ। Snapchat, सबैभन्दा लोकप्रिय सामाजिक मिडिया अनुप्रयोगहरू मध्ये एक, बालबालिका र किशोरकिशोरीहरूलाई उनीहरूले चाहेको कुराहरू प्रदान गर्दछ: सामान्य घटनाहरूलाई साझा गर्ने सजिलो तरिका र तिनीहरूलाई सुन्दर देखाउन पनि।
फेसबुक र ट्विटरको विपरीत, जुन तपाईंले गर्नुहुने सबै कुरा रेकर्ड र प्रकाशित गर्दछ, स्न्यापच्याटले हराउन पर्ने सन्देशहरू प्रयोग गर्दछ (हेर्नुहोस् कसरी तिनीहरू गर्दैनन्)।
त्यहाँ Snapchat को बारे मा धेरै छ, र यदि तपाईं एक विकासकर्ता हुनुहुन्छ भने यो अझ धेरै छ। त्यसोभए, यो पोष्टले तपाईंलाई Snapchat को उच्च-स्तर दृश्य दिनेछ प्रणाली डिजाइन र धेरै अधिक अन्तरदृष्टि।
परिचय
Snapchat अमेरिकामा आधारित छ सामाजिक संजाल एप जसले प्रयोगकर्ताहरूलाई तुरुन्तै जडान गर्न, छविहरू साझेदारी गर्न, र थप गर्न दिन्छ।
- सन्देश र छविहरू (वा स्न्यापहरू) को 24-घण्टा समय सीमा हुन्छ। मानिसहरूलाई समूहहरूमा आफ्ना कथाहरू साझा गर्न प्रोत्साहित गर्दछ।
- स्न्याप नक्साले प्रयोगकर्ताहरूलाई नक्सामा उनीहरूको साथीहरू कहाँ छन् हेर्न अनुमति दिन्छ।
- सम्झनाहरूले प्रयोगकर्ताहरूलाई उनीहरूले एक वर्ष पछि सुरक्षित वा साझेदारी गरेका फोटोहरूको सम्झना गराउँछन्।
- Snapchat युवा पुस्ताहरू, विशेष गरी किशोरहरू माझ अत्यन्त लोकप्रिय छ। एपमा ३१९ मिलियन सक्रिय प्रयोगकर्ताहरू छन्, र हरेक दिन ५.४ बिलियन स्न्यापहरू पठाइन्छ।
महत्त्वपूर्ण डिजाइन सर्तहरू
मोनोलिथिक वास्तुकला - एकल-टायर गरिएको अनुप्रयोग जुन अन्य अनुप्रयोगहरूबाट स्वतन्त्र रूपमा सञ्चालन हुन्छ मोनोलिथ (मोनोलिथिक आर्किटेक्चर) भनेर चिनिन्छ। एक मोनोलिथ कार्य पूरा गर्न आवश्यक सबै गतिविधिहरू प्रदर्शन र ह्यान्डल गर्न डिजाइन गरिएको छ। अनुप्रयोगले सुरुदेखि अन्त्यसम्म सबै प्रकार्यहरू प्रदर्शन गर्दछ।
Microservices - यो मोनोलिथको विपरीत ध्रुवीय हुन्छ। Microservices एक वास्तुकला दृष्टिकोण हो जसले सेवाहरूको संग्रहको रूपमा अनुप्रयोगलाई व्यवस्थित गर्दछ। यी सेवाहरू अनुप्रयोगका धेरै पक्षहरूलाई नियन्त्रण गर्न प्रयोग गरिन्छ। एक ग्राहकले अर्डर दिन्छ, एक वेटरले यसलाई लिन्छ र डेलिभर गर्दछ, र एक शेफले यसलाई तयार गर्दछ। यस उदाहरणमा, प्रत्येक घटक स्वतन्त्र रूपमा कार्य गर्दछ र अरूबाट अलग; कसैलाई थाहा छैन कि अरूले के गरिरहेका छन्, र कसैको पनि समान जानकारीमा पहुँच छैन।
JSON: यो एक पाठ-आधारित ढाँचा हो जुन JavaScript वस्तुहरू, शाब्दिक, arrays, र डेटा प्रदर्शन गर्न प्रयोग गर्न सकिन्छ। यो पाठ-आधारित ढाँचा पढ्न र लेख्नको लागि सरल, साथै सफ्टवेयर द्वारा पचाउनको लागि हो। JSON सामान्यतया सर्भर र अनलाइन अनुप्रयोगहरू बीच डाटा र जानकारी स्थानान्तरण गर्न प्रयोग गरिन्छ।
अर्केस्ट्रेशन: धेरै कार्यहरू स्वचालित गर्ने प्रविधिलाई अर्केस्ट्रेसन भनिन्छ। यी कार्यहरूमा कम्प्युटर प्रणाली र सफ्टवेयर कन्फिगरेसन, समन्वय, र प्रशासन समावेश छ।
प्रोक्सी: प्रोक्सीले स्रोत खोज्ने ग्राहक र त्यसलाई उपलब्ध गराउने सर्भरको बीचमा जाने काम गर्छ।
मेष: सेवा जाल एक सफ्टवेयर आर्किटेक्चर ढाँचा हो जसले प्रोक्सी मार्फत सेवाहरू बीच नियमित, अवलोकनयोग्य र सुरक्षित सञ्चारलाई अनुमति दिन पूर्वाधार तहमा तह थप्छ।
उच्च-स्तरीय डिजाइन
मोनोलिथिक समस्याहरू
Snapchat गुगल एप इन्जिनमा आधारित क्लाउड-आधारित मोनोलिथको रूपमा उत्पत्ति भएको हो। यद्यपि, कार्यक्रम लोकप्रियतामा बढ्दै जाँदा र अधिक प्रयोगकर्ताहरू र डेटा प्राप्त गर्दै, स्केलेबिलिटी एक मुद्दा भयो।
थप रूपमा, मोनोलिथ भित्र ठूलो विस्फोट त्रिज्याको साथ, प्रणाली-व्यापी अशान्तिहरू अधिक सम्भव थिए। Snapchat को समस्याहरू मध्ये एक "कमन्सको त्रासदी" को रूपमा परिभाषित गरिएको थियो, जसमा सुविधाहरूले स्रोतहरूमा पहुँचको लागि प्रतिस्पर्धा गरे; सुविधाहरू एप लन्च समयमा लोड हुँदै थिए, केही सुविधाहरू छिटो लोड गर्न अनुमति दिँदै तर अरूलाई ढिलो लोड गर्न।
इन्जिनियरहरूले पनि विकासको दृष्टिकोणबाट स्पष्ट दृश्यता, विभाजन, र उनीहरूको कम्पोनेन्टहरूको स्वामित्व खोजे, ताकि सेवा लचिलो र प्रभावकारी हुन सकोस्।
परिवर्तन
स्नैपच्याट विस्तार हुँदै जाँदा, फर्मले आफ्नो अखंड पूर्वाधारलाई साना, थप प्रभावकारी टुक्राहरूमा तोड्न आवश्यक महसुस गर्यो। घटाइएको विलम्बता प्रदान गर्न संगठनले माइक्रोसर्भिसेजमा आधारित डिजाइन विकास गर्ने निर्णय गर्यो।
ती लक्ष्यहरू पूरा गर्न, Snapchat Amazon DynamoDB, एक स्केलेबल NoSQL डाटाबेस सेवा प्रयोग गरेर आफ्नो सफ्टवेयर अपडेट गर्न रोज्यो। फर्मले आफ्नो प्रयासको परिणामस्वरूप 20% द्वारा मध्य विलम्बता घटाउन सक्षम भयो।
एपलाई निगमद्वारा धेरै साना अनुप्रयोगहरूमा पुन: लेखिएको थियो। क्यामेरा, च्याट, सम्झनाहरू, तस्विर सम्पादन, सामग्री खपत, र नक्सा सहित धेरै अनुप्रयोगहरूसँग Snapchat सुरु भयो। यद्यपि यी कार्यक्रमहरूलाई एकल मोनोलिथमा एकीकृत गर्न उपभोक्ताहरूको लागि सुविधाजनक थियो, यसले राम्रो कार्यसम्पादन कायम राख्ने सन्दर्भमा गम्भीर प्राविधिक समस्या खडा गर्यो।
पुन: लेख्नको लागि, निगमले धेरै आधारभूत नियमहरू स्थापना गर्यो। प्रिलोड नगर्नुहोस्; प्रत्येक सुविधा यसको आफ्नै एप हुनुपर्छ, र यो छिटो हुनुपर्छ। Snapchat ले पुन: लेख्न सक्षम गर्न धेरै ठाउँहरूमा परिमार्जनहरू रोक्यो, यसलाई कडा रूपमा प्राविधिक कार्य बनाउँदै।
अतिरिक्त सुविधाहरू एकीकरण
Snapchat को क्यामेरा एपमा लेन्स, फिल्टर, बिटमोजिस, र अन्य चीजहरू बीचमा अग्मेन्टेड रियालिटी एनिमेसनहरू थप्ने क्षमता छ। Snapchat को च्याट एपले प्रयोगकर्ताहरूलाई तस्बिरहरू भण्डारण गर्न, कुराकानीहरू बचत गर्न, इमोटिकनहरू थप्न, र थप गर्न अनुमति दिन्छ।
Snapchat को नक्सा, अन्य चीजहरूको बीचमा, तपाईंलाई साथीहरू मनिटर गर्न अनुमति दिन्छ यदि तिनीहरूले तपाईं चाहनुहुन्छ भने। सम्झनाहरू, तस्बिर सम्पादन, र सामग्री खपत सबै तिनीहरूको अद्वितीय क्षमताहरु संग अलग Snapchat अनुप्रयोगहरू छन्।
मेमोरीहरूले तपाईंलाई फोटोहरू वा भिडियोहरू पछि प्रयोगको लागि भण्डारण वा परिमार्जन गर्न, साथै तिनीहरूलाई अपलोड वा पठाउन अनुमति दिन्छ। प्रयोगकर्ताहरूले चलचित्रहरू काट्न, पाठ थप्न, स्टिकरहरू थप्न, र थपका लागि तस्विर सम्पादनको प्रयोग गर्न सक्छन्।
Snapchat को बाह्य सामग्री खपतले मापदण्डहरूको दायरामा आधारित प्रयोगकर्ताहरूलाई के देखाउँछ भनेर बुझाउँछ।
Microservices
कार्यक्रम त्यतिबेला नेटवर्क क्वेरीहरू गर्न JSON मा व्यापक रूपमा निर्भर थियो। यद्यपि, JSON पार्सिङ समय-उपभोग र अक्षम थियो। Snapchat ले यो समस्या समाधान गर्न कार्यान्वयन विवरणको रूपमा JSON को प्रयोग मास्क गर्न केन्द्रीकृत नेटवर्क व्यवस्थापन API प्रयोग गर्यो।
माइक्रोसर्भिसेसहरूले आवेदन राज्य व्यवस्थापन, सेवा सञ्चार, र असफलता व्यवस्थापनका चुनौतीहरू परिचय गराउँछन्। Snapchat ले बलियो र भरपर्दो प्रणाली निर्माण गर्न अर्केस्ट्रेशन कठिनाइहरू पार गर्न टेम्पोरल जस्ता खुला स्रोत प्रविधिहरू प्रयोग गर्यो।
नतिजाको रूपमा, संगठनले सेवा जाल डिजाइन ढाँचा प्रयोग गर्ने निर्णय गर्यो। Snapchat ले यो ढाँचा हासिल गर्न प्रोक्सीको रूपमा काम गर्ने अर्को खुला स्रोत उपकरण, Envoy प्रयोग गर्यो। दूतले पूर्वाधार मार्फत सेवा ट्राफिकको प्रवाहलाई व्यवस्थित गर्यो, विकासकर्ताहरूलाई सम्भावित कठिनाइहरूमा दृश्यता दिईयो।
Snapchat ले सेवा जाल भित्र स्विचबोर्ड भनिने आन्तरिक एप सिर्जना गर्यो। स्विचबोर्डले Snap का सेवाहरूको लागि नियन्त्रण प्यानलको रूपमा सेवा गर्यो, जसले प्रयोगकर्ताहरूलाई ट्राफिक परिवर्तन गर्न, सेवा निर्भरताहरू व्यवस्थापन गर्न अनुमति दिन्छ (एउटा सुविधा जसले एउटा सेवालाई अरूको अवस्थाको आधारमा व्यवस्थापन गर्न अनुमति दिन्छ), र क्षेत्रहरू निकाल्छ।
सेवाहरू भित्र सम्भावित कन्फिगरेसनहरूको जटिलतालाई सरल बनाउन, सम्पूर्ण दूत API लाई उजागर गर्नुको सट्टा स्विचबोर्ड प्रयोग गरियो। Snap सँग यसको माइक्रो सेवाहरूको लागि एक साझा आन्तरिक र क्षेत्रीय नेटवर्क छ सेवा जालको लागि धन्यवाद।
एउटै क्षेत्र भित्रका सेवाहरू सार्वजनिक इन्टरनेट प्रयोग नगरी एकअर्कासँग जोडिन सक्छन्, र कुनै पनि बाह्य नेटवर्क ट्राफिकले आन्तरिक नेटवर्कका भागहरूसँग सञ्चार गर्न सक्दैन।
सुरक्षा कारणहरूका लागि गेटवेहरूलाई मात्र इन्टरनेटमा आफूलाई खुलाउन अधिकार दिइनेछ। एपीआई गेटवेहरू, उदाहरणका लागि, सजिलैसँग अगाडिको ढोकाको रूपमा सेवा गर्न सक्छ, ग्राहकहरू/प्रयोगकर्ताहरूबाट अनुरोधहरू प्रशोधन गर्न र तिनीहरूलाई नेटवर्कको साथमा रूट गर्ने।
नेटवर्क र API गेटवे
Snapchat क्लाइन्टबाट सबै प्रश्नहरू API गेटवे मार्फत आउँछन्। यसले एउटै दूत छवि प्रयोग गर्दछ र हाम्रो आन्तरिक माइक्रोसर्भिसेसहरू जस्तै नियन्त्रण विमानमा जडान गर्दछ। हाम्रो नियन्त्रण विमानले हामीलाई अनुकूलन दूत फिल्टरहरू सक्षम गर्न अनुमति दिन्छ।
Snapchat को प्रमाणीकरण प्रणालीहरू, साथै हाम्रो दर सीमित गर्ने र लोडसेडिङ प्रविधिहरू यी फिल्टरहरूद्वारा ह्यान्डल गरिन्छन्। दूतले फिल्टर चेन पूरा भएपछि सान्दर्भिक माइक्रोसर्भिसमा अनुरोधहरू रुट गर्न सेवा जाल प्रयोग गर्दछ।
निष्कर्ष
Snapchat को API गेटवेले बाह्य ट्राफिकलाई एपको धेरै प्रकार्यताहरूमा लैजान्छ। कन्फिगरेसन अवस्थाहरू परिमार्जन गर्न प्रयोगकर्ताहरूको अनुरोधहरू सर्भरहरूद्वारा व्यवस्थित हुन्छन्, जुन त्यसपछि डाटा प्रदान गर्नुहोस् र एपको धेरै सेवाहरूमा जानकारी फिर्ता।
समग्रमा, Snapchat को हालको डिजाइन एकल अपरेटिङ सिस्टममा चल्ने धेरै कार्यक्रमहरूसँग तुलना गर्न सकिन्छ, जुन यस अवस्थामा Snapchat एप हो। मैले तपाईंलाई Snapchat प्रणाली डिजाइनको उच्च-स्तरको सिंहावलोकन प्रदान गर्न धेरै प्रयास गरें। मलाई आशा छ कि तपाईंले यो उपयोगी पाउनुभयो।
जवाफ छाड्नुस्