Open jmontene opened 10 years ago
Quiero comenzar con esto pero tengo dudas: 1) Todos los servidores guardan una lista con los otros servidores, no? Esta lista de estados que tiene que tener? Yo cuento nombre el servidor, ip, puerto de entrada y estado no? Mejor hacer una clase especial para esto? 2) Que algoritmo vamos a terminar usando? El del anillo o el de que cada quien pasa un mensaje a los mas grandes que el y el que no reciba respuesta queda elegido? 3) Lo otro es, sera que es mejor que el primero que se de cuenta que se cayo el jefe, mande un mensaje de "emergencia" a los demás para que paren lo que estén haciendo mientras se escoge el próximo? Pienso que este lo puede manejar el mismo hilo que recibe los mensajes y lo que hace es que bloquea al otro para que no envié una respuesta hasta que se active el jefe o que por lo menos sepa que no va enviar respuesta por que el jefe murió y ya alguien comenzó la selección.
1) Por los momentos cada servidor tiene una lista de ServerInfo de atributos. ServerInfo contiene en teoria todo lo necesario. Creo que ahora mismo solo tiene nombre, estado y archivos. 2) Creo que el del grandulón seria el mejor por ser el mas simple 3) Todos los algoritmos de elección funcionan en teoria incluso si todos se ponen a hacer la elección, osea que eventualmente todos se darán cuenta y dejarán de hacer lo que estaban haciendo. Esto funciona solo si el servidor principal manda algo asi como un "ACK" sujeto a timeout cuando algun otro servidor le manda respuesta
Como hacen los servidores trabajadores para avisar que están prendidos? Mandan un broadcast con su info?
Inicialmente los servidores no tienen nada, asi que solo mandan que "estan". Habiamos acordado que las actualizaciones a los demás servidores pasaban al revés. Cada servidor pregunta de vez en cuando el estado de los demás. Si no, pudiera ocurrir que alguien se muere y nunca nadie se da cuenta
Aunque también se podría hacer con lo de las actualizaciones, y sólo se darian cuenta que se cayó si tratan de hacer unicast y ocurre un timeout
Implementar el algoritmo de elección de nuevo coordinador