Обновить
32K+

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

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

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

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

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

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

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

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

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

Читать далее

Новости

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

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

Корпоративную 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 мин
Охват и читатели7.9K

Модель выпустила 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 мин
Охват и читатели5.9K

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

Как защитить платежный API от двойных списаний с помощью идемпотентности

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

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

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

Читать гайд

Сговор на миллиарды: что реально нужно, чтобы переписать блокчейн

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

Под моей первой статьёй о блокчейне как append-only базе данных самые интересные вопросы были не про базу. Всплывали другие вопросы, примерно следующего содержания. А что будет, если валидаторы сговорятся? Кто мешает большинству переписать историю? Почему я вообще должен верить блокчейну?

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

Читать далее

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

K3s на колёсах: HA‑кластер для автопарка с ARM‑агентами, WireGuard и офлайн‑режимом

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

Большинство статей про Kubernetes на границе (edge) описывают более-менее стабильную топологию: несколько узлов в одном или нескольких дата-центрах, предсказуемая сеть между ними, редкие сетевые партиции как исключение, а не норма. У нас всё наоборот: control plane живёт в офисе/датацентре, а agent-узлы физически стоят в транспортных средствах автопарка — едут по городу, паркуются в подземных гаражах без связи, теряют VPN на десятки минут за смену. Разрыв связи с control plane — это не инцидент, это штатный режим работы системы, который нужно было спроектировать с самого начала, а не «подкрутить» постфактум.

В этой статье — то, как устроен наш K3s-кластер для автопарка: HA control plane на kube-vip, транспорт через WireGuard поверх MikroTik, разнородный флот из amd64- и ARM-агентов (включая Jetson), и отдельно — самая интересная часть: как мы подступаемся к вопросу «может ли под на границе продолжать работать, когда control plane временно недостижим».

Читать далее

Один Telegram‑бот, три сервиса, один 301: как я сделал webhook‑router вместо монолита

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

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

Пока я выбирал архитектуру, переезд панели с одного домена на другой неожиданно провёл бесплатный chaos test: Telegram продолжил отправлять updates на старый адрес, получил 301 Moved Permanently и перестал доставлять сообщения. В очереди зависло шесть updates, а со стороны пользователей бот просто замолчал.

В статье разберу диагностику этого инцидента и устройство небольшого open-source router на FastAPI и Redis: с декларативными правилами, дедупликацией, надёжной очередью, retry и HMAC-подписью внутренних запросов.

Читать далее

«Если что, поднимем и разберемся»

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

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

Читать далее

redb.Route 4.0: тест-кит, шаблоны payload, форматы данных, REST DSL и ядро без Newtonsoft

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

Восемь новых пакетов и REST DSL вокруг прежних 56 глаголов маршрута; из ядра ушёл Newtonsoft.Json. Что ломает мажор и как мигрировать за десять минут.

Готовится четвёртая версия redb.Route, интеграционного движка для .NET в духе Apache Camel. В 3.x была закрыта ширина по паттернам: 56 глаголов DSL, тридцать с лишним коннекторов, свой язык выражений, скомпилированный в IL (в 4.0 он качественно переработан, об этом ниже). 4.0 закрывает то, что вокруг паттернов: как протестировать маршрут без брокеров, как собрать тело сообщения, как читать CSV и Avro, как выставить REST-фасад, как кэшировать ответ сервиса. Восемь новых пакетов, REST DSL внутри HTTP-коннектора, переработанный язык выражений и ядро, которое стало легче, а не тяжелее. За год это первый мажор такого масштаба: не смена номера под несколько ломающих правок, а качественное расширение функционала, и ломающих изменений в нём как раз немного.

Читать далее

Обработка сделок в реальном времени: как мы переехали с batch-обработки на Kafka Streams

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

Привет, Хабр! Я Артём Борисов, Java-разработчик, в основном занимаюсь развитием микросервисов в команде РСХБ «Свои инвестиции». Представьте ситуацию: вы работаете с инвестиционными сделками, обрабатываете миллионы сделок в день, но все они обрабатываются один раз только ночью. А бизнес требует реального времени. Это была наша рутина, пока мы не внедрили Kafka Streams. В этой статье я расскажу о том, как мы трансформировали систему обработки сделок на фондовом рынке (SOFR) с batch-обработки на полноценную real-time систему, способную обрабатывать миллионы сделок в сутки.

Читать далее

Как интеграционная платформа (ESB) превращает цифровую имитацию в реальную трансформацию

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

Почему без интеграции ИТ‑систем все усилия по цифровизации умножаются на ноль.

В статье разберём четыре подхода, которые компании выбирают, когда доходит до интеграций ИТ‑систем: классические «точка‑точка» (они же «спагетти‑код»), брокеры сообщений вроде Kafka и RabbitMQ, Open Source‑решения и готовые ESB‑платформы. Посмотрим на примерах, как каждый из них работает в бою, какие грабли ждут на каждом пути, и почему «бесплатно» на входе часто оборачивается очень дорогим сопровождением.

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

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

Читать далее

AVM изнутри задачи, сбои и состояние виртуальных машин

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

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

Любой запрос клиента заканчивается цепочкой задач на ноде: скачать образ, создать диск, поднять машину. Этими цепочками управляет AVM — собственная система управления виртуализацией.

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