Делегирование задач для критически важных приложений

Я работаю над критически важным приложением. Приложение извлекает данные фондового рынка с различных фондовых рынков, таких как NYSE, NASDAQ и т. д., используя сторонние службы. Клиенты могут зайти в приложение и добавить свой Портфель (акции какой компании у них есть). А затем установите Оповещения. например. Сообщите мне, когда цена AAPL превысит $xxx на NASDAQ. когда цена MSFT опускается ниже $zzz на NYSE.

У меня есть задание cron, которое извлекает рыночные данные из стороннего сервиса для всех добавленных пользователями тикеров (AAPL, GOOG, MSFT и т. Д.) Каждую 1 минуту. После того, как я получаю данные, я извлекаю все оповещения, созданные пользователями, а затем отправляю им уведомления по электронной почте, SMS, Pushover, Twitter, Facebook Message и т. д. Также добавляю это уведомление в базу данных приложения, чтобы пользователь мог видеть его в приложении, когда они авторизоваться.

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

В настоящее время я отправляю всю часть отправки уведомлений в Queue. Рабочий (на моем сервере) отправляет уведомление. Есть ли другие лучшие способы делегировать как можно больше работы сторонним серверам? Вы бы порекомендовали использовать Iron.io worker, чтобы он также выполнял работу по отправке уведомлений. И может также получать данные с рынка.

Спасибо!


person Ashit Vora    schedule 18.06.2014    source источник


Ответы (1)


Архитектурно существует несколько подходов, но похоже, что вы делаете правильный выбор. Использование поставить в очередь, чтобы отделить производителя от процесса уведомления. Это обеспечивает более правильную архитектуру SOA, в которой вы можете независимо изменять/обновлять/развивать различные части приложения, не слишком беспокоясь о тесно связанном коде.

Тем не менее, ваш вопрос конкретно касается разгрузки третьим лицам. Существуют третьи стороны, которые могут абстрагировать часть уведомления из вашего кода. Я не очень хорошо с ними знаком, но есть много вариантов: PubNub, Pusher, Twilio, SendGrid, Mailgun, AWS SNS и т. д.

Я работаю на Iron.io. У нас есть много клиентов, которые делают именно то, что вы пытаетесь сделать: создают рабочие процессы, которые становятся небольшими мини-сервисами, и вызывают их из push-событий, запланированных задач или по запросу. Это освобождает вас от необходимости иметь дело с очередями, маршрутизацией, планированием и пропускной способностью рабочего/фонового сервера.

Мы будем рады помочь вам спроектировать вещи с самого начала, просто свяжитесь с нами по адресу [email protected].

person Chad    schedule 18.06.2014
comment
Спасибо. Очень ценю ваш ответ. Я уже использую сторонние сервисы для отправки уведомлений. т.е. Twilio для SMS, Sendgrid для отправки по электронной почте, для push-уведомлений и т. д. Я посмотрю на Iron.io worker и посмотрю, как я могу использовать их в своем приложении. Спасибо еще раз. - person Ashit Vora; 19.06.2014