Все потоки
Поиск
Написать публикацию
Обновить
16.77

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

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

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

LogDoc: логи здорового человека

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

Привет, Хабр

Однажды команда LogDoc, которая тогда ещё была просто дружеской компанией суровых разработчиков, после бурного обсуждения очередного напряжённого рабочего дня вынесла однозначный вердикт — в мире нет и не предвидится нормального, человеческого продукта для работы в распределённой среде с логами, трейсами, сигналами и прочим подобным. Нас это опечалило (по очевидным причинам) и воодушевило — мы увидели возможность создать полезный продукт. Подумали, собрались с духом и выложились полностью в попытке реализовать задуманное. Именно результат наших усилий мы представляем вам в этой вводной статье.

Читать далее

Простые радости вертикального масштабирования

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

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

Как подтвердит любой, кому когда-либо доводилось проходить собеседование по программированию, при наличии арифметической и геометрической прогрессии геометрическая всегда возобладает. При горизонтальном масштабировании расходы растут линейно (арифметически). Но по закону Мура вычислительные мощности со временем растут экспоненциально (геометрически). Это означает, что можно несколько лет ничего не делать, а затем масштабировать систему вертикально и получать улучшение на порядки. За двадцать лет плотность транзисторов возросла в  1000 раз. Это значит, что такая задача, для решения которой в 2002 году потребовались бы тысячи машин, сегодня выполнима всего на одной.

Читать далее

Обработка больших и очень больших графов: Pregel

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

Статья является продолжением предыдущей статьи в рамках цикла статей, посвященных обработке больших и очень больших графов. В статье реализованы распределенные версии четырех классических алгоритмов: "Связные компоненты", "Кратчайшее расстояние", "Топологическая сортировка" и PageRank на Apache Spark DataFrame API. Алгоритмы составлены в соответствии с идеями популярного фреймворка распределенной обработки графов Pregel.

Читать далее

Dash Platform: Дата-контракты

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

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

Читать далее

S3 не сразу строилось

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

Привет, Хабр. Вашему вниманию предлагается сокращённый перевод эпичного поста под авторством Энди Уорфилда, вице-президента и заслуженного инженера в компании Amazon, занятого разработкой S3. Пост основан на его пленарном выступлении с конференции USENIX FAST ‘23 и затрагивает три различных аспекта, касающихся выстраивания и эксплуатации такого огромного хранилища данных как S3. Если пост окажется интересным - рассмотрим вариант перевести и вторую часть

Читать далее

Распределённое обучение с PyTorch на кластере для тех, кто спешит

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

Глубокие модели становятся всё больше и всё реже помещаются на один компьютер. Это перевод поста в блоге Lambda Labs, компании, специализирующейса на инфраструктуре для глубого обучения. В этом посте нам расскажут как организовать распределенное обучение модели PyTorch на нескольких вычислительных узлах.

В качестве инструмента для запуска задач рассматриваются torchrun и MPI.

Читать далее

Обработка больших и очень больших графов

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

Однажды ко мне обратилась одна крупная фруктовая телефонная компания с просьбой подготовить для них курс по Apache Spark продвинутого уровня, и в нем обязательно должен быть раздел про обработку графов (Neo4j не предлагать). На тот момент я знал про классические алгоритмы обработки графов на базе DFS (поиск в глубину) и BFS (поиск в ширину). При этом неотъемлемым условием применения того или иного подхода является локальная поддержка стека (DFS) или очереди (BFS). Следовательно, классические алгоритмы можно применять для обработки графов, которые умещаются в память одной машины.

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

Читать далее

«Возьмите инициативу на себя»: готовимся к System Design Interview

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

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

Читать далее

Экономика вещей: устройства как экономические агенты. Роль Device Twins

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

Сегодня начинает набирать обороты концепция "экономики вещей" (Economy of Things - EoT). Евангелисты данной конфессии концепции прогнозируют массовый переход подключенных устройств на этот способ взаимодействия и, соответственно, колоссальный рынок.

Давайте посмотрим, что нам готовит новый дивный мир как с точки зрения пользователя (способы использования), так и с точки зрения разработчика (технологический стек). Особое место в этой концепции могут занять Device Twins.

Читать далее

Как генерировать модели интерфейсов на основе спецификации на стороне frontend-приложений

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

На связи снова Архитектурный комитет компании SimbirSoft, и мы продолжаем наш цикл статей, посвященных Design API First. Ранее мы уже писали о том, что представляет собой этот подход, приводили пример спецификации для сервиса аутентификации и рассказывали, как мы интегрируем этот паттерн в наш конвейер разработки.

Сегодня мы немного отвлечемся от бэкенда и разберем автоматизацию одной из рутинных задач на стороне frontend-разработки. А именно описание моделей интерфейсов для взаимодействия фронта с беком, а также написание API-сервисов, в которых фиксируются endpoints, методы запросов и формат передачи данных (query-параметры, заголовки, тело).

Читать далее

Три движка для одной Лавки: как эволюционировала система поиска в сервисе

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

Лавка — сервис быстрой доставки продуктов. Один из важнейших сценариев использования сервиса для покупателя — это поиск. Примерно 30% товаров добавляются в корзину именно из его результатов. А ещё, если в пользовательской сессии был успешный запрос в поиск, вероятность совершения заказа вырастает на 10–15%. То есть, если клиенту нужен конкретный продукт и он его быстро находит через поиск, вероятность совершения заказа становится выше.

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

