माइक्रोसर्विसेस और डेटाबेस जुड़ते हैं


112

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

यदि आपके पास दो तालिकाएं हैं जो तार्किक रूप से अलग हैं (यदि आप चाहें तो बंधे हुए संदर्भ) लेकिन आप अक्सर उस डेटा के बड़े संस्करणों पर समग्र प्रसंस्करण करते हैं तो मोनोलिथ में आप ऑब्जेक्ट ओरिएंटेशन से बचने की संभावना से अधिक हैं और इसके बजाय अपने डेटाबेस के मानक का उपयोग कर रहे हैं डेटाबेस पर डेटा को संसाधित करने के लिए अपने ऐप टियर में वापस एकत्र किए गए दृश्य को वापस लाने के लिए सुविधा को शामिल करने की सुविधा दें।

आप ऐसे डेटा को माइक्रोसर्विसेज में विभाजित करने का औचित्य कैसे साबित करते हैं, जहाँ संभवतः आपको डेटाबेस के बजाय एपीआई के माध्यम से डेटा को 'ज्वाइन' करना होगा।

मैंने सैम न्यूमैन की माइक्रोसॉर्क्स पुस्तक पढ़ी है और मोनोलिथ को विभाजित करने के अध्याय में वह "ब्रेकिंग फॉरेन की रिलेशनशिप" का एक उदाहरण देता है, जहां वह स्वीकार करता है कि एक एपीआई में शामिल होने का काम धीमा होने वाला है - लेकिन वह यह कहता है कि आपका आवेदन वैसे भी काफी तेज है, क्या इससे फर्क पड़ता है कि यह पहले की तुलना में धीमा है?

यह थोड़ा ग्लिब लगता है? लोगों के अनुभव क्या हैं? एपीआई से जुड़ने के लिए आपने किन तकनीकों का उपयोग किया है?


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

मुझे पता है कि यह पुराना है, लेकिन, क्या यह कुछ ऐसा है जो ग्रेफ्लक हल करता है? मैं इसे एक खंडित प्रवास के लिए भी देख रहा हूं, और ऐसा लगता है कि ग्राफकल इसे सहज बनाने का तरीका है।
themightybun

कुछ बिंदु पर आपको एहसास होना चाहिए कि हठधर्मिता जाने का रास्ता नहीं है। ग्राफकॉल डेटा स्रोत के बाहर एकत्रीकरण करने का एक सभ्य उदाहरण है और यह आमतौर पर ठीक काम करता है।
ईसाई आइविसेविच

जवाबों:


26
  • जब प्रदर्शन या विलंबता बहुत ज्यादा मायने नहीं रखती (हाँ, हमें हमेशा उनकी ज़रूरत नहीं होती) अतिरिक्त डेटा की आवश्यकता के लिए केवल साधारण RESTful API का उपयोग करना पूरी तरह से ठीक है। यदि आपको अलग-अलग माइक्रोसॉफ़्ट के लिए कई कॉल करने और एक परिणाम वापस करने की आवश्यकता है तो आप एपीआई गेटवे पैटर्न का उपयोग कर सकते हैं ।

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

  • इसके अलावा, कैशिंग के बारे में मत भूलना :) आप अक्सर अन्य डेटाबेस को क्वेरी करने से बचने के लिए Redis या Memcached जैसे टूल का उपयोग कर सकते हैं ।


25
सभी अच्छे सुझाव हैं, लेकिन मुझे अभी भी इसे तर्कसंगत बनाने में मुश्किल हो रही है, शायद ऐसा इसलिए है क्योंकि हम डेटाबेस में बहुत अधिक प्रसंस्करण करने के लिए उपयोग किए जाते हैं। हमारे वर्तमान एप्लिकेशन में जटिल संग्रहीत कार्यविधियाँ हैं जो डेटा के बड़े संस्करणों पर प्रसंस्करण करती हैं और फिर एक छोटा परिणाम सेट लौटाती हैं। एक microservices वास्तुकला में, मुझे लगता है कि इन संस्थाओं को अलग-अलग बंधे हुए संदर्भों में विभाजित किया जाना चाहिए। हम जानते हैं कि वर्तमान दृष्टिकोण बदसूरत है, लेकिन इसे संसाधित करने के लिए ऐप टियर में सभी डेटा को वापस लाने का औचित्य साबित करना कठिन है। शायद अधिक निरूपण या पूर्व-संगृहीत समग्र विचारों से मदद मिलेगी।
मार्टिन बेली

