Учитывая тот факт, что вы хотите получить ответ в режиме реального времени в области «секунд», я рекомендую что-то вроде этого:
Установите пакетную модель обработки для максимально возможного предварительного вычисления. По сути стараюсь делать все, что не зависит от «последней секунды» данных. Здесь вы можете использовать обычную настройку Hadoop / Mahout и запускать эти партии ежедневно или (при необходимости) каждый час или даже 15 минут.
Используйте систему в реальном времени, чтобы выполнить несколько последних операций, которые невозможно вычислить заранее.
Для этого вам следует использовать либо упомянутый s4, либо недавно анонсированный twitter storm .
Иногда бывает очень просто пойти и сохранить предварительно вычисленные значения в памяти и просто выполнить последние шаги агрегации / фильтрации / сортировки / ... в памяти. Если вы можете сделать это, вы действительно можете масштабировать, потому что каждый узел может работать полностью независимо от всех других.
Возможно, полезно использовать NoSQL-бэкенд для компонента реального времени.
Есть много доступных: mongodb, redis, riak, cassandra, hbase, couchdb, ...
Все зависит от вашего реального приложения.