Подписчики SSE - распределены по нескольким серверам?

Глядя на демонстрацию sse-chat Clojure Pedestal Framework, основанный на функциях SSE в пьедестале — я заметил следующий код:

(defn publish
  [request]
  (doseq [sse-context @subscribers]
    (try
      (sse/send-event sse-context "message" (-> request :form-params (get "msg")))
      (catch java.io.IOException e
        (remove-subscriber sse-context))))
  {:status 204})

По сути, это сохраняет карту подписчиков (карту клиентов EventSource) и отправляет им события чата.

Мой вопрос: предположим, вы хотите масштабировать это приложение на нескольких серверах. Что такое идоматическая модель, в которой это можно сделать? (надеюсь, в Clojure Pedestal, но может быть решением для всего спектра Java)


person hawkeye    schedule 27.07.2013    source источник
comment
Хм, возможно, github.com/torsten/zookeeper-atom поможет с этим.   -  person codeasone    schedule 24.09.2018


Ответы (1)


В настоящее время не существует бесплатного обеда/серебряной пули для многоузлового параллелизма. Большинство людей используют подход SOA (REST, очереди и т. д.) для распараллеливания своего приложения. Конечно, в большом вы теряете способность координировать доступ к ресурсам, и обходные пути могут быть хакерскими. Я слышал хорошие отзывы о транзакциях XA Immutant (Jboss), которые автоматически применяются к тому, как работает их кэширование и обмен сообщениями, но лично не использовал этот подход. Еще один инструмент, который может оказаться вам полезным, — это Storm, который позволяет настроить топологию для распределенной обработки, добавив некоторую декларативную абстракцию вместо утомительной ручной разработки и предоставления эквивалентной сервисной архитектуры.

person rplevy    schedule 28.07.2013