Отказоустойчивость, производительность и масштабируемость MFA.

Система многофакторной аутентификации – критически важный компонент корпоративной ИТ-инфраструктуры. Когда она недоступна, пользователи не могут подключиться к VPN, войти на рабочие места, прочитать свою электронную почту, получить доступ к информационным системам. Поэтому при проектировании MFA-решений важно учитывать не только поддерживаемые протоколы и методы аутентификации, но и такие характеристики, как доступность, производительность и масштабируемость. Именно они определяют, сможет ли система бесперебойно обслуживать пользователей при проведении плановых работ, отказе оборудования или росте нагрузки.

Мы рассмотрим основные технологии, применяемые для построения отказоустойчивых и высокопроизводительных систем аутентификации, а затем покажем, как они реализованы в Secure Authentication Server (SAS).

Высокая доступность и «девятки».


Под высокой доступностью (High Availability, HA) понимают способность системы продолжать работу при отказе отдельных компонентов, проведении технического обслуживания или обновлении программного обеспечения. Обычно уровень доступности выражают в процентах или количестве так называемых «девяток».

Доступность

Максимальный простой в год

Типичная архитектура

99 % («две девятки»)

около 3,6 суток

Один сервер. Плановые обновления требуют полной остановки системы.

99,9 % («три девятки»)

около 8 часов 46 минут

Резервирование всех критически важных компонентов позволяет выполнять обслуживание без остановки сервиса.

99,99 % («четыре девятки»)

около 53 минут

Автоматический мониторинг состояния компонентов, быстрое переключение (failover), резервирование сетевой инфраструктуры и систем хранения данных (СХД).

99,999 % («пять девяток»)

около 5 минут

Полностью отказоустойчивая инфраструктура без единой точки отказа: резервирование каналов связи, питания, СХД, географическое резервирование, специализированные отказоустойчивые серверные платформы с зеркалированием оперативной памяти и другие технологии.


Следует учитывать, что итоговая доступность определяется не только отказами оборудования и сбоями программ, но и плановыми работами: обновлениями операционной системы, прикладного программного обеспечения, микрокода оборудования и другими регламентными операциями. Именно поэтому одиночный сервер практически не позволяет добиться доступности выше двух «девяток»: любое обновление требует полной остановки сервиса.

Производительность.


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

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

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

Соответствие между количеством пользователей и требуемой производительностью зависит от характера использования системы. Если двухфакторная аутентификация применяется только для VPN или администрирования, нагрузка обычно оказывается сравнительно небольшой. Если же она используется для входа в операционную систему, доступа к корпоративной почте и другим массовым сервисам, максимальная нагрузка, как правило, приходится на начало рабочего дня. Но даже в этот период одновременно проходит аутентификацию лишь небольшая часть пользователей. На практике пиковая производительность обычно составляет менее 1 % от общего количества пользователей в секунду, хотя в отдельных ситуациях – например, после «блэкаута» или восстановления связи – возможны значительно более высокие кратковременные пики. Поэтому при расчете производительности важно учитывать не только количество пользователей, но и профиль использования конкретной информационной системы.

Масштабируемость.


Способность системы поддерживать требуемую производительность при росте нагрузки называется масштабируемостью. Различают два основных способа масштабирования.
Вертикальное масштабирование (Scale Up) предполагает увеличение производительности существующих серверов за счет более мощных процессоров, увеличения объема оперативной памяти или использования более быстрых накопителей.
Горизонтальное масштабирование (Scale Out) достигается путем добавления новых серверов с распределением нагрузки между ними.

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

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

Кластеризация.


Для повышения доступности и производительности серверы обычно объединяют в кластеры или фермы. В простейшем случае используется схема Active-Passive. Один сервер постоянно обслуживает пользователей, а второй находится в режиме ожидания. При отказе основного узла автоматически выполняется failover – переключение на резервный сервер. После восстановления основного узла может выполняться failback – возврат нагрузки обратно. В зависимости от используемой технологии возврат может происходить автоматически или вручную.

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

Для эффективной работы подобных схем большое значение имеет архитектура самих приложений. Если сервер после обработки запроса не хранит информацию о состоянии пользовательского соединения (stateless), любой следующий запрос может быть обработан любым экземпляром приложения. Благодаря этому отпадает необходимость «привязывать» пользователей к определенному серверу (sticky sessions), а распределение нагрузки существенно упрощается. Именно поэтому большинство современных веб-приложений и микросервисов проектируются по принципу stateless. Такая архитектура значительно облегчает как горизонтальное масштабирование, так и построение отказоустойчивых кластеров.

