В последнее время я написал несколько постов на близкие мне темы, такие как web mining (практика вытаскивания данных из интернета) и event brokers (они же брокеры событий, или аггрегаторы, как кому понятней). Это, если хотите, слой бизнес-логики. В этом же посте я хочу рассказать о том, как реализована интеграция различных подсистем, которые участвуют в получении и обработке данных. Я буду использовать фреймворк NServiceBus в качестве messaging-шины. Примеры кода можно найти тут: http://bitbucket.org/nesteruk/datagatheringdemos. Что такое ESB?Для начала давайте определимся, зачем нужна эта передача сообщений. Все наши системы так или иначе являются отделенными (decoupled) друг от друга. Например, одна система занимается скачиванием данных. Другая занимается обработкой этих данных – так мы получаем возможность одни и те же данные пускать под разные цели. Еще одна система занимается хранением этих данных и предоставлением доступа к ним. Ну и наконец у нас есть программы которые показывают эти данные на экране. Существует море вариантов для взаимодействия этих систем, и обычно для таких сценариев применяется нечто под названием Enterprise Service Bus (ESB), т.е. шина для корпоративных сервисов. ESB – это инфраструктурное решение, которое позволит вашим сервисам и приложениям работать друг с другом по одному стандартизованному методу. В случае с библиотекой NServiceBus, которую я предлагаю использовать, используется достаточно древняя технология MSMQ. СценарийСразу строить сложную архитектуру сложно, поэтому представим что у нас есть две вещи – сервис который получает откуда-то данные (например “сдирает” их с сайтов), и сервис который получает эти данные и записывает их в базу. Представим себе что обработки эти данные не требуют и что их можно записывать в базу “в чем мать родила”. Внимание вопрос: как первый сервис будет передавать данные второму? Именно для этого нам и пригодится NServiceBus. NSB позволит первому сервису отслылать сообщения о новых данных в общую очередь, из которой их будет брать второй сервис и уже что-то делать с этими данными (например, записывать их в базу). В нашем сценарии, мы представим что первый сервис будет получать информацию о человеке (Person) и передавать ее второму. Read more: Дмитрий Нестерук
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment