Перфоманс Лаб

нагрузочное тестирование
стратегии тестирования
15 июля, 2024

Симуляция географически распределенной нагрузки: I часть. Или как тестировать глобальные системы с учетом сетевых задержек и особенностей разных регионов

Время чтения: 7 мин.
15 июля, 2024
Автор:
Сергей Ломакин

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

Netflix сообщил о нескольких случаях перегрузки серверов в пиковые часы просмотра, особенно во время премьер популярных шоу. Самый заметный инцидент произошел в декабре 2023 года. Примерное количество пострадавших: 10-20 миллионов подписчиков сервиса.
Пример
Представьте себе ситуацию: ваш сервис отлично работает для пользователей из Европы, но клиенты из Юго-Восточной Азии жалуются на «тормоза». Или другой сценарий: CDN (сеть доставки содержимого) отлично справляется с нагрузкой в пиковые часы в США, но падает, когда просыпается Китай. Такие кейсы для корпораций — не редкость, и они могут стоить бизнесу миллионы долларов упущенной выручки.

Что это 

Географически распределенная нагрузка — это не просто набор IP-адресов из разных стран. Это комплексная симуляция реальных условий работы вашей системы, учитывающая множество факторов: от физической топологии сетей до особенностей локального законодательства. И да, если вы думаете, что это актуально только для гигантов уровня Google или Amazon, то это заблуждение. Даже если у вас «всего лишь» SaaS для среднего бизнеса с клиентами в нескольких странах, вы уже в зоне риска. Потому что разница во времени отклика в полсекунды может стать решающей при выборе между вашим продуктом и продуктом конкурента. А уж если речь идет о финтехе или онлайн-гейминге, где счет идет на миллисекунды, то без учета гео-факторов вы просто вне игры.

Почему важно

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

И вот здесь‑то и начинается самое интересное. Потому что тестировать такую систему «по старинке» — это все равно что пытаться оценить качество суши, пробуя только рис. Вы получите какое‑то представление, но упустите главное. Именно поэтому симуляция географически распределённой нагрузки становится критической для компании, претендующей на глобальное присутствие.

Как настраивается (на примере Azure и AWS)

В процессе настройки теста создаются клиент (ведущий, контроллер теста) и серверы (ведомые, агенты теста), например, в США, Европе, Бразилии и Австралии. Клиент — это машина, собирающая и показывающая результаты, серверы — используются в качестве генераторов нагрузки. Нагрузка подается со всех серверов одновременно. Схематично можно представить так:
карта azure amazon - нагрузочное тестирование
Карта Azure Amazon
По результатам тестирования оценивается производительность системы для конечных пользователей, а также дальнейшая необходимость размещения дополнительных серверов в регионах с наихудшими результатами.

Понимание географических факторов

Географические факторы в контексте IT-инфраструктуры — это не просто точки на карте. Это целый комплекс взаимосвязанных параметров, каждый из которых может существенно повлиять на производительность вашей системы.

Начнем с физики. В мире сетей скорость света — это не просто константа из учебника, а реальное ограничение. Сигнал между Нью-Йорком и Токио не может пройти быстрее, чем за 60 миллисекунд, даже если у вас самое  крутое оптоволокно. А теперь добавьте сюда неидеальность реальных сетей, и вы получите латенси в сотни миллисекунд.

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

И вот здесь мы подходим к одному из ключевых понятий — BGP (он же Border Gateway Protocol, протокол граничного шлюза). Он определяет, как пакеты будут путешествовать между автономными системами. И поверьте, иногда эти маршруты выглядят так, будто их прокладывал глючный навигатор. Пакет может сделать крюк через пол-Европы, прежде чем попасть в соседний дата-центр. 

А теперь добавьте сюда межсетевые экраны, NAT (преобразование сетевых адресов), прокси-серверы и прочие «радости» сетевой жизни. Каждый из этих элементов добавляет свою порцию задержки и может стать таким узким местом при высокой нагрузке.

CDN. DPI

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

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

Нельзя забывать и о DPI решениях у провайдеров. Deep Packet Inspection — технология проверки сетевых пакетов по их содержимому с целью регулирования и фильтрации трафика, а также накопления статистических данных.

DPI решения у провайдеров также могут влиять на результаты тестов с георасположением нагрузки, так как они могут замедлять трафик, исходящий от определённых приложений.

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

Google пережил несколько заметных сбоев в своих сервисах, включая Gmail и Google Cloud. Наиболее серьезный инцидент произошел в сентябре 2023 года, когда ошибка в обновлении программного обеспечения вызвала глобальные проблемы с доступом к сервисам Google на протяжении нескольких часов.

Софт

Теперь перейдём к «софту». Региональные особенности — это не только разные языки интерфейса. Это ещё и локальное законодательство, которое может требовать хранения определённых данных только на территории страны (как в России). Или, например, различные требования к шифрованию. Все это влияет на архитектуру вашей системы и, соответственно, на её производительность.

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

