Как мы решали проблемы масштабирования с помощью клеточной архитектуры

Как мы решали проблемы масштабирования с помощью клеточной архитектуры

17 июня 2025 г.

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

Фон

Мы запустили наши услуги по производству без ячеек. Сервис представлял собой единый микросервис, который можно рассматривать как службу с фиксированной гигантской ячейкой. Каждый запрос отправлялся в один экземпляр Сервиса. После запуска его производства в течение 6 месяцев мы заметили масштабирование узких мест - одна из зависимостей ограничивает наше масштабирование. У них была фиксированная квота на счет. Единственный способ решения этой проблемы - запустить службы в нескольких учетных записях, чтобы каждая учетная запись получила фиксированную квоту. Запустив несколько экземпляров услуги в разных счетах (ячеек), мы могли бы потенциально обслуживать множество запросов и, следовательно, достичь желаемого масштабирования.

Current architecture without cells

Запись о проблеме

Когда мы решили перейти к архитектуре на основе ячейки, мы обнаружили много проблем, таких как государственная служба и прямая зависимость и т. Д. Принятие архитектуры на основе ячейки стало сложной задачей для всей команды и требовало много усилий.

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

План исполнения

После запуска службы в производстве в течение 6 месяцев мы получили справедливое понимание его компонентов. Итак, мы начали анализировать каждый компонент обслуживания, чтобы ответить на следующие вопросы для оценки стратегий принятия клеток:

  1. Какие компоненты должны быть перенесены в клеточную архитектуру?
  2. Каковы проблемы перемещения компонента в ячейку?
  3. Как можно сделать компонент/сервис без сохранения состояния?
  4. Что нужно, чтобы удалить прямую зависимость?
  5. Как может быть автоматизировано создание ячеек, которое включает в себя создание учетной записи, а затем добавлено в конвейер развертывания?
  6. Что нужно, чтобы сделать миграцию клеток? Можно избегать этого?
  7. Как будет выглядеть слой маршрутизации?
  8. Как будет конечная точка службы для внешних и внутренних пользователей/сервисов?

Основываясь на оценке, мы выяснили две важные вещи:

  1. Служба без гражданства

  2. Гибкий слой маршрутизации.

System architecture after adopting cellular design


Служба без гражданства

Мы начали анализировать все компоненты хранения наших услуг. В основном у нас были DynamoDB и S3, где мы храним метаданные клиентов и метаданные обработки. Чтобы сделать обслуживание без сохранения состояния, мы создали услугу метаданных и перенесли все метаданные клиента и метаданные обработки, которые делали услугу государственным. Обнаружил функциональность уровня хранения с четко определенными API, чтобы мы могли получить к нему доступ из любой ячейки.

Гибкий тонкий слой маршрутизации

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

Исход

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



Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE