2013-07-27 2 views
2

Глядя на sse-chat демо-Clojure Pedestal Framework - которая опирается на SSE features в пьедестале - я заметил the following code:Абоненты 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)

ответ

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^