Проблема магазина вакансий для неизвестного количества рабочих мест и неизвестного количества серверов - PullRequest
0 голосов
/ 25 марта 2020

Я ищу указатель на то, как решить следующую проблему в java:

  • Единственная очередь с n заданиями (неизвестное количество), из которых существует время обработки каждое задание также неизвестно (но, вероятно, похоже на другие задания в очереди).
  • Эти задания должны быть обработаны x количеством машин. При запуске - x=1, но количество машин может быть увеличено до y (неизвестное количество). Машины могут также обрабатывать sh ...
  • Машина может работать с несколькими элементами одновременно (каждый сервер имеет пул потоков).
  • Новые задания могут быть добавлены в очередь, пока машины обрабатывают эти задания.
  • Задания нужно извлекать массово, так как при загрузке в базу данных возникают издержки.
  • Каждое задание обрабатывается только один раз. Если он обрабатывается более одного раза, выдается ConcurrentModificationException.
  • Нет центрального органа, кроме очереди

Моим первым решением было разделить его на части во время выполнения (немного похоже на pareto), но это приводит к большому количеству эти ConcurrentModificationException (около 400 на 1000 рабочих мест).

    private PageRequest getWorkPageRequest(int totalNbrOfJobs, int serverNumber, int totalNumberOfServers, int currentWorkQueueSize, int workerPoolSize) {
        final long offset = totalNbrOfJobs / totalNumberOfServers * serverNumber;
        final int limit = currentWorkQueueSize == 0 ? workerPoolSize * 4 : ((workerPoolSize * 3) - currentWorkQueueSize);
        LOGGER.info("Server {} of {} total servers will process partition from {} until {} of total {}", serverNumber, totalNumberOfServers, offset, (offset+limit), totalNbrOfJobs);
        return PageRequest.of(offset, limit);
    }

Я пытаюсь найти решение, в котором количество ConcurrentModificationException настолько мало, насколько возможно, и сервер не падает без работы. Мне известна проблема планирования работы Job Shop (но она не совпадает, поскольку я не знаю времени обработки и у меня нет подзадач) и OptoPlanner, но она выглядит сложной для моей проблемы.

Как вы назвать такие проблемы? Что мне нужно искать, чтобы найти литературу по этому поводу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...