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

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

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

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

Шардинг в Блокчейне

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

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


Хорошо известно, что Ethereum, самая популярная dApps платформа, обрабатывает меньше чем 20 транзакций в секунду. Из-за этого ограничения цена транзакций и время на их подтверждение очень высоки: несмотря на то, что блок в Ethereum публикуется раз в 10-12 секунд, согласно ETH Gas Station время между отправкой транзакции и тем как она действительно попадает в блок в среднем 1.2 минуты. Низкая пропускная способность, высокие цены и долгое подтверждение транзакций не позволяет запускать на Ethereum какие-либо высокопроизводительные сервисы.


Основная причина того, что Ethereum не может обрабатывать больше 20 транзакций в секунду заключается в том, что каждая нода в Ethereum должна проверить каждую транзакцию. За пять лет с выхода Ethereum было предложено много идей как решить эту проблему. Эти решения можно грубо разбить на две группы: те, которые предлагают делегировать выполнение транзакций небольшой группе нод с очень хорошим железом, и те, которые предлагают каждой ноде обрабатывать только подмножество всех транзакций. Пример первого подхода — это Thunder, в котором блоки создаются только одной нодой, что позволяет, по утверждениям разработчиков, получать 1200 транзакций в секунду, что в 100 раз больше чем у Ethereum. Другие примеры из первой категории — это Algorand, SpaceMesh, Solana. Все эти протоколы улучшают разные аспекты протокола и позволяют выполнять больше транзакций чем в Ethereum, но все ограничены скоростью одной (пусть и очень мощной) машины.

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

Отказоустойчивая балансировка VoIP-трафика. Переключение нагрузки между дата-центрами в пик-тайм

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

Несколько слов о том, чем мы занимаемся. DINS участвует в разработке и поддержке UCaaS сервиса на международном рынке для корпоративных клиентов. Сервис используют как малые компании и стартапы, так и большой бизнес. Клиенты подключаются через интернет по SIP протоколу поверх TCP, TLS или WSS. Это создает довольно большую нагрузку: почти 1,5 миллиона соединений от оконечных устройств — телефонных аппаратов Polycom/Cisco/Yealink и софт-клиентов для PC/Mac/IOS/Android.


В статье я рассказываю о том, как устроены VoIP точки входа в систему.

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

Николай Дуров на 90% закончил разработку платформы Telegram Open Network

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

На фотографии: к.ф.-м.н. Николай Дуров, автор протокола шифрования MTProto, ряда ключевых подсистем «ВКонтакте» и блокчейн-платформы TON

Telegram в течение месяца покажет инвесторам блокчейн-платформу TON (Telegram Open Network) для криптовалюты Gram. Несколько источников издания The Bell и газеты «Ведомости» подтвердили, что встреча состоится в Дубае, хотя точная дата ещё не назначена. Запуск основной сети запланирован на март.

О плане разработать блокчейн-платформу с собственной криптовалютой Павел Дуров объявил в январе 2018 года. TON должен решить ключевую проблему современных криптовалют — низкую производительность, что мешает полноценно заменить глобальные платёжные системы. Если Visa и Mastercard обрабатывают около 50-60 тыс. операций в секунду, то Bitcoin и Etherium — всего 7 и 15 операций в секунду, соответственно.

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

О чем думать на NALSD собеседовании

Время на прочтение6 мин
Количество просмотров13K
Я описывал ранее типичное кодинг-интервью. Помимо кодинга почти всегда есть вопрос на проектирование систем. (Large) System Design. В случае собеседований на SRE, это еще более интересный (как по мне) зверь — NALSD. Non-abstract large system design. Главное отличие между SWE и SRE именно в этих буковках “NA”.

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

Например — давайте спроектируем библиотеку. Для бумажных книг, обычную такую. Весь текст ниже был написан в один присест за примерно час, чтобы примерно показать что можно успеть, и что важно успеть. Так что уж простите за сумбурность, но я так мыслю (а значит, так существую).
Читать дальше →

