У меня есть задача создать прототип для приложения с масштабируемой распределенной распределенной памятью (DSM).Прототип будет служить только для проверки концепции, но я хочу потратить свое время наиболее эффективно, выбрав компоненты, которые будут использоваться в реальном решении позже.
Цель этого решения состоит в том, чтобывзять данные из внешнего источника, перемешать их и сделать результат доступным для нескольких интерфейсов.Эти «внешние интерфейсы» просто берут данные из кэша и обслуживают их без дополнительной обработки.Количество обращений внешнего интерфейса к этим данным может буквально составлять миллионы в секунду.
Данные сами по себе очень изменчивы;это может (и действительно) измениться довольно быстро.Однако веб-интерфейсы должны видеть «старые» данные, пока самые новые не будут обработаны и кэшированы.Обработка и запись выполняется одним (избыточным) узлом, тогда как другие узлы только читают данные.Другими словами: без чтения.
Я искал такие решения, как memcached , однако этот конкретный не удовлетворяет всем нашим требованиям, которые перечислены ниже:
- Решение должно по крайней мере иметь клиентский API Java , который достаточно хорошо поддерживается, так как остальная часть приложения написана на Java, и мы являемся опытными разработчиками Java;
- Решение должно быть полностью эластичным : должна быть возможность добавлять новые узлы без перезапуска других узлов в кластере;
- Решение должно иметь возможность обрабатывать аварийное переключение .Да, я понимаю, что это означает некоторые накладные расходы, но общий размер обслуживаемых данных невелик (максимум 1 ГБ), поэтому это не должно быть проблемой.Под «отказоустойчивостью» я подразумеваю бесшовное выполнение без жесткого кодирования / изменения IP-адреса (ов) сервера, как в клиентах memcached, когда узел выходит из строя;
- В идеале должна быть возможность указать степень перекрытия данных (например, сколькокопии одних и тех же данных должны храниться в кластере DSM);
- Нет необходимости постоянно хранить все данные, но может потребоваться постобработка некоторых данных (например, сериализация вDB).
- Цена .Очевидно, что мы предпочитаем бесплатный / открытый исходный код, но мы рады заплатить разумную сумму, если решение того стоит.В любом случае, платный 24-часовой контракт на поддержку является обязательным.
- Все это должно быть размещено в наших дата-центрах , поэтому предложения SaaS, такие как Amazon SimpleDB, выходят за рамки.Мы рассмотрим это только в том случае, если другие варианты не будут доступны.
- В идеале решение будет строго согласованным (как в CAP);однако возможную консистенцию можно рассматривать как вариант.
Заранее благодарим за любые идеи.