Как стать автором
Обновить
4
0

Java/Kotlin, Python, .NET; JS/TS, Vue.

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

Потоковая обработка данных с помощью Kafka Streams: архитектура и ключевые концепции

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

При реализации потоковой обработки и анализа данных может возникнуть необходимость агрегирования записей для объединения нескольких независимых поток данных или обогащения какой-либо модели данных. Для этой цели может использоваться Kafka Streams, которая позволяет выполнять обработку данных в режиме реального времени. 

В этой статье мы рассмотрим основные компоненты Kafka Streams и теоретические аспекты их использования. Мы будем использовать последние версии технологий, доступных на сегодня: Kafka 3.4.0 и Java 17 в качестве языка программированию. Для снижения входного порога мы будем использовать только нативные возможности Kafka и Kafka Streams, и не будем рассматривать решения с использованием различных фреймворков вроде Spring.

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

RabbitMQ Direct Reply-to. RPC поверх кролика без дополнительных очередей (пример на Python)

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

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


Тот же RabbitMQ имеет пример в официальной документации. Других примеров там нет, поэтому создается впечатление, что отправка ответных сообщений в другую очередь — единственный возможный способ реализации RPC.


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


На самом деле, в RabbitMQ есть механизм и для такого сценария. Но он спрятан в недрах документации и о нем почти нет информации в интернете (особенно рабочих примеров кода).


Вот это недоразумение мы сейчас и исправим.

Читать дальше →
Всего голосов 12: ↑12 и ↓0+12
Комментарии3

9 аналогов известных сервисов (Google Analytics, Slack, GitHub, ChatGPT) с открытым исходным кодом

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

Все мы пользуемся разными сервисами — какими именно, зависит от специальности и текущей необходимости. GitHub, ChatGPT, Tableau и другие давно и прочно вошли в нашу жизнь. Но есть и аналоги этих востребованных сервисов, причём аналоги с открытым исходным кодом. Эта статья посвящена таким альтернативным сервисам и ПО. Вероятно, многие из них могут оказаться полезны для читателей. Если же у вас есть собственный вариант, расскажите о нём в комментариях.

Читать далее
Всего голосов 14: ↑12 и ↓2+16
Комментарии9

Пример настройки Linux для высоконагруженных кластеров Kubernetes

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

Довольно часто можно встретить примеры настройки (тюнинга) сетевого стека Linux для высоконагруженных систем, однако некоторые из этих гайдов сильно устарели и не используют рекомендованные подходы к конфигурированию системы. В этом обзоре мы рассмотрим подготовку Linux, для использования в качестве узла плоскости управления Kubernetes.

Читать далее
Всего голосов 9: ↑7 и ↓2+5
Комментарии1

Все дело в Redis или почему не стоит устанавливать эту систему «как есть»

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

На проектах мы часто сталкиваемся с различными интересными задачами и кейсами. Хочу поделиться одной из таких историй.

Беда пришла нежданно. Пару месяцев назад, в конце рабочего дня, когда я уже успел выключить комп и погрузился мыслями в вечерние планы, со мной связались коллеги из соседнего департамента. У их заказчика начал сбоить сервер баз данных Redis на Open Source: наблюдались дикие тормоза и потеря производительности.

Входные данные: есть три узла Redis, Standalone и две реплики, конфигурация по дефолту.

В какой-то момент Redis сильно «раздулся»: его дамп был огромен (исчислялся гигами) и на диск писался долго — показывал время запросов 2-3 секунды, не добегала репликация, видны были висящие в непонятном состоянии курсоры с тайм-аутом в час.

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

Что было дальше, описываю под катом.

Читать далее
Всего голосов 17: ↑11 и ↓6+7
Комментарии11

Шпаргалка по SQL (postgres), которая выручает меня на собесах

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров198K

Привет, Хабр!

Я решил посвятить свою первую статью SQL. Вопросы, рассмотренные ниже мне задавали на собеседованиях на позицию python-разработчика. Естественно отвечать правильно получалось не всегда, а если точнее то чаще не правильно, однако проведя N часов в рефлексии я составил перечень ответов, которыми пользуюсь до сих пор.

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

Читать далее
Всего голосов 156: ↑149 и ↓7+177
Комментарии178

Введение в многопоточность в Java очень простым языком: Процессы, Потоки и Основы синхронизации

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

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

