हम StackOverflow पर एक दिलचस्प समस्या से निपट रहे हैं।
हमें "जल्द ही-ईश" कार्यों को पूरा करने के लिए थोड़ा सा "पूरा" मिल गया है। एक उदाहरण "संबंधित प्रश्न" सूचियों को अद्यतन कर रहा है। अतीत में हमने जो किया है वह उन कार्यों को कुछ उपयोगकर्ताओं के पेज लोड पर वापस करने के लिए है।
यह कभी भी आदर्श नहीं था, लेकिन यह वास्तव में ध्यान देने योग्य नहीं था। अब जब SO ने 1,000,000 प्रश्न चिह्न को पार कर लिया है, तो उन अशुभ उपयोगकर्ताओं को यह महसूस होने लगा है।
प्राकृतिक समाधान वास्तव में इन कार्यों को पृष्ठभूमि में धकेलना है। ऐसा करने के दो व्यापक तरीके हैं जिन पर मैं विचार कर रहा हूं।
1. IIS में एक कस्टम थ्रेड-पूल / वर्क-क्यू के रूप में
असल में, हम कुछ (गैर ऊपर स्पिन ThreadPool , इतनी के रूप में आईआईएस के साथ हस्तक्षेप नहीं करने के लिए) धागे और उन्हें कुछ संग्रह हम धकेल कर रहे हैं सेवाओं है Funcs में।
यहाँ बड़ा समर्थक सादगी है। हमें किसी भी चीज़ के बारे में चिंता करने की ज़रूरत नहीं है, न ही हमें यह सुनिश्चित करना है कि कोई बाहरी सेवा शुरू हो रही है और जवाब दे रही है।
हम अपने सभी सामान्य कोड तक भी पहुँच प्राप्त करते हैं।
चोर, अच्छी तरह से है, कि हम पृष्ठभूमि धागे का उपयोग नहीं करना चाहिए। जिन आपत्तियों की मुझे जानकारी है, वे सभी भूखे IIS (यदि आप थ्रेडपूल का उपयोग करते हैं) और धागे बेतरतीब ढंग से (AppPool रीसाइक्लिंग के कारण) मर रहे हैं।
हमने रैंडम थ्रेड डेथ को नॉन-इश्यू बनाने के लिए मौजूदा इन्फ्रास्ट्रक्चर प्राप्त किया है (किसी कार्य का पता लगाना संभव है, मूल रूप से छोड़ दिया गया है), और थ्रेड्स की संख्या को सीमित करना (और नॉन-थ्रेडपूल थ्रेड्स का उपयोग करना) मुश्किल भी नहीं है।
StackOverflow में ले जाया गया , क्योंकि यह वास्तव में यहाँ संबोधित नहीं किया गया था।
2. एक सेवा के रूप में
या तो कुछ तीसरे पक्ष के समाधान, या एक कस्टम एक।
मूल रूप से, हम कुछ कार्य के लिए प्रक्रिया सीमा के पार एक कार्य को पूरा करेंगे और बस इसके बारे में भूल जाएंगे। संभवतः हम कुछ कोड को लिंक कर रहे हैं या कच्चे SQL + एक कनेक्शन स्ट्रिंग तक सीमित कर रहे हैं।
समर्थक यह है कि ऐसा करने का "सही तरीका" है।
विपक्ष यह है कि हम या तो बहुत सीमित हैं जो हम कर सकते हैं, या हम इस सेवा को हमारे कोड आधार के साथ सिंक में रखने के लिए कुछ सिस्टम को काम करने जा रहे हैं। हमें अपनी निगरानी और त्रुटि को किसी भी तरह से लॉग इन करने की आवश्यकता होगी, जो हमें "इन आईआईएस" विकल्प के साथ मुफ्त में मिलेगा।
क्या सेवा के दृष्टिकोण के साथ कोई अन्य लाभ या समस्याएं हैं?
संक्षेप में, क्या अप्रत्याशित और दुर्गम समस्याएं हैं जो दृष्टिकोण # 1 को अस्थिर बनाती हैं और यदि कोई अच्छी तृतीय-पक्ष सेवाएं हैं तो हमें दृष्टिकोण # 2 के लिए देखना चाहिए?