Для распределения запросов между несколькими серверами применяются различные алгоритмы балансировки нагрузки. Наиболее распространенными являются:
Round Robin – последовательное распределение запросов между серверами;
Weighted Round Robin – распределение с учетом производительности каждого сервера;
Least Connections – направление нового запроса на сервер с наименьшим количеством активных соединений;
Least Response Time – выбор сервера, который быстрее остальных отвечает на запросы.

Конкретный алгоритм определяется используемым балансировщиком нагрузки и обычно не требует каких-либо изменений в архитектуре прикладной системы.

Реализация отказоустойчивости и масштабируемости в Secure Authentication Server.


В минимальной конфигурации все компоненты Secure Authentication Server – сервер аутентификации, агенты и база данных – могут размещаться на одном сервере. Такая конфигурация проста в развертывании и подходит для знакомства с продуктом, разработки и функционального тестирования. Так как продукт отличается исключительно скромными системными требованиями, ее было бы достаточно и для работы в продуктивной среде с десятками тысяч пользователей. Однако она содержит единую точку отказа и обеспечивает уровень доступности порядка 99 % («две девятки») с учетом плановых работ.

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

Серверы аутентификации

Серверы аутентификации Secure Authentication Server специально спроектированы по принципу stateless. После обработки запроса они не сохраняют информацию о состоянии пользовательского соединения, поэтому каждый следующий запрос может быть обработан любым экземпляром сервера. Благодаря этому серверы аутентификации легко объединяются в ферму и не требуют использования механизмов «липкой» балансировки.

Распределять запросы между серверами аутентификации можно двумя способами. Первый способ использует встроенные механизмы агентов аутентификации. Каждый агент хранит адреса основного и резервного серверов SAS, к которым он может обращаться. При обработке запроса агент сначала устанавливает соединение с основным сервером. Если тот оказывается недоступен или не отвечает в течение заданного времени, запрос автоматически повторяется на резервном сервере. Если разные агенты настроить на разные основные серверы, поток запросов будет статистически распределяться между всеми экземплярами SAS. Такой подход одновременно обеспечивает резервирование серверов аутентификации и позволяет использовать вычислительные ресурсы всех узлов.

Второй способ заключается в использовании внешнего балансировщика нагрузки. Поскольку взаимодействие между агентами и сервером аутентификации осуществляется по протоколу HTTPS, для этих целей подходит практически любой современный веб-балансировщик, например NGINX, NetScaler или аналогичные решения. В этом случае распределение запросов выполняется самим балансировщиком с использованием одного из стандартных алгоритмов (Round Robin, Least Connections и других).

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

Агенты аутентификации

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

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

База данных

Еще один критически важный компонент решения – это база данных. В минимальной конфигурации она может размещаться на том же сервере, что и остальные компоненты SAS. Однако для большинства внедрений рекомендуется использовать не менее двух серверов базы данных. Сервер аутентификации поддерживает подключение к разным узлам MariaDB. Обычно в конфигурационном файле указываются адреса (в формате URI) обоих серверов базы данных. При недоступности одного из них подключение автоматически устанавливается со вторым сервером.

Если используется встроенный механизм резервирования MariaDB в режиме Active-Active, распределение запросов между узлами можно организовать, указав разный порядок URI подключения на разных серверах аутентификации. При необходимости дальнейшего повышения производительности и горизонтального масштабирования может использоваться Galera Cluster – технология синхронной мультимастерной репликации для MariaDB. В отличие от традиционной схемы Primary–Replica, каждый узел Galera способен одновременно принимать запросы на запись. Транзакция считается подтвержденной только после успешной репликации на кворум узлов, что исключает потерю подтвержденных данных при отказе одного из серверов. Кроме того, Galera позволяет поочередно выводить отдельные узлы из эксплуатации для обслуживания или обновления без остановки работы всей базы данных.

Заключение.


Secure Authentication Server изначально проектировался как распределенная система, в которой могут резервироваться все критически важные компоненты – серверы аутентификации, агенты и база данных.
Stateless-архитектура компонентов комплекса упрощает построение отказоустойчивых ферм и позволяет свободно распределять запросы между несколькими экземплярами серверов без использования механизмов «липкой» балансировки. Встроенные средства резервирования обеспечивают непрерывную работу системы даже при отказе отдельных узлов, а совместимость с внешними балансировщиками нагрузки позволяет строить высокопроизводительные конфигурации практически любого масштаба.

По мере роста нагрузки производительность решения может увеличиваться как за счет вертикального масштабирования отдельных серверов, так и путем горизонтального масштабирования с использованием внешних балансировщиков нагрузки и кластерных технологий для базы данных. Благодаря этому архитектура Secure Authentication Server остается эффективной как для небольших пилотных проектов, так и для крупных территориально распределенных инфраструктур с десятками и сотнями тысяч пользователей.