Обложка: Небольшая подборка инструментов стека Python

Небольшая подборка инструментов стека Python

Богдан Евстратенко
Богдан Евстратенко

технический директор компании nlogic

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

Fastapi

Наш основной фреймворк на питоне. Изначально мы использовали flask-restplus, но довольно быстро стало понятно, что swagger-документация у него ограниченная, да и io будет большим.

Если с io проблема была ясна, то с документацией не очень. Нам была нужна тщательная и максимально подробная документация, при этом не углубляясь в swagger как таковой, а просто писать код (мы же все-таки на питоне). В очередной выходной, нагугливая что происходит в мире оупенсорса, наткнулся на fastapi. Разработчики позиционировали его как легкое, производительное и production-ready решение. Переписав на него свой pet project, точно понял, что он нам подходит по всем нашим хотелкам:

  • документация генерируется из кода. Причем, если любишь оперировать более абстрактными объектами, то все становится еще удобнее;
  • поддержка как корутин, так и обычных функций. Не завязываем себе руки event loop’ом;
  • много батареек из коробки: jwt авторизация и не только, сокеты.

В общем, отличный инструмент.

Dramatiq

Если кто-то говорит о rabbitmq, то де-факто стандартный фреймворк в питоне — Сelery. У него большое коммьюнити, есть поддержка в разных веб-фреймворках, много проектов на нем, но основной минус, как мне кажется — перегруженность. Так как нам не нужна была сложная логика в этом месте, то, пройдя этап тестирования пет-проектом, было решено попробовать Dramatiq. Он легковесный, понятный, не перегружен как Сelery и в целом подходил под нашу идею «не усложняй». Забегая вперед скажу, что сейчас мы от него отказываемся в пользу своего решения на pika, захотелось больше контроля :).

Aerospike

Центральная база данных, через которую общаются все паблишеры, консьюмеры и сервисы системы распознавания.

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

Postgresql

Основное наше хранилище данных, используем везде :). Очень любим партиции!

Clickhouse

Небезызвестная аналитическая СУБД от Яндекса, используем для агрегирования данных: строим аналитику, дашборды, контролируем общее время распознавания и прочее.

Yargy

Yargy — набор грамматик и правил для извлечения фактов из неструктурированного текста.

У нас есть свой модуль, с помощью которого мы вытаскиваем разные сущности: имена, фамилии, телефоны, суды, номера ИНН и т.д. Этот модуль написан на основе Yargy. Правда, мы его сильно доработали :).

Sklearn, Keras, Tensorflow

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