1
हां मेरे द्वारा देखा जाता है। माइक्रोसर्विसेज का दृष्टिकोण हर किसी के लिए नहीं है और आपको इसे सावधानी से लागू करना चाहिए। संभवतः आप छोटे बदलावों से शुरुआत कर सकते हैं।
sap1ens

संभवतः प्रोग्रामर StackExchange इस प्रश्न को पूछने के लिए एक बेहतर स्थान रहा होगा: programmers.stackexchange.com/questions/279409/… और अन्य सवालों के लिए टैग किए गए microservices programmers.stackexchange
मार्टिन बेयली

9

सेवाओं के लिए यह ठीक है कि अन्य सेवाओं के कुछ संदर्भ डेटा की केवल-प्रतिकृति प्रतियाँ हों।

यह देखते हुए कि जब एक अखंड डेटाबेस को माइक्रोसर्विस में फिर से बनाने की कोशिश की जा रही है (जैसा कि फिर से लिखने का विरोध किया गया है)

  • सेवा के लिए db स्कीमा बनाएँ
  • उस स्कीमा में अन्य स्कीमों से डेटा को उजागर करने के लिए उस स्कीमा में ** संस्करण * देखे
  • इन पठनीय विचारों के खिलाफ जुड़ते हैं

यह आपको अन्य अनुप्रयोगों को तोड़ने के बिना स्वतंत्र रूप से टेबल डेटा / स्ट्रचटेर को संशोधित करने देगा।

उपयोग दृश्य के बजाय, मैं एक स्कीमा से दूसरे डेटा को दोहराने के लिए ट्रिगर्स का उपयोग करने पर भी विचार कर सकता हूं।

यह सही दिशा में वृद्धिशील प्रगति होगी, आपके घटकों के सीमों की स्थापना, और आरईएसटी के लिए एक कदम बाद में किया जा सकता है।

* विचारों को बढ़ाया जा सकता है। यदि एक ब्रेकिंग परिवर्तन की आवश्यकता है, तो एक ही दृश्य का एक v2 बनाएं और पुराने संस्करण को हटा दें जब इसकी आवश्यकता नहीं है। ** या टेबल-वैलिड-फंक्शन्स, या स्प्रोक्स।


5

CQRS --- कमान क्वेरी एकत्रीकरण पैटर्न क्रिस रिचर्डसन के अनुसार थी का जवाब है। प्रत्येक माइक्रोसर्विस को अपने स्वयं के डेटा मॉडल को अपडेट करने दें और उन घटनाओं को उत्पन्न करता है जो पहले microservices.This से आवश्यक जुड़ने वाले डेटा को अपडेट करने के लिए भौतिकीकृत दृश्य को अपडेट करेगा। यह एमवी कोई भी NoSql DB या Redis या elasticsearch हो सकता है जो क्वेरी अनुकूलित है। यह तकनीक अंततः सुसंगतता की ओर ले जाती है जो निश्चित रूप से खराब नहीं है और वास्तविक समय के अनुप्रयोग पक्ष से बचती है। उम्मीद है कि यह जवाब


2

मैं उपयोग के क्षेत्र के लिए समाधान अलग कर दूंगा, चलो कहते हैं कि परिचालन और रिपोर्टिंग।

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

दूसरा मामला तब है जब आपको एकत्रीकरण आदि (रिपोर्टिंग मामले) करने के लिए बड़ी मात्रा में डेटा पर बड़े प्रश्न करने होंगे। इस आवश्यकता के लिए मैं एक साझा डेटाबेस को बनाए रखने के बारे में सोचूंगा - आपकी मूल योजना के समान और इसे आपके माइक्रोसेवर डेटाबेस से घटनाओं के साथ अपडेट करना। इस साझा डेटाबेस पर आप अपनी संग्रहीत प्रक्रियाओं का उपयोग करना जारी रख सकते हैं जो आपके प्रयास को बचाएगा और डेटाबेस अनुकूलन का समर्थन करेगा।


1

Microservices में आप अंतर पैदा करते हैं। मॉडल पढ़ें, इसलिए उदाहरण के लिए: यदि आपके पास दो अंतर हैं। बाध्य संदर्भ और कोई व्यक्ति दोनों डेटा पर खोज करना चाहता है, तो किसी को दोनों बाध्य संदर्भ से घटनाओं को सुनने और एप्लिकेशन के लिए विशिष्ट दृश्य बनाने की आवश्यकता है।

इस मामले में और जगह की जरूरत होगी, लेकिन किसी जॉइन की जरूरत नहीं होगी और न ही किसी जॉइन की जरूरत होगी।

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