Игнорирование этих факторов может привести к катастрофическим последствиям. Вспомните хотя бы знаменитый сбой Amazon S3 в 2017 году, который затронул огромное количество сервисов по всему миру. Или более свежий пример — проблемы с DNS-серверами у запрещённой социальной сети в 2021 году, которые привели к глобальному сбою всех сервисов компании.

Так что, когда мы говорим о симуляции географически распределённой нагрузки, мы говорим о комплексном моделировании всех этих факторов. И протестировать её намного сложнее, чем просто запустить JMeter на пачке серверов в разных странах.

AWS сообщил о нескольких крупных сбоях в течение 2023 года из-за перегрузки серверов. Один из самых значительных инцидентов произошел в июле, затронув тысячи веб-сайтов и онлайн-сервисов, использующих их инфраструктуру. Общее время простоя составило около 6 часов. Примерное количество пострадавших: сотни миллионов пользователей Сбои AWS повлияли на тысячи сайтов и онлайн-сервисов, косвенно затронув огромное количество конечных пользователей.

Выбор подходящей стратегии тестирования: как правильно

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

01

Централизованное тестирование

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

Распределенное тестирование

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

Гибридный подход

Золотая середина — гибридный подход. Вы используете централизованный кластер для основной нагрузки и добавляете распределенные инстансы для симуляции специфических региональных условий. Это позволяет балансировать между точностью и управляемостью.
04

Как выбрать нужный вариант

Но как выбрать, какой подход использовать в вашем конкретном случае? Тут нужно учитывать несколько факторов:
01
Аудиторам для проверки соответствия стандартам (PCI DSS, ISO 27001 и т.д.)
02
Команде разработки для анализа трендов и улучшения процессов
03
SOC-команде для корреляции с данными мониторинга
04
HR-отделу для оценки эффективности обучающих программ

Про объем данных

Особенно это актуально для стриминговых сервисов. Если ваша система оперирует терабайтами данных в реальном времени, вам нужно очень тщательно подойти к симуляции таких объёмов трафика. Кстати, говоря о стриминговых системах, нельзя не упомянуть о специфике их тестирования. Здесь мало просто сгенерировать большой объём трафика. Нужно учитывать паттерны потребления контента в разных регионах, влияние качества видео на нагрузку сети, особенности работы адаптивного битрейта и так далее. Столько головной боли — поверьте! Например, в Азии мобильный стриминг гораздо более популярен, чем в Европе. Это означает, что вам нужно симулировать больше подключений с нестабильным качеством связи. В США же пиковые нагрузки часто приходятся на вечернее время по всем часовым поясам, что создаёт «волну» нагрузки с востока на запад. Особенно красиво это выглядит на инфографике.

Кроме того, нужно учитывать и специфику контента.

Особенности контента

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

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

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

Переходим к инструментам.

Инструменты для симуляции распределенной нагрузки: краткий обзор

Когда речь заходит о НТ распределенных систем, первое, что приходит на ум — воспользоваться готовой облачной платформой типа BlazeMeter или PFLB. И конечно — на горизонте сразу маячат JMeter, Gatling, Locust (если облачные решения не подошли, то придется использовать обычные инструменты НТ).

Apache JMeter

Apache JMeter, старожил индустрии, по-прежнему остается мощным, гибким решением. Но вот с масштабируемостью дело плохо. Распределенное тестирование базируется на архитектуре «master-slave» (ведущий-ведомый), где мастер-нода управляет множеством агентов, размещенных в разных географических локациях. JMeter позволяет тонко настраивать параметры каждого агента, имитируя особенности сетевого подключения в различных регионах. Интеграция с AWS, Azure и другими облачными платформами через соответствующие плагины дает возможность быстро развернуть тестовую инфраструктуру в нужных регионах.

Gatling

Gatling, написанный на Scala, выделяется своей производительностью и конечно возможностью создавать сценарии на DSL. В контексте географически распределенного НТ Gatling может работать в режиме кластера, где каждый узел эмулирует нагрузку определенного региона. Особенно удобна интеграция Gatling с Kubernetes: позволяет легко масштабировать тестовую инфраструктуру, управляя ею с помощью декларативных конфигураций.

Locust

Locust, питоновский фреймворк для нагрузочного тестирования, отличается своей простотой. И гибкости ему не занимать. Распределенная архитектура позволяет запускать «рои» саранчи (примечание: locust — саранча на англ.) на разных машинах, имитируя географически распределенную нагрузку. И особенно хорош Locust именно для тестирования микросервисных архитектур, где важно симулировать сложные пользовательские сценарии с учетом региональных особенностей.

Резюме

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

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

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

Технически имеются решения как через публичные облака (Amazon, Azure и др.), так и через специализированные инструменты нагрузочного тестирования, позволяющие создавать распределенные нагрузки. 

В следующей части мы расскажем: как моделировать сетевые условия, планировать ГЕО-распределенные тесты, анализировать результаты. И конечно — полезное о непрерывном мониторинге.

Закажите нагрузочное тестирование у тех, кто занимается им много лет

Увеличьте производительность вашей системы до максимума и застрахуйте свой бизнес.