Estoy tratando de encontrar una manera de asignar pesos a un grupo de servidores (un grupo de galera de servidores de bases de datos), y quiero poder calcular siempre un quórum, lo que significa que nunca se debe permitir que ningún conjunto de pesos sume exactamente el 50% (un quórum en este caso significa más del 50%).
¿Existe una fórmula matemática para generar un conjunto de números (probablemente únicos) de forma que nunca se pueda sumar ningún subconjunto de esos números para que sea igual a cualquier subconjunto de los números restantes? Además, ningún número individual debe ser el doble o más del doble de cualquier otro número.
Por ejemplo, con [3, 4, 5], no hay forma de tomar cualquier conjunto de 1, 2 o 3 de esos para que sumen y sean iguales a cualquier subconjunto de números restantes. Siempre habrá una desigualdad, por lo que se puede calcular un quórum (o se puede determinar que no hay quórum, en el caso de que haya demasiados servidores desconectados entre sí).
Entiendo que es un problema relacionado con la administración del servidor, pero parece ser de naturaleza matemática.
Lo que me gustaría es poder asignar pesos individuales a un grupo inicial de servidores, pero idealmente poder generar otro peso si se añade otro servidor al grupo en el futuro.
La aplicación práctica es que todos los servidores conocen su propio peso, y conocen el peso total de todos los servidores. Si un servidor muere repentinamente, o falla la conectividad entre algunos de ellos, los servidores intentan determinar si tienen quórum. Cada servidor que aún pueda comunicarse con otro sumará sus pesos, y si el total de sus pesos es más que exactamente el 50% del total del conjunto inicial, entonces hay quórum, y esos servidores se declararán como el nuevo grupo canónico. Si no consiguen superar el 50%, no tienen quórum y se declararán desconectados o incapaces de continuar con el servicio.