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