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

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

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

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

Можно ли генерировать случайные числа, если мы не доверяем друг другу? Часть 1

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

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

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

Зачем вообще нужно генерировать случайные числа участникам, не доверяющим друг другу? Одна из областей применения -- это децентрализованные приложения. Например, рассмотрим децентрализованное приложение, которое принимает ставку от участника и либо удваивает сумму с вероятностью 49%, либо забирает с 51%. Приложение будет работать только если алгоритм может непредвзято получить случайное число. Если злоумышленник сможет повлиять на результат или предсказать случайное число, и даже незначительно увеличить свой шанс получить выплату в приложении, он получит возможность опустошить его.

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

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

Он должен быть непредсказуемым. Другими словами, ни один участник не должен иметь возможность предугадать, какое число будет сгенерировано (или вывести какие-либо его свойства) до того, как оно будет сгенерировано.

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

В этой статье мы рассмотрим два подхода: RANDAO + VDF и подход, основанный на стирающих кодах. В следующей части мы подробно разберем подход, основанный на пороговых подписях.

Читать далее

Выбор архитектурного стиля. Часть 3

Время на прочтение4 мин
Количество просмотров6.7K
Привет, Хабр. Сегодня я продолжаю серию публикаций, которую написал специально к старту нового потока курса «Software Architect».





Введение


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

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

Сейчас мы наконец определим основные характеристики микросервисной архитектуры.
Читать дальше →

Фоновые задачи на Faust, Часть II: Агенты и Команды

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

Часть II. Узнаем, как писать агентов, обрабатывающих стрим событий из kafka, а так же как написать команды (обёртка на click).

Читать далее

Фоновые задачи на Faust, Часть I: Введение

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

https://habrastorage.org/webt/wo/6b/ui/wo6buieqgfwzr4y5tczce4js0rc.png


  1. Часть I: Введение
  2. Часть II: Агенты и Команды

Как я дошёл до жизни такой?


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

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

Выбор архитектурного стиля. Часть 2

Время на прочтение3 мин
Количество просмотров8.2K
Привет, Хабр. Сегодня я продолжаю серию публикаций, которую написал специально к старту нового потока курса «Software Architect».





Введение


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

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

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

Трудности масштабирования бэкенда онлайн-кинотеатра. Доклад Яндекса

Время на прочтение8 мин
Количество просмотров4.1K
Бэкенд КиноПоиска HD — это платформа для передачи контента с помощью технологии Over the Top (OTT) на разные устройства, регионы и площадки. На нашей конференции о видеотехнологиях PlayButton я рассказал, как мы составляем персональные рекомендации, с какими трудностями справились, а какие еще собираемся преодолеть.


— Начну с того, откуда пошли онлайн-кинотеатры.
Читать дальше →

Микросервисы с коммуникацией через Axon

Время на прочтение5 мин
Количество просмотров7.9K
В этом простом туториале мы сделаем пару микросервисов на Spring Boot и организуем между ними взаимодействие через фреймворк Axon.




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

Распределенные блокировки с применением Redis

Время на прочтение12 мин
Количество просмотров38K
Привет, Хабр!

Сегодня мы предлагаем вашему вниманию перевод сложной статьи о реализации распределенных блокировок средствами Redis и предлагаем поговорить о перспективности Redis как темы. Анализ рассматриваемого алгоритма Redlock от Мартина Клеппмана, автора книги "Высоконагруженные приложения", приведен здесь.
Читать дальше →

Выбор архитектурного стиля. Часть 1

Время на прочтение4 мин
Количество просмотров7K
Привет, хабр. Прямо сейчас в OTUS открыт набор на новый поток курса «Software Architect». В преддверии старта курса хочу поделиться с вами своей авторской статьёй.




Введение


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

FritzFrog — новое поколение ботнетов

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

