हमें वेब कोड पर कस्टम कोड के आधार पर एक आरईएसटी सेवा को परिवर्तित करने के कार्य का सामना करना पड़ रहा है। सेवा में पर्याप्त मात्रा में अनुरोध हैं और डेटा पर चलने में कुछ समय लग सकता है, लेकिन एक बार लोड होने पर इसे कैश किया जा सकता है और आने वाले सभी अनुरोधों को पूरा करने के लिए उपयोग किया जा सकता है। सेवा के पिछले संस्करण में डेटा लोड करने और इसे कैश में लाने के लिए जिम्मेदार एक थ्रेड होगा। आईआईएस को कार्यकर्ता धागे से बाहर निकलने से रोकने के लिए ग्राहकों को कैश तैयार होने तक "बाद में वापस आना" प्रतिक्रिया मिलेगी।वेब एपीआई समेकन और स्केलेबिलिटी
वेब एपीआई की मेरी समझ यह है कि इसमें कार्यों पर परिचालन करके निर्मित एक असीमित व्यवहार है, और नतीजतन अनुरोधों की संख्या सीधे भौतिक धागे की संख्या से संबंधित नहीं होगी।
सेवा के नए कार्यान्वयन में मैं अनुरोधों को कैश तैयार होने तक प्रतीक्षा करने की योजना बना रहा हूं और फिर एक वैध उत्तर देता हूं। मैं वर्णन करने के लिए कोड का एक बहुत ही किसी न किसी स्केच बना दिया है:
public class ContactsController : ApiController
{
private readonly IContactRepository _contactRepository;
public ContactsController(IContactRepository contactRepository)
{
if (contactRepository == null)
throw new ArgumentNullException("contactRepository");
_contactRepository = contactRepository;
}
public IEnumerable<Contact> Get()
{
return _contactRepository.Get();
}
}
public class ContactRepository : IContactRepository
{
private readonly Lazy<IEnumerable<Contact>> _contactsLazy;
public ContactRepository()
{
_contactsLazy = new Lazy<IEnumerable<Contact>>(LoadFromDatabase,
LazyThreadSafetyMode.ExecutionAndPublication);
}
public IEnumerable<Contact> Get()
{
return _contactsLazy.Value;
}
private IEnumerable<Contact> LoadFromDatabase()
{
// This method could be take a long time to execute.
throw new NotImplementedException();
}
}
कृपया कोड के डिजाइन में बहुत अधिक मूल्य न रखें - यह केवल समस्या को वर्णन करने का निर्माण किया और हम इसे कैसे में किया था नहीं है वास्तविक समाधान आईसीओटीएक्ट रिपोजिटरी आईओसी कंटेनर में सिंगलटन के रूप में पंजीकृत है और इसे नियंत्रक में इंजेक्शन दिया जाता है। LazyThreadSafetyMode.AxecutionAndPublication के साथ आलसी केवल पहला धागा/अनुरोध प्रारंभिक कोड चला रहा है, प्रारंभिकता पूर्ण होने तक निम्नलिखित rquests अवरुद्ध कर रहे हैं।
क्या वेब एपीआई 1000 अनुरोधों को पूरा करने में सक्षम हो जाएगा, प्रारंभिक होने के लिए प्रतीक्षा कर रहा है, जबकि अन्य अनुरोध इस आलसी को मारने से नहीं हैं और आईआईएस कार्यकर्ता धागे से बाहर नहीं चल रहे हैं?