В преддверии московской Python Conf++ мы кратко поговорили с Олегом Чуркиным, техническим руководителем финтех-стартапа, о его обширном опыте работы с Celery: полмиллиона фоновых задач, ошибок и тестирования.
— Расскажите подробнее о проекте, над которым вы сейчас работаете?
Сейчас я управляю финтех-стартапом.
Статусмани , который анализирует финансовые данные пользователей и позволяет клиентам сравнивать свои доходы и расходы с другими группами людей, устанавливать лимиты расходов и наблюдать, как растет или падает благосостояние на графиках.
На данный момент проект ориентирован только на рынок Северной Америки.
Для анализа финансовой информации мы загружаем и сохраняем все транзакции пользователей и интегрируемся с кредитными бюро для получения дополнительных данных о кредитной истории.
Сейчас у нас около 200 тысяч пользователей и 1,5 терабайта различных финансовых данных от наших поставщиков.
Только там совершается около 100 миллионов транзакций.
— Каков стек технологий? В стек текущего проекта входят Python 3.6, Django/Celery и Amazon Web Services. Мы активно используем RDS и Aurora для хранения реляционных данных, ElasticCache для кэша и очередей сообщений, CloudWatch, Prometheus и Grafana для оповещений и мониторинга.
И, конечно же, S3 для хранения файлов.
Также мы очень активно используем Celery для различных бизнес-задач: отправка уведомлений и массовых рассылок, массовое обновление различных данных от внешних сервисов, асинхронное API и тому подобное.
Во фронтенде у нас есть React, Redux и TypeScript. — Каков основной характер нагрузок в вашем проекте и как вы с ними справляетесь? ты справляешься? Основная нагрузка в проекте приходится на фоновые задачи, выполняемые Celery. Ежедневно мы выполняем около полумиллиона различных задач, например, обновление и обработку (ETL) финансовых данных пользователей из различных банков, кредитных бюро и инвестиционных организаций.
Кроме того, мы отправляем множество уведомлений и рассчитываем множество параметров для каждого пользователя.
Мы также реализуем асинхронный API, который «объединяет» результаты из внешних источников, а также генерирует множество задач.
На данный момент после настройки инфраструктуры и Celery справляемся без проблем, но всякое бывало и раньше, об этом я обязательно расскажу в своем отчете.
— Как вы все это масштабируете и обеспечиваете отказоустойчивость? Для масштабирования мы используем Auto Scaling Groups — набор инструментов, предоставляемый нашей облачной платформой AWS. Django и Celery хорошо масштабируются по горизонтали, мы лишь немного скорректировали ограничения на максимальный объем памяти, используемый uWSGI/Celery. - Чем вы мониторите? Для мониторинга использования процессора/памяти и доступности самих систем мы используем Cloud Watch в AWS, агрегируем различные показатели из приложения и от работников Celery, использующих Prometheus, а также строим графики и отправляем оповещения в Grafana. Для некоторых данных в Grafana в качестве источника мы используем ELK. — Вы упомянули асинхронный API. Расскажите мне немного больше о том, как это работает для вас согласованный Наши пользователи имеют возможность «привязать» свой банковский (или любой другой финансовый) счет и предоставить нам доступ ко всем своим транзакциям.
Мы динамически отображаем процесс «привязки» и обработки транзакций на сайте; для этого используется обычное пулирование текущих результатов с бэкенда, а бэкенд берет данные, запуская ETL-конвейер из нескольких повторяющихся задач.
— Сельдерей — продукт с противоречивой репутацией.
Как ты живешь с ним? По моим ощущениям, наши отношения с Celery сейчас на стадии «Приемки» — мы разобрались с тем, как работает фреймворк внутри, подобрали под себя настройки, разобрались с деплоем, «наложили» мониторинг и написали несколько библиотек для автоматизации рутинных задач.
Нам не хватило функционала из коробки, поэтому мы добавили его сами.
К сожалению, на момент выбора технологического стека для проекта у Celery было не так много конкурентов, и если бы мы использовали более простые решения, нам пришлось бы добавить намного больше.
В четвертой версии Celery мы ни разу не столкнулись с какими-либо ошибками.
Большая часть проблем была связана либо с нашим непониманием того, как все это работает, либо со сторонними факторами.
О некоторых библиотеках, написанных в рамках нашего проекта, я расскажу в своем выступлении.
- Мой любимый вопрос.
Как вы тестируете всю эту музыку? Задачи Celery хорошо проверяются функциональными тестами.
Мы тестируем интеграцию с помощью автоматизированных тестов и ручного тестирования на стендах и постановках QA. На данный момент мы еще не решили пару вопросов с тестированием периодических задач: как разрешить тестировщикам их запускать и как проверить правильность расписания этих задач (соответствие требованиям)? — А как насчет фронтенд-тестов и верстки? Каково общее соотношение ручного и автоматическое тестирование? На фронтенде мы используем Jest и пишем только модульные тесты для бизнес-логики.
55% наших критических для бизнеса случаев сейчас покрываются автотестами на Selenium, на данный момент у нас около 600 тестов в TestRail и 3000 тестов на бэкенде.
— О чём будет ваш доклад на Moscow Python Conf++?
В отчет Я подробно расскажу, для каких задач и как можно использовать Celery, и сравню с существующими конкурентами.
Опишу, как можно избежать различных ошибок при проектировании сложной системы с большим количеством задач: какие настройки следует указать сразу, а какие можно оставить на потом, как развернуть новую версию кода, чтобы не потерять задачи.
при переключении трафика поделюсь написанными библиотеками для мониторинга задач и очередей.
Также я затрону тему реализации ETL-конвейеров на Celery и отвечу, как их красиво описать, какую политику повторов использовать, как гранулярно ограничить количество выполняемых задач в условиях ограниченности ресурсов.
Плюс я опишу, какие инструменты мы используем для реализации пакетной обработки задач, которая экономно использует доступную память.
В общем, если вы жаждете подробностей по всем вышеперечисленным пунктам, приходите.
Надеюсь, мой отчет окажется для вас полезным и интересным.
Теги: #python #Высокая производительность #Анализ и проектирование систем #сельдерей #московский Python conf++
-
Как Выбрать Шрифт
19 Oct, 24