Как стать автором
Поиск
Написать публикацию
Обновить
49.64

Распределённые системы *

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

Сначала показывать
Порог рейтинга
Уровень сложности

Быстро — не всегда хорошо: рейтлимиты в мультикластерном окружении

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

Всем привет! Кажется, настало время поговорить о том, как внедрялись ограничители частоты запросов на бэкенд в Wildberries. В статье — о том, с какими трудностями мы столкнулись на этом благородном пути и как прошли через четыре схемы реализации — от простейшей in-memory до собственных gRPC-сервисов. Не обойдём вниманием и парочку лайфхаков ;) Например, с помощью рейтлимитов мы неожиданно решили проблему плавного отключения старых версий API.

Меня зовут Дмитрий Виноградов, и я лид команды публичного API Wildberries. До этого почти 18 лет занимался промышленной автоматизацией в Schneider Electric — от программирования контроллеров и embedded-устройств до собственных SCADA-систем. Хочешь не хочешь, а научишься делать красивые интерфейсы :)

Читать далее

Новости

Оценка подхода lock-free списков

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

Привет, Хабр. Меня зовут Роман Ескин, я один из C разработчиков проекта Greengage DB. В этой статье я расскажу, как мы реализовали и протестировали lock-free подход в рамках масштабной работы по внедрению функции удаления брошенных файлов. Приглашаю вас заглянуть во внутреннюю кухню работы нашей команды при оценке этой функциональности.

Введение

Позвольте начать с краткой исторической справки: Greengage DB был запущен в 2024 году как open-source форк Greenplum — Massively Parallel Processing (MPP) аналитической системы управления базами данных, основанной на PostgreSQL. Мы начали этот проект, чтобы поддержать open-source сообщество Greenplum, который неожиданно стал проприетарным продуктом в мае 2024 года. Мы гарантируем дальнейшее развитие Greengage DB, следуя принципам открытости и прозрачности.

Так как Greengage DB основан на PostgreSQL, он унаследовал некоторые его известные особенности и проблемы. Одна из таких проблем, особенно актуальная в распределенных средах — это проблема "брошенных файлов" (orphaned files).

Эта проблема возникает, когда таблица создается и данные загружаются в рамках активной транзакции. Если происходит критический сбой до того, как транзакция будет закоммичена или отменена (например, внезапное отключение питания или неожиданное завершение работы узла базы данных), система проходит процесс восстановления после падения (crash recovery). При этом логическая таблица откатится, но физические файлы данных, связанные с этой незакоммиченной таблицей, могут остаться в файловой системе. Со временем такие брошенные файлы могут накапливаться, занимая место и приводя к ненужному расходу ресурсов. В настоящее время их удаление происходит вручную.

Недавно мы представили новый функционал, который позволяет автоматически удалять такие брошенные файлы. Полная информация об этой возможности доступна в статье Удаление брошенных файлов в Greengage DB.

Читать далее

LuaJIT: что делает его таким производительным и почему вам стоит его попробовать

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

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

Меня зовут Максим Кокряшкин, я занимаюсь разработкой языковых рантаймов в Tarantool. Это решение класса middleware, разрабатываемое VK Tech, сочетающее в себе базу данных in-memory и application-сервер. Как раз таки наш application-сервер, который позволяет писать логику и хранимые процедуры, работает на LuaJIT

Читать далее

Apache Kafka в гарантиях или как надежно доставить сообщение

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

Apache Kafka — это основа современных распределенных систем, обрабатывающий триллионы событий ежедневно. Но что происходит, если сообщение потерялось, пришло дважды или нарушилась логика бизнес‑процесса? Гарантии доставки в Kafka — это страховка от хаоса в условиях высокой нагрузки и сбоев.

В этой статье мы разберем три вида гарантий доставки сообщений на примерах.

Читать далее

Децентрализованные системы радиосвязи

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

Картинка rawpixel.com, Freepik

В прошлой статье мы затронули очень интересную тему — распределённые хостинги/хранилища данных.

Было бы странно, если бы идея распределённых систем ограничивалась только хранилищами ;-)

Поэтому сегодня мы поговорим ещё об одном интересном направлении, о котором редко говорят — распределённых сетях радиосвязи. Возможно ли это?

Читать далее

Как я зарегистрировал CVE и разозлил вендора

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

