Обновить
32K+

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

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

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

С системой, которую нельзя менять, не интегрируются. Её можно только зеркалить

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

Ты не владеешь источником — значит, не владеешь временем. Как поллер по updated_at молча теряет строки, почему exactly-once это свойство твоей записи, и почему сверка важнее потока.

Читать далее

Новости

Резервирование кластера Greengage DB. Часть 3

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

В данной статье рассмотрим сложные сценарии восстановления кластера Greengage DB, в которых кластер восстанавливается на новом окружении.

Читать далее

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

Время на прочтение4 мин
Охват и читатели6.1K

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

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

Читать далее

Компактация лога в Apache Kafka повреждала данные. Вот как мы это исправили

Время на прочтение11 мин
Охват и читатели7.5K

Компактация лога в Kafka может привести к ситуации, когда разные реплики одного топика начинают хранить разную версию данных — и расхождение сохраняется даже после восстановления брокера. Проблема возникает из-за гонки между компактацией и репликацией и затрагивает Kafka 3.9–4.2. Разбираемся, как воспроизвести баг и почему координированная компактация решает проблему.

Изучить решение

Что происходит после нажатия Play. Разбираем архитектуру Spotify

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

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

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

Где физически лежит музыка? Почему один и тот же трек существует в нескольких версиях? Кто отправляет аудио пользователю? Почему Spotify не отдаёт весь файл через свой backend? Как музыка успевает загрузиться раньше, чем мы до неё дослушали? И откуда приложение знает, где мы остановились на другом устройстве?

Давайте разберёмся.

Читать далее

429 — это не про скорость. Это про бюджет, которого ты не видишь

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

Рейт-лимит — это не ограничение скорости. Это бюджет, и тратишь его не ты один. Разбор на Telegram Bot API, Redis и одном наивном планировщике 2023 года.

Читать далее

Kafka гарантирует порядок? Разбираем 3 инцидента с Outbox

Уровень сложностиСредний
Время на прочтение22 мин
Охват и читатели5.2K

Один ключ на все события заказа — и кажется, что порядок гарантирован. А потом клиенту приходит «Ваш заказ собран» раньше, чем «Оплата получена», витрина откатывает статус назад, а после планового перезапуска одно событие пропадает навсегда.

В статье разбираем три таких инцидента из одной системы на transactional outbox, PostgreSQL и Kafka 4.2. Попробуйте сами определить, где сломалось: в источнике, в relay, в продюсере или у потребителя.

Читать далее

Warpnet — Twitter без сервера

Уровень сложностиСложный
Время на прочтение38 мин
Охват и читатели5.6K

Warpnet — это полностью децентрализованная, одноранговая социальная сеть, вдохновлённая Twitter, но построенная так, что у неё нет центральных серверов. Каждый пользователь запускает свой собственный узел (node), и именно эти узлы вместе образуют сеть.

Читать далее

Как AVM переживает обновления и рост инфраструктуры

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели6.4K

Мы продолжаем рассказывать, как создавали AVM собственную платформу управления виртуальными машинами Aéza. В этой части разберём, как обновляем систему без остановки клиентских VM, выполняем живую миграцию, переживаем сбои и масштабируем инфраструктуру а также расскажем, с какими проблемами столкнулись по пути.

Читать далее

Понятно о распределённых системах. Анонс книги Доминика Торнова

Время на прочтение7 мин
Охват и читатели8K

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

Мы считаем, что в настоящее время просто незаменимы книги, рассматривающие такие темы, которые пока не автоматизируются средствами искусственного интеллекта. Одна из таких предметных областей — проектирование распределённых систем. В нашем ассортименте давно закрепилась добротная книга Иэна Гортона «Масштабирование систем. Основы и проектирование распределённых архитектур», которую многие читатели сравнивают с «кабанчиком на минималках». Теперь же мы уже в начале октября ждём из типографии переведённую нами книгу «Think Distributed Systems», оригинал которой вышел в издательстве «Manning». Наш уважаемый автор Владислав Светлаков @svetlakoff, написавший книгу «Архитектура бэкенда. API для надежных корпоративных приложений», в своё время охарактеризовал книгу Торнова так:

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

Ниже мы перевели для вас обзор английской (аудио)версии книги «Think Distributed Systems» (вышла на русском языке в нашем издательстве под названием "Понятно о распределенных системах"), по которому предлагаем вам составить первое впечатление о ней.

Читать далее

Не начинать с LangChain: как спроектировать корпоративную GenAI платформу до реализации

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели7.3K

Корпоративную GenAI платформу легко начать с выбора LLM, LangChain, vector database или Kubernetes. Но до этого полезнее ответить на другие вопросы: кто имеет доступ к данным, где проходит security boundary, какие компоненты действительно нужно разделять и что должно войти в первую версию.

В статье разберу, как спроектировать корпоративную GenAI платформу до начала реализации: требования и NFR, C4, Modular Monolith, разделение.NET и Python, PostgreSQL + pgvector, RabbitMQ, LLM Gateway, ADR и границы MVP.

