Мультитенантный микросервисный дизайн с высоким использованием памяти у каждого арендатора - PullRequest
0 голосов
/ 22 октября 2019

Я разрабатываю контейнерный микросервис и хочу сделать его мультитенантным. Развертывания идут на Кубернетес. Каждый клиент / приложение имеет высокое использование памяти из-за нескольких структур данных, которые необходимо инициализировать в памяти во время вызова инициализации (например, POST service/v1/<app_id>/init), и эти специфичные для приложения структуры данных арендатора будут использоваться в последующих вызовах REST (например, GET service/v1/<app_id>/resources/). Предполагая, что каждая структура данных в памяти конкретного арендатора потребляет около 500 МБ, мне интересно, каков наилучший возможный путь при разработке этой системы, особенно с учетом таких проблем, как автоматическое масштабирование служб. В настоящее время я оцениваю следующие подходы:

  1. Сеансы на стороне сервера: Используя что-то вроде сессий Python Beaker, я думаю о том, чтобы поддерживать все специфичные для арендатора структуры данных / объекты Python в сессиях. Однако я не уверен, как это будет работать, когда контейнеры / модули должны автоматически масштабироваться, так как я не выяснил, какие сеансы следует запускать во время автоматического масштабирования (например, инициализировать только последний доступ к клиенту / приложению? ??)
  2. Один контейнер на приложение / арендатора: потребуется некоторая оркестровка на стороне docker / k8s (выяснение правил сети и маршрутизации), но это другой подход, который я рассмотрел. Итак, мы спроектировали микросервис таким образом, чтобы он использовал одно изображение докера, каждый контейнер содержит только структуры кода / данных, специфичные для одного клиента / приложения.
  3. Пространства имен Kubernetes: Не уверен, насколько он подходит для этого варианта использования. Но я могу выделить одно пространство имен для приложения.

Интересно, сталкивались ли какие-либо члены SO с подобной проблемой и нашли путь вперед. В идеале я хотел бы, чтобы один контейнер / модуль мог обслуживать несколько арендаторов / приложений, но очень хотел бы знать, как сделать так, чтобы вещи не разваливались во время масштабирования. Ищите какой-то вклад, прежде чем я углублюсь в один подход и спущусь по кроличьей норе.

Большое спасибо за любой вклад.

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