Ignite Compute: возможно ли продолжить выполнение заданий, пока клиент отсутствует? (разбился для примера) - PullRequest
0 голосов
/ 07 января 2019

У меня есть сетка вычислений зажигания, состоящая из 8 узлов сервера и 1 клиента. Клиент отправляет задачи на серверы:

ignite.compute().withExecutor("myPool").withNoResultCache().call(calls);

Затем серверы выполняют соответствующие задачи, а затем записывают результаты этих задач в облачное хранилище (которое не является частью кластера). Серверы настроены на использование рабочих мест SPI и K8 TCPdiscoverySPI.

    TcpDiscoverySpi tcpDS = new TcpDiscoverySpi();
    TcpDiscoveryKubernetesIpFinder ipFinder = new TcpDiscoveryKubernetesIpFinder();
    ipFinder.setNamespace("ignite");
    tcpDS = tcpDS.setIpFinder(ipFinder);
    cfg.setDiscoverySpi(tcpDS);

    JobStealingCollisionSpi spi = new JobStealingCollisionSpi();
    spi.setWaitJobsThreshold(1);
    spi.setMessageExpireTime(1000);
    spi.setMaximumStealingAttempts(10);
    spi.setActiveJobsThreshold(1);
    spi.setStealingEnabled(true);

    JobStealingFailoverSpi failoverSpi = new JobStealingFailoverSpi();

Однако, когда клиент отключается или происходит сбой, узлы сервера перестают выполнять отправленные задачи.

Поскольку клиент не является необходимым в кластере с момента отправки задач, существует ли способ заставить серверы продолжить отправленные задания?

Кроме того, есть ли дублирующий клиентский узел в кластере без дублирования порядка вычислений? (избыточность клиентского узла)

1 Ответ

0 голосов
/ 08 января 2019

Вы можете использовать аннотацию ComputeTaskMapAsync, она будет использовать другой узел для сопоставления запроса, а не локальный. Чтобы использовать эту аннотацию, вам нужно будет использовать ComputeTask вместо IgniteCallable.

...