Знакомство с реактивным программированием в Spring

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

На этой неделе мы ожидаем из типографии новую книгу по Spring 5:


Среди интересных возможностей Spring 5 отдельного упоминания заслуживает реактивное программирование, о реализации которого в этом фреймворке кратко рассказывает предлагаемая статья Мэтта Рэйбла (Matt Raible). В вышеупомянутой книге реактивные паттерны рассмотрены в главе 11.

Соавтором Мэтта выступил Джош Лонг, автор еще одной отличной книги про Java и Spring, "Java в облаке", вышедшей у нас прошлым летом.
Читать дальше →

Реактивный раздатчик ok.ru/music

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


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

Nomad: проблемы и решения

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

Первый сервис в Nomad я запустил в сентябре 2016 года. На данный момент пользуюсь как программист и занимаюсь поддержкой как администратор двух Nomad кластеров — один "домашний" для своих личных проектов (6 микро-виртуалок в Hetzner Cloud и ArubaCloud в 5 разных датацентрах Европы) и второй рабочий (порядка 40 приватных виртуальных и физических серверов в двух датацентрах).


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



Ямальский кочевник делает Continous Delivery инстанса вашего ПО © National Geographic Россия

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

Двухфазный коммит и будущее распределённых систем

Время на прочтение5 мин
Количество просмотров33K
В этой статье мы смоделируем и исследуем протокол двухфазного коммита с помощью TLA+.

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

Проблема двухфазного коммита


Транзакция проходит через диспетчеры ресурсов (RM). Все RM должны договориться, будет транзакция завершена или прервана.

Менеджер транзакций (TM) принимает окончательное решение: коммит или отмена. Условием для коммита является готовность к коммиту всех RM. В противном случае транзакцию следует отменить.
Читать дальше →

Фреймворк: анализ DLT-систем

Время на прочтение14 мин
Количество просмотров7.5K
Данная работа нацелена на определение, является ли анализируемый объект DLT-системой. Полученные результаты, хорошо подходят для сравнительного анализа разных проектов, начиная от структуры управления, заканчивая определением ссылок, на которые ссылаются транзакции.

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

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

Chain replication: построение эффективного KV-хранилища (часть 2/2)

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

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

Время фрагментарно; немного о сходстве распределенных систем и слабой модели памяти

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

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

Консистентность и ACID-гарантии в распределенных системах хранения данных

Время на прочтение8 мин
Количество просмотров31K
Распределенные системы используют, когда возникает необходимость в горизонтальном масштабировании, чтобы обеспечить повышенные показатели производительности, которые не способна обеспечить за адекватные деньги вертикально масштабированная система.

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

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

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

Эта статья основана на наших материалах по консистентности и ACID-гарантиям в распределенных системах.
Читать дальше →

Chain replication: построение эффективного KV-хранилища (часть 1/2)

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

В данной статье рассмотрим архитектуры простых и эффективных KV-хранилищ с использованием цепной репликации (chain replication), которая активно исследуется и успешно применяется в различных системах.
Читать дальше →

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

GridGain на Highload: где поговорить про распределенные СУБД, In-Memory и open source

Время на прочтение3 мин
Количество просмотров1.8K
Если 8 и 9 ноября вы будете на конференции Highload++, это отличный повод для встречи. Оба дня на стенде GridGain (А4) будут присутствовать архитекторы и разработчики, которе ответят на любые вопросы про Apache Ignite и GridgGain. Кроме разговоров и стикеров на стенде можно принять участие в небольшом исследовании. Каждый вечер в 18:15 между ответившими на вопросы будут разыграны полезные книги. А также у нас запланированы 1 доклад, 2 митапа и 1 мини-батл.



Присоединяйтесь!
Читать дальше →

Построение распределенной VPN сети на базе Check Point. Несколько типовых сценариев

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