Найти товары!

Как построить систему, способную выдерживать нагрузку в 5 млн rps

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

Всем привет! 

Меня зовут Владимир Олохтонов, я руковожу командой разработки в отделе Message Bus, который является частью платформы Ozon. Мы занимаемся разработкой самых разных систем вокруг Kafka, etcd и Vault. В этой статье я расскажу о том, как мы строили линейно масштабируемую gRPC-прокси перед Kafka, способную обслуживать миллионы запросов в секунду, используя Go.

Читать далее

Верификация распределённых систем с применением Isabelle/HOL

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

Мы ежедневно пользуемся распределёнными системами (в форме интернет-сервисов). Эти системы очень полезны, но и реализовывать их непросто, так как сети непредсказуемы. Всякий раз, когда вы передаёте сообщение по сети, предполагается, что оно прибудет очень быстро, но возможны и достаточно долгие задержки. Может случиться так, что сообщение не прибудет вообще, либо прибудет несколько раз. Когда вы отправляете запрос другому процессу и не получаете отклика, вы понятия не имеете, что произошло: потерялся ли запрос, либо тот другой процесс аварийно завершился, либо сам отклик потерялся? Или же на самом деле ничего не потерялось, сообщение просто задержалось и ещё может прибыть. Невозможно доподлинно узнать, что произошло, поскольку ненадёжный обмен сообщениями – единственный способ межпроцессной коммуникации.
Читать дальше →

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

Потоковая обработка данных с помощью Kafka Streams: архитектура и ключевые концепции

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

При реализации потоковой обработки и анализа данных может возникнуть необходимость агрегирования записей для объединения нескольких независимых поток данных или обогащения какой-либо модели данных. Для этой цели может использоваться Kafka Streams, которая позволяет выполнять обработку данных в режиме реального времени. 

В этой статье мы рассмотрим основные компоненты Kafka Streams и теоретические аспекты их использования. Мы будем использовать последние версии технологий, доступных на сегодня: Kafka 3.4.0 и Java 17 в качестве языка программированию. Для снижения входного порога мы будем использовать только нативные возможности Kafka и Kafka Streams, и не будем рассматривать решения с использованием различных фреймворков вроде Spring.

Читать далее

Изнанка архитектуры, или Менять нельзя оставить

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

Около десяти лет назад мы в CUSTIS реализовали систему распределения товара для «Спортмастера». Со времени ее запуска изменилось многое: корректировались цели заказчика, менялись возможности и потребности рынка, появились новые способы автоматизации. Но на протяжении всех этих лет система дорабатывалась, поддерживалась и настраивалась нами, чтобы оставаться максимально удобной и эффективной для заказчика.

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

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

System Design для самых маленьких. Reference к интервью

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

Эта статья-инструкция по построению высоконагруженных распределенных систем. Описанный подход может быть полезен как reference при подготовке к интервью по system design в FAANG и не только.

Читать далее

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

Время на прочтение7 мин
Количество просмотров7.1K
image

В мире динамического выделения ресурсов и балансировки нагрузки есть много интересных алгоритмов, но один из самых известных и занимательных – так называемый «метод двух случайных выборов». Он привносит очень простое изменение в процедуру случайного выделения ресурсов, а качество результатов от этого улучшается экспоненциально. Мне посчастливилось реализовать именно эту технику в гигантском масштабе, чтобы оптимизировать использование ресурсов в AWS Lambda, но мне всё равно долго не удавалось «прочувствовать» этот метод интуитивно. В этом посте хочу познакомить вас с той метафорической картиной этого алгоритма, которую я для себя составил, и которая очень удобна для понимания других продвинутых техник в этой области.
Читать дальше →

Интеграция паттерна Design API First в конвейер разработки ПО: наш опыт

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

Всем привет! Продолжаем наш цикл статей о внедрении подхода Design API First на проектах нашей компании. Ранее мы рассмотрели использование этого подхода, описали плюсы и минусы, узнали, как на практике выглядит проектирование API на примере сервиса аутентификации. Сегодня расскажем о том, как мы встраиваем Design API First в наш конвейер разработки, подробно остановимся на инструментах, помогающих с технической точки зрения организовать этот процесс. Объясним, как реагировать на изменения требований и обеспечивать версионность, а также что использовать для мокирования данных. Рассмотрим различные варианты применения: для нового проекта, для существующего проекта (где изначально был Code First).

4 часть: Как генерировать модели интерфейсов на основе спецификации на стороне frontend-приложений

5 часть: Design API First. Кодогенерация Roslyn

Читать далее

Гарантии доставки и этика телепортации

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

Распределенным системам приходится решать вопрос о том, какие именно гарантии доставки поддерживать. У нас есть различные варианты, начиная от отсутствия гарантии и заканчивая гарантией exactly once (точно один раз). В зависимости от того, какой вариант мы выберем, это может повлиять на качество наших потоков данных. В этой статье мы рассмотрим различные гарантии доставки на примере телепортации.

"Корабль Тесея" — это мысленный эксперимент, в котором ставится вопрос: Если заменить все части корабля новыми компонентами, останется ли он тем же самым судном?

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

Читать далее

Tarantool: «серебряная пуля» для построения микросервисной архитектуры VK Teams

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


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