Операция UpdateTaskList завершилась неудачно со службой сопоставления Cadence

На днях мы столкнулись с некоторыми проблемами с настройкой частоты вращения педалей. Один из наших машинных экземпляров начал увеличивать использование ЦП до 90%, и все выполняемые входящие рабочие процессы застревали в запланированных состояниях. После проверки журналов мы заметили, что служба сопоставления выдает следующую ошибку:

{
  "level": "error",
  "ts": "2021-03-20T14:41:55.130Z",
  "msg": "Operation failed with internal error.",
  "service": "cadence-matching",
  "error": "InternalServiceError{Message: UpdateTaskList operation failed. Error: gocql: no hosts available in the pool}",
  "metric-scope": 34,
  "logging-call-at": "persistenceMetricClients.go:872",
  "stacktrace": "github.com/uber/cadence/common/log/loggerimpl.(*loggerImpl).Error\n\t/cadence/common/log/loggerimpl/logger.go:134\ngithub.com/uber/cadence/common/persistence.(*taskPersistenceClient).updateErrorMetric\n\t/cadence/common/persistence/persistenceMetricClients.go:872\ngithub.com/uber/cadence/common/persistence.(*taskPersistenceClient).UpdateTaskList\n\t/cadence/common/persistence/persistenceMetricClients.go:855\ngithub.com/uber/cadence/service/matching.(*taskListDB).UpdateState\n\t/cadence/service/matching/db.go:103\ngithub.com/uber/cadence/service/matching.(*taskReader).persistAckLevel\n\t/cadence/service/matching/taskReader.go:277\ngithub.com/uber/cadence/service/matching.(*taskReader).getTasksPump\n\t/cadence/service/matching/taskReader.go:156"
}

После перезапуска рабочего процесса все вернулось в норму, но мы все еще пытаемся выяснить, что произошло. На момент проведения мероприятия мы не представляли большой загруженности, просто это произошло внезапно. Наше главное подозрение заключается в том, что, вероятно, соответствующая служба потеряла связь с базой данных cassandra во время этого события, и сразу после того, как мы ее перезапустили, она смогла ее получить. Но на данный момент это всего лишь гипотеза.

В чем могла быть причина этой проблемы? и есть ли способ предотвратить это в будущем? Может быть, какой-то динамический конфиг, который мы упускаем?

PS: версия Cadence - 0.18.3


person user2052668    schedule 22.03.2021    source источник


Ответы (1)


Это известная проблема в gocql, которая может быть вызвана многими причинами:

  1. Кассандра перегружена, и некоторые узлы не отвечают. Вы можете подумать, что ваша нагрузка небольшая, но лучше всего посмотреть на показатели / панель управления Cadence. Есть раздел о показателях устойчивости.
  2. Если 1. проблема, вы можете настроить ratelimiting Чтобы защитить свою Кассандру. Использование matching.persistenceGlobalMaxQPS будет действовать как глобальный ограничитель частоты вращения для отмены matching.persistenceMaxQPS
  3. Проблема с сетью или некоторые ошибки в gocql. Это действительно расстраивает. Недавно мы решили освежить этот PR. Надеюсь, это будет смягчено в следующем выпуске.

Кроме того, если соответствующий узел перегревается, вероятно, вы достигли предела одного списка задач. В таком случае рассмотрите возможность включения масштабируемой функции списка задач.

person Long Quanzheng    schedule 23.03.2021