В данной статье мы рассмотрим варианты построения распределенных сетей с помощью Check Point. Я постараюсь описать главные особенности Site-to-Site VPN от Check Point, рассмотрю несколько типовых сценариев, опишу плюсы и минусы каждого из них и попробую рассказать, как можно сэкономить при планировании распределенной VPN сети.

Check Point использует стандартный IPSec


Это первое, что нужно знать про Site-to-Site VPN от Check Point. И этот тезис отвечает на один из самых частый вопросов относительно Check Point VPN:

— Можно ли его “подружить” с другими устройствами?
— Да, можно!

Так называемый 3rd party VPN. Поскольку используется стандартный IPSec, то и VPN можно строить с любым устройством, которое поддерживает IPSec. Лично я пробовал строить VPN с Cisco ASA, Cisco Router, D-Link, Mikrotik, StoneGate. Все работает, хотя и есть некоторые особенности. Главное правильно задать все параметры для первой и второй фазы. Поддерживаемые параметры для IPSec соединения:
Читать дальше →

Реконсиляция — проверка целостности данных в распределенных системах

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


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


Требования, которые выставляет заказчик — минимальное время данной операции, поскольку чем раньше расхождение будет найдено, тем легче будет устранить его последствия. Задача заметно усложняется тем, что системы находятся в постоянном движении (~ 100 000 транзакций в час) и добиться 0% расхождений не получится.

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

Как обеспечивается высокая доступность в Kubernetes

Время на прочтение5 мин
Количество просмотров18K
Прим. перев.: Оригинальная статья была написана техническим писателем из Google, работающим над документацией для Kubernetes (Andrew Chen), и директором по software engineering из SAP (Dominik Tornow). Её цель — доступно и наглядно объяснить основы организации и реализации high availability в Kubernetes. Нам кажется, что у авторов получилось, поэтому мы рады поделиться переводом.



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

Kubernetes — масштабируемый и надёжный движок оркестровки контейнеров. Масштабируемость здесь определяется отзывчивостью в присутствии нагрузки, а надёжность — отзывчивостью в присутствии отказов.
Читать дальше →

Фатализм в обработке ошибок

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

Предисловие


Эта статья является реакцией на статью: Что будет с обработкой ошибок в С++2a. После каждого абзаца у меня появлялся зуд, открывались зарубцованные раны и начинали кровоточить. Может, я принимаю слишком близко к сердцу то, что написано. Но просто хочется выть о той близорукости и безграмотности, что проявляют программисты на С++ в 21 веке. Причем даже не в его начале.


Приступим.


Классификация


Условно все ошибочные ситуации в программе можно разделить на 2 большие группы:
  1. Фатальные ошибки.
  2. Не фатальные, или ожидаемые ошибки.

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

Kronos: никаких путешествий во времени даже в распределенных системах

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

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


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


Однако, можно придумать нечто более надежное — Kronos. В статье мы посмотрим на алгоритм учета причинно-следственной связи и его применение для построения Key-Value хранилища с распределенными транзакциями.


image

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

DDIA book (книга с кабанчиком) — сделай level up в понимании баз данных

Время на прочтение4 мин
Количество просмотров40K
Несколько месяцев назад на одной из ретроспектив мы решили попробовать совместное чтение.

Наш формат:

  1. Выбираем книгу.
  2. Определяем часть, которую необходимо прочитать за неделю. Выбираем небольшой объем.
  3. В пятницу обсуждаем прочитанное.
  4. Читаем в нерабочее время, обсуждаем в рабочее.
  5. После окончания книги совместно выбираем следующую.

Что дает:

  1. Мотивация на чтение и дочитывание.
  2. Развитие скиллов (в том числе на будущее).
  3. Выравнивание майндсета и терминологии в команде.
  4. Рост доверия.
  5. Лишний повод пообщаться.

Одна из недавних книг, которую мы читали — Designing Data-Intensive Applications. Да-да, та самая книга с кабанчиком. И эта книга настолько всем понравилась, что я решил сделать здесь обзор, чтобы большее количество людей ее прочитали.


Карта в исходном качестве
Читать дальше →