Блог CommCloud

Правильная маршрутизация

Большинство производственных сред должны быть доступны заказчикам в любое время. А что делать при передислокации проекта?

Обычно решением является установка дополнительных программ, но их интеграция довольно сложна и может потребовать больше специалистов и времени на настройку инструментов. Другой вариант решения проблемы — использовать несколько копий производственной среды. Но здесь могут возникнуть сложности с распределением трафика между копиями проекта. Разобраться с этим нелегко даже опытному разработчику.

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

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


Циклический метод (Round Robin)

Циклический (Round Robin) — самый простой и часто используемый метод маршрутизации. Он позволяет распределять запросы по одному между серверами с заранее настроенными приоритетами и соотношением трафика.

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


Закрепленные сессии (Sticky Sessions)

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

Обычно это реализуется за счет запоминания IP-адреса, что не оптимально. За прокси может быть много клиентов, а распределить их хотелось бы не всех вместе. Можно использовать для постоянной маршрутизации решение, основанное на сессионных куках, когда каждый браузер становится уникальным "пользователем", что позволяет сделать балансировку более равномерной.
Распределение новых пользователей в методе закрепленных сессий аналогично циклическому методу. Приоритет установлен заранее. Например, установка 50% на 50% сделает обе версии приложения посещаемыми одинаковым количеством уникальных пользователей. Но запросы "старого" пользователя всегда будут перенаправляться на хосты, которым они назначены, пока не истечет срок их сеанса или не будет удален куки.
При установке 100% коэффициента для любого сервера второй не будет удален из настроек полностью, он сможет обрабатывать существующие сессии.


Отказоустойчивость (Failover)

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

Автоматическое распределение трафика

Для автоматизации настроек можно использовать Traffic Distributor, эта надстройка доступна для установки в один клик через Магазин приложений PaaS-платформы CommCloud.


Traffic Distributor обеспечивает интеллектуальную маршрутизацию трафика с использованием метода и коэффициента распределения, которые вы укажете.


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



Измените метод маршрутизации и коэффициент трафика в соответствии с вашими потребностями.


Инструмент помогает маршрутизировать трафик оптимальным способом. Используя Traffic Distributor на платформе CommCloud, вы экономите время специалистов и предлагаете пользователям доступ без перерывов на обновления.


Управление распределением трафика через API

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

1. Для работы с платформой через API необходимо получить токен доступа к платформе. Затем такой вызов API можно выполнить как POST-запрос на установку надстройки распределителя трафика.

2. Теперь вы можете установить распределитель трафика так:
https://[hoster-api-host]/1.0/marketplace/jps/rest/install?jps=traffic-distributor&session={session}&envName={env_name}&displayName={env_display_name}&settings={addon_settings}

Где:
{session} — сессия пользователя
{env_name} — имя окружения
{env_display_name} — имя окружение, которое отображается на панели управления
{addon_settings} — список конкретных настроек в формате JSON, пара ключ-значение

Доступные настройки:
· extip [boolean / number] — включает общедоступные IP-адреса для распределителя трафика.
· balancerCount [число] - количество балансировщиков внутри распределителя трафика.
· routingMethod [строка] - определяет необходимый метод маршрутизации трафика.
· backend1 [строка] — хост первого бэкенда.
· backend2 [string] - хост второго бэкенда диапазон [число] - процент трафика, направляемого в первую среду.

Пример запроса:
curl -X POST 'https://app.demo.jelastic.com/1.0/marketplace/jps/rest/install' -d session=a4b66e7376064865a0c512c5fd21b7a3b32ca3d8 -d jps=traffic-distributor -d envName=traffic-distributor -d displayName=TrafficDistributor --data-urlencode settings='{ "extip": true, "balancerCount": 1, "routingMethod": "round-robin", "backend1": "applicationap1", "backend2": "applicationap2", "range": 60 }'

3. Реконфигурацию можно выполнить методом методом API executeappaction:
https://[hoster-api-host]/1.0/marketplace/jps/rest/executeappaction?session={session}&appUniqueName={app_unique_name}&action=configure¶ms={your_addon_settings}

Где:
· {session} — сессия пользователя
· {app_unique_name} — уникальное имя установленного дополнения. Может быть найден как значение ключа uniqueName в ответе метода GetEnvInfo.
· {your_addon_settings} — список конкретных настроек в формате JSON, пара ключ-значение.

Пример запроса:
curl -X POST 'https://app.demo.jelastic.com/1.0/marketplace/jps/rest/executeappaction' -d session=a4b66e7376064865a0c512c5fd21b7a3b32ca3d8 -d appUniqueName=f5698359-f4ff-42fd-8955−1f9a750abcd9 -d action=configure --data-urlencode params='{ "extip": true, "balancerCount": 1, "routingMethod": "round-robin", "backend1": "application1", "backend2": "application2", "range":0 }

С надстройкой CommCloud Traffic Distribution вы можете легко получить расширенную маршрутизацию трафика с максимальной автоматизацией, чтобы без проблем выполнять развертывание, обновления с нулевым временем простоя или текущее A/B-тестирование, а также обеспечить расширенную защиту от сбоев и высокую доступность.
Попробовать возможности PaaS-платформы CommCloud можно здесь:
Облачная PaaS-платформа (commcloud.ru)
PaaS Network