{"id":383,"date":"2020-07-01T23:47:18","date_gmt":"2020-07-01T23:47:18","guid":{"rendered":"https:\/\/arsum.cl\/?page_id=383"},"modified":"2020-07-02T13:45:50","modified_gmt":"2020-07-02T13:45:50","slug":"arquitectura-web-101-los-conceptos-basicos-de-arquitectura-que-me-hubiera-gustado-conocer-cuando-comence-como-desarrollador-web","status":"publish","type":"page","link":"https:\/\/arsum.cl\/?page_id=383","title":{"rendered":"Arquitectura Web 101:  Los conceptos b\u00e1sicos de arquitectura que me hubiera gustado conocer cuando comenc\u00e9 como desarrollador web."},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"383\" class=\"elementor elementor-383\">\n\t\t\t\t\t\t<div class=\"elementor-inner\">\n\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dae7b43 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"dae7b43\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e7dd231\" data-id=\"e7dd231\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-17d7085 elementor-widget elementor-widget-text-editor\" data-id=\"17d7085\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Veamos el siguiente diagrama para un descripci\u00f3n general de la arquitectura moderna de aplicaciones web:<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-769d5a4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"769d5a4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4c3708f\" data-id=\"4c3708f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-7085a29 elementor-widget elementor-widget-image\" data-id=\"7085a29\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img width=\"665\" height=\"421\" src=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_K6M-x-6e39jMq_c-2xqZIQ.png\" class=\"attachment-large size-large\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_K6M-x-6e39jMq_c-2xqZIQ.png 665w, https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_K6M-x-6e39jMq_c-2xqZIQ-300x190.png 300w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c43dc19 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c43dc19\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4ba384b\" data-id=\"4ba384b\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4e89798 elementor-widget elementor-widget-text-editor\" data-id=\"4e89798\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>El anterior diagrama es una representaci\u00f3n bastante buena de la arquitectura en Storyblocks (Nota del traductor: Storyblocks es la compa\u00f1\u00eda donde trabaja el autor original de este art\u00edculo; m\u00e1s datos al fin de este art\u00edculo). Si no eres un desarrollador web experimentado, es probable que te resulte complicado. El recorrido a continuaci\u00f3n deber\u00eda hacerlo m\u00e1s accesible antes de sumergirnos en los detalles de cada componente.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3c26327 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3c26327\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-989faa4\" data-id=\"989faa4\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-fe4726b elementor-widget elementor-widget-text-editor\" data-id=\"fe4726b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><em>Un usuario busca en Google \u00abFuerte, hermosa niebla y rayos de sol en el bosque\u00bb. El primer resultado es de Storyblocks, nuestro sitio l\u00edder en fotos e im\u00e1genes vectoriales. El usuario hace clic en el resultado que redirige su navegador a la p\u00e1gina de detalles de la imagen. Por debajo, el navegador del usuario env\u00eda una solicitud a un servidor DNS para buscar c\u00f3mo contactar Storyblocks y luego env\u00eda la solicitud.<\/em><\/p><p><em>La solicitud llega a nuestro balanceador de carga, que elige aleatoriamente uno de los aproximadamente diez servidores web que tenemos en funcionamiento al momento de procesar la solicitud. El servidor web busca informaci\u00f3n sobre la imagen en nuestro servicio de almacenamiento en cach\u00e9 y obtiene los datos restantes de la base de datos. Notamos que el perfil de color para la imagen a\u00fan no se ha calculado, por lo que enviamos un trabajo de \u00abperfil de color\u00bb a nuestra cola de trabajos, que nuestros servidores de colas procesar\u00e1n de forma asincr\u00f3nica, actualizando la base de datos adecuadamente con los resultados.<\/em><\/p><p><em>A continuaci\u00f3n, intentamos encontrar fotos similares enviando una solicitud a nuestro servicio de b\u00fasqueda de texto completo utilizando el t\u00edtulo de la foto como entrada. El usuario est\u00e1 conectado a Storyblocks como miembro, por lo que buscamos la informaci\u00f3n de su cuenta en nuestro servicio de cuentas de usuarios. Finalmente, enviamos un evento de vista de p\u00e1gina a nuestra manguera de incendios, para que se registre en nuestro sistema de almacenamiento en la nube y finalmente se cargue en nuestro almac\u00e9n de datos, que los analistas usan para ayudar a responder preguntas sobre el negocio.<\/em><\/p><p><em>El servidor ahora representa la vista como HTML y la env\u00eda de vuelta al navegador del usuario, pasando primero por el equilibrador de carga. La p\u00e1gina contiene activos Javascript y CSS que cargamos en nuestro sistema de almacenamiento en la nube, que est\u00e1 conectado a nuestra CDN, por lo que el navegador del usuario se pone en contacto con la CDN para obtener el contenido. Por \u00faltimo, el navegador visualiza la p\u00e1gina para que el usuario la vea.<\/em><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a82a37f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a82a37f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b5bf057\" data-id=\"b5bf057\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5821228 elementor-widget elementor-widget-text-editor\" data-id=\"5821228\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>A continuaci\u00f3n, te guiar\u00e9 a trav\u00e9s de cada componente, proporcionando una introducci\u00f3n \u00ab101\u00bb de cada uno, lo que deber\u00eda darte un buen modelo mental de la arquitectura web de aqu\u00ed en adelante.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-4130eae elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4130eae\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4d2f56c\" data-id=\"4d2f56c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ce2da58 elementor-widget elementor-widget-heading\" data-id=\"ce2da58\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">1. DNS<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a650a12 elementor-widget elementor-widget-text-editor\" data-id=\"a650a12\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>DNS significa \u00abSistema de Nombres de Dominio\u00bb (de la sigla en ingl\u00e9s de \u00abDomain Name System\u00bb) y es una tecnolog\u00eda esencial y que hace posible la world wide web. En el nivel m\u00e1s b\u00e1sico, el DNS proporciona una b\u00fasqueda de clave\/valor desde un nombre de dominio (por ejemplo, google.com) a una direcci\u00f3n IP (por ejemplo, 85.129.83.120), que es necesaria para que tu computador pueda enrutar una solicitud a la direcci\u00f3n apropiada del servidor. Haciendo analog\u00eda con los n\u00fameros de tel\u00e9fono, la diferencia entre un nombre de dominio y una direcci\u00f3n IP es la diferencia entre \u00abllamar a Juan P\u00e9rez\u00bb y \u00abllamar al 201-867\u20135309\u00bb. Del mismo modo en que necesitabas una gu\u00eda telef\u00f3nica para buscar el n\u00famero de Juan en los viejos tiempos, necesitas un DNS para buscar la direcci\u00f3n IP de un dominio. Por lo tanto, puedes pensar en DNS como la gu\u00eda telef\u00f3nica de Internet. Hay muchos m\u00e1s detalles que podr\u00edamos ver aqu\u00ed, pero los pasaremos por alto porque no es cr\u00edtico para nuestra introducci\u00f3n a nivel \u00ab101\u00bb.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-edcfdd2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"edcfdd2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-780f266\" data-id=\"780f266\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2c810b7 elementor-widget elementor-widget-heading\" data-id=\"2c810b7\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">2. Balanceador de Carga<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d04c38 elementor-widget elementor-widget-text-editor\" data-id=\"3d04c38\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Antes de sumergirnos en los detalles sobre el balance de carga, vamos un paso atr\u00e1s revisar escalabilidad horizontal y vertical de una aplicaci\u00f3n. \u00bfQu\u00e9 son y cu\u00e1l es la diferencia? En pocas palabras, <a href=\"https:\/\/stackoverflow.com\/questions\/11707879\/difference-between-scaling-horizontally-and-vertically-for-databases\">en esta publicaci\u00f3n de StackOverflow<\/a>, <i>escalabilidad horizontal<\/i> significa que es posible crecer agregando m\u00e1s m\u00e1quinas a su grupo de recursos, mientras que la escalabilidad \u00abvertical\u00bb significa que creces agregando m\u00e1s potencia (por ejemplo, CPU, RAM) a una m\u00e1quina existente.<\/p><p>En el desarrollo web, (casi) siempre vas a querer escalar horizontalmente porque, por decirlo as\u00ed de simple, las cosas se echan a perder. Los servidores se caen en cualquier momento. Las redes se degradan. Centros de datos completos ocasionalmente quedan fuera de l\u00ednea. Tener m\u00e1s de un servidor te permite planificar interrupciones para que tu aplicaci\u00f3n contin\u00fae ejecut\u00e1ndose. En otras palabras, tu aplicaci\u00f3n es \u00abtolerante a fallas\u00bb. En segundo lugar, la escalabilidad horizontal te permite acoplar m\u00ednimamente diferentes partes del backend de tu aplicaci\u00f3n (servidor web, base de datos, un servicio X, etc.) haciendo que cada una de ellas se ejecute en diferentes servidores. Por \u00faltimo, puedes alcanzar una escala donde ya no es posible escalar verticalmente. No hay computadora en el mundo lo suficientemente grande como para hacer todos los c\u00e1lculos de tu aplicaci\u00f3n. Considera la plataforma de b\u00fasqueda de Google como un ejemplo por excelencia, aunque esto se aplica a empresas a escalas mucho menores. Storyblocks, por ejemplo, ejecuta entre 150 y 400 instancias de AWS EC2 en cualquier momento dado. Ser\u00eda todo un desaf\u00edo proveer esa potencia de c\u00f3mputo a trav\u00e9s de escalabilidad vertical.<\/p><p>Bueno, volvamos a los balanceadores de carga. Son la salsa m\u00e1gica que hace posible escalar horizontalmente. Enrutan las solicitudes entrantes a uno de los muchos servidores de aplicaciones que generalmente son clones\/im\u00e1genes espejadas entre s\u00ed y env\u00edan la respuesta del servidor de aplicaciones al cliente. Cualquiera de ellos debe procesar la solicitud de la misma manera, por lo que es solo una cuesti\u00f3n de distribuir las solicitudes en el conjunto de servidores para que ninguno de ellos est\u00e9 sobrecargado.<\/p><p>Y eso es. Conceptualmente, los balanceadores de carga son bastante sencillos. Bajo la superficie, ciertamente hay complicaciones, pero no es necesario sumergirse en ellas en nuestra versi\u00f3n 101.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-feb9ea9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"feb9ea9\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6adb95a\" data-id=\"6adb95a\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-52a2618 elementor-widget elementor-widget-heading\" data-id=\"52a2618\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">3. Servidores de Aplicaciones Web<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-768f3f2 elementor-widget elementor-widget-text-editor\" data-id=\"768f3f2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>A alto nivel, los servidores de aplicaciones web son relativamente simples de describir. Ejecutan la l\u00f3gica comercial central que maneja la solicitud de un usuario y env\u00eda de vuelta HTML al navegador del usuario. Para hacer su trabajo, generalmente se comunican con una variedad de infraestructura de back-end, como bases de datos, capas de almacenamiento en cach\u00e9, colas de jobs, servicios de b\u00fasqueda, otros microservicios, colas de datos\/logs y m\u00e1s. Como se mencion\u00f3 anteriormente, normalmente tienes al menos dos, y muchas veces muchos m\u00e1s, conectados a un balanceador de carga para procesar las solicitudes de los usuarios.<\/p><p>Has de saber que las implementaciones de servidor de aplicaciones requieren elegir un lenguaje espec\u00edfico (Node.js, Ruby, PHP, Scala, Java, C#, .NET, etc.) y un framework web MVC para ese lenguaje (Express for Node.js, Ruby on Rails, Play for Scala, Laravel for PHP, etc.). Sin embargo, sumergirse en los detalles de estos lenguajes y marcos est\u00e1 m\u00e1s all\u00e1 del alcance de este art\u00edculo.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7ee7db4 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7ee7db4\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e7bf8fd\" data-id=\"e7bf8fd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-4bbf7da elementor-widget elementor-widget-heading\" data-id=\"4bbf7da\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">4. Servidores de Bases de Datos<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-672ae6d elementor-widget elementor-widget-text-editor\" data-id=\"672ae6d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Cada aplicaci\u00f3n web moderna utiliza una o m\u00e1s bases de datos para almacenar informaci\u00f3n. Las bases de datos proporcionan formas de definir tus estructuras de datos, insertar datos nuevos, encontrar datos existentes, actualizar o eliminar datos existentes, realizar c\u00e1lculos en los datos y m\u00e1s. En la mayor\u00eda de los casos, los servidores de aplicaciones web se comunican directamente con uno, al igual que los servidores de jobs. Adem\u00e1s, cada servicio de back-end puede tener su propia base de datos aislada del resto de la aplicaci\u00f3n.<\/p>\n<p>Aunque trato de evitar una inmersi\u00f3n muy profunda en tecnolog\u00edas particulares para cada componente de la arquitectura, le estar\u00eda haciendo un mal servicio sin mencionar el siguiente nivel de detalle para las bases de datos: SQL y NoSQL.<\/p>\n<p>SQL significa \u00ablenguaje de consulta estructurado\u00bb (del ingl\u00e9s \u00abstructured query language\u00bb) y fue inventado en la d\u00e9cada de 1970 para proporcionar una forma est\u00e1ndar de consultar conjuntos de datos relacionales que fuera accesible para una audiencia amplia. Las bases de datos SQL almacenan datos en tablas que est\u00e1n vinculadas entre s\u00ed a trav\u00e9s de ID comunes, generalmente n\u00fameros enteros. Veamos un ejemplo simple de almacenamiento de informaci\u00f3n de direcci\u00f3n hist\u00f3rica para los usuarios. Es posible que tenga dos tablas, users y user_addresses, vinculadas entre s\u00ed por el ID del usuario. Ve la imagen a continuaci\u00f3n para una versi\u00f3n simplista. Las tablas est\u00e1n vinculadas porque la columna user_id en la tabla user_addresses es clave for\u00e1nea de la columna ID en la tabla users.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-808fc5a elementor-widget elementor-widget-image\" data-id=\"808fc5a\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img width=\"451\" height=\"171\" src=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_Ln39QPggpJVMAScUBsrcCQ.png\" class=\"attachment-large size-large\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_Ln39QPggpJVMAScUBsrcCQ.png 451w, https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_Ln39QPggpJVMAScUBsrcCQ-300x114.png 300w\" sizes=\"(max-width: 451px) 100vw, 451px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-09aeac0 elementor-widget elementor-widget-text-editor\" data-id=\"09aeac0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><span style=\"font-size: 18px;\">Si no sabes mucho sobre SQL, te recomiendo que sigas un tutorial como el que puedes encontrar en Khan Academy <a href=\"https:\/\/www.khanacademy.org\/computing\/computer-programming\/sql\">aqu\u00ed<\/a>. Es omnipresente en el desarrollo web, por lo que al menos vas a querer conocer los conceptos b\u00e1sicos para dise\u00f1ar correctamente una aplicaci\u00f3n.<\/span><\/p><p>NoSQL, que significa exactamente \u00abno SQL\u00bb, es un nuevo conjunto de tecnolog\u00edas de bases de datos que ha surgido para manejar la gran cantidad de datos que pueden producir las aplicaciones web a gran escala (la mayor\u00eda de las variantes de SQL no se escalan horizontalmente muy bien y solo puede escalar verticalmente a un cierto punto). Si no sabes nada sobre NoSQL, te recomiendo comenzar con algunas introducciones de alto nivel como estas:<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96e7d37 elementor-widget elementor-widget-text-editor\" data-id=\"96e7d37\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li><a href=\"https:\/\/www.w3resource.com\/mongodb\/nosql.php\" target=\"_blank\" rel=\"noopener\">https:\/\/www.w3resource.com\/mongodb\/nosql.php<\/a><\/li><li><a href=\"http:\/\/www.kdnuggets.com\/2016\/07\/seven-steps-understanding-nosqldatabases.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.kdnuggets.com\/2016\/07\/seven-steps-understanding-nosqldatabases.html<\/a>\u00a0<\/li><li><a href=\"https:\/\/resources.mongodb.com\/getting-started-with-mongodb\/back-to-basics-1introduction-to-nosql\" target=\"_blank\" rel=\"noopener\">https:\/\/resources.mongodb.com\/getting-started-with-mongodb\/back-to-basics-1introduction-to-nosql<\/a><\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a762b5 elementor-widget elementor-widget-text-editor\" data-id=\"5a762b5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><span style=\"font-size: 18px;\">Tambi\u00e9n deber\u00edas tener en cuenta que, en general, la industria se est\u00e1 alineando en SQL como interfaz incluso para las bases de datos NoSQL, por lo que realmente deber\u00eda aprender SQL si no lo sabes. Casi no hay forma de evitarlo en estos d\u00edas.<\/span><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8b566b5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8b566b5\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-651c911\" data-id=\"651c911\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2e18ed8 elementor-widget elementor-widget-heading\" data-id=\"2e18ed8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">5. Servicio de Cach\u00e9<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-612c042 elementor-widget elementor-widget-text-editor\" data-id=\"612c042\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Un servicio de cach\u00e9 proporciona un almac\u00e9n de datos de clave\/valor simple que permite guardar y buscar informaci\u00f3n en un tiempo cercano a O(1). Por lo general, las aplicaciones aprovechan los servicios de cach\u00e9 para guardar los resultados de c\u00e1lculos costosos para que sea posible recuperar los resultados de la memoria cach\u00e9 en lugar de volver a calcularlos la pr\u00f3xima vez que se necesiten. Una aplicaci\u00f3n puede almacenar en cach\u00e9 los resultados de una consulta de base de datos, llamadas a servicios externos, HTML para una URL determinada y muchos m\u00e1s. Aqu\u00ed hay algunos ejemplos de aplicaciones del mundo real:<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d8ccb8b elementor-widget elementor-widget-text-editor\" data-id=\"d8ccb8b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li><span style=\"font-size: 18px;\">Google almacena en cach\u00e9 los resultados de b\u00fasqueda para consultas de b\u00fasqueda comunes como \u00abperro\u00bb o \u00abTaylor Swift\u00bb en lugar de volver a calcularlas cada vez.<\/span><\/li><li>Facebook almacena en cach\u00e9 gran parte de los datos que ve cuando inicia sesi\u00f3n, como datos de publicaciones, amigos, etc. Lee\u00a0<a href=\"https:\/\/medium.com\/@shagun\/scaling-memcache-at-facebook-1ba77d71c082\" target=\"_blank\" rel=\"noopener\">aqu\u00ed\u00a0<\/a>un art\u00edculo detallado sobre la tecnolog\u00eda de almacenamiento en cach\u00e9 de Facebook.<\/li><li>Storyblocks almacena en cach\u00e9 la salida HTML de la representaci\u00f3n de React del lado del servidor, resultados de b\u00fasqueda, resultados de escritura anticipada y m\u00e1s.<\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4e979f elementor-widget elementor-widget-text-editor\" data-id=\"d4e979f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><span style=\"font-size: 18px;\">Las dos tecnolog\u00edas de servidor de almacenamiento en cach\u00e9 m\u00e1s extendidas son Redis y Memcache.<\/span><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-932a0f5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"932a0f5\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-3aa0a19\" data-id=\"3aa0a19\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6a38618 elementor-widget elementor-widget-heading\" data-id=\"6a38618\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">6. Colas de Jobs y Servidores<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da3353b elementor-widget elementor-widget-text-editor\" data-id=\"da3353b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>La mayor\u00eda de las aplicaciones web necesitan hacer un trabajo as\u00edncrono tras bambalinas que no est\u00e1 directamente asociado con la respuesta a la solicitud de un usuario. Por ejemplo, Google necesita rastrear e indexar toda la Internet para devolver los resultados de b\u00fasqueda. No hace esto cada vez que busca. En cambio, rastrea la web de forma asincr\u00f3nica, actualizando los \u00edndices de b\u00fasqueda en el camino.<\/p><p>Si bien existen diferentes arquitecturas que permiten realizar trabajos asincr\u00f3nicos, la m\u00e1s ubicua es la que denominar\u00e9 arquitectura de \u00abcola de trabajos\u00bb (job queue). Se compone de dos componentes: una cola de \u00abtrabajos\u00bb que deben ejecutarse y uno o m\u00e1s servidores de trabajos (a menudo llamados \u00abworkers\u00bb) que ejecutan los trabajos en la cola.<\/p><p>Las colas de trabajos (o \u00abjobs\u00bb) almacenan una lista de trabajos que deben ejecutarse de forma asincr\u00f3nica. Las m\u00e1s simples son las colas \u00abprimero en entrar, primero en salir\u00bb (FIFO), aunque la mayor\u00eda de las aplicaciones terminan necesitando alg\u00fan tipo de sistema de colas priorizadas. Siempre que la aplicaci\u00f3n necesite ejecutar un trabajo, ya sea en alg\u00fan tipo de programaci\u00f3n regular o seg\u00fan lo determinado por las acciones del usuario, simplemente agrega el trabajo apropiado a la cola.<\/p><p>Storyblocks, por ejemplo, aprovecha una cola de trabajo para impulsar gran parte del trabajo tras bambalinas requerido para dar soporte a nuestros mercados. Realizamos trabajos para codificar videos y fotos, procesar archivos CSV para etiquetado de metadatos, agregar estad\u00edsticas de usuarios, enviar correos electr\u00f3nicos de restablecimiento de contrase\u00f1a y m\u00e1s. Comenzamos con una cola FIFO simple, aunque actualizamos a una cola priorizada para garantizar que las operaciones urgentes como el env\u00edo de correos electr\u00f3nicos de restablecimiento de contrase\u00f1a se completen lo antes posible.<\/p><p>Los servidores de trabajos procesan trabajos. Sondean permanentemente la cola de trabajos para determinar si hay trabajo que hacer y, si lo hay, sacan un trabajo de la cola y lo ejecutan. Las opciones de lenguajes de programaci\u00f3n y marcos subyacentes son tan numerosas como para los servidores web, por lo que no profundizar\u00e9 en este art\u00edculo.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8790f31 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8790f31\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-eb6c8e6\" data-id=\"eb6c8e6\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5ca81ec elementor-widget elementor-widget-text-editor\" data-id=\"5ca81ec\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98868fe elementor-widget elementor-widget-heading\" data-id=\"98868fe\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">7. Servicio de B\u00fasqueda de Texto<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-acc67f2 elementor-widget elementor-widget-text-editor\" data-id=\"acc67f2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Muchas, si no la mayor\u00eda de las aplicaciones web admiten alg\u00fan tipo de funci\u00f3n de b\u00fasqueda en la que un usuario proporciona una entrada de&nbsp;<span style=\"font-size: 18px;\">texto (a menudo llamada \u00abconsulta\u00bb) y la aplicaci\u00f3n devuelve los resultados m\u00e1s \u00abrelevantes\u00bb. La tecnolog\u00eda que impulsa esta funcionalidad generalmente se conoce como \u00abb\u00fasqueda de texto completo\u00bb, que aprovecha un&nbsp;<\/span><a href=\"https:\/\/es.wikipedia.org\/wiki\/\u00cdndice_invertido\" target=\"_blank\">\u00edndice invertido<\/a>&nbsp;<span style=\"font-size: 18px;\">para buscar r\u00e1pidamente documentos que contienen las palabras clave de consulta.<\/span><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5199b4 elementor-widget elementor-widget-image\" data-id=\"a5199b4\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img width=\"561\" height=\"189\" src=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_gun_BpdDH9KrNna1NnaocA.png\" class=\"attachment-large size-large\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_gun_BpdDH9KrNna1NnaocA.png 561w, https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_gun_BpdDH9KrNna1NnaocA-300x101.png 300w\" sizes=\"(max-width: 561px) 100vw, 561px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dd3d0a6 elementor-widget elementor-widget-text-editor\" data-id=\"dd3d0a6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Ejemplo que muestra c\u00f3mo tres t\u00edtulos de documentos se convierten en un \u00edndice invertido para facilitar la b\u00fasqueda r\u00e1pida de una palabra clave espec\u00edfica a los documentos con esa palabra clave en el t\u00edtulo. Tenga en cuenta que las palabras comunes como \u00aben\u00bb, \u00abEl\u00bb, \u00abcon\u00bb, etc. (llamadas palabras de detenci\u00f3n), generalmente no se incluyen en un \u00edndice invertido.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e81f702 elementor-widget elementor-widget-text-editor\" data-id=\"e81f702\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><span style=\"font-size: 18px;\">Si bien es posible realizar una b\u00fasqueda de texto completo directamente desde algunas bases de datos (por ejemplo, MySQL admite la b\u00fasqueda de texto completo), es t\u00edpico ejecutar un \u00abservicio de b\u00fasqueda\u00bb separado que computa y almacena el \u00edndice invertido y proporciona una interfaz de consulta. La plataforma de b\u00fasqueda de texto completo m\u00e1s popular hoy en d\u00eda es\u00a0<\/span><a href=\"https:\/\/www.elastic.co\/products\/elasticsearch\" target=\"_blank\" rel=\"noopener\">Elasticsearch<\/a><span style=\"font-size: 18px;\">, aunque hay otras opciones como\u00a0<\/span><a href=\"http:\/\/sphinxsearch.com\" target=\"_blank\" rel=\"noopener\">Sphinx\u00a0<\/a><span style=\"font-size: 18px;\">o\u00a0<\/span><a href=\"http:\/\/lucene.apache.org\/solr\/features.html\" target=\"_blank\" rel=\"noopener\">Apache Solr<\/a><span style=\"font-size: 18px;\">.<\/span><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d59dc9b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"d59dc9b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8e5d6fe\" data-id=\"8e5d6fe\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-cb28a12 elementor-widget elementor-widget-heading\" data-id=\"cb28a12\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">8. Servicios<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2230639 elementor-widget elementor-widget-text-editor\" data-id=\"2230639\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Una vez que una aplicaci\u00f3n alcanza una cierta escala, es probable que haya ciertos \u00abservicios\u00bb dise\u00f1ados para ejecutarse como aplicaciones separadas. No est\u00e1n expuestos al mundo externo, pero la aplicaci\u00f3n y otros servicios interact\u00faan con ellos. Storyblocks, por ejemplo, tiene varios servicios operativos y planificados:<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5820e97 elementor-widget elementor-widget-text-editor\" data-id=\"5820e97\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ul><li><span style=\"font-size: 18px;\">El\u00a0 <strong>servicio de cuentas de usuario<\/strong> almacena datos de usuarios en todos nuestros sitios, lo que nos permite ofrecer f\u00e1cilmente oportunidades de venta cruzada y crear una experiencia de usuario m\u00e1s unificada.<\/span><\/li><li>El <strong>servicio de contenidos<\/strong> almacena metadatos para todo nuestro contenido de video, audio e imagen. Tambi\u00e9n proporciona interfaces para descargar el contenido y ver el historial de descargas.<\/li><li>El <strong>servicio de pago<\/strong> proporciona una interfaz para facturar tarjetas de cr\u00e9dito de clientes.<\/li><li>El <strong>servicio de HTML a PDF<\/strong> proporciona una interfaz simple que acepta HTML y devuelve el documento PDF correspondiente.<\/li><\/ul>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-dd92d9b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"dd92d9b\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e440603\" data-id=\"e440603\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8b54076 elementor-widget elementor-widget-heading\" data-id=\"8b54076\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">9. Datos<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58d65c2 elementor-widget elementor-widget-text-editor\" data-id=\"58d65c2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Hoy, las empresas viven y mueren en funci\u00f3n de lo bien que aprovechan los datos. En la actualidad, casi todas las aplicaciones, una vez que alcanzan cierta escala, aprovechan una tuber\u00eda de datos para garantizar que los datos se puedan recopilar, almacenar y analizar. Una tuber\u00eda t\u00edpica tiene tres etapas principales:<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f1150cd elementor-widget elementor-widget-text-editor\" data-id=\"f1150cd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<ol>\n<li>La aplicaci\u00f3n env\u00eda datos, generalmente eventos sobre las interacciones del usuario, a la manguera de datos que proporciona una interfaz de transmisi\u00f3n para ingerir y procesar los datos. Muchas veces los datos sin procesar se transforman o aumentan y pasan a otra manguera. AWS Kinesis y Kafka son las dos tecnolog\u00edas m\u00e1s comunes para este prop\u00f3sito.<br><br><\/li>\n<li>Los datos en bruto, as\u00ed como los datos finales transformados\/aumentados se guardan en el almacenamiento en la nube. AWS Kinesis proporciona una configuraci\u00f3n llamada \u00abmanguera de bomberos\u00bb (firehose) que hace que guardar los datos sin procesar en tu almacenamiento en la nube (S3) sea extremadamente f\u00e1cil de configurar.<br><br><\/li>\n<li>Los datos transformados\/aumentados a menudo se cargan en un almac\u00e9n de datos para su an\u00e1lisis. Usamos AWS Redshift, al igual que una gran y creciente porci\u00f3n del mundo de las startups, aunque las compa\u00f1\u00edas m\u00e1s grandes a menudo usar\u00e1n Oracle u otras tecnolog\u00edas de almacenamiento propietarias. Si los conjuntos de datos son lo suficientemente grandes, es posible que se requiera una tecnolog\u00eda NoSQL MapReduce similar a Hadoop para el an\u00e1lisis.<\/li>\n<\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-18ebfd4 elementor-widget elementor-widget-text-editor\" data-id=\"18ebfd4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Otro paso que no se muestra en el diagrama de arquitectura: cargar datos de las bases de datos operativas de la aplicaci\u00f3n y los servicios en el almac\u00e9n de datos. Por ejemplo, en Storyblocks cargamos nuestras VideoBlocks, AudioBlocks, Storyblocks, servicio de cuentas de usuarios y bases de datos de portal de colaboradores en Redshift todas las noches. Esto proporciona a nuestros analistas un conjunto de datos hol\u00edstico al ubicar los datos comerciales centrales junto con nuestros datos de eventos de interacci\u00f3n con el usuario.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6ee727d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6ee727d\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-8942f92\" data-id=\"8942f92\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f177c82 elementor-widget elementor-widget-heading\" data-id=\"f177c82\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">10. Almacenamiento en la Nube<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3862b94 elementor-widget elementor-widget-text-editor\" data-id=\"3862b94\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>\u00abEl almacenamiento en la nube es una forma simple y escalable de almacenar, acceder y compartir datos a trav\u00e9s de Internet\u00bb, seg\u00fan AWS. Puedes usarlo para almacenar y acceder a m\u00e1s o menos cualquier cosa que almacene en un sistema de archivos local con los beneficios de poder interactuar con \u00e9l a trav\u00e9s de una API RESTful a trav\u00e9s de HTTP. La oferta de Amazon S3 es, con mucho, el almacenamiento en la nube m\u00e1s popular disponible en la actualidad y en el que confiamos ampliamente aqu\u00ed en Storyblocks para almacenar nuestros recursos de video, fotos y audio, nuestro CSS y Javascript, nuestros datos de eventos de usuarios y mucho m\u00e1s.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9d38b67 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9d38b67\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-efa1ef1\" data-id=\"efa1ef1\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9520b5c elementor-widget elementor-widget-heading\" data-id=\"9520b5c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">11. CDN<\/h2>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e888714 elementor-widget elementor-widget-text-editor\" data-id=\"e888714\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>CDN significa \u00abContent Delivery Network\u00bb (Red de Entrega de Contenidos) y la tecnolog\u00eda proporciona una forma de entregar servicios como HTML est\u00e1tico, CSS, Javascript e im\u00e1genes en la web mucho m\u00e1s r\u00e1pido que entregarlos desde un \u00fanico servidor de origen. Funciona mediante la distribuci\u00f3n del contenido en muchos servidores \u00abperimetrales\u00bb en todo el mundo para que los usuarios terminen descargando activos de los servidores \u00abperimetrales\u00bb en lugar del servidor de origen. Por ejemplo, en la imagen a continuaci\u00f3n, un usuario en Espa\u00f1a solicita una p\u00e1gina web de un sitio con servidores de origen en Nueva York, pero los activos est\u00e1ticos de la p\u00e1gina se cargan desde un servidor \u00abborde\u00bb CDN en Inglaterra, lo que evita requerimientos HTTP lentos a trav\u00e9s del Atl\u00e1ntico.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-55a78ac elementor-widget elementor-widget-image\" data-id=\"55a78ac\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-image\">\n\t\t\t\t\t\t\t\t\t\t\t\t<img width=\"918\" height=\"411\" src=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_ZkC_5865Hx-Cgph3iPJghw.png\" class=\"attachment-large size-large\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_ZkC_5865Hx-Cgph3iPJghw.png 918w, https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_ZkC_5865Hx-Cgph3iPJghw-300x134.png 300w, https:\/\/arsum.cl\/wp-content\/uploads\/2020\/07\/1_ZkC_5865Hx-Cgph3iPJghw-768x344.png 768w\" sizes=\"(max-width: 918px) 100vw, 918px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bb3a32c elementor-widget elementor-widget-text-editor\" data-id=\"bb3a32c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><span style=\"font-size: 18px;\">Fuente: https:\/\/www.creative-artworks.eu\/why-use-a-content-delivery-network-cdn<\/span><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a6bb351 elementor-widget elementor-widget-text-editor\" data-id=\"a6bb351\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p><span style=\"font-size: 18px;\">Mira\u00a0<\/span><a href=\"https:\/\/www.creative-artworks.eu\/why-use-a-content-delivery-network-cdn\/\" target=\"_blank\" rel=\"noopener\">este art\u00edculo<\/a><span style=\"font-size: 18px;\">\u00a0para una introducci\u00f3n m\u00e1s completa. En general, una aplicaci\u00f3n web siempre debe usar un CDN para servir CSS, Javascript, im\u00e1genes, videos y cualquier otro activo. Algunas aplicaciones tambi\u00e9n pueden aprovechar una CDN para servir p\u00e1ginas HTML est\u00e1ticas.<\/span><\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b632edf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b632edf\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-0641433\" data-id=\"0641433\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-12157da elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"12157da\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2ac4073 elementor-widget elementor-widget-text-editor\" data-id=\"2ac4073\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-text-editor elementor-clearfix\">\n\t\t\t\t<p>Esta es una traducci\u00f3n del art\u00edculo de Jonathan Fulton, SVP Product &amp; Engineering en la compa\u00f1\u00eda de venta de medios Storyblocks. Se public\u00f3 el 7 de noviembre de 2017 en su blog, donde puedes leer el art\u00edculo original\u00a0<a href=\"https:\/\/engineering.videoblocks.com\/web-architecture-101-a3224e126947\" target=\"_blank\" rel=\"noopener\"><b>aqu\u00ed<\/b><\/a>.<\/p>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Veamos el siguiente diagrama para un descripci\u00f3n general de la arquitectura moderna de aplicaciones web: El anterior diagrama es una representaci\u00f3n bastante buena de la arquitectura en Storyblocks (Nota del traductor: Storyblocks es la compa\u00f1\u00eda donde trabaja el autor original de este art\u00edculo; m\u00e1s datos al fin de este art\u00edculo). Si no eres un desarrollador [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":305,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"0","ocean_custom_header_template":"0","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"background-image","ocean_post_title_background_color":"","ocean_post_title_background":401,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0"},"_links":{"self":[{"href":"https:\/\/arsum.cl\/index.php?rest_route=\/wp\/v2\/pages\/383"}],"collection":[{"href":"https:\/\/arsum.cl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/arsum.cl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/arsum.cl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/arsum.cl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=383"}],"version-history":[{"count":16,"href":"https:\/\/arsum.cl\/index.php?rest_route=\/wp\/v2\/pages\/383\/revisions"}],"predecessor-version":[{"id":414,"href":"https:\/\/arsum.cl\/index.php?rest_route=\/wp\/v2\/pages\/383\/revisions\/414"}],"up":[{"embeddable":true,"href":"https:\/\/arsum.cl\/index.php?rest_route=\/wp\/v2\/pages\/305"}],"wp:attachment":[{"href":"https:\/\/arsum.cl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}