Читать далее

Можно ли встроить ИИ в торговый цикл на 300 мс? Разбираю Jev

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

Модель выпустила TypeSafe AI. Её основатель - Диого Алмейда, один из исследователей ChatGPT и InstructGPT. Jev не генерирует свободный текст и не объясняет ход рассуждений. Вместо этого она отвечает на заранее сформулированные вопросы в заданном формате: выбирает вариант, возвращает число или выставляет оценку.

По данным TypeSafe, цена составляет $0,042 за миллион входных токенов, а выходные токены не тарифицируются.

В качестве примера я привожу работающего бота для маркет-мейкинга на Monad. Он читает стакан MON/USDC на Kuru, запрашивает решение у Jev на каждом блоке примерно раз в 300 мс и выставляет лимитный ордер на один тик ближе к рыночной цене. По данным репозитория, за три дня он набрал более тысячи звёзд, а некоторые решения приходили за 81 мс.

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

Читать далее

Kubernetes просто, часть 3: зачем нужен Service и как трафик доходит до конкретного Pod

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

Pod'ы в Kubernetes появляются, исчезают и меняют IP. Разбираемся, как Service даёт приложению стабильную точку доступа, как работает ClusterIP, DNS, selectors, EndpointSlice и readiness - и как запрос в итоге попадает на конкретный Pod.

Читать далее

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

Заказ снаружи, десятки систем внутри. Как менялся IT‑ландшафт «Петровича»

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

Привет! Это Дима Левин, я работаю системным аналитиком в «Петрович‑Тех». В прошлой раз я рассказывал о процессе обезличивания персональных данных. В этой статье я попытаюсь рассказать историю роста и развития IT‑ландшафта компании «Петрович».

Это история о том, как IT‑ландшафт «Петровича» вырос из одной системы в десятки специализированных и теперь движется к единой платформе. А заодно разберемся, чем занимается «Петрович‑Тех» и почему его работу можно сравнить со строительством.

Читать далее

Два человека правят один документ офлайн. Изобретаем гугл-док без сервера-арбитра

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

Гугл-док держится на сервере, который выстраивает все правки в один порядок. Убираем сервер: две копии правятся офлайн и обязаны сойтись символ в символ. Разбираю, как это устроено внутри, на движках, которые сам портировал на Go.

Читать далее

Heartbeat: как мы создали систему управления системой вместо обычных сигналов

Время на прочтение13 мин
Охват и читатели7.5K

Привет! Меня зовут Александр Илларионов, я бэкенд‑разработчик в Altenar. Мы работаем на довольно сложном и при этом очень интересном рынке: собираем данные о спортивных матчах со всего мира — например, время и место их проведения, описания чемпионатов и участников, а также вероятности наступления ключевых событий вроде голов, аутов и пенальти. И всё это в live‑режиме. 

В этой статье рассказываю, как мы переосмыслили роль Heartbeat‑компонента в нашей системе — от обычного сигнала до инструмента, который реально управляет работой всей системы. Наш опыт будет полезен тем, кто работает с .NET, распределёнными системами или строит инфраструктуру под высоконагруженные real‑time потоки данных. 

Читать далее

Нужна ли вашей распределённой СУБД византийская отказоустойчивость?

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели6.3K

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

Читать далее

Kubernetes просто, часть 1: зачем Kubernetes, устройство кластера

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

Kubernetes без магии и заучивания команд. Разберёмся, зачем он вообще нужен, как устроен кластер, чем Control Plane отличается от Worker Nodes и какую роль играют Pod, Scheduler, kubelet, etcd и другие основные компоненты.

Читать далее

Tarantool против Qdrant и pgvector: честный эксперимент на 1,18 млн векторов

Время на прочтение6 мин
Охват и читатели12K

Многие СУБД сегодня поддерживают поиск ближайших соседей, нужный для рекомендательных систем и антифрода. Но на практике системы даже с одинаковым алгоритмом «под капотом» могут решать эту задачу с разной эффективностью: пропускная способность (QPS) и задержки могут сильно различаться из-за накладных расходов движка хранения и модели блокировок. И для бизнеса эта разница может обернуться лишними затратами на инфраструктуру или деградацией UX в пиковые часы. Поэтому к этим параметрам нередко предъявляются особые требования. 

Привет, Хабр. Меня зовут Георгий Белянин. В статье я разберу архитектуру векторного поиска в Tarantool и приведу результаты сравнения скорости вставки и запросов с Qdrant и pgvector.

Читать далее

Серверы: распределяем нагрузку

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

«Просто арендую сервер помощнее». Так я думал, когда пет-проект внезапно оброс людьми.

Мой проект начинался с одной виртуальной машины. Пока пользователей было мало, всё работало. С ростом нагрузки обычные запросы начали ждать завершения тяжёлых вычислений. В логах появились тайм-ауты, очередь росла, а покупка сервера помощнее давала только временный эффект.

Я изучил, как похожие проблемы решают крупные компании, и применил эти принципы на практике.

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

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