Мы разрабатываем серверную систему в Scala + Akka для игры, которая будет обслуживать клиентов в Android, iPhone и Second Life. Есть части этого сервера, которые должны быть высокодоступными, работающих на нескольких машинах. Если один из этих серверов умирает (скажем, сбой оборудования), система должна продолжать работать. Я думаю, что я хочу, чтобы у клиентов был список машин, с которыми они будут пытаться соединиться, подобно тому, как работает Cassandra.
Примеры с несколькими node, которые я видел до сих пор с Akka, кажутся мне сосредоточенными вокруг идеи масштабируемости, а не высокой доступности (по крайней мере, в отношении аппаратного обеспечения). В примерах multi- node всегда есть одна точка отказа. Например, есть балансировщики нагрузки, но если мне нужно перезагрузить одну из машин с балансировщиками нагрузки, моя система будет страдать от простоев.
Есть ли примеры, показывающие эту аппаратную отказоустойчивость для Akka? Или у вас есть мысли о хороших способах сделать это?
До сих пор лучшим ответом, который я смог придумать, является изучение документов Erlang OTP, размышление над ними и попытка выяснить, как объединить мою систему с помощью строительных блоков, доступных в Akka.
Но если есть ресурсы, примеры или идеи о том, как разделить состояние между несколькими машинами таким образом, что если один из них идет вниз, все будет работать, я бы их оценил, потому что я обеспокоен тем, что могу быть повторно изобретая колесо здесь. Может быть, существует контейнер multi- node STM, который автоматически синхронизирует общее состояние между несколькими узлами? Или, может быть, так легко сделать, что документация не беспокоит показ примеров того, как это сделать, или, может быть, я недостаточно тщательно изучил и экспериментировал. Любые мысли или идеи будут оценены.