Что, черт возьми, такое Протон?

Что, черт возьми, такое Протон?

1 января 2024 г.

Эта серия статей доставила мне массу удовольствия, поскольку я узнал и исследовал новые технологии. Также интересно посмотреть, что приобрело популярность с тех пор, как я впервые это обнаружил. Моя последняя статья об Apache Paimon была невероятно популярна, к моему большому удивлению, но, похоже, я не был не единственный, кому интересно, что это было за херня. Благодаря этой статье я наткнулся на лицензионный проект Apache 2.0 с открытым исходным кодом, Proton, спонсируемый Timeplus. Это база данных SQL, в которой хранятся как исторические, так и потоковые данные. Написанное на C++ и работающее на платформе ClickHouse, основное внимание уделяется простоте и производительности. Благодаря одному исполняемому файлу установка проста.

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

Обзор Протона

Коротко говоря, у нас есть база данных ClickHouse, а в Timeplus добавлена ​​поддержка потоковых сервисов. Это должно дать вам механизм запросов, подобный Flink, и потоковое хранилище, подобное Kafka, с базой данных ClickHouse. Итак, как это выглядит?

Proton Architecture

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

Чтобы создать случайный поток данных и запросить его с помощью Proton, мы можем сделать что-то вроде этого:

-- Create a stream with random data.
CREATE RANDOM STREAM devices(device string default 'device'||to_string(rand()%4), temperature float default rand()%1000/10);

-- Run the long-running stream query.
SELECT device, count(*), min(temperature), max(temperature) FROM devices GROUP BY device;

┌─device──┬─count()─┬─min(temperature)─┬─max(temperature)─┐
 device0     2256                 0              99.6 
 device1     2260               0.1              99.7 
 device3     2259               0.3              99.9 
 device2     2225               0.2              99.8 
└─────────┴─────────┴──────────────────┴──────────────────┘

Функции Протона

Протон имеет множество интересных функций; Меня сразу поразила возможность создавать материализованное представление для сохранения определенных событий в Proton. Воспользовавшись документацией, предположим, что у вас есть поток Kafka, сообщающий о веб-событиях, и вы хотите сохранить отчеты о неработающих ссылках, чтобы можно было запросить их позже, даже если Kafka отключен или события удалены. Это будет выглядеть примерно так:

create materialized view mv_broken_links as
select raw:requestedUrl as url,raw:method as method, raw:ipAddress as ip, 
       raw:response.statusCode as statusCode, domain(raw:headers.referrer)
as referrer
from frontend_events where raw:response.statusCode<>'200';

Затем, если вы хотите напрямую запросить материализованное представление и построить на основе данных гистограмму, это будет выглядеть так:

-- streaming query
select * from mv_broken_links;

-- historical query
select method, count() as cnt, bar(cnt,0,40,5) as bar from table(mv_broken_links) 
group by method order by cnt desc;

┌─method─┬─cnt─┬─bar─┐
 GET      25  ███ 
 DELETE   20  ██▌ 
 HEAD     17  ██  
 POST     17  ██  
 PUT      17  ██  
 PATCH    17  ██  
└────────┴─────┴─────┘

Некоторые из этих функций напоминают мне Upsolver, компанию, в которой я работал несколько лет назад.

Драйверы для других языков доступны для Java, Go и Python. Использование Proton с чем-то вроде Redpanda потребует минимального объема потоковой передачи исторических данных.

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

Сводка

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

Mongol with snow leopard

Наверное нет, но опять же ничего нет :). Если отбросить легкомыслие, команда Proton проделала отличную работу, документируя проект и максимально упрощая его установку и использование. Мне нравятся эти однобинарные проекты, которым не нужна обширная экосистема Java с множеством зависимостей. Однако не заблуждайтесь: у Timeplus есть коммерческая версия, которая дает вам больше возможностей, чем стандартная версия Proton. Однако они, похоже, очень поддерживают Протон и приветствуют сообщество.

Прочтите мои другие статьи «Что такое, черт возьми…» по ссылкам ниже:


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE