वर्तमान स्थिति
हम एक ऑनलाइन शॉपिंग वेब एप्लिकेशन को एक माइक्रोसेक्चर आर्किटेक्चर में लागू कर रहे हैं (और अब बनाए हुए हैं)।
आवश्यकताओं में से एक यह है कि हमारे ग्राहकों को अपनी गाड़ी में जोड़ने के लिए नियमों को लागू करने में सक्षम होना चाहिए, ताकि उनके अनुभव और अंतिम क्रम को अनुकूलित किया जा सके। स्पष्ट रूप से, एक व्यावसायिक नियम इंजन को लागू किया जाना था, और हमने इसके लिए एक विशिष्ट "माइक्रोसर्विस" लागू किया (यदि हम अभी भी इसे कॉल कर सकते थे)।
एक वर्ष के दौरान, यह नियम इंजन अधिक से अधिक जटिल हो गया है, जिसमें अधिक से अधिक डेटा (जैसे कि कार्ट की सामग्री लेकिन साथ ही उपयोगकर्ता जानकारी, उसकी भूमिका, उसकी मौजूदा सेवाएं, कुछ बिलिंग जानकारी आदि) की आवश्यकता होती है। उन नियमों की गणना करें।
फिलहाल, हमारा shopping-cartमाइक्रोसर्विस यह सब डेटा अन्य माइक्रोसर्विसेज से इकट्ठा कर रहा है। भले ही इस डेटा का कुछ हिस्सा उपयोग किया जाता है shopping-cart, लेकिन ज्यादातर यह मुख्य रूप से नियम इंजन को खिलाने के लिए उपयोग किया जाता है।
नई आवश्यकताओं
अब इसी तरह की आवश्यकताओं के लिए नियम इंजन का पुन: उपयोग करने के लिए अन्य अनुप्रयोगों / माइक्रोसेवाओं की आवश्यकता होती है। वर्तमान स्थिति में, उन्हें इस प्रकार एक ही प्रकार के डेटा को संचारित करना होगा, एक ही माइक्रोसर्विसेस को कॉल करना होगा और एक ही संसाधन को नियम इंजन को कॉल करने में सक्षम बनाने के लिए निर्माण करना होगा।
जैसा कि जारी है, हम कई मुद्दों का सामना करेंगे:
- हर किसी को (नियम इंजन को कॉल करना) डेटा के लाने को फिर से लागू करना होगा, भले ही उन्हें खुद के लिए इसकी आवश्यकता न हो;
- नियम इंजन के अनुरोध जटिल हैं;
- इस दिशा में जारी रखते हुए, हमें कई अनुरोधों के लिए नेटवर्क के चारों ओर इस डेटा को ट्रांसपोर्ट करना होगा।
shopping-cartसभी डेटा लाने के कारण बहुत बड़ा हो गया है;- मैं शायद बहुतों को भूल जाऊं…
इन परेशानियों से बचने के लिए हम क्या कर सकते हैं?
आदर्श रूप से, हम नियम इंजन में अधिक जटिलता जोड़ने से बचेंगे। हमें यह भी सुनिश्चित करना चाहिए कि यह एक अड़चन न बने - उदाहरण के लिए कुछ डेटा लाने के लिए धीमा है (10s या उससे भी अधिक) इसलिए हमने प्री-फ़ेचिंग को shopping-cartइस तरह से लागू किया है कि डेटा को नियमों को कॉल करने से पहले होने की अधिक संभावना है इंजन, और एक स्वीकार्य उपयोगकर्ता अनुभव रखें।
कुछ विचार
- बता दें कि नियम इंजन को उस डेटा की आवश्यकता होती है जो उसे चाहिए। यह एकल जिम्मेदारी सिद्धांत (और भी… ) का उल्लंघन करते हुए, इसमें और भी जटिलता जोड़ देगा ;
- डेटा लाने के लिए नियम इंजन से पहले एक प्रॉक्सी μ लागू करें;
- एक "डेटा भ्रूण" μs को लागू करें, जो नियम इंजन को एक बार (समग्र जांच) में आवश्यक सभी डेटा लाने के लिए कहता है।
shopping-cart, लेकिन हम अन्य माइक्रोसर्विस की जरूरतों के लिए इसे आसानी से अनुकूलित कर सकते हैं (वे अभी भी उपयोगकर्ताओं, उत्पादों और ऑर्डर से संबंधित हैं)। जैसा कि हम इसे देखते हैं, उन्हें उसी इनपुट डेटा की आवश्यकता होगी , विशेष रूप से जैसे व्यवसाय लागू करने के लिए विधेय चुनने में सक्षम है। सभी डेटा कार्ट सामग्री को छोड़कर अन्य माइक्रोसर्विसेज द्वारा प्रदान किया जाता है। डेटा प्राप्त करना प्रति से जटिल नहीं है, लेकिन यह तब जटिल हो जाता है जब आपको ~ 10 अन्य माइक्रोसर्विसेज को कॉल करना होता है और नियम इंजन द्वारा अपेक्षित संरचना को बनाए रखना होता है।