Краткое содержание


  • Guardicore обнаружили сложный ботнет пиринговой (P2P) сети FritzFrog, который еще с января 2020 года активно взламывал SSH серверы.
  • Вредоносное ПО на Golang: FritzFrog исполняет модульный, мультипоточный и безфайловый вредоносный код на Golang, который не оставляет следов на жестком диске зараженного устройства.
  • Активное таргетирование государственных, образовательных, финансовых и прочих ресурсов: FritzFrog пытался брутфорсить и распространяться на десятках миллионов IP адресов правительственных офисов, образовательных учреждений, медицинских центров, банков и множества телекоммуникационных компаний. Среди них успешно подвержены атаке оказались более чем 500 серверов, включая известные университеты США и Европы, и одну железнодорожную компанию.
  • Сложность: FritzFrog полностью проприетарен, его имплементация P2P написана с нуля, что говорит о высоком уровне профессионализма его создателей в области разработки ПО.
  • Перехват: Guardcore Labs разработали клиентскую программу на Golang, способную перехватывать P2P соединения FritzFrog и подключаться к сети как пир.
  • Принадлежность: мы не смогли определить конкретную группу, ответственную за создание FritzFrog, однако текущий ботнет частично похож на ранее известный ботнет Rakos.

Введение


FritzFrog это очень изощренный пиринговый ботнет, который активно взламывает SSH серверы по всему миру. Благодаря своей децентрализованной структуре он распределяет контроль по всем своим узлам. В этой сети нет единой точки отказа, и пиры постоянно общаются друг с другом, чтобы поддерживать ее в устойчивом, обновляемом и постоянно активном состоянии. P2P соединение проводится через зашифрованный канал с использованием AES для симметричного шифрования и протокола Диффи-Хеллмана для обмена ключами.
Читать дальше →

Практикуем разработку небольшого веб-приложения с нуля

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

Hero image


Быть новичком — значит исследовать новые горизонты программирования, шагая в неизвестность, надеясь что где-то там будет лучше.


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


Так о чём это я. Сегодня я здесь чтобы поделится с вами своим первым опытом создания системы из Hedless CMS, API и блога. В связи с отсутствием достаточного количества подобного материала, особенно русскоязычного, я надеюсь что эта статья поможет вам создать подобную систему самостоятельно, избегая ошибок, которые я совершал.


Я расскажу, как я по блокам собрал систему и что из этого получилось. Я не буду объяснять вводную информацию, но оставлю ссылки на ресурсы, где вы можете узнать больше. Иногда сложно найти русскоязычный источник, но я постараюсь. Кроме того, вы можете посмотреть доклад (на английском) или же прочитать эту статью (ближе всего по смыслу), если не уверены в преимуществах микросервисов над монолитной архитектурой.


Исходный код проекта вместе с пошаговым руководством по пользовательскому интерфейсу и API (рекомендую не читать, пока не закончите статью):


Vidzhel/Bluro

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

Распределённые СУБД для энтерпрайза

Время на прочтение8 мин
Количество просмотров6.8K
CAP-теорема является краеугольным камнем теории распределённых систем. Конечно, споры вокруг неё не утихают: и определения в ней не канонические, и строгого доказательства нет… Тем не менее, твёрдо стоя на позициях бытового здравого смысла™, мы интуитивно понимаем, что теорема верна.



Единственное, что не очевидно, так это значение буквы «P». Когда кластер разделился, он решает – то ли не отвечать, пока не будет набран кворум, то ли отдавать те данные, которые есть. В зависимости от результатов этого выбора система классифицируется либо как CP, либо как AP. Cassandra, например, может вести себя и так и так, в зависимости даже не от настроек кластера, а от параметров каждого конкретного запроса. Но если система не «P», и она разделилась, тогда – что?

Ответ на этот вопрос несколько неожиданный: CA-кластер не может разделиться.
Что же это за кластер, который не может разделиться?
А вот

RIPE Atlas

Время на прочтение10 мин
Количество просмотров11K
Всем доброго времени суток! Свою дебютную статью на habr хочу посвятить весьма интересной теме – системе контроля качества сети Интернет RIPE Atlas. Частично поле моих интересов затрагивают вопросы исследования Интернета или киберпространства (термин стремительно набирает популярность, особенно в научных кругах). Материалов по RIPE Atlas в интернете, в том числе на habr, предостаточно, но мне они показались недостаточно целостными. По большей части, в статье использовалась информация с официального сайта RIPE Atlas и собственные соображения. Время для чтения — 8 минут.

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

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

Добавление ноды в Skydive топологию вручную через Skydive client

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

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


Чтобы заинтересовать вас, приведу пару скриншотов про Skydive. Чуть ниже будет пост по введению в Skydive.



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

Vela → умный кеш для time series и не только

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

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


