Hacker News Digest

Тег: #swim

Постов: 2

Heartbeats in Distributed Systems (arpitbhayani.me)

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

Основные компоненты системы сердцебиений: отправитель, который регулярно генерирует сигналы; получатель, отслеживающий время последнего сигнала; интервал отправки (обычно 1-10 секунд); и порог таймаута (обычно в 2-3 раза больше интервала). Кодовые примеры показывают реализацию как отправителя, так и монитора. Интервалы и таймауты требуют баланса между быстрым обнаружением сбоев и устойчивостью к временным задержкам сети.

by sebg • 13 ноября 2025 г. в 13:43 • 131 points

ОригиналHN

#distributed-systems#heartbeats#network-protocols#gossip-protocols#kubernetes#nomad#swim#epidemic-broadcast-trees

Комментарии (44)

  • Проблема высокой нагрузки от частых heartbeat-сообщений (2000 msg/sec для 1000 узлов) требует оптимизации или альтернативных подходов.
  • Gossip-протоколы и динамическая настройка интервалов эффективнее статичных heartbeats для масштабируемости и снижения нагрузки.
  • Важность учета сетевых задержек (p99), топологии и поведенческого анализа узлов вместо простого мониторинга статуса.
  • Рекомендации по ресурсам: изучение SWIM, Epidemic broadcast trees, использование Kubernetes probes или инструментов вроде Nomad.
  • Опасность "зомби-нод" (медленных/неправильно работающих) выше, чем полностью мертвых узлов для стабильности системы.

Corrosion (fly.io)

Fly.io столкнулся с крупнейшим сбоей в истории 1 сентября 2024 года из-за ошибки в Rust-коде их системы распределенного состояния Corrosion. Ошибка в if let выражении над RWLock привела к мгновенному и "заразному" deadlock, который парализовал все прокси-серверы платформы. Авторы подчеркивают, что распределенные системы — это "усилители взрывов": они распространяют данные по сети, а вместе с ними — и ошибки в системах, зависящих от этих данных.

Эта катастрофа стала следствием архитектурных решений Fly.io. В отличие от Kubernetes с его централизованной базой данных, Fly.io использует децентрализованную модель, где серверы являются источником правды о своих рабочих нагрузках. Чтобы масштабироваться по всему миру, они перешли от HashiCorp Consul и SQLite-кэшей к собственной системе Corrosion. Авторы предупреждают: если распределенная система еще не испортила вам выходные или не заставила не спать всю ночь, вы еще не до конца ее понимаете.

by cgb_ • 23 октября 2025 г. в 11:21 • 206 points

ОригиналHN

#rust#corrosion#distributed-systems#deadlock#consul#sqlite#postgresql#gossip-protocol#swim

Комментарии (95)

  • Баг с if let и RWLock в Rust приводил к мгновенному глобальному дедлоку, что вынудило перейти от единого кластера к региональной двухуровневой схеме данных.
  • Использование cr-sqlite (CRDT SQLite) для согласованности вызвало проблемы с nullable-колонками и масштабируемостью, что привело к критике выбора SQLite вместо Postgres.
  • Gossip-протокол (SWIM) показал ограниченную масштабируемость (~2K-3K узлов), что потребовало иерархической структуры и разделения на региональные кластеры.
  • Дизайн блога и отсутствие дат в статьях вызвали нарекания, но технические решения (регионализация, отказ от мгновенного глобального состояния) признаны необходимыми.