Cómo detuvimos a jugadores comunes y para DDoS o nuestros servidores: una guía práctica

Hablar de nuevos proyectos es, por supuesto, bueno, pero no siempre todo sale como queremos.

En general, comenzaron a recordar fakap del pasado, cuando la solución a un problema agregó otros nuevos, se dejó llevar y decidió compartir una pareja. Cómo prohibir a jugadores inocentes, matar sus propios servidores, cometer un error en una carta y recibir toneladas de comentarios negativos de los usuarios, eso es todo lo que amamos.



Perdido - consigue una prohibición


Hubo un momento en que nuestro juego War Robots debido a fallas en la arquitectura fue atacado por los tramposos. Hubo utilidades que aumentaron el suministro de salud a los valores cósmicos, lo que los hizo prácticamente inmortales. Como resultado, cerramos la tarea con tramposos, pero no de inmediato.

Al principio, queríamos resolver el problema maravillosamente a nivel técnico: bloquear la capacidad de cambiar los parámetros del robot en el cliente. No logramos hacer esto (entonces, por supuesto, encontramos una manera). Y luego, la primera solución de trabajo fue un golpe de martillo que calculó a los tramposos de acuerdo con un esquema simple:

  1. Cada robot después del partido fue probado por daños.
  2. Si el daño sufrido por el robot excedió el valor de su salud máxima, entonces el jugador fue reconocido como un tramposo y su cuenta fue bloqueada.

La solución fue una muleta, pero efectiva. Los problemas a causa de él comenzaron un poco más tarde, pero primero tendrás que hablar un poco sobre otro error y las características del desarrollo de PvP móvil síncrono.

Cuando los jugadores tienen una conexión a Internet muy traviesa (lo cual es normal en los juegos móviles), pueden ocurrir cosas absolutamente mágicas al intercambiar datos entre el cliente y los servidores. Las solicitudes de los clientes llegan incompletas, fuera de servicio o con un fuerte retraso. En general, un error del servidor permitió que si la conexión es deficiente, el cliente puede enviar los resultados de la batalla dos o incluso tres veces seguidas. En consecuencia, los jugadores podrían recibir 2-3 veces más recompensas o gastar accidentalmente el doble de recursos en reparaciones.

Resolvimos este problema bastante rápido: el perfil del servidor aprendió a ignorar los resultados de batalla innecesarios de un cliente. Después de una prueba exitosa, lanzamos una nueva versión.

Fue aquí que nos cubrió.

Todos los días comencé a prohibir a un montón de jugadores con un martillo neumático, del cual nos olvidamos con seguridad, porque El problema de los robots indestructibles con un suministro infinito de salud era cosa del pasado. Resultó que tan pronto como el cliente del jugador envió los resultados de una batalla en doble cantidad al servidor, el banhammer lo percibió de tal manera que cada robot muerto fue asesinado dos veces, es decir. recibió daño dos veces su salud. Y después de cada batalla, los jugadores volaron a la prohibición en lotes.

Todos, por supuesto, no estaban dispuestos a pagar e incluso pagaron una compensación, pero la situación es regular, no es segura con seguridad.



Cómo configurar DDoS por ti mismo


Ya escribimos sobre la evolución de nuestra infraestructura de servidores, y ahora hemos recordado un caso de esa época.

A finales de 2015, el lanzamiento de la característica tan esperada en War Robots: clanes. Cuando salió la actualización (y era tarde en la noche), abrimos el champán y todo estaría bien. Pero no tuve que alegrarme por mucho tiempo: los servidores de repente se sintieron mal. Resultó que hicimos un ataque DDoS con nuestras propias manos.

Como? Muy simple El cliente en la pantalla de resultados de la batalla, en un intento de obtener información sobre los clanes de los jugadores, hizo demasiadas solicitudes. Y cuando el servidor respondió "déjame solo, error", el cliente regresó al servidor sin tiempo de espera.

