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

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

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

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

Redis работает быстро — я буду кэшировать данные в Postgres

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

В интернете есть книги и множество статей, таких как эта, в которых авторы приводят аргументы в пользу использования Postgres для всего. Я решил рассмотреть один из вариантов использования — применение Postgres вместо Redis для кэширования. Я довольно часто работаю с API, поэтому я создал очень простой HTTP-сервер, который отвечает данными из этого кэша. Я начал с Redis, так как часто сталкиваюсь с этим на работе, а затем переключился на Postgres с использованием нежурналируемых таблиц и посмотрел, есть ли разница.

Читать далее

Новости

Новые алгоритмы ускоряют машинное обучение в децентрализованных сетях

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

Международная команда ученых совершила прорыв в области распределенного машинного обучения, разработав новые алгоритмы, значительно повышающие эффективность обучения моделей в федеративных сетях. Исследование, проведенное учеными из Университета имени Короля Абдуллы ( Саудовская Аравия), Московского физико-технического института (МФТИ), Университета Мила и Монреальского университета (Mila, Канада), Университета имени Мухаммеда бен Зайда по искусственному интеллекту (MBZUAI, ОАЭ) и Принстонского университета (США), представляет собой значительный шаг вперед в решении проблемы высокой вычислительной сложности обучения больших моделей в распределенных системах. Результаты опубликованы в материалах конференции NeurIPS 2024.

Читать далее

Российские ученые ускорили машинное обучение в распределенных системах без центрального сервера

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

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

Читать далее

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

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

Группа российских ученых из МФТИ, Сколтеха и Научно-исследовательского центра искусственного интеллекта Университета Иннополис разработала революционный алгоритм для решения сложной задачи децентрализованной оптимизации. Результаты исследования опубликованы в материалах конференции NeurIPS 2024.

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

Читать далее

Обмен событиями распределённого приложения на Java

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

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

Это доставка событий через БД, в которой хранится состояние распределённого приложения.

Читать далее

История создания Tarantool DB: реальные проблемы, удачные решения и превращение проекта в продукт

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

Два года назад все началось с первого коммита и туманного понимания, что мы вообще хотим сделать. Сегодня — два мажорных релиза, собственный модуль миграций, документация, тренинги и пользователи, которые безболезненно перешли на новую версию по нашим инструкциям. Но путь от «кучи кода для внутреннего использования» до полноценной коробочной In-memory-базы оказался совсем не прямым. 

Меня зовут Александр Кленов, я тимлид разработки Tarantool DB в команде Tarantool. Я расскажу историю о том, как мы брали зрелый, но очень гибкий Tarantool Enterprise и превращали его в решение, которое можно установить из коробки.

Читать далее

Бенджамин Вуттон «Микросервисы — не бесплатный сыр!»

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

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

Читать далее

Что скрывает ваш API Gateway

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

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

Хорошо спроектированный и надежный API — это ворота, через которые ваши данные и функциональность взаимодействуют с внешним миром: мобильными приложениями, веб‑сайтами, партнерскими сервисами и даже внутренними клиентами.

Читать далее

«Архитектура бэкенда», или как я написал мою первую техническую книгу

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

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

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

Читать далее

Революция архитектуры Веба, часть 4

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

Это — текстовая расшифровка небольшого доклада с  Форума молодых учёных, про Web 4.0: проблематика, решения и даже прототип, с которым можно невозбранно поиграться.

Прикоснуться к будущему 🖐

Техническая внутренняя кухня StarRocks: оптимизация JOIN — от логики до распределённого выполнения

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

Как StarRocks добивается высокой производительности JOIN-запросов в аналитических нагрузках. В материале — практическая кухня оптимизатора: какие типы JOIN эффективнее и когда их стоит конвертировать (например, CROSS→INNER, OUTER→INNER при NULL‑отвергающих предикатах), как работает predicate pushdown, извлечение предикатов из OR, вывод эквивалентностей и pushdown LIMIT. Разбираем Join Reorder для многотабличных запросов (Left‑Deep, Exhaustive, Greedy, DPsub), модель стоимости (CPU*(Row(L)+Row(R))+Memory*Row(R)) и выбор лучшего плана.

На уровне распределённого исполнения — MPP‑архитектура, свойства распределения (Distribution Property) и узлы Exchange; пять базовых планов: Shuffle, Broadcast, Bucket Shuffle, Colocate и экспериментальный Replicate Join. Плюс Global Runtime Filter (Min/Max, IN, Bloom) для ранней фильтрации на Scan. Даем практические принципы: используйте более быстрые типы JOIN, стройте хеш по малой таблице, в многоJOINовых запросах сперва выполняйте высокоселективные соединения, сокращайте объём данных и сетевой трафик. Материал для инженеров данных, DBA, разработчиков OLAP и всех, кто проектирует производительные SQL‑планы.

Читать далее

Масштабирование под нагрузкой: горизонтальные и вертикальные подходы

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

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

Читать далее

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

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

Привет, Хабр! На связи Сергей Гайдамаков. Продолжаем обсуждать и тестировать набор реплик MongoDB. 

В предыдущей статье мы рассмотрели структуру отдельного узла MongoDB, разобрали свойства параметров writeConcern и readConcern для работы с набором реплик MongoDB. 

В этой статье я покажу результаты тестов при аварийных ситуациях, которые могут происходить в распределенной системе. Сделаем выводы о свойствах набора реплик с точки зрения CAP- и PACELC-теорем для распределенных систем и посмотрим параметры управления CAP-свойствами неоднородных распределенных систем.

Читать далее

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

Фаззинг как основа эффективной разработки на примере LuaJIT

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

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

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

В СУБД Tarantool используется LuaJIT в качестве языкового рантайма, но в Tarantool используется не оригинальный проект, а его форк. Я расскажу, как мы прошли путь от пассивного использования кода LuaJIT к процессу поддержки форка, с которым количество инцидентов на продакшене установилось около нуля, сократились усилия по бэкпортингу патчей из основного проекта, а основной проект получил активных контрибьюторов.

Я рассмотрю специфику работы с проектом исходного кода на примере LuaJIT, расскажу, как устроено тестирование в нашем форке и какую роль там играет фаззинг. Расскажу о специфике фаззинга LuaJIT и о том, каких результатов мы в этом достигли за последние два года.

Читать далее

Как я раздул из гофера слона или история распределенного сократителя ссылок

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

Вполне логично предположить, что сократитель ссылок — довольно простой сервис как с точки зрения пользователя, так и под капотом. Но что, если, взяв за основу такую простую задачу, построить целую распределенную систему?

Мой шортенер начинался как простая практика с Go и gRPC после всех ОГЭ:), где должно было быть 3 сервиса: тг бот, API gateway и ядро. Но с каждым днем идей все больше, энтузиазм растёт, я стал делать упор на высокие нагрузки, и постепенно мини‑практика начала становиться боевой event-driven машиной. В этой статье я хотел бы подметить интересную мысль: даже самая простая вещь может быть реализована сложно.

Погрузиться в архитектуру

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

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

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

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

Читать далее

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

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

Привет, Хабр. Меня зовут Роман Ескин, я один из 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 мин
Количество просмотров6.6K

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

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