Как повысить эффективность Apache Airflow в 3 раза с помощью прокси-сервера RDS

Автор Категория , ,
Как повысить эффективность Apache Airflow в 3 раза с помощью прокси-сервера RDS

Увеличение пропускной способности и повышение скорости обработки данных на любой Big Data платформе при приемлемых затратах – одна из главных задач дата-инженера. Сегодня мы рассмотрим, как улучшить производительность множества экземпляров Apache AirFlow с помощью прокси-сервера Amazon RDS и сколько это стоит в денежном выражении: кейс компании Datafy.

Больше не значит лучше: проблема подключения нескольких экземпляров Apache Airflow к одной базе данных

Американская ИТ-компания Datafy разработала платформу управления жизненным циклом информационных продуктов, частью которой является управляемая служба Apache Airflow для планирования пользовательских заданий. Клиенты могут создавать новые экземпляры AirFlow через интерфейс командной строки, чтобы тестировать свои приложения на собственном экземпляре фреймворка вместо совместного использования одного инстанса, чтобы ускорить разработку и отладку data pipeline’а. Однако, это приводит к тому, что у некоторых клиентов много экземпляров Airflow. Чтобы повысить рентабельность, Datafy использует один и тот же экземпляр Amazon RDS (Relational Database Service, облачный сервис реляционных СУБД) для каждого из клиентских экземпляров Airflow.

Напомним, AirFlow хранит в собственном репозитории-базе данных (может быть MySQL, Postgres и пр.) свои внутренние данных: состояния задач, DAG’ов, настройки соединений, глобальные переменные и т.д. Запуск нескольких экземпляров Airflow на одном RDS означает много открытых подключений к базе данных. Это ограничивает количество экземпляров Airflow, которые может поддерживать одна СУБД. В частности, инженеры Datafy столкнулись с проблемами масштабирования фреймворка: каждый из клиентских экземпляров Airflow по умолчанию создает 10 подключений, и при планировании заданий это число увеличивается.

Например, при запуске 100 экземпляров Airflow, будет 1000 подключений к базе данных. Даже при том, что не все инстансы Airflow работают постоянно, такое количество подключений создает огромную нагрузку на СУБД, в данном кейсе это PostgreSQL, соединения с которой требуют значительных затрат памяти и ЦП. AWS RDS позволяет ограничить количество подключений для определенного экземпляра RDS, чтобы защитить компьютер от взлома, но этого недостаточно для эффективной утилизации ресурсов.

Поэтому возникает потребность в увеличении разных количества клиентов при меньшем числе подключений к базе данных, чтобы повысить эффективность системы и получить больше отдачи от RDS [1]. Для этого дата-инженеры Datafy решили использовать Amazon RDS Proxy – полностью управляемый высокодоступный прокси-сервер базы данных для Amazon RDS, который делает приложения более масштабируемыми, более устойчивыми к сбоям базы данных и более безопасными [2]. Как это реализовано и насколько выгодно, мы рассмотрим далее.

Что такое Amazon RDS Proxy и чем он хорош

Большинство современных приложений могут иметь большое количество открытых подключений к серверу базы данных, открывая и закрывая их с высокой скоростью, истощая память базы данных и вычислительные ресурсы. Amazon RDS Proxy позволяет приложениям объединять и совместно использовать соединения с базой данных, повышая ее эффективность и масштабируемость самих приложений. Прокси-серверу RDS от Amazonпозволяет сократить время переключения почти в 2 раза, а за счет интеграции с AWS Secrets Manager и AWS Identity and Access Management (IAM) можно управлять учетными данными, аутентификацией и доступом к СУБД.

Прокси-сервер Amazon RDS доступен для Aurora MySQL, Aurora PostgreSQL, RDS MySQL и RDS PostgreSQL. Примечательно, что этот прокси-сервер можно включить для большинства приложений без изменения кода, не выделяя дополнительную инфраструктуру. А стоимость зависит от использования виртуального ЦП экземпляра базы данных, для которого включен прокси [2].

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

Тестирование Apache AirFlow с Amazon RDS Proxy

В рамках тестирования рассматривалось несколько экземпляров Airflow, которые подключались к базе данных Postgres RDS по модели db.t3.medium (2 виртуальных 1-ядровых ЦП, 4 ГБ памяти, производительность сети до 5 Гбит/с) [3]. Изначально, без применения прокси-сервера, после создания 40 экземпляров Airlow начинались проблемы с подключением. При использовании прокси-сервера RDS стало возможным без проблем запустить 150 экземпляров Airflow, без выполнения в них каких-либо заданий. При этом для клиентов с загруженными экземплярами Airflow нагрузка на ЦП автоматически меняется, даже если им не нужны все дополнительные подключения.

Таким образом, благодаря мультиплексированию, нагрузка на ЦП базы данных постепенно снижается по мере переключения каждого соединения Airflow на прокси-сервер RDS. Благодаря снижению загрузки ЦП можно планировать больше заданий или поддерживать больше экземпляров Airflow. Это приводит к уменьшению затрат для клиентов, т.к. не приходится быстро масштабировать инстансы.

Что касается денежных затрат на реализацию эттого решения, то для db.t3.medium затраты повышаются на 41% при увеличении количества возможных подключений в 3 раза. В случае крупных систем обычно используются инстансы AWS RDS М5 – последнее поколение универсальных инстансов с улучшенной производительностью. В частности, добавление прокси-сервера RDS к db.m5.large (2 виртуальных 1-ядровых ЦП, 8 ГБ памяти, производительность сети до 10 Гбит/с) поднимает стоимость всего на 16%, что незначительно по сравнению с выгодой, которую можно получить от быстрой обработки большого объема данных.

Поэтому можно сделать выводы, что прокси RDS – отличное решение в следующих случаях:

  • имеется большое количество подключений к СУБД;
  • используется PHP, создающий новое соединение с базой данных для каждого запроса к backend-части системы;
  • выгоды превышают затраты.
Amazon RDS Proxy
Результаты тестирования Amazon RDS Proxy для множества экземпляров Apache Airflow

Узнайте другие полезные тонкости современной дата-инженерии и практического применения Apache AirFlow для разработки сложных конвейеров аналитики больших данных с Hadoop и Spark на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

 

Источники

  1. https://medium.com/datamindedbe/how-rds-proxy-allowed-us-to-run-airflow-200-more-efficient-2896f011b6ca
  2. https://aws.amazon.com/ru/rds/proxy/
  3. https://aws.amazon.com/ru/rds/instance-types/