Итак, в данной статье мы поговорим о многопоточности в Java. Тема очень обширная, и я не ставлю целью описать все ее аспекты. Статья рассчитана на людей, только начинающих свое знакомство с многопоточностью. В данной статье мы рассмотрим основу многопоточности Java, такие базовые механизмы синхронизации как ключевые слова volatile и synchronized и очень важную проблематику “Состояние гонки” и “Смертельная блокировка”. 

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

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

Читать далее
Всего голосов 19: ↑9 и ↓10-1
Комментарии11

Охотимся на уязвимость Nginx Alias Traversal: утечка сейфа Bitwarden

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

Nginx, универсальный веб-сервер, имеет ключевое значение для многочисленных интернет-инфраструктур, занимает доминирующую долю рынка с момента своего создания в 2004 году, получил широкое распространение на веб-сайтах и в контейнерах Docker. В этой статье рассматриваются тонкости Nginx, основное внимание уделяется директивам location и alias, которые играют центральную роль в том, как Nginx обрабатывает определенные URL-адреса. Мы также изучим потенциальные уязвимости, возникающие из-за неправильных конфигураций, и продемонстрируем, как они могут привести к эксплойтам безопасности, опираясь на исследования, представленные Orange Tsai на конференции BlackHat 2018.

Руководство дополнительно проиллюстрирует эти моменты посредством тщательного изучения популярных репозиториев с открытым исходным кодом, с использованием GitHub Code Search для выявления потенциальных уязвимостей конфигурации Nginx. Реальные тематические исследования с участием Bitwarden и Google HPC Toolkit подчеркнули значительный риск раскрытия данных, если эти уязвимости не будут устранены. Кроме того, мы представим NavGix, автоматизированный инструмент, предназначенный для обнаружения этих уязвимостей методом «черного ящика», предоставляющий исчерпывающую информацию о сложностях, уязвимостях и возможных неправильных конфигурациях Nginx.

Как получить доступ к сейфу Bitwarden
Всего голосов 2: ↑2 и ↓0+2
Комментарии1

[HTTP API & REST] Работа с ошибками в HTTP API. Заключительные положения и общие рекомендации

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

Это главы 39 и 40 раздела «HTTP API & REST» моей книги «API». Второе издание книги будет содержать три новых раздела: «Паттерны API», «HTTP API и REST», «SDK и UI‑библиотеки». Если эта работа была для вас полезна, пожалуйста, оцените книгу на GitHub, Amazon или GoodReads. English version on Substack.

Читать далее
Всего голосов 5: ↑4 и ↓1+3
Комментарии0

Генерация и валидация чисел по алгоритму Луна

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров16K

Алгоритм Луна (Luhn algorithm) - это процесс вычисления контрольной цифры для числа в соответствии со стандартом ISO/IEC 7812. Процесс предназначен, в первую очередь, для выявления ошибок, вызванных с непреднамеренным искажением данных. Например, при ручном вводе номера карты или любого другого числа.

Разберём как он работает и рассмотрим инструмент для формирования номеров по алгоритму.

Читать далее
Всего голосов 13: ↑11 и ↓2+15
Комментарии32

Messaging для чайников. Утилизируем все возможности RabbitMQ на Python

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

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

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

Простых и понятных примеров на Python тоже мало, так как они заставляют вас вникать не только в особенности различных вариантов маршрутизации RabbitMQ, но и в особенности используемых библиотек. Для человека, который видит что-то pika-подобное первый раз, это может быть испытанием.

Поэтому я и решил написать эту статью: она нацелена на "чайников" - вы легко можете показать ее вашим джунам, и этого уже должно быть достаточно для начала работы с RabbitMQ.

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

Поехали
Всего голосов 13: ↑13 и ↓0+13
Комментарии9

Apache Kafka. Пишем простой producer и consumer и тестируем их

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров49K

В данной статье будет описано, как создать простой kafka producer и kafka consumer, а затем протестировать их.

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

Учимся создавать и настраивать Jenkins Jobs

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

Jenkins CI позволяет разработчикам автоматизировать создание, тестирование и развёртывание кода. Кроме того, он оттачивает возможности для обработки любой сборки или непрерывной интеграции. Jenkins Jobs фокусируется на непрерывном создании и тестировании кода, чтобы любые внесённые изменения легко интегрировались в сборку. В этой статье мы посмотрим на Jenkins в действии — разберём, как создавать и настраивать Jenkins Jobs. 

Читать далее
Всего голосов 10: ↑7 и ↓3+4
Комментарии1

Моделирование микросервисов. Часть 1

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

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

