Двухзвенная архитектура: одностраничные веб-приложения с Clickhouse

ClickHouse примеры курсы обучение, инженерия данных с ClickHouse, работа с ClickHouse , Школа Больших Данных Учебный центр Коммерсант

Как реализовать систему с двухзвенной архитектурой на ClickHouse и браузере. Возможности колоночной СУБД для создания одностраничных веб-приложений.

Возможности ClickHouse для одностраничных веб-приложений

Хотя трехзвенная архитектура (клиент -> бэк-> база данных) уже давно стала стандартом де-факто в разработке веб-приложений, двухзвенная архитектура, когда бизнес-логика переносится в базу данных, до сих пор встречается. Сюда же относятся одностраничные приложения, которые динамически обновляют контент на одной веб-странице без полной ее перезагрузки, обрабатывая всю визуализацию на стороне клиента, а сложную логику – на стороне самой базы данных. Этот подход можно реализовать в том числе со сложными СУБД для хранения и аналитической обработки больших объемов данных, например, ClickHouse. Роль клиента будет выполнять браузер, обращаясь к серверу СУБД.

Двузвенная архитектура одностраничного приложения с ClickHouse
Двузвенная архитектура одностраничного приложения с ClickHouse

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

  • HTTP-интерфейс и REST API позволяют делать запрос к ClickHouse с помощью SQL из Javascript. По умолчанию ClickHouse прослушивает порт 8123 или 8443 с SSL. Этот интерфейс включает поддержку сжатия HTTP и сеансов. HTTP-интерфейс ClickHouse позволяет отправлять статистику запросов в виде заголовков ответов, описывающих ход выполнения запроса. Пользователи также могут прочитать заголовок X-ClickHouse-Summary, в котором суммируются прочитанные строки, байты и время выполнения.
  • Поддержка более 70 форматов выходных данных, включая 20 вариантов для JSON, что позволяет легко выполнять синтаксический анализ полезной нагрузки с помощью JavaS В частности, можно использовать JSONObjectEachRow или JSONColumnsWithMetadata. Все эти форматы возвращают ответ во внешнем объекте JSON и, требуя анализа всей полезной нагрузки и загрузки в память. Для крупных данных можно использовать формат из семейства EachRow, который легче анализируется с помощью Streams API. Форматы JSONEachRow, JSONCompactEachRow и JSONEachRowWithProgress не являются строго хорошо отформатированным JSON. Другие форматы являются вариантами TSV и CSV, что позволяет легко загружать данные. Для пользователей, которым требуется высокая производительность на больших объемах данных, например, рендеринг в библиотеках веб-сборок, таких как Perspective , ClickHouse дополнительно поддерживает форматы Arrow и ArrowStream.
  • Параметры запроса позволяют шаблонизировать запросы и обеспечить устойчивость к SQL-инъекциям. Если параметр запроса wait_end_of_query=1 не включен в запрос, сводная статистика может не отражать все выполнение запроса. Без этой настройки ответ будет передан потоком со значением заголовка, возвращаемым до завершения запроса. Включение этой настройки приводит к тому, что ответ возвращается только после завершения запроса с точной статистикой. Это приводит к буферизации ответа, потребляя значительный объем памяти, и задерживает обслуживание ответа, и поэтому не подходит в случаях большого количества считываемых строк. Параметры запроса позволяют шаблонизировать запросы, избегая необходимости манипулировать SQL-выражениями как строками, например, когда значения фильтра изменяются в интерфейсе.
  • Управление доступом на основе ролей позволяет администраторам ClickHouse ограничить доступ к определенным таблицам и строкам. При этом следует придерживаться принципа наименьших привилегий, задав таблицы и столбцы, к которым веб-пользователь должен иметь доступ. Для этого надо предоставить ему соответствующие права на операцию SELECT.
  • Ограничения прав пользователей по сложности запросов, например, разрешения только на чтение, выделения квот и доступных ресурсов. Квоты позволят ограничить количество запросов от любого конкретного клиента, что предотвращает переполнение базы данных запросами от несанкционированных или вредоносных клиентов. Чтобы добавить ограничения на сложность запроса, надо внести изменения в профиль веб-пользователя. Рекомендуется задать максимальное время выполнения запроса (max_execution_time), максимальное количество строк и байтов для чтения за один запрос (max_rows_to_read и max_bytes_to_read), максимальное количество строк и байтов, возвращаемых в ответе (max_result_rows и max_result_bytes), максимально допустимый объем памяти для запроса (max_memory_usage), объем памяти, разрешенный для GROUP BY до переполнения на диск (max_bytes_before_external_group_by). Все эти настройки настраиваются на конкретный запрос. А квоты ограничивают количество запросов в единицу времени.

ClickHouse поддерживает сжатие HTTP-запросов и ответов, задаваемое с помощью конфигурации enable_http_compression=1. Поскольку запросы на чтение обычно невелики, рекомендуется включить сжатие ответов при разработке клиентских приложений. Особенно важно включать сжатие при потоковой передаче больших ответов, когда сеть является узким местом. Однако, это может замедлить время отклика с накладными расходами ЦП на сервере. Если enable_http_compression=1 задано для пользователя в запросе, также надо указать желаемый метод сжатия compression_method в заголовке Accept-Encoding. Веб-клиент ClickHouse JS поддерживает сжатие ответа с помощью кодека gzip и автоматически устанавливает требуемый заголовок и настройки.

Получив синтаксически правильный запрос, ClickHouse отправит результаты, когда это возможно, если wait_end_of_query=1, с кодом HTTP-ответа 200. Если позже в ходе выполнения запроса, даже через несколько часов, возникнет ошибка, поток может быть завершен с полезной нагрузкой, содержащей ошибку. Это можно смягчить лишь частично с помощью wait_end_of_query=1. Поэтому при обработке ответов вручную рекомендуется всегда обрабатывать ответ и обеспечивать его правильность.

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

Научиться работать с ClickHouse вы сможете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://clickhouse.com/blog/building-single-page-applications-with-clickhouse-and-http
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.
Поиск по сайту