TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #108 1.55K
Продолжим разбирать кабанчика? («Высоконагруженные приложения» Мартина Клепманна)

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

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

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

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

Ненадежные сети

Внутренние сети ЦОДов и сам Интернет — это асинхронные сети пакетной передачи данных. В таких сетях узел может отправлять сообщения (пакеты) другим узлам, но сеть не дает гарантий, когда они будут доставлены и будут ли доставлены вообще.

Если мы отправили запрос и не получили ответ, то не знаем, почему так произошло:
🔹 потерян запрос?
🔹 не работает удаленный узел?
🔹 потерян ответ?

Во многих системах необходимо автоматически обнаруживать, что какой-то узел отказал.
Например:
‰
‰➡️ балансировщик нагрузки должен прекращать отправлять запросы узлам, которые не отвечают
‰
‰➡️ в распределенной БД при репликации с одним ведущим узлом в случае его сбоя нужно «повысить в ранге» один из ведомых узлов до нового ведущего (глава 5 про репликацию)

Обычно для обнаружения сбоев используют способ с ограничением время ожидания. По истечении этого времени вы перестаете ждать ответ и считаете, что он вообще не будет получен.

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

😵‍💫Длительное время ожидания означает, что нужно долго ждать, прежде чем объявить узел вышедшим из строя и все это время пользователи должны ждать или видеть сообщение об ошибке.

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

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

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

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

⭐️Или даже лучше: вместо того чтобы использовать заранее заданное время ожидания, система может непрерывно измерять время отклика и и автоматически подстраивать под него время ожидания. Для этого есть специальное ПО.

Здесь уместно сказать об отличии транспортных протоколов TCP и UDP.

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

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

#кабанчик #сисдиз
  • 🔥 10
  • ❤ 7
  • 👍 7
  • 😁 5
  • 🐳 1
More from @jane_yanchenko
  1. Sep 30, 2026Представьте ситуацию. Дисклеймер: пример вымышленный, проблема реально встречающаяся 🐤 Вы…
  2. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  3. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  4. Sep 23, 2026Куда пропало обращение Однажды от руководителя техподдержки пришло письмо, суть которого с…
  5. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  6. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →