У меня есть задача создать прототип для масштабируемого масштабируемого приложения с распределенной общей памятью (DSM). Прототип будет служить лишь доказательством концепции, но я хочу потратить свое время наиболее эффективно, выбрав компоненты, которые будут использоваться в реальном решении позже.Выбор распределенного решения для общей памяти
Целью этого решения является получение данных из внешнего источника, отбраковка и получение результата для ряда интерфейсов. Эти «интерфейсы» просто берут данные из кеша и обслуживают его без дополнительной обработки. Количество обращений к этим данным в реальном времени может составлять миллионы в секунду.
Данные сами по себе очень нестабильны; он может (и делает) меняться довольно быстро. Однако интерфейсы должны видеть «старые» данные до тех пор, пока новейшие не будут обработаны и не будут кэшированы. Обработка и запись выполняются одним (избыточным) узлом, в то время как другие узлы только считывают данные. Другими словами: нет сквозного поведения.
Я искал в решения как memcached однако именно этот один не выполняет всех наших требований, которые перечислены ниже:
- Раствор должен иметь по крайней мере Java клиент API, который достаточно хорошо как остальное приложение написано на Java, и мы - опытные разработчики Java;
- Решение должно быть полностью эластичным: должно быть возможно добавлять новые узлы без перезапуска других узлов в кластере;
- Решение должно иметь возможность обрабатывать failover. Да, я понимаю, что это означает некоторые накладные расходы, но общий размер данных для обслуживания невелик (максимум 1G), поэтому это не должно быть проблемой. Под «отказоустойчивостью» я подразумеваю бесшовное выполнение без жесткого кодирования/изменения IP-адресов (серверов) сервера, как в memcached-клиентах, когда узел опускается;
- В идеале должно быть возможно указать степень перекрытия данных (например, сколько копий одних и тех же данных должно храниться в кластере DSM);
- Нет необходимости постоянно хранить все данные, но может потребоваться последующая обработка некоторых данных (например, сериализация в БД).
- Цена. Очевидно, что мы предпочитаем бесплатный/открытый источник, но мы счастливы заплатить разумную сумму, если решение того стоит. В любом случае, оплачиваемый 24hr/day контракт на поддержку является обязательным.
- Все это должно быть размещено в наших дата-центров, поэтому предложения SaaS, такие как Amazon SimpleDB, не входят в сферу применения. Мы бы рассматривали это только в том случае, если бы не было других вариантов.
- В идеале решение будет строго соответствует (как в CAP); однако возможная консистенция может рассматриваться как опция.
Заранее благодарим за любые идеи.
Спасибо, мы на самом деле используем Hazelcast в одном из наших других проектов.Честно говоря, я ожидал, что кто-то намекнет на использование чего-то вроде Project Voldemort и даст некоторое представление о том, насколько хорошо этот масштаб (для требований, о которых я упомянул), в основном потому, что Hazelcast, кажется, широкоформатная библиотека, тогда как проект (ы) Волдеморт - это специфические основанные на карте DSM. Я, конечно, не пытаюсь сказать, что Hazelcast не справится с нагрузкой - это нужно измерять и тестировать. – mindas
Просто понял, что вы один из авторов Hazelcast. Whoops :) – mindas
Да Я один из авторов :) Распределенная карта Hazelcast - это конкретный основанный на карте DSM. Для обеспечения масштабируемости см. Демонстрацию 100-кластерного кластера по адресу http://java.dzone.com/articles/running-hazelcast-100-node. –