Статьи про багхантинг часто говорят о пользе для резюме, багбаунти, повышении безопасности продуктов, доступе на закрытые мероприятия. Информация о проблемах во взаимодействии с разработчиками в процессе багхантинга упоминается лишь изредка (и часто - вскользь). Но, это тоже важная часть багхантинга: начинающим бахгантерам полезно знать, с какой реакцией разработчиков они могут столкнуться. Всё-таки, это определённая психологическая нагрузка. Я хочу показать на личном примере прекрасную иллюстрацию того, насколько различны в оценке проблемы разработчики и багхантер. Случай уникален тем, что мне удалось задокументировать многие тезисы разработчиков в их первоначальном виде (в т.ч. попытку отозвать CVE). И подсветить важный момент: уже сам факт оформления CVE по проблеме, которую вендор не признаёт, может вызвать раздражение у вендора.

В статье покажу этапы, очень похожие на стадии принятия Кюблер-Росс (отрицание, гнев, торг, депрессия и принятие), которые я наблюдал у разработчиков в процессе нашего с ними общения. Мы пройдём путь от отрицания наличия проблемы, через благодарность за информирование (о проблеме) до негодования в адрес MITRE (и мой адрес, не стесняясь выражений).

Дисклеймер: в статье приведены скриншоты из моих личных переписок с разработчиками. Публикация таких переписок одной из сторон не требует согласия другой (согласно законодательства РФ).

Читать далее

Тонкие настройки отправки сообщения в RabbitMQ

Время на прочтение9 мин
Количество просмотров991

Сообщения в RabbitMQ — это основные единицы данных, которые передаются между продюсерами и потребителями. Понимание их структуры и возможностей позволяет эффективно управлять потоком данных в распределенных системах. В этой статье мы разберем анатомию сообщений, обязательные и опциональные компоненты, а также реализуем пример отправки объекта с настройкой свойств

Читать далее

Обменники в RabbitMQ, которые не продают валюту

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

Очень часто в проектах необходимо использовать передачу сообщений между компонентами распределенной системы по определенным правилам. И перед разработчиком встает вопрос — какой инструмент наиболее эффективно можно использовать для этого? И сегодня мы рассмотрим брокер сообщений, который позволяет это делать «прямо из коробки» и это будет RabbitMQ.

RabbitMQ — это популярный брокер сообщений, который реализует стандарт AMQP и который позволяет эффективно управлять коммуникацией между сервисами через очереди. И в этой статье мы разберем основные типы обменников (exchange): Direct, Topic, Headers и Fanout, которые напрямую участвуют в процессе маршрутизации, а также приведем примеры их настройки в Spring Boot.

Читать далее

Как использовать topic exchange в RabbitMQ для роутинга по шаблонам

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

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

Сегодня разберём один из самых гибких инструментов в RabbitMQ — topic exchange. Именно он позволяет не просто отправить сообщение «куда‑то», а превратить очередь в маршрутизатор уровня BGP, но только внутри твоей системы.

Читать далее

AGI: от идеи к реализации, часть 2: от линейного преобразования к живому мышлению

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

Предисловие: вот и прошел этап критики и самоопределения после публикации моей первой статьи. Теперь это уже вторая. Хотел бы сказать что первая статья не была научной публикацией и сведением графиков по GPT. Это было исследованием экспериментом таким: если человек не может изобрести AGI, то почему бы не попросить об этом LLM? Вот это как раз сейчас и делается в данной работе. Результат смотрите сами. И да это не очередной RAG как приводилось в комментариях, это становится новой парадигмой.

🧠 От Линейного Преобразования к Живому Мышлению: Критика LLM и Архитектура AGI как Субъекта

Автор: [Твоё имя или псевдоним]
Версия: 1.0 | Июль 2025

Читать далее

Книга: «Распределенные системы. Паттерны и парадигмы для масштабируемых и надежных систем на основе Kubernetes. 2-е изд»

Время на прочтение24 мин
Количество просмотров6K
Привет, Хаброжители!

Издательство Sprint book представляет второе издание книги Брендана Бёрнса «Распределенные системы. Паттерны и парадигмы для масштабируемых и надежных систем на основе Kubernetes». Фундаментальное руководство превращает сложное искусство создания распределенных систем в понятную науку, предлагая проверенные решения для современных облачных архитектур.

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

Паттерны и компоненты, разбираемые в книге, помогут и опытному разработчику распределенных систем, и абсолютному новичку в этой области.
Читать дальше →

Эволюция платформы Russ Online: от монолитов к микросервисам и Kubernetes

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

