В платформе Loginom реализованы подходы, позволяющие добиться высокой скорости обработки, эффективной работы с памятью и легкости масштабирования. Рассмотрим, за счет чего обеспечивается высокая производительность, и продемонстрируем сравнительные тесты с шестью самыми популярными в мире аналитическими low-code платформами.
Среди экспертов существуют различные мнения относительно той или иной технологии анализа данных: кто-то предпочитает написание кода, кто-то — применение low-code/no-code инструментов. При этом каждый может привести убедительные аргументы в пользу своей точки зрения.
Это связано с тем, что предпочтения определяются привычками, опытом и носят в значительной степени субъективный характер. Поэтому то, что одни считают достоинством, другие относят к недостаткам. Однако когда речь идет о производительности, дискуссии становятся бессмысленными, потому что все без исключения предпочтут высокую скорость обработки.
Долгие ожидания раздражают, поэтому скорость можно считать важным объективным критерием выбора того или иного продукта. Причем достижение высокой производительности должно обеспечиваться не сложными манипуляциями, а минимальными настройками, в идеале — вообще без них.
Оптимизация производительности основывается на нескольких базовых принципах:
При этом важно, чтобы для решения задачи требовалось минимально возможное количество продуктов и, как следствие, точек интеграции.
Можно привести аналогию с автострадой. На ней развивается максимальная скорость, но как только появляется плохой участок, она падает. Фактически скорость движения по дороге ограничивается самой медленной ее частью. Места интеграции являются аналогами плохих участков, соединяющих автострады.
Полностью исключить интеграции не получится, так как данные необходимо откуда-то получать, а результаты выгружать. Но чем больше инструментов, платформ и сред, где необходимо произвести обмен данными, тем больше потери производительности. Они потребляют ресурсы и тратят время, но не создают ценности для клиента.
Loginom — одна из самых быстрых в мире low-code платформ продвинутой аналитики. Высокого результата нельзя достичь за счет какого-то одно технологического решения. Это сложная комплексная задача, требующая оптимизации на всех уровнях.
Можно выделить основные факторы, влияющие на скорость работы Loginom:
Если не уделить должное внимание хотя бы одному пункту, то построить высокопроизводительную систему не получится, т.к. именно этот участок будет узким местом. Поэтому рассмотрим каждый фактор, влияющий на скорость работы, более подробно.
Высокая производительность заложена в архитектуре Loginom, в частности в особенностях работы с памятью.
При обработке больших данных пользователи чаще всего сталкиваются с ограничениями, связанными с ОЗУ — ее всегда недостаточно. Особенно критична эта проблема для продуктов, основанных на технология in-memory, которые стремятся все операции производить в оперативной памяти. Loginom является именно такой системой.
Работа in-memory позволяет достичь очень высокой скорости, но требует экономного расходования ОЗУ. Поэтому в платформе используются все техники, позволяющие минимизировать потребление памяти:
На скриншоте представлен пример небольшого сценария.
Ленивые вычисления позволяют существенно снизить требования к памяти, т.к. данные хранятся не в каждом узле сценария, а только в тех, которые выделены цветом. Если принимать во внимание, что обычно сценарии содержат десятки и сотни узлов, то можно понять, насколько существенной получается экономия ресурсов.
Разработчики Loginom не остановились на реализации базового функционала и оптимизировали ленивые вычисления:
Для понимания сути данной оптимизации можно провести аналогию с поиском человека. Например, надо узнать, на месте ли Сидоров.
Было: Сообщение проходит через множество людей. Каждому задается вопрос: «Ты Сидоров?». Если нет, то вопрос передается дальше, если да, то останавливается. Как только это происходит, обратно по цепочке передается сообщение: «Сидоров здесь». В случае Loginom эти шаги можно представить как цепочку, где запрос передается от одного узла к другому, пока не будет найден источник. Как только это произошло, значения передаются назад узлу, который запрашивал данные через весь сценарий.
Стало: Один раз задается вопрос, и Сидоров сразу отвечает, что он на месте. Так происходит потому, что при помощи Reader-ов сначала определяется, где находятся исходные данные, и именно информация о местоположении передается в узел, который запрашивает сведения. Далее данные передаются напрямую из одного узла в другой, минуя цепочку промежуточных обработчиков.
Следующая особенность, заложенная в архитектуру платформы, — это параллелизм «из коробки» и асинхронный пользовательский интерфейс.
Поддержка параллелизма критически важна для обеспечения высокой скорости обработки. На сегодня рост вычислительной мощности компьютеров достигается в основном за счет увеличения количества ядер. Однако далеко не все системы и языки программирования позволяют это сделать просто. Во многих случаях требуются специальные знания и множество дополнительных действий.
В Loginom любой сценарий, который может быть выполнен параллельно, выполняется параллельно. Это логика работы по умолчанию, не требующая каких-либо дополнительных действий от пользователя.
И, наконец, в Loginom реализована еще одна технология — асинхронный пользовательский интерфейс. Он не влияет на время обработки, т.е. его применение не обеспечивает реального повышения скорости. Однако он способствует улучшению отзывчивости системы и создает комфорт при работе. При длительных вычислениях пользовательский интерфейс не блокируется, аналитик может переключаться на другие задачи, что экономит время и создает ощущение высокой скорости.
Карл Саган сказал: «Если вы хотите испечь яблочный пирог с нуля, вам сначала надо создать Вселенную». Естественно, что компания старается не тратить время на разработку того, что уже хорошо реализовано, и воспользоваться готовыми библиотеками.
Для написания Loginom использовались современные быстрые низкоуровневые библиотеки:
Библиотеки тестируются на производительность и выбираются самые быстрые из доступных. Если не удается найти быструю качественную библиотеку, программисты Loginom разрабатывают свои собственные модули. Командой специалистов было создано множество алгоритмов, вот некоторые из них:
Ленивые вычисления чаще всего обеспечивают экономное расходование оперативной памяти и не сказываются на скорости обработки. Однако в некоторых специфичных случаях рациональнее кэшировать рассчитанные данные.
Такое происходит, когда используются сложные формулы или если данные, рассчитанные в одном месте, затем применяются во множестве других узлов сценария. В этом случае рациональнее кэшировать данные, что хотя и приводит к большему расходу ОЗУ, зато увеличивает скорость обработки данных в целом.
В Loginom предусмотрено множество вариантов кэширования: всего набора данных или некоторых столбцов, при активации узла или обращении к данным. Использование данного механизма обеспечивает возможность поиска компромисса между скоростью обработки и объемом используемой оперативной памяти.
Часто узким местом аналитических платформ является обмен данными между клиентом и сервером. Особенно это актуально, когда речь идет о работе с наборами данных, содержащих сотни миллионов записей и даже больше.
Для обеспечения высокой производительности в Loginom реализован собственный Remote Procedure Call (удаленный вызов процедур) — протокол обмена данными между клиентом и сервером. Основными функциями которого является следующее:
При работе в браузере клиентская часть визуализатора обращается к серверной для получения информации, которую необходимо отобразить. Так как выборки могут быть огромных размеров, то для увеличения производительности передаются не все данные, а определенный фрагмент. Информация пересылается окнами или происходит децимация, т.е. на сервере уменьшается объем данных, но сохраняются статистические свойства выборки.
Например, при отображении таблицы в миллион записей сервер передает клиенту только фрагмент выборки, который виден на экране, и небольшое количество записей до и после данной области. При перемещении по таблице окно смещается, и данные подгружаются. В результате обеспечивается высокая отзывчивость интерфейса, снижаются требования к объему передаваемой информации.
Требование эффективной и прозрачной для пользователя многопоточной обработки привело к необходимости реализации собственного механизма:
В Loginom встроен механизм мониторинга загруженности процессоров. Если ресурсы используются не оптимально, например, в цикле в каком-то блоке есть трудоемкие операции и потоков достаточно, но данные передаются на обработку с небольшой скоростью, то система самостоятельно запускает новый поток.
В результате таких манипуляций Loginom эффективнее утилизирует доступные ресурсы и работает быстрее. Рассчитанные данные передаются на выход, и система приступает к обработке следующего блока.
Поддержка многопроцессорных систем учтена при работе со строками. В частности при фильтрации сравнение строк происходит с помощью специальной функции, исключающей атомарные операции обращения к общей памяти. Подобные действия блокируют конвейер всех ядер процессора. В результате блокировок, даже если ядер много, фактически система работает в один поток. Результат — увеличение на многоядерных серверах скорости фильтрации примерно на 20%.
Здесь тоже присутствуют нетривиальные решения. Дело в том, что при работе с базой данных через один коннектор запросы чаще всего выполняются последовательно, а не параллельно. Количество потоков обработки запросов пропорционально количеству коннекторов.
В Loginom при подключении к СУБД создается фабрика подключений, за счет чего обеспечивается более высокая степень параллелизма. По возможности коннекторы держатся в памяти, чтобы не терять время на подключение.
Разработчики Loginom смогли оптимизировать импорт из медленных источников (csv, xlsx):
В результате данных оптимизаций импорт немного замедлился, зато уменьшился расход памяти, ускорилось выполнение последующих узлов в сценарии.
Следующим шагом в повышении скорости работы стала оптимизация формата Loginom Data File. Для этого алгоритм сжатия LZ0 был заменен на LZ4 с добавлением расчета контрольной суммы.
В процессе экспорта в файле сохраняются уникальные строки, из-за чего скорость записи уменьшилась. В результате размер файла увеличился примерно на 10%, зато чтение стало быстрее на 39%. Кроме того при импорте снизился расход ОЗУ.
Обычно Integrator и Server общаются между собой по TCP, но при работе на одной машине можно использовать Unix domain socket. При его применении отклик быстрее примерно на 15%.
Еще одним важным аспектом является повышение производительности узла Python — своего рода соединение между Loginom и внешней системой. Для этого требуется обеспечить параллельное выполнение узла, которое по умолчанию Python не поддерживает.
Для параллельного выполнения узла Python анализируемые выборки выгружаются в файлы, запускается несколько интерпретаторов. Наборы записываются в файлы бинарного формата с хранением по столбцам и прозрачно для аналитика загружаются в Python. Это повышает скорость обмена данными между Python и другими узлами сценария.
Лучшим аргументом, демонстрирующим эффект от работ по оптимизации Loginom, является сравнение платформы с другими продуктами, представленными на рынке. В качестве конкурентов Loginom были выбраны продукты, занимающие лидирующие позиции на мировом рынке, по мнению Gartner:
Выбор пал на настольные версии, т.к. корректное сравнение облачных продуктов требует воссоздания одинаковой инфраструктуры, что практически невозможно. Данные инструменты есть в открытом доступе. Каждый желающий может их бесплатно скачать и сравнить самостоятельно.
Сравнение проходило по трем критериям:
Для сравнения продуктов были выбраны три задачи, которые можно реализовать в каждой системе.
Построение отчетности по продажам, ABC и XYZ-анализ с минимальными настройками. Это тест производительности базовых операций работы с данными:
Выбор такой задачи можно объяснить тем, что в реальной жизни, подобные операции проводятся аналитиком практически ежедневно.
Интерфейс аналитических платформ схожий:
В Loginom использовались подмодели, которые являются специальным узлом, содержащим в себе другие узлы Сценария. Логика из-за этого не меняется. Во всех инструментах были реализованы абсолютно одинаковые операции.
Сценарий в Loginom
Параметры тестового компьютера: AMD Ryzen 5 5600G 3.9 GHz (6 ядер, 12 потоков), DDR 32 Gb 3200 MHz, SSD ADATA SP90.
Анализируемые данные:
Результаты первой задачи:
Результаты первого тестирования
Так как в RapidMiner для обработки данные необходимо сначала загрузить в репозиторий, а затем обработать, тут и далее время загрузки суммировалось с временем расчетов.
Данные загружаются один раз, а затем трижды продублированы ранее разработанные простые сценарии для демонстрации возможностей параллельной обработки. Эмуляция ситуации, при которой большие объемы данных единожды извлекаются из нескольких источников, а затем просчитываются множеством не очень сложных сценариев.
Анализируемые данные:
Результаты второго тестирования
Трижды продублированы все этапы обработки: от импорта данных до выгрузки результатов. Данные необходимо одновременно прогнать через все этапы обработки, а не только через блок расчетов. Это типичный кейс работы высоконагруженных систем.
Анализируемые данные:
Повторяется вся обработка полностью, включая импорт.
Результаты третьего тестирования
Loginom демонстрирует выдающуюся эффективность и производительность в сравнении с любой аналитической low-code платформой даже при использовании настольной редакции без тонких настроек. Чем больше источников и объемы данных, тем сильнее отрыв.
Подробнее о техниках, позволяющих обеспечить высокую скорость обработки данных, экономном расходование памяти и возможности масштабирования в выступлении Арустамова Алексея, CEO Loginom Company:
pdfLoginom – low-code аналитика на предельной скорости.pdf
Если вы хотите применять аналитическую low-code платформу Loginom для решения задач бизнеса, свяжитесь с нами.
Другие материалы по теме:
Экосистема Loginom: что пользователю нужно знать о платформе
Loginom-ускорители: как сделать за полчаса аналитику, на которую обычно уходит месяц