Либо я не понял вопрос, либо по FLP такое сделать нельзя. (консенсус эквивалентен детектору сбоев)
Top-level
Либо я не понял вопрос, либо по FLP такое сделать нельзя. (консенсус эквивалентен детектору сбоев) 11 comments
@mudasobwa > Если […] не более 1 процесса […] без консенсуса/leader election тут не обойтись Вот уж воистину, во многой мудрости — много печали. Консенсус тут не нужен, как следствие — FLP impossibility вообще ни при чем. Мне не нужно ни о чем договариваться. Нода №1 померла — нода №2 это увидела и начала сосать данные вместо нее, а в дороге сообщила нодам №№3–N, что теперь она главная. Алгоритм «кто-первый-встал-того-и-тапки» — не нуждается в консенсусе и потому FLP не подвержен. @mudasobwa @kirillgrachoff нет, невозможно; только в условиях сплита сети, но там и консенсус облажается, и в ECS обычно сплитов все-таки не бывает. @kirillgrachoff конкретно в моем случае — BEAM cluster — нигде экплицитно это записано не будет, просто я запускаю на всех нодах процесс с именем `{:global, Consumer}` и первый запустится и вернет `pid`, а все последующие попытки получат обратно `{:error, {:already_started, pid}}` и всё. Тут за меня BEAM все сам сделает, проблема только в мониторинге. https://github.com/am-kantox/solo/blob/main/lib/solo.ex#L179 @mudasobwa (у меня 0 знаний, кроме тех, что BEAM - это что-то про Erlang и поднятие акторов) @kirillgrachoff у меня нет никаких проблем с моей экосистемой; я уже давно написал код, который работает, протестирован, и вообще с ним все хорошо. Мой вопрос звучал так: как сие решают на джаве, го и ноде. Ответ «консенсус» — это хороший ответ, я приму его к сведению. На го, скорее всего, иначе действительно никак, но везде, где есть виртуальная машина — консенсус в хер не вперся, VM вполне себе в курсе, что, где и как. А когда падает VM, об этом тут же узнает сервер соединений, и тоже ок. @mudasobwa Либо etcd, либо Zookeeper часто используют, если это не критично. Если критично, то велосипедят свой консенсус на C++. |
@kirillgrachoff ну, не вообще нельзя ни на микросекунду потерять соединение, но переконнектиться надо в пределах миллисекунд, если нода померла