डेटा के पार खोजें कई microservices पार करते हैं


13

मेरे पास एक निश्चित डोमेन के लिए एक माइक्रोसैस सर्विस और एक विरासत डेटाबेस के बीच डेटा है। मेरे पास एक खोज है जो विरासत और माइक्रोसॉरेस डेटाबेस दोनों पर फ़ील्ड्स का विस्तार करती है। पहले (माइक्रोसर्विस विभाजन से पहले), यह 1 sql क्वेरी के साथ किया गया था। अब मुझे इस खोज की कार्यक्षमता की सेवा के लिए REST कॉल और विरासत डेटाबेस के लिए एक क्वेरी की आवश्यकता है। हम यहां कुछ मिलियन पंक्तियों के बारे में बात कर रहे हैं। मैं इसे सर्वश्रेष्ठ कैसे बना सकता हूं? डेटा की मात्रा के कारण, आरईएसटी कॉल आमतौर पर साथ ही साथ परिणाम भी देता है। एक SQL कॉल को आग लगाने और संयोजन और REST प्रतिक्रिया के साथ परिणामों को मर्ज करने के लिए Naive दृष्टिकोण बहुत धीमा और वास्तव में व्यावहारिक नहीं है।

जवाबों:


21

एक खोज सुविधा को आपके द्वारा उल्लिखित दो सेवाओं से अलग जिम्मेदारी के साथ एक अलग सेवा के रूप में तैयार किया जा सकता है। इसलिए, यहां दृष्टिकोण एक नई सेवा ('खोज') बनाने के लिए हो सकता है और क्या यह दोनों सेवाओं के डेटा की एक प्रति को एक ऐसे रूप में संग्रहीत करता है जो अनुक्रमण और खोज करने के लिए आसान है, संभवतः जल्दी से परिणाम देने के लिए भी इसे असामान्य कर दिया गया है। वांछित प्रारूप।

इसलिए, उदाहरण के लिए आप विरासत SQL डेटाबेस का उपयोग कर सकते हैं जैसे कि mySql, अन्य microservice जैसे कि MongoDB, और नई खोज सेवा का उपयोग करते हुए डेटा के साथ elasticsearch का उपयोग करके पहले से ही एक साथ चिपकाया गया (अधिक असामान्य)। निश्चित रूप से विवरण इस बात पर निर्भर करेगा कि आपको किस तरह की खोजों की ज़रूरत है।

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

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


मैं पहले से ही एक अलग सेवा बनाने के बारे में है। केवल एक चीज जो मुझे कुछ असुविधा देती है - खोज के लिए अभी तक एक और डेटाबेस बनाना (इसे लोचदार को खिलाना एक और विकल्प होगा, लेकिन हमारे पास कुछ बुनियादी ढाँचे की बाधाएं हैं)
12-28 पर भावना

7
@zencv दुर्भाग्य से, माइक्रोसॉर्क्स इस तरह की लागत के साथ आते हैं। क्षैतिज रूप से स्केल करने में सक्षम होने का मतलब है कि युग्मन को कमजोर होने की आवश्यकता है और इसका मतलब है कि अक्सर डेटा दोहराव होगा। आपको बहुत अधिक नेटवर्क ट्रैफ़िक भी मिलता है। स्केलेबिलिटी का मतलब अक्सर प्रति-हार्डवेयर-यूनिट प्रदर्शन में गिरावट और दूसरे पर एक आर्किटेक्चर चुनने (जैसे कि माइक्रोसॉफ़्ट बनाम मोनोलिथ) को इस ट्रेडऑफ़ को ध्यान में रखना चाहिए।
मिचेल कोस्मुलस्की जूल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.