Как сделать веб-сервис, который потребляет около 500 RSS и сохраняет новые элементы в базе данных? - PullRequest
2 голосов
/ 06 ноября 2010

У меня есть проект, который мне нужен, чтобы создать службу, в которую мы добавим около 500 RSS для разных сайтов, и мы хотим, чтобы эта служба собирала новые RSS-каналы из этих источников и сохраняла заголовок и URL в моей базе данных SQL Server.

Как определить наилучший дизайн архитектуры и какие коды помогут мне в этом?

Ответы [ 2 ]

5 голосов
/ 06 ноября 2010

Эти указания не относятся к вашему стеку (c#, asp.net), но я бы определенно не рекомендовал делать что-либо из цикла запрос-ответ вашего веб-приложения . Это должно быть сделано в асинхронном режиме, но результаты могут предоставляться из базы данных, которую вы заполняете записями фида.

  1. Вероятно, вам придется построить архитектуру, где вы опросить каждый канал каждые X минут . Использует ли он работу cron, или демон, который работает непрерывно, вам придется опросить каждый канал один после другого (или с каким-то параллелизма, но дизайн тот же самый). Пожалуйста, используйте HTTP заголовки лайков Etags и If-Modified, чтобы избежать опроса данных это не было обновлено.

  2. Затем вам нужно будет разобрать кормит себя. Это очень вероятно что вам придется поддерживать различные разновидности RSS и Atom , но большинство парсеров фактически поддерживают both.1.

  3. Наконец, вам придется хранить записи и, что более важно, перед Вы вставляете их, убедитесь, что вы еще не добавил их. Вы следует использовать id или guid для записей, но это вероятно что вам придется использовать свой собственный Система тоже (ссылки, хэш ...), потому что многие каналы не имеют их.

Если вы хотите уменьшить количество опросов, которое вам придется делать, сохраняя при этом своевременные результаты, вам придется реализовать PubSubHubbub для каналов, которые его поддерживают.

Если вы не хотите иметь дело с какой-либо из многочисленных проблем, выявленных ранее (опрос своевременно, анализ содержимого, различие в сохранении уникальности записей ...), я бы рекомендовал использовать Superfeedr поскольку это касается всех болевых точек.

0 голосов
/ 06 ноября 2010

Я не буду вдаваться в подробности о реализации или детальной архитектуре здесь (в основном из-за нехватки времени в данный конкретный момент), но я скажу следующее:

  • Это не веб-служба , которая должна использовать RSS-каналы, она должна просто отвечать за порождение работы, выполняемой асинхронно .
  • Вы не должны использовать потоки из ThreadPool для этого по двум причинам. Во-первых, можно предположить, что работа занимает больше или меньше времени (ThreadPool рекомендуется в первую очередь для краткосрочных задач), и, возможно, более важно, потоки ThreadPool используются для обслуживания входящих веб-запросов; не хочу с этим соревноваться.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...