Esa misma noche, lavamos la bandera (todavía no teníamos tiempo de cerrar la champaña), que se controló desde el servidor de perfil, bloqueó completamente el funcionamiento de la API de Hangar Client. Para los jugadores que ya se han unido a los clanes, dejamos esta bandera encendida, es decir, todo funcionó para ellos, porque su número no era suficiente para DDoS el servidor.

Como resultado, comenzamos a procesar correctamente las respuestas del servidor en el juego y, en caso de error, aumentamos el tiempo de espera para volver a intentar la solicitud.

Calificación "gratis"


Una historia separada es cuando la implementación de baja calidad se encuentra con el factor humano. Solo que ahora no prohibieron a nadie, sino que, por el contrario, entregaron la calificación de izquierda a derecha. En resumen, una noche nuestro monitoreo (y monitoreamos todo ) registró un crecimiento demasiado rápido en las calificaciones de los jugadores.

Luego resultó que la implementación misma de la calificación en teoría hizo posible duplicar datos. Pero nadie le habría prestado atención si el administrador de turno, debido a un error tipográfico en una carta, reiniciara accidentalmente un servidor que no debía funcionar. Fue él quien comenzó a duplicar las calificaciones de los jugadores.

Tuve que liberar urgentemente una solución e ir a través de la base para eliminar todos los puntos extra que tuvieron tiempo de acumular. Para evitar que esto suceda, en todos los servidores eliminamos el esquema anterior para calcular puntos y excluimos la posibilidad de un lanzamiento erróneo de servicios donde no deberían funcionar. Era necesario hacerlo desde el principio, por supuesto, pero sería demasiado aburrido.

Premio invaluable


Hubo otro fakap con un error tipográfico, pero mucho más serio.

De alguna manera, en Halloween lanzamos una nueva gacha: una lotería. Si alguien no lo sabe, una gacha es la mecánica de obtener un elemento de varios diferentes al azar. En la lotería, el jugador tenía un conjunto visible limitado de premios de diferentes valores. Por cada apertura, el jugador recibió 1 premio, este premio se sacó del conjunto y el precio de apertura aumentó cada vez. Por lo tanto, el jugador seguramente podría comprar todos los premios de la lotería, y los afortunados se llevaron los premios más valiosos en las primeras aperturas (y, en consecuencia, los recibieron a un precio muy bajo).

En general, luego con sangre eliminamos una característica del evento, la probamos y la presentamos. Comenzamos, actualizamos los horarios ... ¡Hurra! ¡Se apresuraron! ... Y al mismo tiempo, toneladas de negatividad en la comunidad caen sobre nosotros porque supuestamente estamos engañando a nuestros jugadores.

Dentro de media hora la lotería tuvo que ser apagada. Sí, realmente engañamos a los jugadores. Pero no fue una cuestión de posibilidades o premios, fue en una carta.

La interfaz de la lotería muestra el costo de la apertura actual (la que aumentó cada vez), por ejemplo, PRECIO: 100 de oro. Así es como se veía el concepto (tenga en cuenta que de acuerdo con la idea, cada tarjeta también tiene un precio de apertura adicional):



Y así es como llegó al final cuando, como resultado de una serie de "mejoras", el PRECIO (precio por participar en la lotería) de repente se convirtió en un PREMIO (premio) para el diseñador:



Al mismo tiempo, debido a la confusión antes del lanzamiento y al mal cheque de cada tarjeta individual, se perdió el precio de apertura, lo que en conjunto confundió a los jugadores.

Y presionaron reflexivamente el botón hasta que pasaron toda la dureza. Bueno, qué, el "premio" aumenta con cada compra. Y así fue en 18 idiomas. Al mismo tiempo, también teníamos "configuraciones regionales" en el cliente, por lo que era posible corregir incluso una letra solo a través de una revisión.

Como resultado, revelaron la situación, introdujeron puntos de control adicionales, devolvieron el oro a los jugadores y guardaron las configuraciones regionales en el servidor para que nada de esto volviera a suceder.

Es hora de presentar el hashtag # Kosyakinaprode

Source: https://habr.com/ru/post/es417441/


All Articles