У меня есть коллекция в моей базе данных Cosmos, в которой я хотел бы наблюдать за изменениями. У меня есть много документов (официальных и неофициальных), объясняющих, как это сделать. Однако есть одна вещь, которую я не могу заставить работать надежным образом: как мне получить одни и те же изменения в нескольких экземплярах, если у меня нет общей ссылки на имена экземпляров?
Что я имею в виду? Что ж, я выполняю свои рабочие нагрузки в кластере Kubernetes (AKS). У меня есть переменное количество экземпляров в кластере, которые должны наблюдать за моей коллекцией. Чтобы каналы изменений работали правильно, у меня должно быть уникальное имя экземпляра для каждого экземпляра. Единственный кандидат, который у меня есть, - это название стручка. Обычно это форма <deployment-name>-<random string>
. Например. pod-5f597c9c56-lxw5b
.
Если я использую имя модуля в качестве имени экземпляра, все экземпляры не получат одинаковые изменения (что является моим требованием), только один экземпляр получит изменение (см. https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed-processor#dynamic-scaling). Что я могу сделать, так это использовать вместо этого имя модуля в качестве имени канала, тогда все экземпляры получат одинаковые изменения. Это то, что, я боюсь, в какой-то момент укусит меня за задницу; заглянув в контейнер аренды, я вижу набор документов для каждого имени канала. Поскольку имена модулей приходят и уходят (случайная строковая часть имени), я боюсь, что контейнер со временем будет расти, создавая кучу мусора. Я знаю, что Cosmos может справиться с огромными рабочими нагрузками, но, знаете, мне нравится держать все в порядке.
Как я могу содержать эту вещь в чистоте и порядке? Я действительно не хочу изобретать (или повторно использовать в этом отношении!) Какой-то протокол между моими экземплярами, чтобы голосовать за то, какой экземпляр получит какое имя из конечного набора имен.
Одним из простых решений было бы создать собственные имена экземпляров, если бы AKS или Kubernetes содержали какой-то индекс для моих модулей. Я знаю, что наборы с отслеживанием состояния дают мне это, но я не хочу использовать наборы с отслеживанием состояния, поскольку сами поды на самом деле не имеют состояния (за исключением этого конкретного аспекта!).