Scala + Akka: Как разработать высокодоступный кластер с несколькими машинами

Мы разрабатываем серверную систему на Scala + Akka для игры, которая будет обслуживать клиентов на Android, iPhone и Second Life. Некоторые части этого сервера должны быть высокодоступными и работать на нескольких машинах. Если один из этих серверов выходит из строя (например, из-за аппаратного сбоя), система должна продолжать работать. Я думаю, что хочу, чтобы у клиентов был список машин, к которым они будут пытаться подключиться, подобно тому, как работает Cassandra.

Многоузловые примеры, которые я видел до сих пор с Akka, кажутся мне сосредоточенными вокруг идеи масштабируемости, а не высокой доступности (по крайней мере, в отношении оборудования). В примерах с несколькими узлами всегда есть единственная точка отказа. Например, есть балансировщики нагрузки, но если мне нужно перезагрузить одну из машин, на которых есть балансировщики нагрузки, моя система пострадает от простоя.

Есть ли какие-нибудь примеры, демонстрирующие такой тип отказоустойчивости оборудования для Akka? Или у вас есть какие-нибудь мысли о хороших способах сделать это?

На данный момент лучший ответ, который я смог придумать, - это изучить документы Erlang OTP, поразмышлять над ними, и попытаюсь выяснить, как собрать мою систему, используя строительные блоки, доступные в Akka.

Но если есть ресурсы, примеры или идеи о том, как разделить состояние между несколькими машинами таким образом, что если одна из них выйдет из строя вещи продолжают работать, я бы очень признателен за них, потому что я опасаюсь, что могу заново изобретать колесо здесь. Может быть, есть многоузловой контейнер STM, который автоматически поддерживает синхронизацию общего состояния между несколькими узлами? Или, может быть, это так просто сделать, что документация не утруждает себя демонстрацией примеров того, как это сделать, или, возможно, я еще недостаточно тщательно исследовал и экспериментировал. Любые мысли или идеи будут оценены. Пример в pesudocode: var value: ...

Мне нравится читать о теориях программирования, не могли бы вы сказать мне, есть ли какой-нибудь объектно-ориентированный язык со статической типизацией, который позволяет переменным иметь несколько типов? Пример в псевдокоде:

var value: BigInteger | Double | Nil

Я думаю о способе вызова методов для этого объекта. Если объект значение имеет тип BigInteger | Двойной язык может позволить пользователю вызывать только общие методы (озеро плюс, минус), но если тип равен BigInteger | Двойной | Nil , то объект Nil не имеет методов плюс и минус, поэтому мы не можем сделать ничего полезного с этим объектом, потому что у него всего несколько общих методов (например, toString).

Есть ли идеи, как следует работать с методами вызова переменных с несколькими типами в объектно-ориентированном языке со статической типизацией?

5
задан guest 11 September 2010 в 21:16
поделиться