एक बहु स्तरीय विषम प्रणाली में REST या एक संदेश कतार?


9

मैं त्रिस्तरीय प्रणाली के लिए REST API डिज़ाइन कर रहा हूं जैसे: Client application-> Front-end API cloud server-> user's home API server (Home)

Homeएक घरेलू उपकरण है, और यह Front-endवेबसोकेट या एक लंबे सर्वेक्षण के माध्यम से संबंध बनाए रखने के लिए माना जाता है (यह पहला स्थान है जहां हम REST का उल्लंघन कर रहे हैं। यह बाद में और भी खराब हो जाता है)Front-endज्यादातर सुरंग कनेक्शन और कॉल के कुछ Clientअनुरोधों को Homeस्वयं करने का अनुरोध करती हैं। कभी-कभी Homeसूचनाएं भेजता है Client

Front-endऔर Homeमूल रूप से एक ही एपीआई है; LAN पर सीधे Clientकनेक्ट हो सकता है Home। इस मामले में, Homeकुछ Clientकार्यों को Front-endस्वयं ही पंजीकृत करने की आवश्यकता है।

इस प्रणाली में बाकी के लिए नियम हैं:

  • REST मानव-पठनीय है;
  • REST में क्रिया वस्तुओं की एक अच्छी तरह से परिभाषित मानचित्रण (जैसे CRUD), प्रोटोकॉल ऑब्जेक्ट्स के लिए संज्ञा और प्रतिक्रिया कोड हैं;
  • यह HTTP पर काम करता है और सभी संभावित परदे के पीछे से गुजरता है;

अन्य कंट्रास्ट हैं:

  • हमें न केवल एक अनुरोध-प्रतिक्रिया संचार शैली की आवश्यकता है, बल्कि एक प्रकाशन-सदस्यता भी चाहिए;
  • तीन-स्तरीय संचार त्रुटियों को संभालने के लिए HTTP त्रुटि कोड अपर्याप्त हो सकता है; केवल कुछ आवश्यक कनेक्शन टूट गया है और वहाँ होना चाहिए था पता लगाने के लिए कुछ async कॉल करने के लिए Front-endवापस आ सकता है ;202 AcceptedHome503
  • Homeको संदेश भेजने की आवश्यकता है ClientClientचुनाव करना होगा Front-endया संबंध बनाए रखना होगा।

हम प्रकाशित / सदस्यता कार्यक्षमता प्राप्त करने के लिए Websocket पर WAMP / Autobahn पर विचार कर रहे हैं , जब उसने मुझे मारा कि यह पहले से ही संदेश कतार की तरह लग रहा है।

क्या यह परिवहन के रूप में मैसेजिंग कतार का मूल्यांकन करने लायक है?

संदेश कतार विरोधाभास की तरह लग रहे हैं:

  • मुझे संदेश स्तर पर CRUD क्रिया और त्रुटि कोड को स्वयं परिभाषित करना होगा।
  • मैंने "उच्च रखरखाव लागत" के बारे में कुछ पढ़ा, लेकिन इसका क्या मतलब है?

ये विचार कितने गंभीर हैं?


1
आपके पास मिक्स में क्लाउड सर्वर क्यों है? ऐसा लगता है कि यह सब पुनर्निर्देशित होता है जो मुझे लगता है कि यह घरेलू मशीन के समान मशीन पर जीना चाहिए ...
जिमी हॉफ

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

@Jimmy Hoffaमान्य बिंदु, धन्यवाद। यह सही है, लेकिन पूरी तरह से नहीं। यह एक आम डेटाबेस, भंडारण और इतने पर है। @Javierधन्यवाद, यह उत्तर का एक अच्छा हिस्सा है।
विक्टर सर्जेनको

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

@Mike Brownबिल्कुल सही। कृपया कीजिए।
विक्टर सर्जेनको

जवाबों:


5

यदि आपके पास कनेक्टिविटी है, तो एक संदेश कतार के साथ जाएं - हालांकि आपको किसी विशेष संरचना और प्रारूप के संदेश भेजने के लिए अपने स्वयं के प्रोटोकॉल (शायद ही कोई कठिन कार्य!) को परिभाषित करना होगा।

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

