2011-12-02 7 views
6

स्थिति पर विचार करें।अभ्यास में रीस्ट वास्तव में स्टेटलेस हो सकता है?

मैं एक सांख्यिकीय विश्लेषण ऐप लिख रहा हूं। ऐप में कई स्तर हैं।

  1. फ्रंटेंड यूआई कई डिवाइस प्रकारों, डेस्कटॉप, ब्राउज़र, मोबाइल के लिए लिखा गया है।
  2. मिड-स्तरीय सर्वलेट जो इन फ्रंटेंड को तथाकथित आरईएसटी सेवा प्रदान करता है।
  3. बैकएंड जो सांख्यिकीय प्रसंस्करण की अत्यधिक गणना करता है।
  4. कौन सा कारण से एक और बैकएंड डेटाबेस

के साथ संचार कि सांख्यिकीय विश्लेषण प्रसंस्करण शक्ति की भारी राशि की आवश्यकता है, तो आप सामने के अंत करने के लिए इस तरह के प्रसंस्करण सौंपने का सपना कभी नहीं होगा।

  1. सांख्यिकीय विश्लेषण प्रक्रियाओं या काम प्रवाह चरणों की एक श्रृंखला के होते हैं।

  2. कुछ चरणों को इतनी प्रोसेसिंग पावर की आवश्यकता हो सकती है, आप उन्हें दोहराने के लिए नहीं चाहते हैं।

  3. आप 20 चरणों में से एक काम के प्रवाह है, तो आप पहला कदम 19 है, जो बिना पहला कदम 18 क्रियान्वित निष्पादित नहीं किया जा सकता को क्रियान्वित करने के बिना कदम 20 पर अमल नहीं कर सकते, इतने पर और इसके आगे।

  4. अवलोकन अंक, इस तरह, कि उदाहरण के लिए, सांख्यिकीविद् चरण 3, 7, 9, 14, 19 से पहले अगले चरण पर आगे बढ़ने के लिए क्लाइंट साइड करने के लिए कह के परिणामों का निरीक्षण करना चाहिए रहे हैं।

  5. इन चरणों में से प्रत्येक, बाकी सेवा करने के लिए एक तथाकथित अनुरोध कर रहे हैं को बैकएंड सुपर कंप्यूटर बता उत्तरोत्तर स्मृति में सांख्यिकीय मॉडल स्थापित करने के लिए।

  6. कई वर्कफ़्लो हैं। कुछ वर्कफ़्लो आकस्मिक रूप से चरण परिणाम साझा कर सकते हैं। उदाहरण के लिए, प्रवाह [शुष्क]: चरण [7] प्रवाह [गीला] साझा कर सकता है: चरण [10]। प्रसंस्करण की मात्रा में के कारण, हमने पूरी तरह से को एक चरण दोहराया है जो आकस्मिक रूप से किसी अन्य प्रवाह द्वारा पूरा हो सकता है।

इसलिए, आप देख सकते हैं कि तथाकथित बाकी सेवा में तैयार किया जा रहा, यह संभव नहीं है कि प्रत्येक अनुरोध किसी भी पिछले अनुरोध से स्वतंत्र हो।

इसलिए, निम्नलिखित कथन कितना सच हो सकता है?

सभी आरईएसटी इंटरैक्शन स्टेटलेस हैं। यही है, प्रत्येक अनुरोध में अनुरोध को समझने के लिए कनेक्टर के लिए जरूरी सारी जानकारी शामिल है, जो इससे पहले हो सकता है कि किसी भी अनुरोध से स्वतंत्र हो।

जाहिर है, आवेदन मैं वर्णित है, आवश्यकता है कि अनुरोध पिछले अनुरोध पर निर्भर होना। इस ऐप से संबंधित तीन संभावनाएं हैं जिन्हें मैं देख सकता हूं।

  • मेरा ऐप आरईएसटी का पालन नहीं करता है, क्योंकि यह स्टेटलेस अनुरोधों का पालन नहीं कर सकता है। यह जेएक्स-आरएस ढांचे का उपयोग कर सकता है, लेकिन जेएक्स-आरएस का उपयोग करके और आरईएसटी के सभी सामानों ने इसे आरईएसटी नहीं बनाया है, क्योंकि यह स्टेटलेस मानदंडों में विफल रहता है।
  • मेरा ऐप बुरी तरह से डिज़ाइन किया गया है - मुझे एक सांख्यिकीय मॉडल को फिर से स्थापित करने के लिए अस्थायी और वित्तीय लागत से बचने की कोशिश करना चाहिए, भले ही वर्कफ़्लो के लिए 5-15 मिनट लग गए हों। बस सुनिश्चित करें कि पिछले अनुरोधों पर कोई निर्भरता नहीं है। आवश्यक होने पर महंगा कदम दोहराएं।
  • स्टेटलेस मानदंड पुराना है। आरईएसटी की मेरी समझ पुरानी/दोषपूर्ण है कि आरईएसटी समुदाय लगातार इस मानदंड को अनदेखा कर रहा है।