Привет, Хабр! С вами команда разработки платформы Russ Online Группы компаний Russ (входит в объединенную компанию Wildberries & Russ). Мы хотим поделиться историей о том, как от монолитной системы мы перешли к микросервисной архитектуре и облачным решениям на базе Kubernetes и S3. Эта трансформация создала фундамент для дальнейшего развития платформы и внедрения новых сервисов.

Читать далее

Переоценка API-стратегий: почему компании мигрируют с GraphQL на REST

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

В быстро меняющемся мире веб-разработки постоянно появляются новые технологии и подходы к созданию системы обмена данными между приложением или сервисом. Одной из таких технологий, позволяющей запрашивать только необходимые данные, является GraphQL. Меня зовут Дмитрий и я python-разработчик. В этом материале я дам сравнительный обзор на REST и GraphQL.

Один из наиболее популярных примеров использования GraphQL — это применение в социальных сетях, где множество пользователей связаны между собой определёнными отношениями. К GraphQL мы прибегаем, когда нам требуется избирательно получить много данных о них. Такая организация пользователей имеет сетевую модель и представляется в виде графа, отсюда и связь с названием GraphQL (Graph — граф, QL — язык запросов).

Итак, почему компании, однажды выбравшие GraphQL, решают изменить свой курс и вернуться к стандартному способу реализации систем? Ответ на этот вопрос лежит на пересечении технических возможностей, бизнес-потребностей и экономических соображений. Давайте разберёмся в этом подробнее.

Читать далее

Ближайшие события

Базы данных. Как выбрать идеальное решение? Полный гид по SQL, NoSQL и не только

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

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

Меня зовут Кирилл, и на протяжении последних двух лет я мечтал научиться проходить System Design интервью. Но только недавно взялся за дело всерьёз.

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

Читать далее

Kafka, RabbitMQ, NATS в 2025

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

Всем привет, 

Команда devhands.io сделала с Владимиром Перепелицей интервью, посвященное сравнению наиболее популярных решений в области очередей и брокеров сообщений — Kafka, RabbitMQ, NATS.

Владимир — эксперт по большим проектам, очередям и Tarantool, Solution Architect в Exness, создатель S3 в VK Cloud, регулярный спикер и член ПК конференций Highload. А мы, R&D-центр devhands.io, разрабатываем образовательные программы по хайлоаду, перформансу, архитектуре, базам данных и другим направлениям.

Под катом – расшифровка интервью.

Читать далее

AI-диалоги под контролем: как структурный подход улучшает архитектуру, аналитику и разработку

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

Как структурировать диалоги с LLM: шаблоны, интенты, статусы и архитектура ai-dialog-system, превращающая хаос в управляемую систему. Подход подходит для аналитики, CI и командной разработки.

Читать далее

Каким мне видится Kubernetes 2.0

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

Примерно в 2012-2013 году в сообществе сисадминов стали много говорить о технологии под названием «Borg». Складывалось впечатление, что это какая-то система управления контейнерами, основанная на Linux и применяемая в Google — с её помощью они эксплуатируют свои внутренние ресурсы. Терминология по этой системе немного озадачивала; внутри кластеров, состоящих из «ячеек» (cells), в ней находились какие-то «борглеты», но суть уже на данном этапе начинала ускользать. В системе существовали концепции «сервисов» (services) и «заданий» (jobs), так, что приложения могли при помощи сервисов откликаться на пользовательские запросы, после чего система собирала задания в пакеты, и эти пакетные задания уже выполнялись достаточно долго.

Затем 7-го июня 2014 года состоялся первый коммит в Kubernetes. Это греческое слово означает «кормчий», и в течение первых трёх лет существования этой технологии решительно никто не понимал, как его правильно произносить. Поэтому пришлось сдаться и позволить простым смертным обозначать его как k8s.

Читать далее

Удаление брошенных файлов в Greengage DB

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

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

Читать далее

System Design для начинающих: всё, что вам нужно. Часть 6

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

Вам не нужно изучать какую‑либо теорию, кроме этой статьи, чтобы начать собеседоваться. После прочтения смело приступайте к решению типовых System Design задач.

Изучая System Design, вы часто видите только теоретические материалы. В этой статье я постарался показать в том числе практическую реализацию многих вещей, чтобы вы не просто готовились к собеседованиям, но и знали, как эти вещи используются в реальном мире.

Читать далее

Kafka через NAT

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

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

Читать далее
1
23 ...