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

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

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

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

Эволюция хранилища ВКонтакте: от первой реализации до наших дней

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

Привет, Хабр! Последние несколько лет я занимаюсь разработкой баз данных ВКонтакте. Аудитория такой крупной соцсети ежедневно генерирует огромные массивы информации. 

В этой статье я расскажу про хранилище ВКонтакте: как оно менялось, что мы делаем для оптимизации занятого места и как гарантируем сохранность данных.

Читать далее

Основные паттерны микросервисной архитектуры: Strangler Fig, API Gateway, Service Mesh и другие

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

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

В данной статье мы разберем несколько ключевых паттернов, связанных с микросервисами. Речь пойдет о паттернах миграции и интеграции (таких как Strangler Fig – «удушающее дерево» и API Gateway), о сетевых и структурных паттернах (Service MeshSidecar), о шаблонах работы с данными (Database per ServiceCQRS) и об особом подходе к хранению состояния (Event Sourcing). Для каждого паттерна мы рассмотрим его суть, назначение, примеры использования, а также плюсы и возможные сложности. К некоторым паттернам приведены упрощенные диаграммы и фрагменты кода, чтобы иллюстративно показать, как они работают на практике.

Читать далее

Тестирование CAP-теоремы на примере MongoDB

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

Привет, Хабр! Я Сергей Гайдамаков. Уже 28 лет я занимаюсь проектированием и разработкой программных систем различного масштаба. Сейчас работаю в Т-Банке системным аналитиком и проектирую системы, которые в совокупности составляют большую распределенную систему. 

Несмотря на большое число статей про CAP-теорему, есть трудности ее практического применения при создании распределенных программных систем. Я описал результаты тестирования набора реплик MongoDB в штатных и аварийных ситуациях, параметры запросов для достижения требуемых свойств CAP-теоремы. А еще развенчал некоторые заблуждения и мифы относительно базы данных MongoDB. 

Читать далее

Алгоритмы консенсуса Paxos, Raft и Zab в распределённых системах

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

В распределённых системах критически важно обеспечить консенсус – согласованность данных или решений между множеством узлов (серверов), даже при сбоях и задержках сети. Алгоритмы консенсуса позволяют группе несовершенных узлов действовать как единое надёжное целое. Три классических алгоритма – Paxos, Raft и Zab – стали основой для построения отказоустойчивых систем. Они гарантируют, что при наличии кворума узлов (обычно большинства) все узлы придут к единому решению и последовательности операций, сохраняя консистентность данных. В данной статье мы рассмотрим устройство этих алгоритмов «под капотом», их этапы (выбор лидера, репликация журнала, обработка сбоев и восстановление), области применения в реальных системах (от координаторов в кластерах Kubernetes и Apache Kafka до распределённых баз данных), а также сравним готовые реализации (такие как etcd, ZooKeeper, Consul и др.) по ключевым характеристикам.

Читать далее

Как сделать централизованное логирование и крепко спать по ночам

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

Мы начинали с обычного ELK-стека, логи приходили на logstash, записывались в Elasticsearch, а пользователи смотрели их в Kibana. Потом в эту схему добавилась Kafka, так как мы понимали, что на пиках нагрузок не успеваем записать все логи в Elasticsearch. Всё это располагалось в одном ЦОДе, а в Kafka была единая очередь. В результате горизонтального масштабирования Elasticsearch разросся до 30+ нод. Данная схема справлялась с нагрузкой в 100 тысяч документов в секунду.

Как вы понимаете, эта схема нас устраивала только до определённого периода. В какой-то момент нагрузка начала расти как на дрожжах.

Привет, Хабр! На связи Филипп Бочаров, руководитель платформы наблюдаемости и мониторинга для более 400 продуктов экосистемы МТС, и Юлия Тальцкова, ведущий инженер сервиса логирования и кластеров Open Search с более 400 терабайтами логов клиентов. Этот материал написан на основе нашего доклада для конференции Highload++

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

Читать далее

Потоковая фильтрация CommonCrawl с Apache Spark для обучения языковых моделей

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

Для обработки Common Crawl на терабайтных объёмах широко используются архитектуры обработки данных, построенные на фреймворках вроде Apache Spark. Благодаря распределённой обработке данных и структурированному стримингу Spark позволяет разработчикам создавать масштабируемые пайплайны, применять логику фильтрации и формировать итоговые очищенные корпусы для обучения. Эта статья перевод моей статьи на medium.com, я хотел рассматреть, как на практике формируются обучающие наборы из Common Crawl (например, в проектах C4, CCNet, OSCAR, GPT-3, BLOOM, Falcon и др.), а затем показать пример Spark Streaming-приложения, который я написал и опубликовал в GitHub. Мы также приводим пример подхода, реализованного в DeepSeek, для фильтрации математического контента — узкоспециализированная задача, которая способна дать существенный прирост в качестве моделей.

Читать далее

И снова USB-IP — сервер теперь с автобиндом и детачем и сам подхватит ключ клиент

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

HA - как много в этом слове: Автоматический перенос виртуальных машин в кластере. 8 секунд и, например, сервер терминалов сменил место жительства совместно со всеми своими предустановленными программами - в другую серверную.
И ... оставил аппаратные лицензии и ЭЦП, заботливыми руками проброшенные в виртуалки, тоскливо торчать из, возможно, погибшего железа.

Отставить "оставил"!

Настройка Apache Kafka для высоконагруженных систем

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

Apache Kafka является одной из самых популярных платформ для обработки потоков данных, обеспечивая высокую пропускную способность и низкие задержки при передаче сообщений. В высоконагруженных системах, где необходимо обрабатывать миллионы сообщений в секунду, важность правильной настройки Kafka трудно переоценить. Без оптимизации её параметров можно столкнуться с серьёзными проблемами, такими как рост задержек, потеря сообщений и переполнение очередей. Эффективная настройка Kafka критична для обеспечения бесперебойной работы в условиях высокой нагрузки и стабильной обработки данных в реальном времени.

Цель этой статьи — рассмотреть основные аспекты настройки Apache Kafka, которые влияют на производительность системы. Мы сосредоточимся на оптимизации параметров брокеров и продюсеров для достижения максимальной пропускной способности, минимальных задержек и надежности. Также рассмотрим важность мониторинга и тестирования системы для своевременного выявления и устранения узких мест.

Читать далее

Теорема CAP: почему нельзя иметь все сразу и как аналитик выбирает чем пожертвовать

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

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

Теорема CAP (дословно: Consistency (согласованность), Availability (доступность), Partition Tolerance (устойчивость к разделению)), предложенная Эриком Брюером в 2000 году, объясняет, почему невозможно одновременно обеспечить все три этих свойства.

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

Да, многие могут сказать, что это больше стезя архитектора. Но грань между аналитиком и архитектором в текущих реалиях очень смазана. Хороший системный аналитик фактически является lite версией архитектора. Поэтому щас выскажусь!)))

Читать далее

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

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

Продолжаем наращивать базу знаний по System Design! В этот раз освятим использование Pub/Sub, Event-Driven Architecture, Distributed Systems, Leader Election. Посмотрим на их концепции и области применения при проектирование высокодоступных отказоустойчивых систем.

Читать далее

Видение концепции Цифровой Двойник в терминах «Индустрии 5.0». Агентный планировщик и симулятор

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

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

Читать далее

Отказоустойчивая распределённая архитектура для UX-аналитики

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

UX-аналитика – это сбор и анализ данных о взаимодействии пользователей с интерфейсом (клики, скроллы, навигация и прочие события). Такие события генерируются в огромных количествах, особенно при большой аудитории приложения. Чтобы эффективно обрабатывать эту информацию, необходима распределённая архитектура, способная масштабироваться под высокий поток событий и обеспечивать отказоустойчивость – т.е. работать надёжно даже при сбоях отдельных компонентов. Также важна возможность обработки данных в реальном времени, чтобы как можно быстрее получать метрики и инсайты об опыте пользователей. В этой статье мы рассмотрим ключевые аспекты такой архитектуры: масштабирование UX-событий, надёжный сбор метрик с устройств (в том числе офлайн), реалтайм-аналитику на основе потоковых технологий (Kafka, Flink, Kafka Streams, ClickHouse) и механизмы гарантированной доставки событий (at-least-once, exactly-once, retry, дедупликация). В результате станет понятно, как правильно спроектированная система UX-аналитики позволяет оперативно находить проблемные места UI, проводить A/B тесты и глубже понимать поведение пользователей.

Читать далее

Выбор индексов в базах данных для highload-систем

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

Индексы – это «ускорители» доступа к данным в базах данных. Правильно выбранные индексы могут многократно ускорить запросы, что особенно критично в highload-системах с большими объёмами данных и большим числом запросов. Однако за ускорение чтения приходится платить усложнением записи и дополнительным расходом памяти. В этой статье мы подробно рассмотрим, как работают разные типы индексов в реляционных СУБД, как выбирать индекс под конкретный запрос, обсудим подводные камни (например, блоат, переиндексация, избыточные индексы) и затронем индексацию в NoSQL (MongoDB, Cassandra). Завершим чеклистом, который поможет выбрать оптимальный индекс под вашу задачу.

Читать далее

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

Мультирегиональность в Selectel S3: работаем с регионами SPB и MSK из Python

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

Катастрофоустойчивое хранение данных — одна из актуальных задач при построении IT-инфраструктуры. Но ее решение может завести в тупик. Как оптимальнее организовать хранение данных, исключив домены отказа? Как разместить определенные данные ближе к целевой нагрузке или части аудитории? Как организовать асинхронную репликацию данных между Москвой и Санкт-Петербургом?