क्या मेरा ऐप रीस्टफुल माना जाता है?

नया प्रश्न: आईएसओ 9000

अंत में, मामले में मेरे एप्लिकेशन नहीं पूरी तरह से शांत माना जाता है, सभी संदर्भों को "आराम" आईएसओ 9000 प्रमाण पत्र पारित करने के लिए छोड़ देना करने के लिए की आवश्यकता होगी?

नया संपादित:

बाकी-इन-टुकड़ा

ठीक है, मेरे सहकर्मी और मैं इस पर चर्चा की और इस तरह के एक वास्तुकला/पैटर्न बाकी-इन-टुकड़ा = टुकड़ों चरणों में बाकी बुलाने का फैसला किया है ।

+1

"राज्य" की आपकी परिभाषा क्या है? –

+0

दिमित्री - बिल्कुल मेरा सवाल। हमें उन गुरुओं से पूछना है जो आरईएसटी को परिभाषित करते हैं। –

+3

डेटाबेस में अभी तक राज्य है, वहां बहुत सारे डेटाबेस समर्थित वेब अनुप्रयोग हैं जिन्हें रीस्टफुल माना जाता है। क्या होगा यदि इसका डेटाबेस या इसका हिस्सा स्मृति में है? असल में, मेरा मानना ​​है कि "राज्य" जिसे रेस्ट आर्किटेक्चर को बनाए रखना नहीं चाहिए, एक सत्र (अस्थिर) राज्य है, न कि एप्लिकेशन (व्यवसाय) राज्य। –

उत्तर

9

ISTM, आप स्टेटलेसनेस में बहुत अधिक पढ़ रहे हैं। एक आरईएसटी एपीआई पारंपरिक CRUD operations का समर्थन करता है। CouchDB के लिए एपीआई स्टेटलेस लेनदेन की एक श्रृंखला द्वारा डीबी राज्य को अद्यतन करने का अच्छा उदाहरण है।

आपका कार्य यह पहचानना है कि संसाधन क्या हैं और उनके बीच "राज्य स्थानान्तरण" क्या है। आपके वर्कफ़्लो में प्रत्येक चरण एक अलग राज्य हस्तांतरण है, जिसे एक अलग यूआरआई द्वारा चिह्नित किया जाता है। किसी संसाधन में प्रत्येक अपडेट/परिवर्तन के पास पोस्ट पोस्ट/पैच या एक idempotent PUT या डिलीट ऑपरेशन होता है।

यदि आप रीस्टफुल होने का मतलब समझने के लिए बेहतर समझना चाहते हैं और प्रत्येक डिज़ाइन पसंद के पीछे कारण हैं, तो मैं Chapter 5 of Roy Fielding's Dissertation पढ़ने में एक घंटा खर्च करने की सलाह देता हूं।

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

+0

मैं चाहता हूं कि आप मुझे बताएं कि क्या स्टेटलेस मानदंड अब पानी रखता है। हाॅं नही? क्या स्टेटलेसनेस की मेरी समझ दोषपूर्ण है? हाॅं नही। यदि ऐसा है, तो स्थाई स्टेटलेस की व्याख्या करें। –

+0

इस सवाल से पूछने से पहले, मैं वास्तव में उस अध्याय को पढ़ रहा था। –

2

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

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

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

किसी कामकाज/समझौता किसी प्रकार के डेटाबेस या स्टोर में राज्य को जारी रखता है। इस तरह आपके नोड्स अनुरोध को संसाधित करने से पहले राज्य को डिस्क से ला सकते हैं।

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

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

बेशक कुंजी को यूआरआई के रूप में प्रदर्शित किया जाना चाहिए। मैं आपको जिम वेबबर के "अभ्यास में आरईएसटी" पढ़ने की सलाह देता हूं। यह आरईएसटी-पूर्ण एपीआई डिजाइन करने के लिए एक महान परिचय है।

+0

क्या मेरे ऐप को सुपरकंप्यूटर की स्मृति से गणितीय मॉडल को डेटाबेस में उतारने की लागत लगाना चाहिए, बस स्टेटलेस मानदंडों को पूरा करने के लिए? –

+0

नहीं, जब तक आपका सर्वर मर जाता है तब तक राज्य खोना आपके लिए कोई समस्या नहीं है, मैं ऐसा कुछ नहीं करता। यदि नहीं, तो आपको बस इतना करना है कि आप अपने मॉडल को संसाधन के रूप में सोचने का प्रयास करें जो आप http के माध्यम से उपलब्ध कराते हैं और आप PUT, POST, GET, और DELETE अनुरोध कर सकते हैं। –

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