Как стать автором
Обновить
16
0
Aleksei Ozeritskii @aozeritsky

Software Engineer

Отправить сообщение

Эволюция обработки данных: от MapReduce к стриминговому движку

Время на прочтение7 мин
Количество просмотров6.8K

Yandex Query Language (YQL) — универсальный декларативный язык запросов к системам хранения и обработки данных, разработанный в Яндексе. А ещё это один из самых нагруженных сервисов: YQL ежедневно обрабатывает около 800 петабайт данных и 600 000 SQL-запросов, и эти показатели постоянно растут. 

Изначально YQL основывался на операциях MapReduce, которые эффективны для больших данных. Но для средних объёмов данных (до 50 Гб, которые составляют около 60% запросов) этот подход оказался неоптимальным, потому что нужно было обмениваться данными между операциями через диск. Поэтому разработчики создали новый более гибкий стриминговый движок, который значительно ускоряет обработку данных за счёт выполнения всех вычислений в памяти.

В этой статье я хочу рассказать о подходах и технологиях в разработке систем для обработки данных на примере YQL. Основное внимание я уделил переходу от MapReduce к стриминговому движку, который обеспечивает более эффективную обработку данных, вмещающихся в память, и который доступен в опенсорсе.

Читать далее
Всего голосов 34: ↑34 и ↓0+39
Комментарии16

High-performance network library using C++20 coroutines

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров18K

Asynchronous programming is commonly employed for efficient implementation of network interactions in C++. The essence of this approach lies in the fact that the results of socket read/write functions are not immediately available but become accessible after some time. This approach allows for loading the processor with useful work during the wait for data. Various implementations of this approach exist, such as callbacks, actors, future/promise, coroutines. In C++, these implementations are available as libraries from third-party developers or can be implemented independently.

Coroutines are the most challenging to implement as they require writing platform-dependent code. However, the recent version of the C++ 20 language standard introduces support for coroutines at the compiler and standard library levels. Coroutines are functions that can suspend their execution, preserving their state, and later return to that state to resume the function's work. The compiler automatically creates a checkpoint with the coroutine's state.

For a comprehensive understanding of C++ 20 coroutines, refer to this article. Below, we examine a code example using coroutines and describe important points applied during implementation.

Read more
Всего голосов 5: ↑3 и ↓2+2
Комментарии14

Logbroker: сбор и поставка больших объемов данных в Яндексе

Время на прочтение11 мин
Количество просмотров55K
Привет! Меня зовут Алексей Озерицкий. В Яндексе я работаю в разработке технологий и инфраструктуры. Не только тем нашим сервисам, которыми пользуются миллионы людей, важно уметь работать с действительно большими объемами данных без сбоев. Один из наших ключевых внутренних инструментов — Я.Статистика, информация в котором предназначена только для сотрудников Яндекса и более того — является коммерческой тайной. Статистика занимается сбором, хранением и обработкой информации (в первую очередь логов) от сервисов Яндекса. Результатом нашей работы с ней являются статистические расчеты для дальнейшей аналитики и принятия продуктовых решений.

Один из ключевых компонентов Статистики – Logbroker, распределенное многодатацентровое решение по сбору и поставке данных. Ключевые особенности системы – возможность переживать отключение дата-центра, поддержка семантики exactly once на доставку сообщений и поддержка потоков реального времени (секунды задержки от возникновения события на источнике до получения на приемнике).

В ядре системы лежит Apache Kafka. Logbroker с помощью API изолирует пользователя от сырых потоков Apache Kafka, реализует процессы восстановления после сбоев (в том числе семантику exactly once) и сервисные процессы (междатацентровая репликация, раздача данных на кластеры расчета: YT, YaMR...).
Читать дальше →
Всего голосов 61: ↑56 и ↓5+51
Комментарии20

Распознаем лючки бензобаков

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров11K

Привет, Хабр! Однажды, я решил создать автоматическую автозаправочную станцию. Один из ее компонентов - роботизированная "рука", для автоматической заправки транспортных средств, независимо от марки/модели. Данная рука последовательно открывает лючок бензобака, отвинчивает крышку горловины бензобака, вставляет заправочный пистолет, осуществляет заправку автомобиля и возвращает все на место. В данной статье я хочу рассказать о том, как осуществлялось распознавание лючка бензобака для корректного позиционирования "руки" в пространстве и определения места присоединения присоски. Давайте посмотрим - как эта задача была решена.

Читать далее
Всего голосов 19: ↑18 и ↓1+28
Комментарии101

Информация

В рейтинге
Не участвует
Работает в
Зарегистрирован
Активность

Специализация

Backend Developer, Database Developer
Lead
Linux
C++
Algorithms and data structures
System Programming
Maths