Kubernetes: можно ли транслировать сообщение из одного сервиса в другой? - PullRequest
0 голосов
/ 26 мая 2020

Я работаю над созданием распределенной системы, в которой мне нужно обновить sh конкретную конфигурацию для всех модулей двух служб, службы-A и службы-B. Эта конфигурация обрабатывается другой службой - C. Пользователь может отправить запрос api на service- C, который необходимо распространить на все модули service-A и service-B.

  1. Служба A и служба B работают на grp c и не доступны миру.
  2. Эти службы могут работать на разных узлах (поэтому у нас не может быть совместно используемой файловой системы).
  3. Конфигурация в среднем будет составлять около 100 КБ и таких конфигураций будет около 100К.

Возможные идеи:

  1. Я могу создать шину сообщений, используя kafka и pu sh эти конфигурации на этом bus, который затем прослушивается разными модулями. Проблема с этим подходом заключается в том, что служба A и служба B будут иметь 100 запущенных модулей, поэтому будет примерно 100 групп потребителей, а также, если появится новый модуль, он должен будет использовать очередь с самого начала, что займет много времени.

  2. Использование легкого временного хранилища значений ключа, такого как consul или etcd, поэтому Service- C передаст sh данные в consul, которые затем могут быть прочитаны Service-A и Сервис-Б. Проблема с этим подходом в том, что большое количество модулей, слушающих consul, могут вызывать задержку.

Может ли кто-нибудь помочь мне с некоторыми идеями, как я могу достичь этого на кубернетах изначально?

Спасибо.

1 Ответ

0 голосов
/ 26 мая 2020

Для этого вы можете использовать configMap. Из приложения C создайте или обновите configMap, вызвав kubernetes API, используя kubernetes go клиентскую библиотеку и том Подключите configMap в сервисе A и сервисе B. Сервис A и сервис B могут иметь механизм для проверки, изменилось ли что-нибудь в них. configMaps и, если да, перезагрузите конфигурацию в памяти. Механизм в сервисе B и сервисе A может просто вычислять ha sh configMap и периодически сравнивать это с тем, что есть в файловой системе (через volumeMount configMap), и при изменении перезагружать configMap в памяти .

...