यदि आपके पास पोर्ट 80 और http और 'यूनिडायरेक्शनल' कॉम्स के साथ इंटरनेट पर कनेक्टिविटी की समस्या है, तो एक REST स्टाइल सिस्टम शायद सबसे अच्छा है। कॉलबैक डेटा के लिए जा रहे एक सर्वेक्षण और भेजें या सर्वेक्षण करें, लेकिन आम तौर पर आपका सिस्टम क्लाइंट / सर्वर होना चाहिए। यदि आपके पास कनेक्टिविटी प्राप्त करने की क्षमता है, तो मैसेजिंग सिस्टम महान हैं।

मैं एक मैसेजिंग सिस्टम के लिए ZeroMQ के साथ जाऊंगा , इसके विन्यास को परिदृश्यों के सभी प्रकार से मोड़ने के लिए पर्याप्त है, जिसमें दोष-सहिष्णु भी शामिल हैं। मुझे यकीन नहीं है कि यह http पर काम करता है


धन्यवाद। मुझे @Javierटिप्पणी के बाद क्या मिला : QMQ खुद एन्क्रिप्शन का समर्थन नहीं करने के लिए लगता है: zeromq.org/area:faq#toc8 हालांकि RabbitMQ करता है: rabbitmq.com/ssl.html
विक्टर

मुझे नहीं पता कि मेरे पास कनेक्टिविटी है या नहीं। Homeएक उपयोगकर्ता होम डिवाइस है, और Clientवाई-फाई या 3 जी पर एक स्मार्टफोन है। सवाल का एक बड़ा हिस्सा एक NAT traversal तरीकों के बारे में मेरी अज्ञानता है।
विक्टर सर्जेनको

5

ऐसा लगता है कि ऑटोबान आप क्या करने की कोशिश कर रहे हैं के साथ अच्छी तरह से फिट बैठता है। अन्य उपकरण भी उपलब्ध हैं। की जाँच करें विंडोज Azure सेवा बस (जो जावा, नेट, पीएचपी, अजगर, NodeJS, और रूबी के लिए ग्राहक चौखटे है)।

जबकि बाकी संदेशों में अंतर्निहित उपयोगी हैं। आप पाएंगे कि आपका आवेदन मूल CRUD परिचालनों को पार कर जाएगा। उदाहरण के लिए यदि आपका आवेदन एक बैंकिंग प्रणाली थी। के बजाय

अपडेट Acct 54321 बैलेंस = बैलेंस - 20.00 अपडेट Acct 98765 बैलेंस = बैलेंस + 20.00

आप शायद एक ही संदेश चाहते हैं

54.00 खाते से 98765 खाते में 20.00 स्थानांतरित करें

यह सबसे अच्छा है कि आप REST के साथ इस बाधा को बाद के बजाय अब खोज लें। ग्रेग यंग के ईवेंट सेंट्रिक की जांच करें जो चर्चा करता है कि आपके आवेदन के भीतर मैसेजिंग के लिए एक अमीर मॉडल कैसे बनाया जाए।


बहुत बहुत धन्यवाद। वास्तव में हम CRUD को पछाड़ सकते हैं, हालांकि बहुत जल्द नहीं, अब हमारा डोमेन बहुत सरल है। BTW पुस्तक अभी तक प्रकाशित नहीं हुई है, ग्रेग के ब्लॉग में कुछ माथेरियल खोजने की कोशिश कर रहा है ... मुझे लगता है कि यह अच्छा है मुझे इसके लिए Microsoft तकनीक का उपयोग करने की आवश्यकता नहीं है।
विक्टर सर्जेनको

रुको उसकी किताब अभी भी बाहर नहीं है ... वह इसके बारे में इतनी देर से बात कर रहा है ... एक और तकनीकी लेखक की तरह लगता है मुझे पता है। : ">
माइकल ब्राउन

1
रिकॉर्ड के लिए, REST दृष्टिकोण आपके द्वारा बनाए गए स्थानांतरण संसाधन के लिए होगा। या यहां तक ​​कि एक TransferRequest जो पारित कर सकता है या नहीं। REST कुछ मामलों में मुश्किल हो जाता है, लेकिन यह उनमें से एक नहीं है।
जसक गोर्गो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.