В нашем проекте мы тестируем, как транзакции работают в распределенной среде. В рамках проекта мы тестируем версию с открытым исходным кодом GridGain 6.5.5.Проблемы с операциями GridGain
Мы столкнулись с множеством проблем в следующем TestCase:
- Мы тестируем кэш без каких-либо дополнительных правил.
- В кэше хранится id-String как ключ, а BigDecimal - как значение.
- Мы тестируем базовые операции (сложение и вычитание) на значения первого кеша из 6, 12 и 18 клиентов. Одна операция выглядит как «вычесть X из A, добавить X в B».
- Приложение GridGain развернуто как .war файл в WildFly.
- Клиенты подключаются к WildFly с развернутым GridGain с использованием HTTP и отправляют список операций (мы тестируем партии с 1 операцией, 50, 500, 1000, 5000 операций).
- Мы тестируем многоуровневый многоуровневый режим с транзакциями, файлы конфигурации, которые мы использовали, прилагаются далее.
- Мы проверили как пессимистические, так и оптимистичные транзакции отдельно.
- Мы называем значения результатов «согласованными», если они равны фиктивному режиму: один клиент, пакет 1, один узел. У нас есть фиктивная программа для перекрестной проверки (ее результаты в этом режиме всегда равны GridGain в локальном режиме).
вопросы являются:
- Если мы делаем сделку как есть (вычесть из одного значения ключей, добавьте к другому), мы сталкиваемся с двумя проблемами: тупики и непоследовательность, если мы не получаем тупики , Количество несогласованных значений невелико, но мы не можем этого избежать - это около 12 на 1000 ключевых значений.
- Если мы преобразуем наши запросы для сортировки по ключевым словам в каждом клиенте (поэтому порядок действий может измениться), мы можем избежать взаимоблокировок и несогласованности. Но у нас возникают другие проблемы: если пакет не менее 500, у нас есть неудачные транзакционные сбои. Если пакет мал, у нас GridGain полностью не работает (он не отвечает на текущий запрос).
- Все работает очень медленно, и у нас почти нет нагрузки на процессор одновременно (около 6 секунд для пакетной = 1000 операций). Это нормально?
Наше оборудование:
ого Dell M620 лезвие, 256GB RAM, ядро 2x8 Xeon E2650v2, 10GbE сеть.
Придает:
- GridGain оптимистичным конфигурации: https://gist.github.com/al-indigo/a2824aa62a3af8b18932
- GridGain пессимистично конфигурации: то же самое, но с
- журнал GridGain для второго выпуска: https://gist.github.com/al-indigo/233058772418fba8d341
Как только мы заметили, что разрешение тупикового не работает, конечно, мы начали избегать тупиков в ручном способе (как вы говорите). Тем не менее в классической СУБД используется куча алгоритмов: http://en.wikipedia.org/wiki/Deadlock_provision. Поэтому мы думали, что это тоже может быть в GridGain. Но это не главное. Основные моменты - это ошибки на довольно небольшом количестве обрабатываемых данных (журнал прикреплен к исходному вопросу) и скорости. Вот пример кода, который мы используем (configs для gridgain также находятся в вопросе): https://gist.github.com/al-indigo/438559003a7821c9779e –
Можете ли вы добавить код тестового жгута? Очень важно, чтобы мы пытались воспроизвести его так же, как вы. – Dmitriy
Я не уверен, что мы можем из-за NDA. В общем, мы используем Ansible и наши собственные плейбуки для развертывания всего и для запуска тестов. Поскольку тесты начинаются, влияние других слоев программного обеспечения не распространяется, за исключением клиентских приложений GridGain и java. Я могу отправить вас (в частном порядке, пожалуйста, дайте мне ссылку на ваш адрес электронной почты) нашу промежуточную таблицу результатов, чтобы доказать, что все работает не так быстро, как ожидалось. –