2016-12-01 12 views
8

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

हालांकि, एक बड़ा आइटम जो हम फंस गए हैं, सेवाओं में समेकित, फ़िल्टरिंग और पेजिंग परिणाम हैं। मुझे इस परिदृश्य के साथ इस मुद्दे का वर्णन करने दें।

कहते हैं कि हम 3 सेवाओं है:

  1. PersonService - आइटम है कि खरीद-कर रहे हैं पर स्टोर जानकारी - लोगों पर स्टोर जानकारी (नाम, पते, आदि)
  2. ItemService
  3. भुगतान सेवा - लोगों द्वारा विभिन्न वस्तुओं के लिए किए गए भुगतानों के संबंध में स्टोर जानकारी।

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

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

एक प्रदर्शन परिप्रेक्ष्य से, परिणामों को कम करने के लिए बार-बार सेवाओं की पूछताछ करना महंगा होगा, इसलिए मैं बेहतर समाधान खोज रहा हूं। हालांकि, मुझे इस समस्या के ठोस समाधान नहीं मिल रहे हैं (या कम से कम एक "सर्वोत्तम अभ्यास")। एक मोनोलिथिक एप्लिकेशन में, हम बस अलग-अलग तालिकाओं में SQL जोड़ों का उपयोग करेंगे। मुझे परेशानी का एक टन मिल रहा है यह पता लगाने के लिए कि कैसे/अगर सेवाओं में कुछ समान संभव है।

समुदाय से मेरा प्रश्न है: आपका दृष्टिकोण क्या होगा? हालात मैं माना जाता है:

  1. (Elasticsearch, Solr) है कि सभी सेवाओं के लिए सभी डेटा शामिल हैं (घटनाओं के माध्यम से अद्यतन सेवाओं द्वारा बाहर धक्का दे दिया) खोज अनुक्रमणिका के कुछ प्रकार का उपयोग करना, और फिर खोज अनुक्रमणिका से क्वेरी परिणामों के लिए।
  2. जैसे ग्राफिकल और नियो 4j इन समस्याओं के साथ हमारी सहायता कर सकते हैं, यह समझने का प्रयास कर रहे हैं।
+0

क्रिस रिचर्डसन के पास सेवाओं के बीच डाटाबेस प्रति सेवा कविता साझा डेटाबेस पर कुछ अंतर्दृष्टि है: http://microservices.io/patterns/data/database-per-service.html –

उत्तर

2

मैं Sam Newman जो अध्याय 4 में कहते हैं के साथ छड़ी की तरह अपनी पुस्तक कुछ का "साझा डाटाबेस":

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

यह वह बिंदु है जब मैं सामग्री-प्रबंधन-सिस्टम पर शाप देता हूं।

मेरे विचार में एक माइक्रोसाइव स्वायत्त है, यह नहीं हो सकता है अगर यह चीजें साझा करता है या साझा चीजों का उपभोग करता है। यहां एकमात्र अपवाद है जो मैं डोमेन-ऑब्जेक्ट्स करता हूं, जो व्यापार मॉडल की साझा समझ का प्रतिनिधित्व करते हैं और माइक्रोस्कोर्सेस के बीच संचार में उपयोग किए जाने चाहिए।

यह एक ईआर या एकत्रीकरण डेटाबेस (दस्तावेज़ आधारित या ग्राफ आधारित में विभाजित) की आवश्यकता के अनुरूप सूक्ष्म सेवा पर निर्भर करता है। मजेदार बात यह है कि, loosley युग्मित होने और autonomus होने के द्वारा आप बस ऐसा करने में सक्षम हैं!

यदि कोई भुगतान सेवा "व्यक्ति ए के लिए कितने भुगतान" के व्यवहार को साझा करती है तो उसे पूरा करने के लिए उसे व्यक्ति ए को जानने की आवश्यकता है। लेकिन व्यक्ति ए के बारे में जो कुछ भी वह जानता है उसे व्यक्ति सेवा से मूल होना चाहिए, शायद रनटाइम पर (भुगतान सेवा शायद एक आईडी स्टोर कर सकती है) या ईवेंट आधारित (भुगतान सेवा उस डेटा को संग्रहीत करती है जो इसे डोमेन-ऑब्जेक्ट उपयोगकर्ता को चाहिए, जो अद्यतन ट्रिगर और आपूर्ति की जाती है व्यक्ति सेवा द्वारा)। भुगतान सेवा स्वयं उपयोगकर्ताओं को साझा नहीं करती है।

संबंधित मुद्दे