{"id":91635,"date":"2020-08-15T19:42:23","date_gmt":"2020-08-15T17:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem"},"modified":"2020-08-15T19:42:23","modified_gmt":"2020-08-15T17:42:23","slug":"na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","title":{"rendered":"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00a1Hola a todos! Me llamo Nikolai Golov. Anteriormente trabaj\u00e9 en Avito y durante seis a\u00f1os dirig\u00ed la Data Platform, es decir, me encargu\u00e9 de todas las bases de datos: anal\u00edticas (Vertica, ClickHouse), en flujo y OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). Durante este tiempo, me familiaric\u00e9 con una gran variedad de bases de datos, las m\u00e1s diversas y peculiares, as\u00ed como con casos de uso no est\u00e1ndar.<\/p>\n<p>Actualmente trabajo en ManyChat. En esencia, es una startup: nueva, ambiciosa y de r\u00e1pido crecimiento. Y cuando reci\u00e9n ingres\u00e9 a la empresa, surgi\u00f3 la cl\u00e1sica pregunta: \"\u00bfQu\u00e9 debe elegir ahora una joven startup en el mercado de SGBD y bases de datos?\". <\/p>\n<p>En este art\u00edculo, basado en mi presentaci\u00f3n en <noindex><a rel=\"nofollow\" href=\"https:\/\/ritfest.ru\/2020\/\">el festival en l\u00ednea RIT++2020<\/a><\/noindex>, responder\u00e9 a esta pregunta. La versi\u00f3n en video de la presentaci\u00f3n est\u00e1 disponible en <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/H23f_z13ro4\">YouTube<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/6a5df9b75ad435ebe88adf920ab9ea8b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Las bases de datos m\u00e1s conocidas de 2020<\/h2>\n<p>\nEstamos en el a\u00f1o 2020, mir\u00e9 a mi alrededor y vi tres tipos de bases de datos. <\/p>\n<p>El primer tipo es <b>las bases de datos OLTP cl\u00e1sicas<\/b>: PostgreSQL, SQL Server, Oracle, MySQL. Fueron escritas hace mucho tiempo, pero siguen siendo relevantes porque son bien conocidas por la comunidad de desarrolladores.<\/p>\n<p>El segundo tipo es <b>las bases de datos de la d\u00e9cada de 2000<\/b>. Intentaron alejarse de los patrones cl\u00e1sicos al renunciar a SQL, las estructuras tradicionales y ACID, a\u00f1adiendo fragmentaci\u00f3n incorporada y otras caracter\u00edsticas atractivas. Por ejemplo, estas son Cassandra, MongoDB, Redis o Tarantool. Todas estas soluciones quer\u00edan ofrecer al mercado algo radicalmente nuevo y han encontrado su nicho, ya que se volvieron extremadamente convenientes en ciertas tareas. Estas bases las denominar\u00e9 con el t\u00e9rmino general NOSQL.<\/p>\n<p>Los 2000 han terminado, nos hemos acostumbrado a las bases NOSQL, y el mundo, desde mi punto de vista, ha dado el siguiente paso: hacia las <b>bases de datos gestionadas<\/b>. Estas bases tienen un n\u00facleo similar al de las bases de datos OLTP cl\u00e1sicas o los nuevos NoSQL. Pero no requieren DBA ni DevOps, y funcionan en hardware gestionado en la nube. Para el desarrollador, es simplemente \"una base de datos\" que opera en alg\u00fan lugar, y c\u00f3mo se instal\u00f3 en el servidor, qui\u00e9n configur\u00f3 el servidor y qui\u00e9n lo actualiza, a nadie le importa.<\/p>\n<p>Ejemplos de tales bases son:<\/p>\n<ul>\n<li>AWS RDS: capa gestionada sobre PostgreSQL\/MySQL.<\/li>\n<li>DynamoDB: el equivalente de AWS basado en documentos, similar a Redis y MongoDB.<\/li>\n<li>Amazon Redshift: base de datos anal\u00edtica gestionada.<\/li>\n<\/ul>\n<p>\nSe basa en bases antiguas, pero implementadas en un entorno gestionado, sin necesidad de trabajar con el hardware. <\/p>\n<p><i>Nota: Los ejemplos se han tomado para el entorno de AWS, pero sus an\u00e1logos tambi\u00e9n existen en Microsoft Azure, Google Cloud o Yandex.Cloud.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/06e50904f795b3b5dc62ca45622b2dd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00bfQu\u00e9 hay de nuevo en todo esto? En 2020, nada de esto.<\/p>\n<h2>El concepto de Serverless<\/h2>\n<p>\nRealmente nuevo en el mercado en 2020 \u2014 son las soluciones sin servidor o serverless.<\/p>\n<p>Tratar\u00e9 de explicar qu\u00e9 significa esto a trav\u00e9s de un servicio com\u00fan o una aplicaci\u00f3n de backend.<br \/>\nPara desplegar una aplicaci\u00f3n de backend com\u00fan, compramos o alquilamos un servidor, copiamos el c\u00f3digo en \u00e9l, publicamos un endpoint hacia afuera y pagamos regularmente por el alquiler, la electricidad y los servicios del centro de datos. Este es el esquema est\u00e1ndar.<\/p>\n<p>\u00bfSe puede hacer de otra manera? Con los servicios sin servidor, s\u00ed.<\/p>\n<p>\u00bfCu\u00e1l es el truco de este enfoque? No hay servidor, ni siquiera alquiler de una instancia virtual en la nube. Para desplegar el servicio, copiamos el c\u00f3digo (funciones) en un repositorio y publicamos un endpoint hacia afuera. Luego, simplemente pagamos por cada llamada a esta funci\u00f3n, ignorando por completo el hardware en el que se ejecuta.<\/p>\n<p>Tratar\u00e9 de ilustrar este enfoque con im\u00e1genes.<br \/>\n<img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/705cf89c51b8166da772b1d877262b44.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Despliegue cl\u00e1sico<\/b>. Tenemos un servicio con una carga determinada. Elevamos dos instancias: servidores f\u00edsicos o instancias en AWS. A estas instancias se dirigen las solicitudes externas, que son procesadas all\u00ed. <\/p>\n<p>Como se puede ver en la imagen, los servidores no est\u00e1n utilizados de manera uniforme. Uno est\u00e1 utilizado al 100%, con dos solicitudes, mientras que el otro solo al 50% \u2014 est\u00e1 parcialmente inactivo. Si llegan no tres solicitudes, sino 30, el sistema no podr\u00e1 soportar la carga y comenzar\u00e1 a fallar.<\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/005b1f91ced2f2b29363cf975ed085e3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Despliegue sin servidor<\/b>. En un entorno sin servidor, este tipo de servicio no tiene instancias ni servidores. Hay un cierto grupo de recursos calentados \u2014 peque\u00f1os contenedores Docker preparados con el c\u00f3digo de la funci\u00f3n desplegada. El sistema recibe solicitudes externas y para cada una de ellas, el marco sin servidor levanta un peque\u00f1o contenedor con el c\u00f3digo: procesa exactamente esta solicitud y mata el contenedor.<\/p>\n<p>Una solicitud \u2014 un contenedor levantado, 1000 solicitudes \u2014 1000 contenedores. Y el despliegue en servidores f\u00edsicos ya es trabajo del proveedor de la nube. Esto est\u00e1 completamente oculto por el marco sin servidor. En este concepto, pagamos por cada llamada. Por ejemplo, si llega una llamada al d\u00eda \u2014 pagamos por una llamada, si llegan un mill\u00f3n por minuto \u2014 pagamos por un mill\u00f3n. O por segundo, eso tambi\u00e9n ocurre.<\/p>\n<p>La idea de publicar funciones sin servidor es adecuada para un servicio sin estado. Pero si necesita un servicio con estado, entonces a\u00f1adimos una base de datos al servicio. En este caso, cuando se trata de trabajar con el estado, cada funci\u00f3n con estado simplemente escribe y lee desde la base de datos. Y puede ser de cualquiera de los tres tipos de bases de datos descritos al principio del art\u00edculo.<\/p>\n<p>\u00bfCu\u00e1l es la limitaci\u00f3n com\u00fan de todas estas bases de datos? Son los costos asociados con un servidor en la nube o un servidor f\u00edsico (o varios servidores) que se utilizan constantemente. No importa si utilizamos una base de datos cl\u00e1sica o una gestionada, si hay DevOps y un administrador o no, siempre pagamos 24\/7 por el hardware, la electricidad y el alquiler del centro de datos. Si tenemos una base de datos cl\u00e1sica, pagamos por el maestro y el esclavo. Si es una base de datos shardada de alto rendimiento, pagamos por 10, 20 o 30 servidores, y pagamos de forma continua.<\/p>\n<p>La inclusi\u00f3n de servidores reservados en la estructura de costos antes se percib\u00eda como un mal inevitable. Las bases de datos normales tambi\u00e9n tienen otras complicaciones, como l\u00edmites en el n\u00famero de conexiones, restricciones de escalabilidad y consenso geodistribuido; algunas se pueden resolver en ciertas bases de datos, pero no todas a la vez y no de manera perfecta.<\/p>\n<h2>Base de datos sin servidor - teor\u00eda<\/h2>\n<p>\nLa pregunta del 2020: \u00bfse puede hacer que una base de datos tambi\u00e9n sea sin servidor? Todos han o\u00eddo hablar del backend sin servidor... \u00bfy si intentamos hacer que la base de datos sea sin servidor?<\/p>\n<p>Esto suena extra\u00f1o, porque una base de datos es un servicio con estado, que no se adapta muy bien a la infraestructura sin servidor. Adem\u00e1s, el estado de la base de datos es muy grande: gigabytes, terabytes y en bases de datos anal\u00edticas, incluso petabytes. No se puede levantar f\u00e1cilmente en contenedores ligeros de Docker.<\/p>\n<p>Por otro lado, casi todas las bases de datos modernas son una gran cantidad de l\u00f3gica y componentes: transacciones, consenso de integridad, procedimientos, dependencias relacionales y mucha l\u00f3gica. Una parte considerable de la l\u00f3gica de la base de datos necesita un estado peque\u00f1o. Gigabytes y terabytes son utilizados directamente solo por una peque\u00f1a parte de la l\u00f3gica de la base de datos relacionada con la ejecuci\u00f3n directa de las consultas.<\/p>\n<p>Por lo tanto, la idea es: si parte de la l\u00f3gica permite una ejecuci\u00f3n sin estado, \u00bfpor qu\u00e9 no dividir la base de datos en partes con estado y sin estado?<\/p>\n<h2>Sin servidor para soluciones OLAP<\/h2>\n<p>\nVeamos c\u00f3mo podr\u00eda ser la divisi\u00f3n de una base de datos en partes con estado y sin estado mediante ejemplos pr\u00e1cticos.<\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/51793a5649e68dafc9e7ce395da9e065.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>Por ejemplo, tenemos una base de datos anal\u00edtica<\/b>: datos externos (cilindro rojo a la izquierda), un proceso ETL que carga datos en la base, y un analista que env\u00eda consultas SQL a la base. Este es el esquema cl\u00e1sico de funcionamiento de un almac\u00e9n de datos. <\/p>\n<p>En este esquema, el ETL se ejecuta una vez. Luego, se deben pagar continuamente los servidores en los que funciona la base de datos con los datos cargados por el ETL, para que haya un lugar donde enviar las consultas. <\/p>\n<p>Consideremos un enfoque alternativo, implementado en la base de datos AWS Athena Serverless. Aqu\u00ed no hay hardware asignado de forma permanente donde se almacenen los datos cargados. En su lugar:<\/p>\n<ul>\n<li>El usuario env\u00eda una consulta SQL a Athena. El optimizador de Athena analiza la consulta SQL y busca en el almacenamiento de metadatos los datos espec\u00edficos necesarios para ejecutar la consulta.<\/li>\n<li>El optimizador, bas\u00e1ndose en los datos recopilados, extrae los datos necesarios de fuentes externas a un almacenamiento temporal (base de datos temporal).<\/li>\n<li>En el almacenamiento temporal se ejecuta la consulta SQL del usuario, y el resultado se devuelve al usuario. <\/li>\n<li>El almacenamiento temporal se limpia, y los recursos se liberan.<\/li>\n<\/ul>\n<p>En esta arquitectura, solo pagamos por el proceso de ejecuci\u00f3n de la consulta. No hay consultas, no hay gastos.<\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/0e21282b66e3120524c2324811cb04a8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste es un enfoque funcional y se implementa no solo en Athena Serverless, sino tambi\u00e9n en Redshift Spectrum (en AWS).<\/p>\n<p>El ejemplo de Athena muestra que la base de datos Serverless funciona con consultas reales con decenas y cientos de Terabytes de datos. Para cientos de Terabytes se necesitar\u00edan cientos de servidores, pero no necesitamos pagarlos: pagamos por las consultas. La velocidad de cada consulta es (muy) baja en comparaci\u00f3n con bases de datos anal\u00edticas especializadas como Vertica, pero no pagamos por per\u00edodos de inactividad.<\/p>\n<p>Esta base de datos es aplicable para consultas anal\u00edticas ad-hoc raras. Por ejemplo, cuando decidimos espont\u00e1neamente verificar una hip\u00f3tesis sobre un volumen gigantesco de datos. Para estos casos, Athena es perfecta. Para consultas regulares, este sistema resulta costoso. En este caso, almacene en cach\u00e9 los datos en alguna soluci\u00f3n especializada. <\/p>\n<h2>Serverless para soluciones OLTP<\/h2>\n<p>\nEn el ejemplo anterior, se consideraron tareas OLAP (anal\u00edticas). Ahora analicemos las tareas OLTP.<\/p>\n<p>Imaginemos un PostgreSQL o MySQL escalable. Vamos a levantar una instancia administrada de PostgreSQL o MySQL con recursos m\u00ednimos. Cuando la instancia reciba m\u00e1s carga, conectaremos r\u00e9plicas adicionales a las que distribuiremos parte de la carga de lectura. Si no hay solicitudes ni carga, desactivamos las r\u00e9plicas. La primera instancia es el maestro, y las dem\u00e1s son r\u00e9plicas.<\/p>\n<p>Esta idea se implementa en una base llamada Aurora Serverless de AWS. El principio es simple: un proxy fleet recibe las solicitudes de aplicaciones externas. Al observar un aumento en la carga, asigna recursos computacionales de instancias m\u00ednimas previamente calentadas, realizando la conexi\u00f3n lo m\u00e1s r\u00e1pido posible. La desconexi\u00f3n de instancias ocurre de la misma manera.<\/p>\n<p>Dentro de Aurora existe el concepto de Aurora Capacity Unit, ACU. Esto es (aproximadamente) una instancia (servidor). Cada ACU espec\u00edfico puede ser maestro o esclavo. Cada Capacity Unit tiene su propia memoria RAM, procesador y disco m\u00ednimo. As\u00ed, hay un maestro y las dem\u00e1s son r\u00e9plicas de solo lectura.<\/p>\n<p>La cantidad de Aurora Capacity Units en funcionamiento es un par\u00e1metro configurable. El n\u00famero m\u00ednimo puede ser uno o cero (en este caso, la base no funciona si no hay solicitudes).<\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/ab034e66fbd8874f062a656afa7044c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCuando la base recibe solicitudes, el proxy fleet activa Aurora Capacity Units, aumentando los recursos de rendimiento del sistema. La capacidad de aumentar y disminuir recursos permite que el sistema \"juggle\" recursos: desactivar autom\u00e1ticamente ACUs individuales (reemplaz\u00e1ndolos por nuevos) y aplicar todas las actualizaciones necesarias a los recursos desactivados.<\/p>\n<p>La base Aurora Serverless puede escalar la carga de lectura. Pero esto no se menciona expl\u00edcitamente en la documentaci\u00f3n. Puede dar la impresi\u00f3n de que pueden levantar un multi-master. Sin embargo, no hay magia en esto. <\/p>\n<p>Esta base es ideal para no gastar grandes sumas de dinero en sistemas con acceso impredecible. Por ejemplo, al crear un MVP o sitios web de presentaci\u00f3n, generalmente no esperamos una carga estable. Por lo tanto, en ausencia de acceso, no pagamos por las instancias. Cuando surge una carga inesperada, como despu\u00e9s de una conferencia o una campa\u00f1a publicitaria, un gran n\u00famero de personas accede al sitio y la carga aumenta dr\u00e1sticamente. Aurora Serverless maneja autom\u00e1ticamente esta carga y conecta r\u00e1pidamente los recursos faltantes (ACU). Luego, cuando la conferencia termina, todos olvidan el prototipo, los servidores (ACU) se apagan y los gastos caen a cero: es conveniente.<\/p>\n<p>Esta soluci\u00f3n no es adecuada para cargas altas y estables, porque no puede escalar la carga de escritura. Todas estas conexiones y desconexiones de recursos ocurren en el momento del llamado 'punto de escala', que es cuando la base de datos no est\u00e1 siendo mantenida por transacciones ni tablas temporales. Por ejemplo, durante una semana puede que no ocurra ning\u00fan punto de escala, y la base opera con los mismos recursos, incapaz de expandirse o contraerse. <\/p>\n<p>No hay magia: es un PostgreSQL ordinario. Pero el proceso de a\u00f1adir y desconectar m\u00e1quinas est\u00e1 parcialmente automatizado.<\/p>\n<h2>Serverless por dise\u00f1o<\/h2>\n<p>\nAurora Serverless es una base de datos antigua reescrita para la nube, aprovechando las ventajas del enfoque serverless. Ahora, les hablar\u00e9 de una base de datos que fue dise\u00f1ada desde el principio para la nube, con un enfoque serverless: Serverless-by-design. Se desarroll\u00f3 sin la suposici\u00f3n de que funcionar\u00eda en servidores f\u00edsicos.<\/p>\n<p>Esta base de datos se llama Snowflake. Tiene tres bloques clave.<\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/15f9f07ed0281686e509ca6ced387db3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEl primero es el bloque de metadatos. Este es un servicio r\u00e1pido en memoria que se encarga de cuestiones de seguridad, metadatos, transacciones y optimizaci\u00f3n de consultas (en la ilustraci\u00f3n a la izquierda).<\/p>\n<p>El segundo bloque consiste en m\u00faltiples cl\u00fasteres de computaci\u00f3n virtual para c\u00e1lculos (en la ilustraci\u00f3n, un conjunto de c\u00edrculos azules).<\/p>\n<p>El tercer bloque es un sistema de almacenamiento de datos basado en S3. S3 es un almacenamiento de objetos a escala en AWS, similar a un Dropbox ilimitado para negocios.<\/p>\n<p>Veamos c\u00f3mo funciona Snowflake, asumiendo un inicio en fr\u00edo. Es decir, la base de datos est\u00e1 creada, los datos han sido cargados, y no hay consultas activas. En consecuencia, si no hay consultas a la base de datos, se ha levantado un servicio de Metadata en memoria r\u00e1pida (el primer bloque). Y tenemos un almacenamiento S3, donde se encuentran los datos de las tablas, divididos en lo que se llaman microparticiones. Para simplificar: si en la tabla se encuentran transacciones, las microparticiones son d\u00edas de transacciones. Cada d\u00eda representa una micropartici\u00f3n, un archivo separado. Y cuando la base de datos funciona en este modo, solo pagas por el espacio que ocupan los datos. Adem\u00e1s, la tarifa por el espacio es muy baja (especialmente teniendo en cuenta la compresi\u00f3n significativa). El servicio de metadatos tambi\u00e9n funciona constantemente, pero para optimizar las consultas no se requieren muchos recursos, y se puede considerar que el servicio es pr\u00e1cticamente gratuito. <\/p>\n<p>Ahora imaginemos que un usuario llega a nuestra base de datos y lanza una consulta SQL. La consulta SQL se env\u00eda inmediatamente al servicio de Metadata para su procesamiento. Por lo tanto, al recibir la consulta, este servicio analiza la misma, los datos disponibles, los privilegios del usuario y, si todo est\u00e1 bien, elabora un plan de procesamiento de la consulta.<\/p>\n<p>Luego, el servicio inicia el arranque del cl\u00faster de computaci\u00f3n. Un cl\u00faster de computaci\u00f3n es un conjunto de servidores que realizan c\u00e1lculos. Es decir, es un cl\u00faster que puede contener 1 servidor, 2 servidores, 4, 8, 16, 32\u2014\u00a1cuantos desees! Env\u00edas la consulta y, para ella, se inicia instant\u00e1neamente el arranque de este cl\u00faster. Esto realmente toma unos segundos.<\/p>\n<p><img decoding=\"async\" alt=\"Hacia bases de datos sin servidor: c\u00f3mo y por qu\u00e9\" src=\"\/wp-content\/uploads\/2020\/08\/51b11aee0b0868681c4978f5becd1f1d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDespu\u00e9s de que el cl\u00faster se ha iniciado, las micro-particiones necesarias para procesar su consulta se copian desde S3 al cl\u00faster. Supongamos que se necesitan dos particiones de una tabla y una de otra para ejecutar una consulta SQL. En ese caso, solo se copiar\u00e1n tres particiones necesarias al cl\u00faster, no todas las tablas en su totalidad. Esta eficiencia se debe a que todo est\u00e1 dentro de un mismo centro de datos y conectado a trav\u00e9s de canales muy r\u00e1pidos, por lo que todo el proceso de transferencia se realiza r\u00e1pidamente: en segundos, raramente en minutos, salvo en casos de consultas extraordinarias. Las micro-particiones se copian al cl\u00faster de c\u00f3mputo y, una vez completada la transferencia, se ejecuta la consulta SQL en este cl\u00faster. El resultado de esta consulta puede ser una fila, varias filas o una tabla \u2014 se env\u00edan al usuario para que las descargue, las visualice en su herramienta BI, o las utilice de alguna otra manera.<\/p>\n<p>Cada consulta SQL puede no solo sumarizar datos previamente cargados, sino tambi\u00e9n cargar\/formar nuevos datos en la base. Esto puede ser una consulta que, por ejemplo, inserta nuevos registros en otra tabla, lo que provoca la creaci\u00f3n de una nueva partici\u00f3n en el cl\u00faster de c\u00f3mputo, que, a su vez, se guarda autom\u00e1ticamente en el almacenamiento S3.<\/p>\n<p>El escenario descrito anteriormente, desde la llegada del usuario hasta el inicio del cl\u00faster, la carga de datos, la ejecuci\u00f3n de consultas y la obtenci\u00f3n de resultados, se factura por las minutos de uso del cl\u00faster de c\u00f3mputo virtual levantado, el warehouse virtual. La tarifa var\u00eda seg\u00fan la zona de AWS y el tama\u00f1o del cl\u00faster, pero, en promedio, cuesta varios d\u00f3lares por hora. Un cl\u00faster de cuatro m\u00e1quinas cuesta el doble que uno de dos m\u00e1quinas, y uno de ocho m\u00e1quinas cuesta el doble de eso. Hay opciones de 16, 32 m\u00e1quinas, dependiendo de la complejidad de las consultas. Pero solo pagas por los minutos en que el cl\u00faster est\u00e1 realmente funcionando, porque cuando no hay consultas, puedes quitar las manos; despu\u00e9s de 5-10 minutos de espera (parametrizable), se apaga autom\u00e1ticamente, libera recursos y se vuelve gratuito.<\/p>\n<p>Es un escenario completamente realista en el que env\u00edas una solicitud, el cl\u00faster se activa, por as\u00ed decirlo, en un minuto, cuenta durante otro minuto, luego cinco minutos para apagarse, y al final pagas por siete minutos de funcionamiento de ese cl\u00faster, y no por meses o a\u00f1os.<\/p>\n<p>El primer escenario describ\u00eda el uso de Snowflake en una variante de un solo usuario. Ahora imaginemos que hay muchos usuarios, que se acerca m\u00e1s a un escenario real.<\/p>\n<p>Supongamos que tenemos muchos analistas y reportes de Tableau que constantemente est\u00e1n bombardeando nuestra base de datos con una gran cantidad de consultas SQL anal\u00edticas simples.<\/p>\n<p>Adem\u00e1s de eso, supongamos que tenemos cient\u00edficos de datos ingeniosos que intentan hacer cosas monstruosas con los datos, operando con decenas de Terabytes, analizando miles de millones y billones de filas de datos. <\/p>\n<p>Para los dos tipos de carga descritos anteriormente, Snowflake permite levantar varios cl\u00fasteres de computaci\u00f3n independientes de diferente capacidad. Y estos cl\u00fasteres de computaci\u00f3n funcionan de manera independiente, pero con datos coherentes compartidos.<\/p>\n<p>Para una gran cantidad de consultas ligeras, se pueden levantar 2-3 cl\u00fasteres peque\u00f1os, de un tama\u00f1o, digamos, de 2 m\u00e1quinas cada uno. Este comportamiento se puede implementar, entre otras cosas, con configuraciones autom\u00e1ticas. Es decir, le dices: \"Snowflake, levanta un cl\u00faster peque\u00f1o. Si la carga en \u00e9l supera un par\u00e1metro determinado, levanta un segundo o un tercero similar. Cuando la carga comience a disminuir, apaga los adicionales\". Para que, independientemente de cu\u00e1ntos analistas lleguen y comiencen a ver los reportes, haya recursos suficientes para todos.<\/p>\n<p>Al mismo tiempo, si los analistas est\u00e1n durmiendo y nadie est\u00e1 mirando los reportes, los cl\u00fasteres pueden apagarse completamente, y dejas de pagar por ellos.<\/p>\n<p>Al mismo tiempo, para consultas pesadas (por parte de los cient\u00edficos de datos), puedes levantar un cl\u00faster muy grande con, digamos, 32 m\u00e1quinas. Este cl\u00faster tambi\u00e9n se cobrar\u00e1 solo por los minutos y horas en que tu gigantesca consulta est\u00e9 en funcionamiento.<\/p>\n<p>La posibilidad descrita anteriormente permite separar en cl\u00fasteres no solo 2, sino m\u00e1s tipos de carga (ETL, monitoreo, materializaci\u00f3n de reportes, \u2026).<\/p>\n<p>Hagamos un resumen sobre Snowflake. La base combina una idea atractiva con una implementaci\u00f3n funcional. En ManyChat utilizamos Snowflake para la anal\u00edtica de todos los datos disponibles. No tenemos tres cl\u00fasteres como en el ejemplo, sino entre 5 y 9, de diferentes tama\u00f1os. Disponemos de cl\u00fasteres de 16 m\u00e1quinas, de 2 m\u00e1quinas, as\u00ed como muy peque\u00f1os de 1 m\u00e1quina para algunas tareas. Distribuyen la carga de manera efectiva y nos permiten ahorrar significativamente.<\/p>\n<p>La base escala con \u00e9xito la carga de lectura y escritura. Esta es una gran diferencia y un gran avance en comparaci\u00f3n con la 'Aurora', que solo manejaba la carga de lectura. Snowflake permite escalar la carga de escritura utilizando esos cl\u00fasteres computacionales. Es decir, como mencion\u00e9, en ManyChat usamos varios cl\u00fasteres, los peque\u00f1os y superpeque\u00f1os se utilizan principalmente para ETL, para la carga de datos. En cambio, los analistas trabajan en cl\u00fasteres medianos, que no se ven afectados por la carga ETL, por lo que funcionan muy r\u00e1pido. <\/p>\n<p>En consecuencia, la base es adecuada para tareas OLAP. Sin embargo, desafortunadamente, todav\u00eda no es aplicable a cargas OLTP. En primer lugar, esta base es columnar, con todas las consecuencias que eso conlleva. En segundo lugar, el enfoque mismo, donde se levanta un cl\u00faster computacional para cada solicitud seg\u00fan sea necesario y se le inunda con datos, a\u00fan es insuficientemente r\u00e1pido para las cargas OLTP. Segundos de espera para tareas OLAP son normales, pero inaceptables para tareas OLTP; preferir\u00edamos 100 ms, y a\u00fan mejor, 10 ms.<\/p>\n<h2>Summary<\/h2>\n<p>\nLa base de datos sin servidor es posible gracias a la separaci\u00f3n de la base de datos en partes Stateless y Stateful. Debe haber notado que en todos los ejemplos dados, la parte Stateful es, por as\u00ed decirlo, el almacenamiento de micro-particiones en S3, mientras que Stateless es el optimizador, el manejo de los metadatos, y el tratamiento de cuestiones de seguridad que pueden ser levantadas como servicios livianos Stateless independientes.<\/p>\n<p>La ejecuci\u00f3n de consultas SQL tambi\u00e9n puede considerarse como servicios con un ligero estado, que pueden desplegarse en modo sin servidor, como los cl\u00fasteres computacionales de Snowflake, descargar solo los datos necesarios, ejecutar la consulta y 'apagarse'.<\/p>\n<p>Las bases de datos serverless de nivel productivo ya est\u00e1n disponibles para su uso, est\u00e1n en funcionamiento. Estas bases de datos serverless ya est\u00e1n preparadas para manejar tareas OLAP. Desafortunadamente, para las tareas OLTP se utilizan... con matices, ya que hay limitaciones. Por un lado, esto es una desventaja. Pero, por otro lado, es una oportunidad. Quiz\u00e1s alguno de los lectores encuentre la manera de hacer que una base de datos OLTP sea completamente serverless, sin limitaciones de Aurora.<\/p>\n<p>Espero que haya sido interesante para ustedes. Hacia un futuro sin servidor \ud83d\ude42<br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/514298\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439. \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0432 \u0410\u0432\u0438\u0442\u043e \u0438 \u0448\u0435\u0441\u0442\u044c \u043b\u0435\u0442 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u043b Data Platform, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0432\u0441\u0435\u043c\u0438 \u0431\u0430\u0437\u0430\u043c\u0438: \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 (Vertica, ClickHouse), \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u043c\u0438 \u0438 OLTP (Redis, Tarantool, VoltDB, MongoDB, PostgreSQL). \u0417\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0441\u044f \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0441\u0430\u043c\u044b\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0445, \u0438 \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 \u043a\u0435\u0439\u0441\u0430\u043c\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u0435\u0439\u0447\u0430\u0441 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91636,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91635","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-15T17:42:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 En el camino hacia bases de datos sin servidor \u2014 c\u00f3mo y por qu\u00e9 | ProHoster","description":"\u00a1Hola a todos! Me llamo Nikolay Golov.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0431\u0435\u0441\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u043c \u0431\u0430\u0437\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043a\u0430\u043a \u0438 \u0437\u0430\u0447\u0435\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0413\u043e\u043b\u043e\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\u0439.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/na-puti-k-besservernym-bazam-dannyh-kak-i-zachem","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-15T17:42:23+00:00","article:modified_time":"2020-08-15T17:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91635","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:23:25","updated":"2022-09-27 17:18:10","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91635","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=91635"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/91635\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/91636"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=91635"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=91635"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=91635"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}