मेरे पास एक वेब सेवा है जो सर्वर के क्लस्टर पर चल रही है। यह वेब सेवा कुछ आंतरिक प्रसंस्करण करता है, और फिर एक बाहरी सेवा के लिए कॉल कर सकती है जो शुल्क लेती है।आशावादी कैशिंग Concurrency डिजाइन पैटर्न
मैं कुछ कैशिंग में रखना चाहता हूं ताकि अगर मुझे सेवा के लिए समान अनुरोध प्राप्त हों (जो होने की गारंटी है), तो मुझे प्रोसेसिंग समय/बिजली और लागत की लागत दोनों को प्रोसेस करना दोहराना नहीं है सेवा कॉल के बाहरी हिस्से में।
हालांकि, मैं कैसे इस कैशिंग प्रबंधन करने के लिए जब मैं निम्नलिखित की कमी
- सेवा उच्च उपलब्धता और scalability के लिए कई वेब सर्वर पर चल रहा है
- अनुरोध का समय लग सकता यह पता लगाने के लिए संघर्ष कर रहा हूँ जवाब देने के लिए 5 सेकंड तक, लेकिन इसी समय, मुझे 2 या 3 अन्य समान अनुरोध प्राप्त हुए होंगे।
वितरित वातावरण में काम करते समय पहले व्यक्ति ने जवाब दिया है (इसलिए कैश में उपलब्ध), जब तक कि मैं अन्य सेवा कॉल निष्पादित करने पर रोक नहीं सकता हूं।
मैंने सामने वाले प्रॉक्सी पैटर्न डालने और प्रॉक्सी के भीतर समान अनुरोधों की कतार बनाने के बारे में सोचा है, ताकि जब पहला रिटर्न हो, तो यह दूसरों को भी वही प्रतिक्रिया दे सकता है। क्या यह सही पैटर्न है, या क्या इस परिदृश्य से संबंधित एक बेहतर समवर्ती पैटर्न है?
बाहरी ws क्लस्टर भी है, क्या आप इसे नियंत्रित करते हैं? ऐसा लगता है कि शुरुआत करने के लिए एक अच्छा लक्ष्य प्रस्तुत करना प्रतीत होता है, आप अपने स्वयं के रैपर कैशिंग वेब सेवा को इसके सामने –
लिख सकते हैं, यह मेरे नियंत्रण में नहीं है। यह एक सेवा है जिसे हम आपूर्तिकर्ता से बुला रहे हैं – Codemwnci
प्रत्येक _cache_ परिदृश्य में: वास्तव में यह सुनिश्चित है कि सेवा _really_ stateless है? अर्थात। एक "FetchCustomerDetailById" सेवा कैच करने योग्य नहीं है क्योंकि एक मध्यवर्ती "चेंज कस्टमरनाम" को आपके कैश को अमान्य करना होगा। –