Моя команда использует Geode как импровизированный аналитический движок. Мы храним коллекцию массивных необработанных объектов данных (по 200 МБ + каждый) в Geode, но эти объекты никогда напрямую не возвращаются клиенту. Вместо этого мы в значительной степени полагаемся на выполнение пользовательских функций для обработки этих наборов данных внутри Geode и возвращаем только набор результатов анализа.
У нас есть новое требование для реализации двухуровневой точности анализа данных. Для высокоточной аналитики потребуются большие наборы необработанных данных и больше процессорного времени. Крайне важно, чтобы эти высокоточные анализы никоим образом не препятствовали работе низкоточных аналитиков. Таким образом, я ищу решение, которое хранит эти наборы данных изолированными для разных серверов.
Я создал PO C, который хранит каждый набор данных в своем собственном регионе (оба РАЗДЕЛЕНЫ). Эти регионы настроены на принадлежность к отдельным группам участников, затем каждый сервер настроен на присоединение к одной из двух групп. Я могу установить этот кластер локально без проблем, и gf sh указывает, что все выглядит правильно: describe member
показывает каждого участника, на котором размещены ожидаемые регионы.
Мой код клиента настраивает ClientCache, который указывает на одиночный локатор кластера. Моя команда выполнения функции обычно выглядит следующим образом:
FunctionService
.onRegion(highPrecisionRegion)
.setArguments(inputObject)
.filter(keySet)
.execute(function);
Когда я запускаю только высокоточный сервер, я могу выполнить функцию в области высокой точности. Когда я запускаю только сервер с низкой точностью, я могу выполнить функцию для области с низкой точностью. Однако, когда я запускаю оба сервера и выполняю функции одну за другой, я неизменно получаю исключение, утверждающее, что один областей не может быть найден. Посмотрите следующую Gist для примера моего кода и исключения. https://gist.github.com/dLoewy/c9f695d67f77ec18a7e60a25c4e62b01
Ключевые точки TLDR:
- При использовании групп участников область A находится на сервере 1, а область B - на сервере 2.
- Эти регионы должны быть РАЗДЕЛЕНЫ в Производство.
- Мне нужно запустить функцию в зависимости от данных в одном из этих регионов; Код клиента выбирает, какой.
- Как есть, мой код клиента всегда не может найти один регионов.
Может кто-нибудь, пожалуйста, помогите мне войти отслеживать? Есть ли у меня совершенно другая кластерная архитектура? Мы рады предоставить более подробную информацию по запросу.
Большое спасибо за ваше время!
Дэвид
К вашему сведению, на следующих страницах документации упоминается выполнение функций в группах участников, но очень маленькая деталь В первой ссылке описывается запуск данных- независимых функций в группах участников, но не говорится о том, как и ничего не говорится о выполнении данных- зависимых функций в группах элементов. https://gemfire.docs.pivotal.io/99/geode/developing/function_exec/how_function_execution_works.html https://gemfire.docs.pivotal.io/99/geode/developing/function_exec/function_execution.html