Читать далее
Всего голосов 8: ↑5 и ↓3+4
Комментарии4

Полное руководство по проектированию систем в виде схемы

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

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

Читать далее
Всего голосов 38: ↑34 и ↓4+33
Комментарии5

[HTTP API & REST] Организация HTTP API согласно принципам REST

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров8K

Это глава 37 раздела «HTTP API & REST» моей книги «API». Второе издание книги будет содержать три новых раздела: «Паттерны API», «HTTP API и REST», «SDK и UI‑библиотеки». Если эта работа была для вас полезна, пожалуйста, оцените книгу на GitHub, Amazon или GoodReads. English version on Substack.

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

Эти принципы мы должны применить к протоколу HTTP, соблюдая дух и букву стандарта: URL операции должен идентифицировать ресурс, к которому применяется действие, и быть ключом кэширования для GET и ключом идемпотентности — для PUT и DELETE; HTTP‑глаголы должны использоваться в соответствии с их семантикой; свойства операции (безопасность, кэшируемость, идемпотентность, а также симметрия GET / PUT / DELETE‑методов), заголовки запросов и ответов, статус‑коды ответов должны соответствовать спецификации.

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

Диаграммы без боли и страданий: PlantUML

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

Системный аналитик всегда и везде сталкивается с бесконечным количеством диаграмм разного вида, с нотациями (правилами), чтобы нарисовать данные диаграммы и с бесконечным количеством инструментов для их описания. Но мало кто говорит о таком инструменте, как PlantUML. 

Лично мне завесу тайны приоткрыл Альфа-Банк, здесь документация ведется рядом с кодом, и схемы логичнее описывать тоже кодом. Но это не так страшно и не так сложно (почти) как кажется. Давайте я приоткрою ящик Пандоры и сниму кармическое проклятье с  этого инструмента. 

Читать далее
Всего голосов 65: ↑64 и ↓1+74
Комментарии35

Индексы в PostgreSQL — 1

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

Предисловие


В этой серии статей речь пойдет об индексах в PostgreSQL.

Любой вопрос можно рассматривать с разных точек зрения. Мы будем говорить о том, что должно интересовать прикладного разработчика, использующего СУБД: какие индексы существуют, почему в PostgreSQL их так много разных, и как их использовать для ускорения запросов. Пожалуй, тему можно было бы раскрыть и меньшим числом слов, но мы втайне надеемся на любознательного разработчика, которому также интересны и подробности внутреннего устройства, тем более, что понимание таких подробностей позволяет не только прислушиваться к чужому мнению, но и делать собственные выводы.

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

В этой части мы поговорим про разделение сфер ответственности между общим механизмом индексирования, относящимся к ядру СУБД, и отдельными методами индексного доступа, которые в PostgreSQL можно добавлять как расширения. В следующей части мы рассмотрим интерфейс метода доступа и такие важные понятия, как классы и семейства операторов. После такого длинного, но необходимого введения мы подробно рассмотрим устройство и применение различных типов индексов: Hash, B-tree, GiST, SP-GiST, GIN и RUM, BRIN и Bloom.
Читать дальше →
Всего голосов 104: ↑103 и ↓1+102
Комментарии59

Security микросервисов с помощью Spring Cloud Gateway и TokenReley

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

Данная статья результат поиска некоего каноничного решения организации безопасности доступа к ресурсам в микросервисной архитектуре, построенной в экосистеме Spring. После прочтения десятка статей по данной тематике, к сожалению, не нашел то, что искал. Spring Security оказался одной из самых недопонятых технологий. Основная проблема у всех - изобретение своего велосипеда поверх стандартного функционала Spring Security. Зачастую, данные статьи сопровождаются комментариями никогда так не делать. И у многих, наверно, возникает вопрос, а как собственно можно делать. Ситуацию несколько прояснила официальная документация. Взяв её за основу, я хочу показать, как можно организовать безопасность микросервисов максимально простым и быстрым способом.

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

Готовим полнотекстовый поиск в Postgres. Часть 1

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

UPD. Часть 2


Эта статья — первая из небольшой серии статей о том, как оптимально настроить полнотекстовый поиск в PostgreSQL. Мне пришлось недавно решать подобную задачу на работе — и я был очень удивлен отсутствию хоть сколько-нибудь вменяемых материалов по этому поводу. Мой опыт борьбы под катом.

Читать дальше →
Всего голосов 27: ↑26 и ↓1+25
Комментарии10

Информация

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