Фламинго


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

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

Вот как это было сделано

Путеводитель по интеллектуальному учёту электроэнергии в России (для энергетиков и потребителей)

Время на прочтение24 мин
Количество просмотров50K
Путеводитель по интеллектуальному учёту охватывает все наиболее важные составляющие этого процесса – юридические, технические, организационные и экономические.



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

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

1. Что такое интеллектуальный учёт?


Сначала определимся с понятиями. Существует обычный счётчик (далее мы будем говорить о счётчиках электроэнергии, поскольку законодательство предусматривает массовое внедрение пока только умного учёта электроэнергии, а по другим ресурсам – вода, тепло, газ – пока нет определённости). Обычный счётчик:

  • считает только энергию нарастающим итогом (есть ещё многотарифные, которые считают нарастающий итог по двум или трём зонам суток – день, ночь, полупик);
  • с его табло нужно раз в месяц списывать показания и передавать поставщику (либо энергокомпании отправляют контролёров списывать показания);
  • не позволяет регулировать потребление энергии (например, отключать неплательщика).

Лайфхак по передаче показаний счётчиков
Кстати, о передаче показаний обычных счётчиков: у многих поставщиков есть личный кабинет на сайте и мобильное приложение, через которое быстро и легко передать показания, получить электронный счёт и оплатить его – проверьте! Просто наберите в поиске название своего поставщика (возьмите его из счёта за электроэнергию) и слова «личный кабинет», «мобильное приложение».
Читать дальше →

Коды избыточности: простыми словами о том, как надёжно и дёшево хранить данные

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


Так выглядит избыточность


Коды избыточности* широко применяются в компьютерных системах для увеличения надёжности хранения данных. В Яндексе их используют в очень многих проектах. Например, применение кодов избыточности вместо репликации в нашем внутреннем объектном хранилище экономит миллионы без снижения надёжности. Но несмотря на широкое распространение, понятное описание того, как работают коды избыточности, встречается очень редко. Желающие разобраться сталкиваются примерно со следующим (из Википедии):



Меня зовут Вадим, в Яндексе я занимаюсь разработкой внутреннего объектного хранилища MDS. В этой статье я простыми словами опишу теоретические основы кодов избыточности (кодов Рида — Соломона и LRC). Расскажу, как это работает, без сложной математики и редких терминов. В конце приведу примеры использования кодов избыточности в Яндексе.


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


* Под термином «коды избыточности» в статье подразумевается инженерный термин «erasure codes».

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

Spreadable — вариант децентрализованной сети

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

image


Зачем вообще нужна децентрализация? Многие люди не совсем понимают смысла, ведь и так вроде все хорошо работает. Причин на самом деле несколько, но обычно сторонники подхода затрагивают только сложные технические моменты, и обывателю становится сложно углядеть суть. Для меня, например, все очень просто.


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

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

Использование HAProxy в качестве Data Plane Service Mesh в архитектуре микросервисов

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

Использование HAProxy в качестве Data Plane Service Mesh в архитектуре микросервисов


HAProxy Data Plane API – это программа, которая работает вместе с HAProxy, чтобы вы могли полностью настроить балансировщик нагрузки HAProxy во время выполнения.


Эта функция позволяет использовать ряд вариантов использования, подходящих для динамически создаваемой конфигурации.


Лучшим примером является использование HAProxy в качестве Data Plane Service Mesh в архитектуре микросервисов, где центральная плоскость управления управляет конфигурацией набора прокси-серверов sidecar.


В этом разделе показано, как установить и настроить Data Plane API и начать работу с несколькими примерами.

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

Edge-ик в тумане и другие приключения периферийных вычислений

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

Добрый день.


Меня зовут Игорь Хапов. Я руководитель разработки в Научно-техническом центре IBM. И сегодня я хотел бы вам помочь окунуться в мир периферийных вычислений, или edge computing, как его ещё называют. Я расскажу о том, что же такое edge computing и как он может повлиять на наш с вами мир. Также хотелось бы пояснить различия между edge computing и fog computing, какие преимущества даёт этот подход. В статье я также описал референсную архитектуру приложения на edge computing. И под конец немного расскажу о проекте с открытым исходным кодом Open Horizon, который совсем недавно присоединился к Linux Foundation.


edge computing align=«center»

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