Как стать автором
Обновить

Комментарии 45

Крутая инфографика, приятно выглядит.

З.Ы. У вас опечатка в заголовке "Python vs пессимисты"

Спасибо, поправили!

Вы совершенно правы, именно поэтому, чтобы решить эту проблему, мы применили multiprocessing для горизонтального масштабирования

Но у вас же статья называется "Как выжать максимум из питона")
Выжимается из него далеко не максимум. Например, для десериализации жсона, можно выбрать https://github.com/ijl/orjson (который окажется под капотом вовсе не питоном, а растом). Ну и воркер, который переписывает из очереди в базу, кажется, что прилично будет занят I/O, поэтому можно еще попробовать asyncio (правда, асинхронный драйвер для монги на питоне не оч). Сниппет с кодом, при этом всем, увеличиться не то, чтобы очень сильно.
Ну и по-честному, мультипроцессингом вы максимум выжимаете не из питона, а из железа.

Вы правы, мы старались утилизировать железо по максимуму. И, на мой взгляд, тут важен именно кумулятивный эффект. А по поводу оптимизации самой сутевой части процессинга, то да - тут есть простор для улучшений. Кстати, Orjson - действительно классная библиотека. Мы ее активно применяли в ряде промышленных решений, т.к. обнаружили, как раз при профилировании, что стандартный json serializer не очень производителен... И даже контрибьютили ряд улучшений в части сериализации дат. Возможно, напишем об этом отдельную статью.

А запись в базу у вас как происходит, синхронно? Тогда всё понятно, ничего оно быстрее не станет работать.

Да, синхронно, и на первый взгляд может показаться, что производительность всей системы упирается исключительно в производительность СУБД. Но при этом, важно помнить, что MongoDb обеспечивает достаточно гибкие механизмы конкурентной обработки запросов - https://docs.mongodb.com/manual/faq/concurrency/#faq-concurrency

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

Помимо этого, повлиять на скорость записи, можно путем тюнинга write concern в СУБД - https://docs.mongodb.com/manual/core/replica-set-write-concern/

НЛО прилетело и опубликовало эту надпись здесь

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

Ага, один из вариантов оптимизации на питоне - переписать все на, о боже, сишечку и предоставить питонячий интерфейс

Или пересадить часть задач на сишные сервисы

Как вариант! Если целевые показатели производительности не достигнуты... Кстати, многие вещи так и реализованы как Python C Extension. Пример: pymongo

Интересно, спасибо. Но ссылки бы облегчили чтение. Я про "институт IEEE опубликовал"

Спасибо за комментарий! Ссылку добавил.

Только вот убер уже много лет как перешел на го и жаву. Но да, до этого был питон (а самый первый прототип вообще на пхп)

На самом старте проекта, python - это, почти всегда, отличный выбор! По мере развития проекта все постепенно превращается в зоопарк технологий. От этого никуда не уйти...

Ой, хайлоад и питон

  1. Для начала мы вынуждены плодить уйму процессов из-за gil, общение между которыми, мягко говоря, не zero-cost, так что про параллельную обработку маленьких задач лучше забыть

  2. Управление аллокациями - это тоже не про питон

  3. Быстрый сетевой стек? Вроде на питоне в среднем rps раз в 100 меньше плюсовых/сишных альтернатив

  4. Собственно сами вычисления - ну тут есть какие-то решения, которые позволяют либо jit получить, либо использовать сишную библиотеку

Так уж случилось, что в highload важен low-latency на ядро, иначе вы просто в железо упретесь. Питон в этом очень слаб, но он и не для этого

Конечно, python - это далеко не самый быстрый в плане производительности язык, но он позволяет ясно и прозрачно описывать достаточно сложную бизнес-логику, в том числе в контексте highload. Тем более, если требуемые показатели производительности достигаются (tps/rps), то почему бы и нет?

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

Конечно, накладные расходы (железо, которое, кстати, все время дешевеет)

Железо... дешевеет... Да вы полюбому из паралельной вселенной.

Так хочется верить, что в долгосрочной перспективе железо все таки дешевеет, но, возможно, я просто неисправимый оптимист из параллельной вселенной))

Вы начинаете оперировать словами "ака демагогия".

кстати, все время дешевеет

Подчеркну "все время" )

Языков в мире программирования масса, но корону по праву носит Python

Не слишком ли громко ?

Корону по определению носит тот язык на котором ты программируешь )

Ну а дальше холивары.

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

Основной посыл статьи был в том

Вы плохо донесли его, обозначив один язык выше других.

Учту, буду работать над этим.

А о чём статья? О том что в стдлибе пайтона есть multiprocessing?

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

Зачем питон называть пайтоном ? )

Затем что он так называется

Напасть двадцать первого века - использовать языки сценариев для чего-то сложнее сценариев.

Да, универсальность python открывает все новые и новые горизонты его применения. Еще сравнительно недавно мы даже подумать не могли, что, например, в области анализа больших данных и машинного обучения python станет просто стандартом de facto. Это же здорово, что появляются новые способы применения привычных инструментов.

https://habr.com/ru/amp/post/519414/

А вы тут про хайлоад говорите - за планету страшно

Ох... И не говорите)) Улыбнул комментарий к той статье: Грета - наше все! Астрономов на мыло

В области анализа больших данных рулят Spark, H2O, всякие колоночные СУБД а-ля Clickhouse и прочие серьезные штуки. Python - лишь обёртка для обращения к ним. С тем же успехом можно писать про то что R рулит в анализе больших данных ибо имеет все те же самые инструменты взаимодействия с ними и заслуженно "примеряет корону в анализе".

А про печаль от питоновского пандас в анализе данных лучше всего написал сам создатель Pandas

10 Things I Hate About pandas

Пайтон в определённом контексте, конечно, не плох. Но вот полное забивание на нормальную графику из стандартной библиотеки и мобилки вообще портят весь восторг. Круто было бы какое-нибудь Kivy затащить прям в основную ветку. В мобилках вообще половина штук ломается на этапе "а вот для этой архитектуры у нас нет сборок библиотек". После чего ребята из PySide говорят "мы не будем это тащить, потому что официально питон это не желает поддерживать мобильные платформы".

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

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

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

Языков в мире программирования масса, но корону по праву носит Python

Попахивает очередной идеей в статьей "Python лучший язык программирования", да он безусловно лучший, как и C++, C#, Java и др., если вы выбрали какой то язык для себя, но у каждого своя область применения.

У статьи не было цели показать, что какой то язык хуже, а какой то язык лучше. Тут каждый делает выбор сам. У всех разные предпочтения. Основная мысль статьи была в том, чтобы показать на примере, что можно расширить привычную область применения python и показать как решать задачи уровня highload. Безусловно, highload системы можно имплементировать на Java, C#, C и С++.

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

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

А что Autodesk на питоне пишет? Если мне память не изменяет, то AutoCAD вообще был написан на Lisp. Maya? Нет, питон уже потом в неё встраивали. Max? Inventor? Fusion360? Generative Design? В самом деле, раскройте тему. Или речь идёт о каких-то скриптах, для автоматизации внутренней рутины?

В первую очередь, конечно framework для автоматизации задач если говорить о конечных пользователях различных продуктов Autodesk. В самом Autodesk множество сервисов написана на python, включая модули безопасности и многое другое. Подробная информация есть в открытых источниках.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий