Статьи

Тестирование производительности Yandex ClickHouse для учета ресурсов облака CloudStack

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

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

В рамках статьи мы рассматриваем использование СУБД Yandex ClickHouse для решения задачи доступа к аналитической информации аккаунтинга.

Подробнее ...

Подход Trunk-Based Development в разработке

В предыдущих статьях мы уже затрагивали тему подходов при работе с git и подробно рассматривали метод Gitflow и Feature Branch Workflow как основу коллективной работы над кодом. Напомним, что основной идеей в Gitflow является создание feature-веток – для разработки одного нового функционала создается отдельная ветка, которая вливается в ветку develop, когда работа над функциалом окончена. При этом нередко возникают сложности с разрешением конфликтов, сломаными сборками.

В данной статье мы рассмотрим альтернативный подход для контроля версий исходного кода – разработка на основе главной ветки, или Trunk-Based Development. В ее основе лежит такая модель ветвления, в которой разработчики совместно работают над кодом в одной ветке, называемой «главной» (или master в терминологии Git). При этом второстепенные feature-ветки также могут создаваться, но они имеют короткий срок жизни. Этот подход прочно занимает свои позиции наряду с другими документированными методами разработки в долгосрочных ветках и позволяет разработчикам избежать сложностей связанных со слиянием веток. Словосочетание «главная ветка» (от англ. “trunk” - ствол) несет в себе идею растущего дерева, у которого самой толстой и самой длинной частью является именно ствол, а не ветви, которые расходятся от него и имеют более ограниченную длину.

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

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

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

Данная статья является переводом оригинальной статьи с официального сайта подхода TBD – trunkbaseddevelopment.com.

Подробнее ...

Улучшаем InfluxDB с помощью Apache Kafka

За что мы любим InfluxDB? За то, что это выдающийся продукт, который позволяет работать с временными рядами легко; обеспечивает высокую производительность как на вставку, так и на извлечение данных; за то, что предлагает нам SQL-подобный язык запросов с удобными функциями обработки временных данных (например, производная от значений); за то, что его поддерживают удобные инструменты визуализации, такие как Grafana; за непрерывные запросы, позволяющие выполнять на лету агрегацию данных; а еще за то, что начать работать с InfluxDB можно в течение пары часов.

За что мы не любим InfluxDB? За то, что кластерное решение не является открытым. За масштабирование и отказоустойчивость необходимо платить, приобретая лицензию. В этом нет ничего плохого, однако, в концепции разработки программного обеспечения, основанной на свободном программном обеспечении, когда все инфраструктурные компоненты должны быть под открытыми лицензиями, места коммерческим продуктам не отводится. Соответственно, внедрение InfluxDB в критически важные места информационных систем невозможно.

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

Подробнее ...

Упаковка приложений Python в форму самораспаковывающихся исполняемых файлов с помощью Pyinstaller

В этой короткой статье мы рассмотрим простой способ, который позволяет распространять приложения, созданные с помощью языка Python в виде “толстых” самораспаковывающихся архивов, которые внешне выглядят как простые исполняемые файлы и содержат в своем составе все окружение и зависимости, необходимые для выполнения приложения.

Подробнее ...

Стратегии поддержания долгоживущих соединений с СУБД MySQL в Python и фреймворке Tornado

С точки зрения СУБД, соединение с клиентским приложением – ресурс, которым надо тщательно управлять для аккуратного расходования системных ресурсов. Практически все СУБД устанавливают таймауты неактивности соединения, после достижения которых данное соединени разрывается в одностороннем порядке. Обычно, приложения узнают о данном факте уже после того, как соединение разорвано. В случае с MySQL, клиент получает сообщение The MySQL server has gone away (error 2006). В статье мы рассмотрим подходы, которые позволяют приложениям c долгоживущими соединениям, поддерживать их столько, сколько требуется. Примеры будут приводиться для стандартного интерфейса подключения к СУБД MySQL – mysql.connector. Язык примеров – Python3, в качестве прикладного примера будет использоваться микросервис, реализованный на фреймворке Tornado.

Подробнее ...