Mamy do czynienia z interesującym problemem na StackOverflow.
Mamy całą masę drobnych „zadań do zrobienia wkrótce”. Przykładem jest aktualizacja list „Podobne pytania”. To, co zrobiliśmy w przeszłości, polega na nałożeniu tych zadań na obciążenia niektórych użytkowników.
To nigdy nie było idealne, ale tak naprawdę nie było zauważalne. Teraz, gdy SO przekroczyło 1 000 000 znaków zapytania, ci pechowi użytkownicy zaczynają to odczuwać.
Naturalnym rozwiązaniem jest przesunięcie tych zadań na drugi plan. Rozważam dwa szerokie sposoby na zrobienie tego.
1. W IIS jako niestandardowa pula wątków / kolejka robocza
Zasadniczo rozpakowujemy kilka wątków (innych niż ThreadPool , aby nie zakłócać IIS) i udostępniamy im niektóre kolekcje, w które wrzucamy Funcs .
Wielkim profesjonalistą jest tutaj prostota. Nie musimy się martwić o zbieranie niczego, ani nie musimy upewnić się, że niektóre usługi zewnętrzne działają i reagują.
Uzyskujemy również dostęp do całego naszego wspólnego kodu.
Wadą jest to, że nie powinniśmy używać wątków w tle. Zarzuty, o których wiem, koncentrują się wokół głodujących IIS (jeśli używasz ThreadPool), a wątki umierają losowo (z powodu recyklingu AppPool).
Mamy istniejącą infrastrukturę, dzięki której losowa śmierć wątku nie będzie problemem (w zasadzie możliwe jest wykrycie zadania, które zostało porzucone), a ograniczenie liczby wątków (i używanie wątków innych niż ThreadPool) również nie jest trudne.
Przeniesiony do StackOverflow , ponieważ tak naprawdę nie został tutaj rozwiązany.
2. Jako usługa
Albo jakieś rozwiązanie innej firmy, albo niestandardowe.
Zasadniczo zorganizujemy zadanie przekraczające granicę procesu do jakiejś usługi i po prostu o tym zapomnimy. Przypuszczalnie łączymy jakiś kod lub ograniczamy się do surowego SQL + ciąg połączenia.
Zaletą jest to, że jest to „właściwy sposób”, aby to zrobić.
Wadami są to, że albo jesteśmy bardzo ograniczeni w tym, co możemy zrobić, albo będziemy musieli wypracować jakiś system, aby utrzymać tę usługę w synchronizacji z naszą bazą kodu. Będziemy też musieli jakoś przechwycić wszystkie nasze monitorowanie i rejestrowanie błędów, które otrzymujemy za darmo z opcją „In IIS”.
Czy są jakieś inne korzyści lub problemy z podejściem serwisowym?
W skrócie, czy istnieją nieprzewidziane i nie do pokonania problemy, które sprawiają, że podejście nr 1 jest niewykonalne, a jeśli tak, to czy są jakieś dobre usługi stron trzecich, na które powinniśmy zwrócić uwagę w kierunku podejścia nr 2?