{"id":626,"date":"2025-01-06T10:00:00","date_gmt":"2025-01-06T10:00:00","guid":{"rendered":"https:\/\/cloudlab.urv.cat\/catedracloud\/?p=626"},"modified":"2025-01-02T15:53:17","modified_gmt":"2025-01-02T15:53:17","slug":"la-escalable-arquitectura-nativa-al-cloud-de-pokemon-go","status":"publish","type":"post","link":"https:\/\/cloudlab.urv.cat\/catedracloud\/2025\/01\/06\/la-escalable-arquitectura-nativa-al-cloud-de-pokemon-go\/","title":{"rendered":"La escalable arquitectura nativa al cloud de Pok\u00e9mon GO"},"content":{"rendered":"\n<p>El lanzamiento del videojuego para m\u00f3viles Pok\u00e9mon GO en 2016 <a href=\"https:\/\/cloud.google.com\/blog\/products\/containers-kubernetes\/bringing-pokemon-go-to-life-on-google-cloud\">represent\u00f3 un desaf\u00edo de ingenier\u00eda colosal sin precedentes<\/a>. Pokemon GO es un juego para m\u00f3viles con una caracter\u00edsticas que lo hacen \u00fanico: es un videojuego de realidad aumentada que fusiona el mundo real con el virtual. Los usuarios deben salir a la calle y moverse f\u00edsicamente para desplazar a su avatar en el juego, caminar por diferentes zonas, como bosques o lagos, para encontrar y atrapar sus Pok\u00e9mon favoritos, formar equipos y batallar con otros jugadores para lograr victorias. El mapa virtual del videojuego es el propio mundo real: las calles se convierten en zonas de captura de Pok\u00e9mons, y los lugares emblem\u00e1ticos en puntos de reuni\u00f3n clave en el juego. La complejidad de las mec\u00e1nicas de este videojuego reside en que todos los usuarios comparten una visi\u00f3n global y com\u00fan del juego en tiempo real. Por ejemplo, un Pok\u00e9mon salvaje que aparece en una ubicaci\u00f3n concreta debe ser visible para todos los jugadores que se encuentran en esa zona. Poder soportar estas caracter\u00edsticas, a gran escala, con usuarios distribuidos geogr\u00e1ficamente alrededor del globo, y con expectativas para que el juego fuera fluido forman un complejo problema de ingenier\u00eda de sistemas distribuidos.<\/p>\n\n\n\n<p>La novedad de la mec\u00e1nica del juego y la gran popularidad de Pok\u00e9mon en la cultura pop obligaron al equipo de desarrolladores del juego a recurrir a ingenieros de Google Cloud para enfrentar este reto de ingenier\u00eda sin precedentes. Las expectativas eran altas: Pok\u00e9mon es la franquicia de medios m\u00e1s grande del mundo. Los ingenieros probaron su arquitectura con una carga de tr\u00e1fico cinco veces superior a la carga media esperada, suponiendo el peor de los casos imaginados. La realidad es que el tr\u00e1fico pico fue cincuenta veces el esperado, diez veces m\u00e1s que en el peor de los casos previsto.<\/p>\n\n\n\n<p>Durante el lanzamiento del videojuego, ambos equipos trabajaron codo a codo para desplegar los servicios en plataformas escalables en la nube, como Google Datastore y Google Kubernetes Engine, y lograron salir airosos, haciendo que el lanzamiento del juego fuera un rotundo \u00e9xito.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"A Rare Pok\u00e9mon Caused A Huge Stampede In Central Park\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/DNjpqm73GBY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Desde su lanzamiento, Pok\u00e9mon GO sigue siendo un juego popular. Aunque ya han pasado los d\u00edas de su pico m\u00e1ximo de jugadores, la base de usuarios se ha estabilizado y Niantic contin\u00faa confiando en Google Cloud para gestionar los picos de demanda en momentos cr\u00edticos, como los D\u00edas de la Comunidad o el Pok\u00e9mon GO Fest, una convenci\u00f3n anual que re\u00fane a jugadores de todo el mundo. Durante estos eventos, las transacciones por segundo en los servicios del juego pueden pasar de 400,000 a casi un mill\u00f3n en cuesti\u00f3n de segundos.<\/p>\n\n\n\n<p><a href=\"https:\/\/cloud.google.com\/blog\/topics\/developers-practitioners\/how-pok%C3%A9mon-go-scales-millions-requests\">En este blog de Google<\/a>, ingenieros de Google Cloud y Pok\u00e9mon GO nos explican la arquitectura actual de los servicios del juego, con un enfoque en mantener la calidad del servicio durante estos picos de tr\u00e1fico, garantizando una experiencia de juego fluida para todos los jugadores.<\/p>\n\n\n\n<p>Las tecnolog\u00edas principales de los servicios en la nube de Pokemon GO son <a href=\"https:\/\/cloud.google.com\/kubernetes-engine?hl=es-419\">Google Kubernetes Engine<\/a> (GKE) y\u00a0 <a href=\"https:\/\/cloud.google.com\/spanner?hl=es\">Google Cloud Spanner<\/a>.<\/p>\n\n\n\n<p>Originalmente, la base de datos principal del juego se basaba en Google Datastore, un servicio de base de datos administrado NoSQL altamente escalable pero simple. Sin embargo, a medida que Pok\u00e9mon GO crec\u00eda y se desarrollaban nuevas caracter\u00edsticas, los desarrolladores comenzaron a notar las limitaciones de Datastore. Para lograr una mejor escalabilidad, capacidades de datos relacionales y consistencia fuerte, migraron los servicios a Cloud Spanner. La capacidad de Spanner para gestionar transacciones globales resulta vital para mantener las experiencias de juego en tiempo real.<\/p>\n\n\n\n<p>Google Kubernetes Engine aloja los servicios front-end de Pok\u00e9mon GO debido a su capacidad para escalar f\u00e1cilmente en momentos clave. Las herramientas de monitoreo, logging y el soporte de ingenieros de Google aseguran estas operaciones sin inconvenientes. La infraestructura de Niantic incluye miles de nodos Kubernetes y 5000 nodos Spanner, que trabajan en conjunto para mantener una visi\u00f3n unificada donde los jugadores comparten el mismo mundo virtual.<\/p>\n\n\n\n<p><strong>\u00bfQu\u00e9 ocurre cuando capturas un Pok\u00e9mon?<\/strong><\/p>\n\n\n\n<p>Uno de los pilares clave en la arquitectura de Pok\u00e9mon GO es la distribuci\u00f3n geogr\u00e1fica de los usuarios. Al abrir la app, el servicio Google Cloud Load Balancing distribuye a los jugadores seg\u00fan su ubicaci\u00f3n geogr\u00e1fica. Un componente clave de la arquitectura es un backend de consultas geo-espaciales, que mantiene una cach\u00e9 de los datos del juego dividido por ubicaci\u00f3n. Este servicio determina qu\u00e9 Pok\u00e9mon aparecen en el mapa, cu\u00e1les gimnasios y su estado, las Pok\u00e9-Paradas cercanas, y cualquier otra caracter\u00edstica basada en la localizaci\u00f3n.<\/p>\n\n\n\n<p>Cuando el jugador interacciona con el juego, como cuando se captura un Pok\u00e9mon, se env\u00eda un evento desde el frontend de Google Kubernetes Engine a Spanner a trav\u00e9s de la API. Spanner es consistente: una vez que se recibe la actualizaci\u00f3n, los datos espaciales se actualizan en la memoria y se utilizan para atender futuras solicitudes desde el frontend. Por ejemplo, cuando un jugador captura un gimnasio, estos datos se persisten en Spanner en ese mismo momento, actualizando adem\u00e1s la cach\u00e9 del servicio de consultas espaciales. Posteriormente, cualquier otro jugador que interact\u00fae con el gimnasio, har\u00e1 que el frontend recupere informaci\u00f3n del backend de consulta espacial y la env\u00ede de regreso al usuario.<\/p>\n\n\n\n<p>Uno de los secretos para que el backend de consultas geo-espaciales pueda soportar miles de jugadores simult\u00e1neos es que los eventos que ocurren en el juego son totalmente deterministas. Por ejemplo, el tiempo y lugar en que un Pok\u00e9mon salvaje aparece. As\u00ed, aunque varios jugadores est\u00e9n en diferentes r\u00e9plicas del servicio, pero en la misma ubicaci\u00f3n f\u00edsica, tendr\u00e1n una visi\u00f3n igual del mundo Pok\u00e9mon. Para ello, existe una compleja l\u00f3gica detr\u00e1s, sincronizaci\u00f3n y almacenamiento en cach\u00e9, especialmente para eventos.<\/p>\n\n\n\n<p>En resumen, la sofisticada y escalable ingenier\u00eda detr\u00e1s de Pok\u00e9mon GO permite una agradable experiencia de juego de realidad aumentada en tiempo real. La arquitectura de Pokemon GO hace posible que millones de jugadores disfruten de una experiencia inmersiva y sin interrupciones. Con constantes innovaciones, Pok\u00e9mon GO sigue marcando nuevas fronteras en el \u00e1mbito de los juegos m\u00f3viles.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El lanzamiento del videojuego para m\u00f3viles Pok\u00e9mon GO en 2016 represent\u00f3 un desaf\u00edo de ingenier\u00eda colosal sin precedentes. Pokemon GO es un juego para m\u00f3viles con una caracter\u00edsticas que lo hacen \u00fanico: es un videojuego de realidad aumentada que fusiona el mundo real con el virtual. Los usuarios deben salir a la calle y moverse [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":629,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"categories":[34,15,43],"tags":[],"class_list":["post-626","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-almacenamiento","category-divulgacion","category-videojuegos"],"jetpack_featured_media_url":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2.jpg","uagb_featured_image_src":{"full":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2.jpg",1132,636,false],"thumbnail":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2-150x150.jpg",150,150,true],"medium":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2-300x169.jpg",300,169,true],"medium_large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2-768x431.jpg",768,431,true],"large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2-1024x575.jpg",1024,575,true],"1536x1536":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2.jpg",1132,636,false],"2048x2048":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/01\/go-tournament-header2.jpg",1132,636,false]},"uagb_author_info":{"display_name":"Aitor Arjona","author_link":"https:\/\/cloudlab.urv.cat\/catedracloud\/author\/aitor\/"},"uagb_comment_info":4,"uagb_excerpt":"El lanzamiento del videojuego para m\u00f3viles Pok\u00e9mon GO en 2016 represent\u00f3 un desaf\u00edo de ingenier\u00eda colosal sin precedentes. Pokemon GO es un juego para m\u00f3viles con una caracter\u00edsticas que lo hacen \u00fanico: es un videojuego de realidad aumentada que fusiona el mundo real con el virtual. Los usuarios deben salir a la calle y moverse&hellip;","_links":{"self":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/626","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/comments?post=626"}],"version-history":[{"count":3,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/626\/revisions"}],"predecessor-version":[{"id":633,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/626\/revisions\/633"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media\/629"}],"wp:attachment":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media?parent=626"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/categories?post=626"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/tags?post=626"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}