Grupo 7 · Sistemas Distribuidos · Defensa

Asteria Online

Un MMORPG que corre en tres datacenters, donde nada se cobra dos veces.

El problema que defendemos · Problema 3 del TP

Dos jugadores tocan comprar a la vez la misma espada única. ¿De quién es?

La garantía: un objeto único tiene un solo dueño, siempre. Hay dos formas de cumplirla, y cada una pierde algo distinto.

Dos compran a la vez desde datacenters distintos La app manda dos veces reintenta sin saber si la compra llegó Se cortan los datacenters y cada lado podría vender por su cuenta

Arquitectura general

Siete componentes repartidos en tres datacenters

Datacenter 1 Datacenter 2 Datacenter 3 Balanceador globalanycast · saca al DC caído Cliente Gatewayy control de cupos Gatewayy control de cupos Gatewayy control de cupos RaftRaft Cuentasnodo Raft · oro y objetos Cuentasnodo Raft Cuentasnodo Raft 500 ms Servidor de instanciacada batalla Réplica en esperasigue si cae el DC eventualeventual Directorio de zonas Directorio (copia) Directorio (copia) HTTPS Servicio de pagos Procesador

Problema 3 · Interacciones

Una sola llamada decide al dueño, con el acuerdo de dos de tres

El problemaProblema 3 del TP

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.

Id de operaciónReserva y confirmaciónCuentas con Raft
→ aceptar la misión

Solución A, la que elegimos · acuerdo de dos de tres

Gana el primero, el otro no paga, y el lado aislado no vende

Hoja de Ámbar objeto único · 300 de oro dueño: Ivo (vendedor) dueña: Mora Moracompra desde DC1 Teocompra desde DC3 Cuentas DC1líder Cuentas DC2 Cuentas DC3sin mayoría 1º2º DC2 acepta: 2 de 3, vale OK · es tuyo ABORTED · YA_VENDIDOreserva liberada: no pagó nada UNAVAILABLEaislado: no se hizo nada DC1 + DC2: mayoría, siguen
Solución AFallas y trade-offs · Problema 3

Nunca dos dueños, aunque un lado no pueda comprar un rato

FallaQué hace el sistemaQué se gana y qué se pierde
F3.1clientePierde señal después de comprar.Al volver, consulta la compra por su id. Si la reenvía, no se compra dos veces.Ganacompra una sola vez y sabe cómo terminó.
F3.2clienteVe el mercado desactualizado.La compra se valida contra el servidor, no contra lo que ve el jugador. Si ya se vendió, se le libera la reserva (no pagó nada, así que no hay compensación).Ganaun solo dueño.Pierdepuede intentar comprar algo que ya no está.
F3.3infraSe cortan los datacenters entre sí.Del lado que quedó solo no se puede comprar: se le libera la reserva y se le avisa que reintente.Gananunca hay dos dueños consistenciaPierdeno se puede comprar desde ese lado mientras dure el corte.

Solución B, la que descartamos · vender igual y arreglar después

Los dos lados venden; al reconectar hay dos dueños

Hoja de Ámbar objeto único · 300 de oro dueño: Ivo (vendedor) dueña: Mora dueño: Teo Moracompra desde DC1 Teocompra desde DC3 aislado, pero vende Cuentas DC1 Cuentas DC2 Cuentas DC3acepta solo DC1 + DC2: vendida a Mora DC3 solo: vendida a Teo OK · es tuya OK · es tuyo vuelve la conexión: dos dueños del mismo objeto la compra se deshacese le devuelve el oro una de las dos compras se deshace: hay que compensar

Problema 3 · Las dos soluciones, criterio por criterio

Acuerdo de dos de tres: menos disponibilidad, nunca dos dueños

Solución APedir el acuerdo de dos de tres
Solución BComprar igual y arreglar los choques después
¿Un solo dueño?
Siempre.
No: durante el corte puede haber dos dueños.
¿Se compra durante el corte?
Sólo del lado con dos datacenters.
Sí, de los dos lados.
Para el jugador
Un mensaje claro: "reintentá".
Una compra que parecía hecha y después se deshace.
Dificultad
Baja: usa lo que ya tiene el servicio de cuentas.
Alta: hay que deshacer compras y compensar.
Decisión
Elegida
Descartadarompe la garantía de un solo dueño

¿Preguntas?

Un objeto único, un solo dueño: deciden dos de tres datacenters, el segundo no paga y el lado aislado no vende.