Sistemas Distribuidos · Entrega 2 · Defensa
Asteria Online
Un MMORPG que corre en tres datacenters, donde nada se cobra dos veces.
La pregunta del TP
Siete veces la misma pregunta: cuando algo falla, ¿quién pierde oro?
La respuesta que defendemos: nadie pierde oro ni objetos, nada se cobra dos veces y el juego sigue.
Arquitectura general
Siete componentes repartidos en tres datacenters
El gateway · Autenticación
Se inicia sesión una vez; después habla el token
Los cuatro mecanismos que usamos en todo el TP
Cuatro reglas del mundo responden casi todas las fallas
Lo mismo dos veces cuenta una vez
Cada acción con oro u objetos lleva un número único del cliente. Si llega repetida, el servidor devuelve el resultado de la primera vez.
Primero se aparta, después se cobra
El oro se reserva y se descuenta cuando el otro componente confirma; sin confirmación en 30 s, se libera. Si ya se cobró y algo falla: vuelve el oro más un 10 %.
Lo que se acredita, queda escrito
Premios y devoluciones quedan en el buzón del jugador. Si estaba desconectado, se entera al volver a entrar.
Cada batalla tiene un doble
Una copia en otro datacenter recibe, cada 500 ms, sólo los golpes aplicados: unos 2,5 KB. Si el datacenter cae, la copia sigue desde ahí.
Cómo se comunican: todo por gRPC
Cada código de gRPC le dice al cliente qué hacer
Operaciones/ConsultarOperaciones/ListarRecientesBuzon/Leer · Operaciones/Cancelar
Mapa de interacciones
Dieciséis interacciones forman el contrato
2Cliente ↔ Servidor · stream
3Balanceador → Gateways · red
4Gateway → otro DC · gRPC
6→ Servidor de instancia
7→ Directorio (copia local)
8→ Pagos
9→ Control de cupos · todo gRPC
11Servidor → Cuentas
12Servidor → Directorio · gRPC
14Cuentas ↔ Cuentas · Raft
16Pagos → Procesador · HTTPS (no gRPC)
Problema 1 · Interacciones
El oro se reserva antes de pedir lugar y se cobra después del sí
Problema 1 · Entrar a una instancia de zona
Si pagó, entra. Si no entra, no paga.
SoluciónSe reserva el oro, la instancia confirma que hay lugar y recién ahí se cobra.
Problema 1 · Falla F1.3
Si el servidor no confirma en 30 s, el oro vuelve
Lo que se paga: segundos de duda y el 10 % de compensación
Problema 2 · Interacciones
Un stream por jugador; el servidor ordena los golpes y replica cada 500 ms
Problema 2 · Batalla contra el jefe
El servidor manda en la batalla: cada golpe cuenta una vez
SoluciónEl servidor ordena los golpes, replica cada 500 ms y reparte al buzón.
Problema 2 · Fallas F2.3, F2.6 y F2.4
El servidor decide cada golpe; si cae, la réplica sigue
Siete fallas, una sola versión de la batalla
Problema 3 · Interacciones
Una sola llamada decide al dueño, con el acuerdo de dos de tres
Problema 3 · Mercado de objetos
Un objeto único tiene un solo dueño, siempre
SoluciónCambiar de dueño necesita dos de tres datacenters: gana el primero.
Problema 3 · Compra simultánea y falla F3.3
Gana el primero, el otro no paga, y el lado aislado no vende
Nunca dos dueños, aunque un lado no pueda comprar un rato
Problema 4 · Interacciones
La compra queda anotada antes de cobrar, con el id como clave
Problema 4 · Compra de oro con dinero real
Si le cobraron, recibe el oro; nunca se cobra dos veces
SoluciónEl id de la compra es la clave del cobro; una conciliación diaria revisa todo.
Problema 4 · Fallas F4.3 y F4.2
El mismo id viaja hasta el procesador: un solo cobro, aunque caiga el DC
En el peor caso el oro tarda un día; nunca se cobra dos veces
Problema 5 · Interacciones
Sesión, cola y latido: tres llamadas sostienen el lugar
Problema 5 · Pico de jugadores nuevos
Quien ya juega no pierde su lugar por los que llegan
SoluciónA nadie que juega se lo echa; si pierde señal, su lugar se guarda 2 minutos. Los nuevos, en cola.
Problema 5 · Falla F5.1
Un corte de menos de 2 minutos no le hace perder el lugar
El lugar vacío durante el corte lo pagan los que esperan
¿Por qué 2 minutos? Es lo que fija la garantía: alcanza para un corte de señal común y no deja un lugar trabado para siempre.
Problema 6 · Interacciones
La lista sale de la copia local; la entrada se valida en la instancia
Problema 6 · Directorio de zonas
El jugador entra a la que eligió, o a ninguna
SoluciónLa lista sólo sirve para elegir; la entrada se valida antes de cobrar.
Problema 6 · Fallas F6.1 y F6.3
La lista sirve para elegir; la decisión se toma al entrar
La lista siempre responde, aunque a veces muestre lo que ya no está
Problema 7 · Interacciones
Leer es local; cambiar el oro pasa por el líder y dos de tres
Problema 7 · Cuenta del jugador entre datacenters
El mismo oro en cualquier datacenter, gastado una vez
SoluciónLa cuenta está en los tres datacenters con Raft: vale lo que aceptan dos.
Problema 7 · Fallas F7.1, F7.3 y F7.2
Un cambio de oro vale cuando lo aceptan dos de tres
Del lado aislado se ve el saldo, pero no se gasta
CAP: la decisión que atraviesa el TP
Donde hay oro, consistencia. En la lista, disponibilidad.
Mejor decir "no" que equivocarse
- Batalla (Problema 2): una sola versión del combate.
- Mercado (Problema 3): un solo dueño por objeto.
- Cuenta (Problema 7): el mismo oro no se gasta dos veces.
Responder siempre, aunque esté atrasada
- Directorio (Problema 6): si la lista se atrasa, la entrada lo corrige.
Definición ajustada · Instancia/SolicitarIngreso
Lo que cambiamos del ejemplo de la revisión
¿Preguntas?
Casi todo se responde con cuatro reglas: lleva un id, se reserva y se confirma, queda en el buzón, está copiado en otro datacenter.