Мой вариант использования следующий:
У нас есть около 500 серверов, работающих в автомасштабируемом кластере EC2, которым требуется доступ к одним и тем же данным конфигурации (разложенным по принципу «ключ-значение») несколько миллионов раз в секунду.
Данные конфигурации не очень большие (1 или 2 ГБ) и не сильно меняются (несколько десятков обновлений / удалений / вставок в минуту в пиковое время).
Задержки критически важны для нас, поэтому данные необходимо реплицировать и хранить в памяти на каждом экземпляре, выполняющем наше приложение.
Конечная согласованность - это нормально. Однако нам нужно убедиться, что каждое обновление будет распространяться в какой-то момент. (зная, что серверы могут быть отключены в любое время). Распространение обновлений по серверам должно быть надежным и простым в настройке (у нас не может быть статических IP-адресов для наших серверов, или мы не хотим идти по пути «подделки» многоадресная рассылка на AWS и т. д.)
Вот решения, которые мы изучали в прошлом:
- Использование обычных Java-карт и использование нашей специально созданной системы для распространения обновлений по кластеру. (очевидно, он не так хорошо масштабируется)
- Использование EhCache и его функции репликации. Но настраивать его на EC2 очень болезненно и как-то ненадежно.
Вот решения, которые мы собираемся попробовать:
- Apache Ignite (https://ignite.apache.org/) с ПОВТОРНОЙ стратегией.
- Функция дублированной карты Hazelcast. (http://docs.hazelcast.org/docs/latest/manual/html-single/index.html#replicated-map)
- Apache Geode на каждом узле приложения. (http://geode.apache.org/)
Я хотел бы знать, подойдет ли каждое из этих решений для нашего варианта использования. И, в конце концов, с какими проблемами я могу столкнуться с каждым из них.
Вот что я нашел на данный момент:
- Реплицированная карта Hazelcast является недавней и все еще немного ненадежной (асинхронные обновления могут быть потеряны в случае уменьшения масштаба)
- Похоже, что Geode стал "стабильным" сравнительно недавно (хотя он предположительно находится в разработке с начала 2000-х).
- Похоже, что Ignite может подойти, но я не уверен, как их система на основе обнаружения S3 будет работать, если мы будем продолжать регулярно добавлять / удалять узел.
Спасибо!