{"id":32,"date":"2015-05-16T17:30:00","date_gmt":"2015-05-16T15:30:00","guid":{"rendered":"http:\/\/63.33.187.195:8080\/?p=32"},"modified":"2020-10-08T20:31:38","modified_gmt":"2020-10-08T18:31:38","slug":"escalar-aplicaciones-bendito-problema","status":"publish","type":"post","link":"http:\/\/dev.arturobayo.com:8080\/escalar-aplicaciones-bendito-problema\/","title":{"rendered":"Escalar aplicaciones, bendito problema"},"content":{"rendered":"\n

Lanzar una aplicaci\u00f3n a producci\u00f3n<\/strong> conlleva sus riesgos, pero cuando coge la tracci\u00f3n adecuada se convierte en un gran logro. A todos nos gusta ver c\u00f3mo aumenta el n\u00famero de visitantes o seguidores<\/strong> a una velocidad pasmosa, \u00bfno? Pero \u00bfqu\u00e9 ocurre cuando el tr\u00e1fico se incrementa tanto que causa una ca\u00edda en la infraestructura de servidores que soporta la aplicaci\u00f3n<\/strong>? No importa qu\u00e9 hora o d\u00eda sea, el coste de tener tu aplicaci\u00f3n offline es demasiado alto, y en muchos casos podr\u00eda hasta originar p\u00e9rdidas irreversibles<\/strong> al negocio o empresa.<\/p>\n\n\n\n

Si esto ocurre, \u00a1que no cunda el p\u00e1nico<\/em>! Siempre hay maneras de solucionar cualquier problema, y en este caso la soluci\u00f3n pasa por hacer que tu aplicaci\u00f3n sea mucho m\u00e1s fiable y consistente<\/strong>. En el mundo real decimos que \u201cla uni\u00f3n hace la fuerza<\/em>\u201c, en la inform\u00e1tica hablaremos de aumentar la \u201cescalabilidad<\/strong>\u201d de tu aplicaci\u00f3n.<\/p>\n\n\n\n

En general, la escalabilidad es la cualidad de un sistema de soportar un incremento considerable en carga de procesamiento<\/strong> y acomodarse a ello mientras mantiene una experiencia de usuario excelente. Existen dos maneras de escalar un sistema: verticalmente<\/strong> y horizontalmente<\/strong>.<\/p>\n\n\n\n

El escalado vertical<\/strong> es el m\u00e9todo m\u00e1s simple de solventar el problema de rendimiento. Cuando nos quejamos de que el viejo ordenador de casa funciona muy lento, enseguida pensamos en aumentar sus caracter\u00edsticas incrementando la cantidad de memoria RAM, cambiando el procesador o incluso considerando la opci\u00f3n de comprar uno nuevo. Esto es, a grandes rasgos, la definici\u00f3n de escalar verticalmente. Sin embargo, a pesar de que puede ser una soluci\u00f3n inmediata al problema realmente podr\u00edamos estar ocultando la problem\u00e1tica subyacente del sistema, no hay garant\u00edas de que un servidor doblemente potente ejecutar\u00e1 la aplicaci\u00f3n el doble de r\u00e1pido.<\/p>\n\n\n\n

El escalado horizontal<\/strong>, por otro lado, se logra a\u00f1adiendo m\u00e1s servidores al cluster existente. Es en este m\u00e9todo donde aplicamos la frase c\u00e9lebre de la escalabilidad que coment\u00e1bamos antes \u00bfpero qu\u00e9 significa esto exactamente?<\/p>\n\n\n\n

Un cluster<\/strong> es simplemente una agrupaci\u00f3n de servidores. Un balanceador de carga<\/strong> distribuye la carga de trabajo entre los servidores de un cluster. En alg\u00fan punto, un nuevo servidor puede ser a\u00f1adido al cluster existente para manejar m\u00e1s cantidad de carga de los procesos que requieren uso y acceso a tu aplicaci\u00f3n: esto es el escalado horizontal.<\/p>\n\n\n\n

Centr\u00e1ndonos en el mundo de internet y en las tecnolog\u00edas web, a\u00f1adir un nuevo servidor a tu arquitectura va a permitir desahogar la saturaci\u00f3n de carga existente en un servidor debido al incremento puntual (o natural) de tr\u00e1fico en el tiempo.<\/p>\n\n\n\n

\"load_balancer\"<\/a><\/figure><\/div>\n\n\n\n

El balanceador de carga tiene una sola misi\u00f3n: decidir qu\u00e9 servidor del cluster va a recibir la petici\u00f3n que acaba de interceptar<\/strong>. B\u00e1sicamente act\u00faa como un proxy inverso, siendo totalmente transparente para el usuario final.<\/p>\n\n\n\n

Mientras el escalado horizontal es generalmente el m\u00e9todo m\u00e1s fiable y eficiente de escalado, no es tan trivial como el escalado vertical. En general, el principal problema al escalar aplicaciones web es mantener todos los nodos de un cluster actualizados y sincronizados<\/strong>. Veamos un ejemplo:<\/p>\n\n\n\n

Cuando un usuario A entra en ejemplo.com, el balanceador de carga redirige la petici\u00f3n al servidor 1. Por el contrario, el usuario B es redireccionado hacia otro nodo del cluster, el servidor 2.<\/p>\n\n\n\n

\u00bfQu\u00e9 ocurrir\u00eda si el usuario A hace cambios en la aplicaci\u00f3n, como a\u00f1adir contenido a la base de datos o subir un fichero desde su ordenador? \u00bfC\u00f3mo se mantiene la consistencia entre todos los nodos de un cluster<\/strong>? Adem\u00e1s, el motor PHP por defecto guarda la sesi\u00f3n de usuario en disco. Si un usuario A se conecta a la aplicaci\u00f3n, \u00bfc\u00f3mo podemos mantener la sesi\u00f3n de usuario en peticiones subsecuentes, considerando que el balanceador de carga podr\u00eda enviar ese usuario a otro de los nodos del cluster?<\/p>\n\n\n\n

Permaneced atentos al blog porque en los pr\u00f3ximos posts<\/strong> analizaremos cada uno de estos problemas en detalle.<\/p>\n","protected":false},"excerpt":{"rendered":"

Lanzar una aplicaci\u00f3n a producci\u00f3n conlleva sus riesgos, pero cuando coge la tracci\u00f3n adecuada se convierte en un gran logro. A todos nos gusta ver c\u00f3mo aumenta el n\u00famero de visitantes o seguidores a una velocidad pasmosa, \u00bfno? Pero \u00bfqu\u00e9 ocurre cuando el tr\u00e1fico se incrementa tanto que causa una ca\u00edda en la infraestructura de servidores que soporta la aplicaci\u00f3n? No importa qu\u00e9 hora o d\u00eda sea, el coste de tener tu aplicaci\u00f3n offline es demasiado alto, y en muchos casos podr\u00eda hasta originar p\u00e9rdidas irreversibles al negocio o empresa. Si esto ocurre, \u00a1que no cunda el p\u00e1nico! Siempre hay maneras de solucionar cualquier problema, y en este caso la soluci\u00f3n pasa por hacer que tu aplicaci\u00f3n […]<\/p>\n

Continue reading…<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3,5],"tags":[12,13,14],"_links":{"self":[{"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/posts\/32"}],"collection":[{"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/comments?post=32"}],"version-history":[{"count":1,"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/posts\/32\/revisions"}],"predecessor-version":[{"id":33,"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/posts\/32\/revisions\/33"}],"wp:attachment":[{"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/media?parent=32"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/categories?post=32"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/dev.arturobayo.com:8080\/wp-json\/wp\/v2\/tags?post=32"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}