Ми маємо справу з цікавою проблемою на StackOverflow.
У нас є ціла купа маленьких завдань, які повинні швидко виконуватись. Приклад - оновлення списків "Пов'язані запитання". Що ми робили раніше - це повернути ці завдання на завантаження сторінок деяких користувачів.
Це ніколи не було ідеальним, але це було не дуже помітно. Тепер, коли SO пройшов знак питання на 1 000 000, ці нещасні користувачі починають це відчувати.
Природним рішенням є фактично відсунути ці завдання на другий план. Я розглядаю два широких способи зробити це.
1. У IIS як користувацька нитка / пул для роботи в черзі
В основному ми створюємо декілька (не- ThreadPool , щоб не заважати IIS), і надаємо їм служби деякі колекції, в які ми втягуємо Funcs .
Великий профі тут - простота. Нам не потрібно турбуватися про те, щоб скасувати щось, і не потрібно переконатися, що якась зовнішня служба працює і реагує.
Ми також отримуємо доступ до всього нашого загального коду.
Зрозуміло, що ми не повинні використовувати фонові нитки. Заперечення, про які я знаю, зосереджені навколо голодуючих IIS (якщо ви використовуєте ThreadPool) і потоки відмирають випадковим чином (через переробку AppPool).
У нас є існуюча інфраструктура, щоб зробити випадкову смерть потоку не проблемою (можливо, в основному виявити завдання було відмовлено), і обмеження кількості потоків (і використання потоків, що не є ThreadPool) теж не є складним.
Переміщено до StackOverflow , оскільки тут насправді не вирішено.
2. Як послуга
Або якесь стороннє рішення, або ж на замовлення.
В основному ми б вирішили задачу через процес, що межує з якоюсь службою, і просто забудемо про неї. Імовірно, ми пов'язуємо якийсь код у або обмежений в сирому SQL + рядку з'єднання.
Професіонал полягає в тому, що це "правильний шлях" для цього.
Мінуси полягають у тому, що ми або дуже обмежені в тому, що можемо робити, або нам доведеться розробити деяку систему для синхронізації цієї служби з нашою базою кодів. Нам також потрібно буде якось підключити весь наш моніторинг та помилки реєстрації помилок, які ми отримуємо безкоштовно за допомогою опції "В IIS".
Чи є якісь інші переваги чи проблеми з підходом до обслуговування?
Коротше кажучи, чи є небачені та непереборні проблеми, які роблять підхід №1 непрацездатним, і якщо так, чи є якісні сторонні послуги, ми повинні розглянути підхід №2?