Всем привет! Меня зовут Гришин Александр, я продакт-менеджер в Selectel и отвечаю за развитие объектного хранилища и облачных баз данных. Под катом я расскажу, как с помощью мультирегиональности взаимодействовать с разными регионами S3 через Python и библиотеку boto3. Это поможет хранить и обрабатывать данные в Москве и Санкт-Петербурге, используя единую авторизацию и простой интерфейс. К тому же — улучшить катастрофоустойчивость и доступность данных, а еще снизить задержки при работе с объектами, когда инфраструктура распределена между городами.

Читать дальше →

Лучшие практики создания отказоустойчивых систем

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

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

Особое внимание уделяется методам повышения надёжности при временных сбоях, включая: повторные попытки выполнения операций с экспоненциальной задержкой (exponential backoff), использование шаблона circuit breaker, механизмы плавной деградации функциональности (graceful degradation), задание таймаутов, реализация идемпотентности, ограничение одновременных вызовов (bulkhead isolation), а также внедрение систем мониторинга и алертинга. Приводимые примеры охватывают типовые сценарии — обращение к внешним API, взаимодействие с базами данных и выполнение фоновых задач.

Читать далее

Как правильно выбрать базу данных для разработки: понимание моделей репликации

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

Выбор подходящей системы управления базами данных (СУБД) — важнейшая задача при проектировании программных систем. Разработчики и архитекторы учитывают множество факторов: модель данных (реляционная или NoSQL), поддержку транзакций, масштабируемость, требования к согласованности и многого другое. Одним из ключевых архитектурных аспектов, влияющих на эффективность и надежность системы, является модель репликации данных. Репликация означает поддержание копий одних и тех же данных на нескольких узлах (серверах), соединённых по сети​.

Зачем это нужно? Репликация позволяет: во-первых, держать данные ближе к пользователям (уменьшая задержку при запросах); во-вторых, продолжать работу системы даже при сбое отдельных узлов (повышая доступность); в-третьих, масштабировать систему, увеличивая число узлов для обслуживания запросов на чтение (повышая пропускную способность)​.

Однако реализация репликации сопряжена с серьёзными архитектурными компромиссами. Согласно теореме CAP, в распределённой системе невозможно одновременно гарантировать все три свойства: консистентность данных, доступность сервиса и устойчивость к разделению сети. При возникновении сетевых сбоев (разбиении на изолированные сегменты) системе приходится жертвовать либо мгновенной согласованностью данных, либо доступностью части узлов. Поэтому разные СУБД делают разные выборы в этих компромиссах. Архитектурная модель репликации, лежащая в основе СУБД, определяет, как база данных достигает (или не достигает) консистентности, доступности и отказоустойчивости. Понимание этих различий крайне важно для архитекторов и разработчиков: зная поведение репликации, вы сможете выбрать такую СУБД, которая лучше соответствует требованиям вашего проекта по масштабу, геораспределенности, допустимой задержке и устойчивости к сбоям.

Читать далее

Каждый бэкенд-инженер должен знать, как обрабатывать платежи. Краткое руководство по повторным попыткам платежа

Время на прочтение4 мин
Количество просмотров37K
Любая система, работающая с платежами, должна быть надежной и отказоустойчивой.

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

Сейчас покажу, как это сделать.
Читать дальше →

Обмен сообщениями в режиме реального времени: опыт Slack

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


А вы знали, что земные станции передают сигнал спутникам, расположенным на геостационарной орбите на высоте 35 786 метров над экватором, и что ответные сигналы накрывают целое полушарие? Сегодня спутниковые радиостанции обслуживают сотни каналов. Если вы только не работаете на секретном военном объекте или глубоко под землёй, то спутниковый радиосигнал к вашим услугам найдётся практически везде.

Платформа Slack подобна спутникам в том, что на ней ежедневно рассылаются миллионы сообщений по миллионам каналов — всё это в режиме реального времени. Если рассмотреть трафик типичного рабочего дня, оказывается, что большинство пользователей остаются онлайн с 9.00 по 17.00 по местному времени, причём, пиковые нагрузки приходятся на период с 11.00 до 14.00, с небольшим спадом в районе обеденного перерыва. Хотя, в разных регионах рабочее время распределено примерно схоже, на следующем графике наблюдаются два пика. Очевидно, что «час пик» совпадает не везде. В некоторых регионах он приходится на послеполуденные часы, в других наступает до полудня. Цветные линии на следующей диаграмме обозначают разные регионы.
Читать дальше →

Принцип каскадного снижения связанности

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

Часто ли вы слышите о новом принципе проектирования IT-архитектуры? А об обновлении классических принципов? Попробую вас удивить и привнести что-то новое. 😎

У вас никогда не вызывало недоумения, что связанность и прочность (или связность) — это про примерно одно и то же (и то, и другое — это некая связь), но одно — хорошо, а другое — почему-то плохо? 🙂
Но давайте по порядку.

Читать далее

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

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

Продолжаем наращивать базу знаний по System Design. В этот раз освятим использование BLOB Storage, CDN, Message Broker. Посмотрим на основные концепции и области применения этих важных компонентов при проектирование высокодоступных отказоустойчивых систем.

Читать далее