А все знают, что Redis с версии 7 стал практически многопоточным? Многие до сих пор живут с убеждением, что это строго однопоточная система. Но правда в том, что когда мы запускаем Redis на машине с 8 ядрами, он уже может использовать больше одного ядра — если правильно настроить. 🤓
Как заставить Redis использовать несколько ядер:
1. Redis Cluster — самый официальный способ масштабирования. Данные шардируются между несколькими экземплярами Redis, каждый из которых работает на отдельном ядре. Настройка требует некоторых усилий, но это самый производительный вариант для больших нагрузок.
2. Несколько экземпляров Redis — можно запустить несколько независимых инстансов Redis на одной машине и распределить нагрузку между ними на уровне приложения. Каждый инстанс будет использовать отдельное ядро.
3. Используйте Redis 7.0+ с поддержкой многопоточности для некоторых операций. Начиная с версии 6.0, Redis добавил многопоточную обработку ввода/вывода, а в более новых версиях это только улучшилось. Активируется через настройку:
Альтернатива — Dragonfly 🐉
Если хочется сразу получить многопоточность без особых танцев — стоит обратить внимание на Dragonfly. Это полностью API-совместимая с Redis альтернатива, но многопоточная из коробки.
Ключевые особенности Dragonfly:
- Поддерживает все команды Redis, включая Lua скрипты
- Многопоточная архитектура, использующая все доступные ядра
- В некоторых сценариях показывает производительность до 25 раз выше, чем Redis
- Более эффективное использование памяти
- Более предсказуемая латентность под высокой нагрузкой.
А вы как решаете вопрос с производительностью Redis? Делитесь опытом! 💬
#redis #dragonfly #базыданных #производительность #масштабирование #разработка
Как заставить Redis использовать несколько ядер:
1. Redis Cluster — самый официальный способ масштабирования. Данные шардируются между несколькими экземплярами Redis, каждый из которых работает на отдельном ядре. Настройка требует некоторых усилий, но это самый производительный вариант для больших нагрузок.
2. Несколько экземпляров Redis — можно запустить несколько независимых инстансов Redis на одной машине и распределить нагрузку между ними на уровне приложения. Каждый инстанс будет использовать отдельное ядро.
3. Используйте Redis 7.0+ с поддержкой многопоточности для некоторых операций. Начиная с версии 6.0, Redis добавил многопоточную обработку ввода/вывода, а в более новых версиях это только улучшилось. Активируется через настройку:
io-threads 4
io-threads-do-reads yes
Альтернатива — Dragonfly 🐉
Если хочется сразу получить многопоточность без особых танцев — стоит обратить внимание на Dragonfly. Это полностью API-совместимая с Redis альтернатива, но многопоточная из коробки.
Ключевые особенности Dragonfly:
- Поддерживает все команды Redis, включая Lua скрипты
- Многопоточная архитектура, использующая все доступные ядра
- В некоторых сценариях показывает производительность до 25 раз выше, чем Redis
- Более эффективное использование памяти
- Более предсказуемая латентность под высокой нагрузкой.
А вы как решаете вопрос с производительностью Redis? Делитесь опытом! 💬
#redis #dragonfly #базыданных #производительность #масштабирование #разработка
❤1👍1
Благодаря меньшему количеству сна, я это сделал. Продолжение цикла статей, теперь на примере Golang — https://habr.com/ru/articles/888682/
Не забывайте ставить плюсы, если понравилось :)
#habr #observability #мониторинг #devops #статья #разработка #go #gloang
Не забывайте ставить плюсы, если понравилось :)
#habr #observability #мониторинг #devops #статья #разработка #go #gloang
Хабр
Как я создавал Observability для своих pet-проектов. Часть 2
В первой части мы развернули базовый стек для сбора метрик, логов и трейсов и интегрировали его с приложением на Laravel. Теперь покажу настройку Observability на примере простого Golang-приложения —...
👍3
Решил немного поэкспериментировать с современными технологиями проксирования. Долгое время использовал связку NGINX + Lua для кастомной логики, но настало время двигаться дальше.
Сейчас активно тестирую Envoy в паре с WebAssembly (WASM) и уже вижу несколько серьезных преимуществ:
- Более чистый код — кастомную логику теперь пишу на Go вместо Lua. Типизация, современные инструменты разработки и экосистема делают процесс гораздо приятнее. Писать на Lua в 2025 году — такое себе удовольствие, если честно 😅
- Горячая перезагрузка — это просто космос! Можно обновлять модули без перезапуска всего прокси. С NGINX PRO такое тоже возможно, но с Envoy это работает намного элегантнее.
- Производительность — по тестам выходит примерно на 15-20% лучшие результаты по throughput.
- Тестирование — инфраструктура для тестирования WASM-модулей гораздо более зрелая. Теперь могу нормально покрывать тестами всю проксирующую логику.
Конечно, есть и свои подводные камни. Документация по Envoy далеко не такая дружелюбная как у NGINX, а экосистема WASM-плагинов еще не такая богатая. Приходится немного больше писать с нуля.
В целом, первые впечатления очень позитивные. Думаю со временем полностью мигрировать на эту связку.
А вы пробовали Envoy? Делитесь опытом в комментариях!
#envoy #webassembly #wasm #nginx #rust #golang #проксирование #микросервисы #оптимизация
Сейчас активно тестирую Envoy в паре с WebAssembly (WASM) и уже вижу несколько серьезных преимуществ:
- Более чистый код — кастомную логику теперь пишу на Go вместо Lua. Типизация, современные инструменты разработки и экосистема делают процесс гораздо приятнее. Писать на Lua в 2025 году — такое себе удовольствие, если честно 😅
- Горячая перезагрузка — это просто космос! Можно обновлять модули без перезапуска всего прокси. С NGINX PRO такое тоже возможно, но с Envoy это работает намного элегантнее.
- Производительность — по тестам выходит примерно на 15-20% лучшие результаты по throughput.
- Тестирование — инфраструктура для тестирования WASM-модулей гораздо более зрелая. Теперь могу нормально покрывать тестами всю проксирующую логику.
Конечно, есть и свои подводные камни. Документация по Envoy далеко не такая дружелюбная как у NGINX, а экосистема WASM-плагинов еще не такая богатая. Приходится немного больше писать с нуля.
В целом, первые впечатления очень позитивные. Думаю со временем полностью мигрировать на эту связку.
А вы пробовали Envoy? Делитесь опытом в комментариях!
#envoy #webassembly #wasm #nginx #rust #golang #проксирование #микросервисы #оптимизация
Кто использует Copilot постоянно в работе? Как вам? Что нравится, а что нет?
Я уже год использую его для своих личных проектов. По понятным причинам для основной работы использовать не могу. Но за этот год наблюдаю явный прогресс!
Если год назад это была тупая шайтан-машина, которая фактически больше отвлекала, то сейчас автодополнение прям совсем неплохое, чаще помогает чем мешает. Особенно радует, когда правильно угадывает паттерны, которые я применяю в конкретном проекте.
При этом для меня Copilot — это именно продвинутое автодополнение, потому что без контекста история про то, что он "пишет код за тебя" — пока несбыточная мечта. Он может хорошо подсказывать следующую строчку или даже небольшую функцию, но полноценное решение без твоего участия не напишет.
Что реально нравится:
- Помогает с шаблонным кодом
- Угадывает имена переменных и функций по контексту. А то и прекрасно предлагае их
- Знает API многих библиотек, не нужно лезть в документацию
- Предлагает порой неочевидные, но элегантные решения
- Позволяет генерировать тесты, моки, и тестовые данные
- Помогает изучать новые языки
А что вы думаете о Copilot? Экономит ли он ваше время или только мешает? Поделитесь опытом! 💬
#github #copilot #ai #разработка #программирование #код
Я уже год использую его для своих личных проектов. По понятным причинам для основной работы использовать не могу. Но за этот год наблюдаю явный прогресс!
Если год назад это была тупая шайтан-машина, которая фактически больше отвлекала, то сейчас автодополнение прям совсем неплохое, чаще помогает чем мешает. Особенно радует, когда правильно угадывает паттерны, которые я применяю в конкретном проекте.
При этом для меня Copilot — это именно продвинутое автодополнение, потому что без контекста история про то, что он "пишет код за тебя" — пока несбыточная мечта. Он может хорошо подсказывать следующую строчку или даже небольшую функцию, но полноценное решение без твоего участия не напишет.
Что реально нравится:
- Помогает с шаблонным кодом
- Угадывает имена переменных и функций по контексту. А то и прекрасно предлагае их
- Знает API многих библиотек, не нужно лезть в документацию
- Предлагает порой неочевидные, но элегантные решения
- Позволяет генерировать тесты, моки, и тестовые данные
- Помогает изучать новые языки
А что вы думаете о Copilot? Экономит ли он ваше время или только мешает? Поделитесь опытом! 💬
#github #copilot #ai #разработка #программирование #код
Поделюсь новостями.
Из грустного - не взяли доклад на Team Lead Conf. Итого у меня уже минус два доклада в этом году - Тим Лид и DevOps.
Из хорошего - взяли доклад на Стачку.
Из тяжелого - у меня будет жесткий март и апрель. В марте надо готовиться, в апреле у меня три недели докладов, прям подряд каждый выходные - Ярославль, Ульяновск, Казань.
#выступления
Из грустного - не взяли доклад на Team Lead Conf. Итого у меня уже минус два доклада в этом году - Тим Лид и DevOps.
Из хорошего - взяли доклад на Стачку.
Из тяжелого - у меня будет жесткий март и апрель. В марте надо готовиться, в апреле у меня три недели докладов, прям подряд каждый выходные - Ярославль, Ульяновск, Казань.
#выступления
👏3❤1👍1
Всем привет! Я думаю, все знают, что прохождение интервью и работа в компании – это две большие разницы.
Для разработчиков и технических менеджеров есть этап, который вызывает у меня одновременно огромное удовольствие и сильный стресс — System Design.
Суть его в том, чтобы за час уточнить требования, спроектировать рабочую систему и углубиться в детали.
Даже если вы отлично умеете проектировать, в формате интервью это адская сложность. Всего 60 минут, за которые надо обсудить всё:
- Уточнение требований
- Оценку нагрузки
- OSI-уровни
- Шардирование, репликацию
- Метрики
- и многое другое
Нужно не просто предложить систему, но и защитить её перед интервьюером. Самое интересное – правильного ответа нет, только аргументированные решения.
---
Как к этому подготовиться?
Лидеры в России по System Design – Авито. У них сильнейший подход, которому они ещё и обучают.
Рекомендую посмотреть видео: https://youtu.be/eRUHvOJsGwk?si=DQlX7iCouI94BAaz
Если проектируете backend, и интервьюер сказал, что фронтенд не важен, после подсчетов можно сразу переходить к архитектуре в два этапа:
1. Подходы – сначала объясняем, почему делаем так, а не иначе. Например, очередь или синхронные запросы? SQL или NoSQL? API Gateway или прокси?
2. Решение – проверяем, бьётся ли система с цифрами, объясняем компромиссы, выбираем финальный вариант.
В конце ещё раз проверяем, что система выдерживает нагрузку, и объясняем, какие метрики будем отслеживать.
---
Что почитать и где тренироваться?
📖 Книга: *Алекс Сюй – System Design. Подготовка к сложному интервью*
Идеально – тренироваться на реальных задачах.
Берите задания, решайте, сравнивайте с чужими решениями.
Лучший вариант – найти ментора, который будет вас гонять.
Самое крутое в этом типе собеседований?
Он реально помогает в жизни: вы начнёте лучше понимать компромиссы в разработке и будете осознанно строить архитектуру.
А вы проходили такое собеседование? Как вам? Что оказалось сложнее всего?
#SystemDesign #Backend #Frontend #Архитектура #DevOps #Разработка #ITКарьерa
Для разработчиков и технических менеджеров есть этап, который вызывает у меня одновременно огромное удовольствие и сильный стресс — System Design.
Суть его в том, чтобы за час уточнить требования, спроектировать рабочую систему и углубиться в детали.
Даже если вы отлично умеете проектировать, в формате интервью это адская сложность. Всего 60 минут, за которые надо обсудить всё:
- Уточнение требований
- Оценку нагрузки
- OSI-уровни
- Шардирование, репликацию
- Метрики
- и многое другое
Нужно не просто предложить систему, но и защитить её перед интервьюером. Самое интересное – правильного ответа нет, только аргументированные решения.
---
Как к этому подготовиться?
Лидеры в России по System Design – Авито. У них сильнейший подход, которому они ещё и обучают.
Рекомендую посмотреть видео: https://youtu.be/eRUHvOJsGwk?si=DQlX7iCouI94BAaz
Если проектируете backend, и интервьюер сказал, что фронтенд не важен, после подсчетов можно сразу переходить к архитектуре в два этапа:
1. Подходы – сначала объясняем, почему делаем так, а не иначе. Например, очередь или синхронные запросы? SQL или NoSQL? API Gateway или прокси?
2. Решение – проверяем, бьётся ли система с цифрами, объясняем компромиссы, выбираем финальный вариант.
В конце ещё раз проверяем, что система выдерживает нагрузку, и объясняем, какие метрики будем отслеживать.
---
Что почитать и где тренироваться?
📖 Книга: *Алекс Сюй – System Design. Подготовка к сложному интервью*
Идеально – тренироваться на реальных задачах.
Берите задания, решайте, сравнивайте с чужими решениями.
Лучший вариант – найти ментора, который будет вас гонять.
Самое крутое в этом типе собеседований?
Он реально помогает в жизни: вы начнёте лучше понимать компромиссы в разработке и будете осознанно строить архитектуру.
А вы проходили такое собеседование? Как вам? Что оказалось сложнее всего?
#SystemDesign #Backend #Frontend #Архитектура #DevOps #Разработка #ITКарьерa
❤2
Всех с наступлением выходных. Надеюсь вместо комментариев используете TODO: , по которому можно делать списки.
#пятничныйюмор
#пятничныйюмор
😱5🌚5👍1
В Golang моя самая любимая возможность — это работать в монорепозитории, использовать общие пакеты, при этом собирать разные сервисы, в которых будет ровно тот функционал, который ты определил для сервиса. Это прям божественно!
Вот например один из проектов, который надеюсь когда-нибудь попадет в прод:
- Общие компоненты лежат в internal/shared
- API-контракты в yaml-файлах конкретного домена, которые можно переиспользовать
- Транспортный слой отделен от бизнес-логики
- Конфигурация для сервиса - в домене, при этом наследуется от общей конфигурации
А ключевое — нет дублирования кода между микросервисами. Хочешь поделиться логикой? Просто создаешь пакет и импортируешь его где нужно.
При этом Go делает такой подход невероятно простым — не нужны никакие хитрые пакетные менеджеры, все из коробки. Все локально, все под рукой, а система модулей Go сама разруливает зависимости.
Сборка тоже приятная — каждая папка cmd/* становится отдельным сервисом со своей точкой входа. Хочешь новый сервис? Просто добавь еще одну директорию в cmd.
Микросервисы без микроболи — вот что такое монорепозиторий на Go!
А вы используете монорепозитории? Поделитесь опытом в комментариях!
#golang #монорепо #микросервисы #разработка #архитектура
Вот например один из проектов, который надеюсь когда-нибудь попадет в прод:
- Общие компоненты лежат в internal/shared
- API-контракты в yaml-файлах конкретного домена, которые можно переиспользовать
- Транспортный слой отделен от бизнес-логики
- Конфигурация для сервиса - в домене, при этом наследуется от общей конфигурации
А ключевое — нет дублирования кода между микросервисами. Хочешь поделиться логикой? Просто создаешь пакет и импортируешь его где нужно.
При этом Go делает такой подход невероятно простым — не нужны никакие хитрые пакетные менеджеры, все из коробки. Все локально, все под рукой, а система модулей Go сама разруливает зависимости.
Сборка тоже приятная — каждая папка cmd/* становится отдельным сервисом со своей точкой входа. Хочешь новый сервис? Просто добавь еще одну директорию в cmd.
Микросервисы без микроболи — вот что такое монорепозиторий на Go!
А вы используете монорепозитории? Поделитесь опытом в комментариях!
#golang #монорепо #микросервисы #разработка #архитектура
👍8❤1🤔1
⚠️ Обнаружен вредоносный код в GitHub Actions
Исследователи из StepSecurity обнаружили компрометацию в GitHub Actions проекта обработчика changed‑files. Это решение позволяет автоматически запускать сценарии при различных событиях, таких как push-запросы и pull-запросы.
Он используется в более чем 23 тыс. репозиториев, применяющих GitHub Actions в инфраструктуре непрерывной интеграции, для отслеживания изменения файлов и каталогов. При выполнении обработчика вредоносная вставка собирала присутствующие в сборочном окружении ключи доступа и прочие конфиденциальные данные.
Разработчикам, пользовавшимся changed-files, требуется незамедлительно провести аудит своей инфраструктуры и проверить публичные логи систем интеграции на базе GitHub Actions на предмет утечки конфиденциальных данных.
Источник: https://habr.com/ru/news/891256/
Исследователи из StepSecurity обнаружили компрометацию в GitHub Actions проекта обработчика changed‑files. Это решение позволяет автоматически запускать сценарии при различных событиях, таких как push-запросы и pull-запросы.
Он используется в более чем 23 тыс. репозиториев, применяющих GitHub Actions в инфраструктуре непрерывной интеграции, для отслеживания изменения файлов и каталогов. При выполнении обработчика вредоносная вставка собирала присутствующие в сборочном окружении ключи доступа и прочие конфиденциальные данные.
Разработчикам, пользовавшимся changed-files, требуется незамедлительно провести аудит своей инфраструктуры и проверить публичные логи систем интеграции на базе GitHub Actions на предмет утечки конфиденциальных данных.
Источник: https://habr.com/ru/news/891256/
Хабр
Выявлена компрометация обработчика changed-files в GitHub Actions, используемого в более 23 тыс. репозиториев
Исследователи по ИБ из StepSecurity обнаружили компрометацию в GitHub Actions проекта обработчика changed‑files . Это открытое решение, позволяющее автоматически запускать сценарии сборки и...
😱1
AK-40.png
13.3 KB
Неделю назад вышла Apache Kafka 4.0, но только сейчас дошли руки разобраться что там нового. И это, надо сказать, весьма значимый релиз!
Самое главное — с версии 3 можно было работать без ZooKeeper в экспериментальном режиме, но теперь это стало поведением по умолчанию. Технология KRaft (Kafka Raft) полностью заменила ZooKeeper, что серьезно упрощает развертывание и управление. Больше не нужно поддерживать отдельный ZooKeeper-кластер, что снижает операционные издержки и улучшает масштабируемость. Прощай, ZooKeeper, ты служил верой и правдой! 👋
Что еще интересного:
Новый протокол групп потребителей (KIP-848)
Наконец-то решена проблема с ребалансировкой! Если раньше при изменении числа потребителей происходила "stop-the-world" ребалансировка, приводящая к задержкам, то теперь процесс происходит гораздо плавнее. Особенно полезно для крупных деплойментов — больше никаких долгих простоев при масштабировании.
Очереди для Kafka (KIP-932, ранний доступ)
Появилась концепция "share group" для организации кооперативного потребления данных из топиков. По сути, это делает возможной реализацию классических очередей, где каждое сообщение обрабатывается только одним потребителем. Теперь Kafka может легко заменить RabbitMQ и другие традиционные брокеры сообщений.
Eligible Leader Replicas (превью)
Введен поднабор допустимых реплик (ELR), которые гарантированно содержат все данные и могут безопасно становиться лидерами без потери данных.
Pre-Vote механизм
Узлы теперь проверяют свою пригодность для лидерства перед запуском выборов, что уменьшает ненужные смены лидера и сокращает перебои при временных сетевых проблемах.
Повышение требований к Java
Kafka Clients и Streams теперь требуют Java 11, а брокеры, Connect и инструменты — Java 17.
Переход на Log4j2
Логирование переведено на Log4j2, что дает больше возможностей и лучшую производительность.
Не забудьте изучить гайд по переходу
А вы уже планируете переход на Kafka 4.0? Делитесь опытом в комментариях!
#kafka #apache #bigdata #streaming #devops #dataengineering #dev
Самое главное — с версии 3 можно было работать без ZooKeeper в экспериментальном режиме, но теперь это стало поведением по умолчанию. Технология KRaft (Kafka Raft) полностью заменила ZooKeeper, что серьезно упрощает развертывание и управление. Больше не нужно поддерживать отдельный ZooKeeper-кластер, что снижает операционные издержки и улучшает масштабируемость. Прощай, ZooKeeper, ты служил верой и правдой! 👋
Что еще интересного:
Новый протокол групп потребителей (KIP-848)
Наконец-то решена проблема с ребалансировкой! Если раньше при изменении числа потребителей происходила "stop-the-world" ребалансировка, приводящая к задержкам, то теперь процесс происходит гораздо плавнее. Особенно полезно для крупных деплойментов — больше никаких долгих простоев при масштабировании.
Очереди для Kafka (KIP-932, ранний доступ)
Появилась концепция "share group" для организации кооперативного потребления данных из топиков. По сути, это делает возможной реализацию классических очередей, где каждое сообщение обрабатывается только одним потребителем. Теперь Kafka может легко заменить RabbitMQ и другие традиционные брокеры сообщений.
Eligible Leader Replicas (превью)
Введен поднабор допустимых реплик (ELR), которые гарантированно содержат все данные и могут безопасно становиться лидерами без потери данных.
Pre-Vote механизм
Узлы теперь проверяют свою пригодность для лидерства перед запуском выборов, что уменьшает ненужные смены лидера и сокращает перебои при временных сетевых проблемах.
Повышение требований к Java
Kafka Clients и Streams теперь требуют Java 11, а брокеры, Connect и инструменты — Java 17.
Переход на Log4j2
Логирование переведено на Log4j2, что дает больше возможностей и лучшую производительность.
Не забудьте изучить гайд по переходу
А вы уже планируете переход на Kafka 4.0? Делитесь опытом в комментариях!
#kafka #apache #bigdata #streaming #devops #dataengineering #dev
👍5🔥1
Моему каналу буквально через неделю будет два года, в нем уже 311 публикаций. Последние три месяца мне почти всегда удается писать минимум по 5 постов в неделю. А самое главное, я вижу ваши реакции, и это дает мне стимул писать больше! 💪
Я стараюсь писать то, что будет интересно именно вам, и вы можете помочь мне сделать мои посты еще лучше. Набросайте в комментариях честно:
- Чего вам не хватает в канале?
- Какие темы хотелось бы видеть чаще?
- Какие посты вам запомнились больше всего?
- Какие форматы контента вам нравятся?
Буду благодарен за любую обратную связь — ваше мнение действительно важно для развития канала!
#обратнаясвязь #годовщина #блогер_я
Я стараюсь писать то, что будет интересно именно вам, и вы можете помочь мне сделать мои посты еще лучше. Набросайте в комментариях честно:
- Чего вам не хватает в канале?
- Какие темы хотелось бы видеть чаще?
- Какие посты вам запомнились больше всего?
- Какие форматы контента вам нравятся?
Буду благодарен за любую обратную связь — ваше мнение действительно важно для развития канала!
#обратнаясвязь #годовщина #блогер_я
👍9❤🔥3🔥3❤1
После бурного обсуждения в опросе о будущем развитии канала я понял, что буду продолжать писать так, как делал это раньше, стремясь делиться исключительно полезным и практичным контентом. 📝📈✨
😁9👍5❤🔥4🔥3❤2🤣1🤝1
Второй за сегодня пост про нейросети. Оказывается ChatGPT не просто выпустил новый движок для генерации изображений, а лучший. Он на столько хорош что теперь в сети самый популярный запрос "Нарисуй это изображение в стиле студии Ghibli". Теперь я однозначно думаю над новой аватаркой для канала :)
P.S. Вторая фотка как говорится без фильтров, ночью на своей рабочем месте :)
#ai #chathpt #
P.S. Вторая фотка как говорится без фильтров, ночью на своей рабочем месте :)
#ai #chathpt #
🔥10👍6