paint-brush
Что, черт возьми, такое Протон?by@ProgRockRec
1,307
1,307

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

Shawn Gordon4m2023/12/31
Read on Terminal Reader

Proton — это лицензионный проект Apache 2.0 с открытым исходным кодом, спонсируемый [Timeplus]. Написанный на C++ и поддерживаемый [ClickHouse], он поддерживает как исторические, так и потоковые данные. Благодаря одному исполняемому файлу установка проста. Proton имеет множество интересных функций, включая возможность создавать материализованное представление для сохранения определенных событий.
featured image - Что, черт возьми, такое Протон?
Shawn Gordon HackerNoon profile picture
0-item
1-item

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


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

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

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


Протонная Архитектура


Пунктирная линия — это место, где появляется 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 много отличных функций; Меня сразу поразила возможность создавать материализованное представление для сохранения определенных событий в 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 потребует минимального объема потоковой передачи исторических данных.


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

Краткое содержание

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

Монгол со снежным барсом


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


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