{"id":2130,"date":"2023-07-06T07:12:51","date_gmt":"2023-07-06T07:12:51","guid":{"rendered":"https:\/\/keepler.io\/2023\/07\/06\/amazon-aurora-rds-readers-auto-scaling-2\/"},"modified":"2023-09-12T10:18:54","modified_gmt":"2023-09-12T10:18:54","slug":"amazon-aurora-rds-readers-auto-scaling-2","status":"publish","type":"post","link":"https:\/\/keepler.io\/es\/2023\/07\/06\/amazon-aurora-rds-readers-auto-scaling-2\/","title":{"rendered":"Amazon Aurora RDS : \u200aReaders Auto Scaling y Endpoints personalizados. Parte 1"},"content":{"rendered":"<p>Uno de los principales problemas de rendimiento de las <strong>Bases de Datos Relacionales Transaccionales<\/strong> (OLTP) se produce al incluir <strong>Cargas de Trabajo Anal\u00edticas<\/strong> (OLAP) con consultas que recuperan gran cantidad de informaci\u00f3n. En muchos casos para fines ajenos a la propia aplicaci\u00f3n como los sistemas BI. Este tipo de acceso tiene un impacto considerable en el rendimiento por varias razones, como la capacidad de la infraestructura de base de datos adaptada al uso transaccional de la aplicaci\u00f3n, o el dise\u00f1o del modelo de datos optimizado para el tipo de acceso, m\u00e1s at\u00f3mico, de un sistema transaccional que anal\u00edtico.<\/p>\n<p>Para resolver estos problemas Amazon Aurora dispone de dos funcionalidades que vamos a estudiar, <strong>Auto Scaling de r\u00e9plicas de s\u00f3lo lectura (Readers) y Custom Endpoints dedicados a instancias espec\u00edficas<\/strong>.<\/p>\n<p>En este post de la serie de dos partes vamos a explorar las <strong>capacidades de Auto Scaling de Amazon Aurora<\/strong>, c\u00f3mo funciona, c\u00f3mo aprovechar las capacidades de failover, c\u00f3mo implementarlo y algunos consejos perspicaces para sacarle el m\u00e1ximo partido. Comencemos.<\/p>\n<h3>Readers Auto Scaling<\/h3>\n<p>Amazon Aurora Auto Scaling permite <strong>ajustar autom\u00e1ticamente el n\u00famero de r\u00e9plicas de lectura de un cl\u00faster de Amazon Aurora RDS<\/strong>. Esto le permite principalmente ajustar la capacidad de la plataforma para cargas de trabajo impredecibles.<\/p>\n<p>Amazon Aurora Auto Scaling permite definir un m\u00e1ximo y un m\u00ednimo de instancias del mismo modo que los grupos de Amazon EC2 Auto Scaling. Sin embargo, como diferencia, en lugar de definir un valor de escalado de salida y un valor de escalado de entrada para la m\u00e9trica de Auto Scaling, solo se define un valor objetivo, que sirve como valor de umbral superior. Amazon Aurora Auto Scaling define autom\u00e1ticamente el valor inferior<\/p>\n<h3>Funcionamiento<\/h3>\n<p>El funcionamiento de Amazon Aurora Auto Scaling se basa en dos componentes diferentes que es necesario definir.<\/p>\n<h3>Objetivo escalable<\/h3>\n<p>Se encarga de definir la capacidad m\u00e1xima y m\u00ednima del autoescalado. Solo puede existir un objetivo escalable por cl\u00faster de Amazon Aurora. La capacidad definida en el objetivo escalable afecta a todo, es decir, se tiene en cuenta el n\u00famero total de instancias lectoras ya sean autogestionadas o gestionadas por autoescalado.<\/p>\n<p>Algunos ejemplos:<\/p>\n<p>Supongamos que tenemos la siguiente capacidad.<\/p>\n<ul>\n<li><strong>Capacidad m\u00ednima<\/strong>: 1<\/li>\n<li><strong>Capacidad m\u00e1xima<\/strong>: 4<\/li>\n<\/ul>\n<p>El cl\u00faster mostrado a continuaci\u00f3n tendr\u00eda la capacidad de crecer s\u00f3lo 2 instancias m\u00e1s ya que el n\u00famero total de instancias lectoras no puede superar las 4 unidades. De la misma forma no se puede tener menos de 1 instancia Reader, sin embargo, cuando se tiene una instancia Reader autogestionada, se podr\u00eda llegar a tener 0 instancias Reader gestionadas por Auto Scaling.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54796 aligncenter\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-aurora-cluster-1.png?resize=512%2C156&#038;ssl=1\" alt=\"\" width=\"512\" height=\"156\" \/><\/p>\n<p>En el siguiente caso, el cl\u00faster tendr\u00eda la capacidad de aumentar 1 instancia m\u00e1s hasta alcanzar el m\u00e1ximo. Para el m\u00ednimo, podr\u00eda eliminar todas las instancias de lectura excepto 1.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54800 aligncenter\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-aurora-cluster-2.png?resize=512%2C209&#038;ssl=1\" alt=\"\" width=\"512\" height=\"209\" \/><\/p>\n<p>En este \u00faltimo ejemplo, ya se ha alcanzado la capacidad m\u00e1xima de Auto Scaling, de hecho, se ha superado al tener 5 instancias autogestionadas ya creadas. El l\u00edmite de Auto Scaling no influye en el l\u00edmite m\u00e1ximo de instancias Reader autogestionadas en un cl\u00faster de Amazon Aurora, sin embargo <strong>el l\u00edmite m\u00e1ximo permitido por Amazon Aurora es de 15<\/strong>. Este l\u00edmite incluye ambos tipos de instancias Reader, autogestionadas o gestionadas por Auto Scaling.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54804 aligncenter\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-aurora-cluster-3.png?resize=512%2C156&#038;ssl=1\" alt=\"\" width=\"512\" height=\"156\" \/><\/p>\n<h3>Pol\u00edtica de escalado<\/h3>\n<p>Se encarga de definir la m\u00e9trica a monitorizar para controlar el Auto Escalado, y el valor objetivo a alcanzar en el cl\u00faster.<\/p>\n<p>Puede haber varias pol\u00edticas de escalado asociadas a un objetivo de escalado, aunque lo habitual es definir s\u00f3lo una.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54808 aligncenter\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-scalable-target-4.png?resize=512%2C239&#038;ssl=1\" alt=\"\" width=\"512\" height=\"239\" \/><\/p>\n<p>Las m\u00e9tricas pueden ser de dos tipos, predefinidas o personalizadas.<\/p>\n<p>Las m\u00e9tricas predefinidas que puede elegir son dos:<\/p>\n<ul>\n<li><strong>RDSReaderAverageCPUUtilization &#8211; <\/strong>Es el valor medio de la m\u00e9trica <i>CPUUtilization <\/i>en CloudWatch entre todas las r\u00e9plicas de Aurora en el cl\u00faster de Amazon Aurora.<\/li>\n<li><strong>RDSReaderAverageDatabaseConnections &#8211; <\/strong>Es el valor medio de la m\u00e9trica <i>DatabaseConnections<\/i> en CloudWatch entre todas las r\u00e9plicas de Aurora en el cl\u00faster de Aurora.<\/li>\n<\/ul>\n<p>Para las m\u00e9tricas personalizadas se puede elegir cualquier m\u00e9trica que tenga sentido, siempre y cuando se tenga en cuenta el estado de todas las r\u00e9plicas de lectura. Una limitaci\u00f3n de esto es, por ejemplo, la imposibilidad de elegir una m\u00e9trica que afecte s\u00f3lo a un subconjunto de instancias de r\u00e9plica de lectura. Esto se debe a c\u00f3mo est\u00e1n organizadas las dimensiones en CloudWatch para RDS\/Aurora. En un cl\u00faster de Amazon Aurora, las \u00fanicas dimensiones v\u00e1lidas son <strong>ClusterId, Role<\/strong> (Writer o Reader) o s\u00f3lo <strong>ClusterId<\/strong>.<\/p>\n<h3>Conmutaci\u00f3n por error de cl\u00faster de Auto Scaling<\/h3>\n<p>Para evitar la conmutaci\u00f3n por error en una instancia administrada de Auto Scaling, AWS asigna la prioridad m\u00e1s baja (tier-15) a este tipo de instancia. De este modo, las instancias de lectura autogestionadas (normalmente con prioridad de nivel 1) tendr\u00e1n preferencia como candidatas en caso de conmutaci\u00f3n por error. Sin embargo, si no hay lectores autogestionados en el cl\u00faster, cualquiera de las instancias lectoras autogestionadas de Auto Scaling se marcar\u00eda como candidata en caso de conmutaci\u00f3n por error.<\/p>\n<p>Algunos ejemplos:<\/p>\n<p>En este caso, la conmutaci\u00f3n por error se realizar\u00e1 siempre entre la instancia 1 y la instancia 2.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54813 aligncenter\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-aurora-cluster-5.png?resize=512%2C156&#038;ssl=1\" alt=\"\" width=\"512\" height=\"156\" \/><\/p>\n<p>En este caso, la conmutaci\u00f3n por error se realizar\u00e1 a cualquiera de las instancias del lector (2, 3 o 4), sin embargo, una segunda conmutaci\u00f3n por error siempre volver\u00e1 a la instancia 1.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54817 aligncenter\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-aurora-cluster6.png?resize=512%2C209&#038;ssl=1\" alt=\"\" width=\"512\" height=\"209\" \/><\/p>\n<h3>Implementaci\u00f3n<\/h3>\n<p>Se puede implementar la configuraci\u00f3n de Auto Scale tanto desde la consola de AWS como desde la CLI de AWS. Desde la consola de AWS s\u00f3lo es posible utilizar m\u00e9tricas predefinidas. La creaci\u00f3n tanto del <strong><em>objetivo escalable<\/em><\/strong> como de la<strong><em> pol\u00edtica de escalado<\/em> <\/strong>se realiza en un \u00fanico paso, por lo que resulta muy sencillo de configurar.<\/p>\n<p>Desde AWS CLI, es necesario definir el <em>objetivo escalable<\/em> y la<em> pol\u00edtica de escalado<\/em> individualmente, tambi\u00e9n es necesario definir la configuraci\u00f3n de la m\u00e9trica en un JSON que se utiliza como entrada en la creaci\u00f3n de la pol\u00edtica de escalado. Esto se aplica tanto si la m\u00e9trica est\u00e1 predefinida como si es personalizada.<\/p>\n<p>Los detalles de implementaci\u00f3n se pueden encontrar en <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/AuroraUserGuide\/Aurora.Integrating.AutoScaling.html\" target=\"_blank\" rel=\"noopener\">Using Amazon Aurora Auto Scaling with Aurora replicas<\/a>.<\/p>\n<h3>Limitaciones y recomendaciones<\/h3>\n<p>Aunque algunas de las limitaciones ya se han comentado en secciones anteriores, es necesario tener en cuenta las siguientes limitaciones y recomendaciones de Amazon Aurora Autoscaling.<\/p>\n<ul>\n<li>No configure <strong>Capacidad m\u00ednima = 0<\/strong>, especialmente en aquellos clusters que no dispongan de instancias Reader autogestionadas. Si un cl\u00faster se queda sin instancias Reader, el Auto Scaling deja de funcionar, ya que las reglas que ejecutan el escalado se quedan en estado de<strong> Datos insuficientes<\/strong>.<\/li>\n<li>Si todas las instancias del cl\u00faster no est\u00e1n en estado <strong>Disponible<\/strong>, las acciones de Autoescalado no se ejecutan.<\/li>\n<li>El valor objetivo de la m\u00e9trica define el l\u00edmite m\u00e1ximo del Auto Scale, es decir, aquel que una vez superado provoca un <strong>scale-out<\/strong>. El valor m\u00ednimo es auto calculado por AWS y es siempre un <strong>10%<\/strong> inferior al valor m\u00e1ximo. Cuando la m\u00e9trica est\u00e1 por debajo de este valor m\u00ednimo se produce un <strong>scale-in<\/strong>.<\/li>\n<li>El periodo de tiempo que la m\u00e9trica tiene que estar por encima o por debajo del valor m\u00e1ximo o m\u00ednimo respectivamente es fijo. El valor m\u00e1ximo es de <strong> 5 minutos<\/strong>. El valor m\u00ednimo es de <strong>15 minutos<\/strong>.<\/li>\n<li>El incremento de instancias en el <strong>scale-out <\/strong>es variable, AWS determina el n\u00famero de instancias necesarias para alcanzar el valor objetivo, siempre dentro de los l\u00edmites m\u00e1ximo y m\u00ednimo, y las crea al mismo tiempo.<\/li>\n<li>El decremento de instancias en el <strong>scale-in<\/strong> es siempre fijo con un ritmo de 1 instancia cada vez.<\/li>\n<li>Si no hay instancias autogestionadas Reader, la conmutaci\u00f3n por error del cl\u00faster se realiza en una de las instancias gestionadas por Auto Scaling.<\/li>\n<\/ul>\n<h3>Configuraci\u00f3n recomendada<\/h3>\n<p>En base a lo visto en los apartados anteriores, se recomienda la siguiente configuraci\u00f3n est\u00e1ndar. Ser\u00e1 necesario adaptarla a las necesidades espec\u00edficas del cl\u00faster de Amazon Aurora en el que se vaya a aplicar.<\/p>\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-54821 aligncenter\" src=\"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-aurora-cluster-7.png?resize=512%2C392&#038;ssl=1\" alt=\"\" width=\"512\" height=\"392\" \/><\/p>\n<p>Como regla general para esta configuraci\u00f3n, se recomienda tener una <strong>instancia Writer<\/strong> y una <strong>instancia Reader<\/strong> <strong>autogestionada <\/strong>del mismo tipo y tama\u00f1o. Se recomienda dejar el par\u00e1metro Failover priority en su valor por defecto que es tier-1, asegurando as\u00ed que el failover del cl\u00faster se realizar\u00e1 siempre entre estas dos instancias. El n\u00famero de instancias gestionadas por Auto Scaling ser\u00e1 variable, entre cero y el n\u00famero m\u00e1ximo que se especifique en la configuraci\u00f3n dependiendo de la carga de lectura en el cl\u00faster.<\/p>\n<p>Se recomienda aplicar la configuraci\u00f3n en la consola de AWS, aunque tambi\u00e9n es posible hacerlo en AWS CLI tal y como se describe en <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/AuroraUserGuide\/Aurora.Integrating.AutoScaling.html#Aurora.Integrating.AutoScaling.Add\" target=\"_blank\" rel=\"noopener\">Adding a scalling policy to an Aurora DB cl\u00faster.<\/a><\/p>\n<p>Estos son los par\u00e1metros recomendados:<\/p>\n<h3>Detalles de la pol\u00edtica<\/h3>\n<ul>\n<li><strong>M\u00e9trica objetivo:<\/strong> Se recomienda elegir cualquiera de las m\u00e9tricas predefinidas en funci\u00f3n de las necesidades del cl\u00faster. Estas son Promedio de utilizaci\u00f3n de CPU de las r\u00e9plicas de Aurora o Promedio de conexiones de las r\u00e9plicas de Aurora.<\/li>\n<li><strong>Valor objetivo:<\/strong>El valor objetivo a mantener para la m\u00e9trica Target seleccionada.<\/li>\n<\/ul>\n<h3>Detalles de la capacidad del cluster<\/h3>\n<ul>\n<li><strong>Capacidad m\u00ednima<\/strong>: Se recomienda utilizar siempre el valor 1.<\/li>\n<li><strong>Capacidad m\u00e1xima<\/strong>: Indique el n\u00famero m\u00e1ximo de instancias deseadas seg\u00fan las necesidades del cl\u00faster. El l\u00edmite m\u00e1ximo es 15.<\/li>\n<\/ul>\n<p>En el pr\u00f3ximo y \u00faltimo post de la serie veremos qu\u00e9 son los Custom Endpoints, c\u00f3mo pueden funcionar con Readers Auto Scaling y algunas configuraciones sugeridas.<\/p>\n<p>&nbsp;<\/p>\n<p>Imagen: Unsplash | Uriel SC<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Uno de los principales problemas de rendimiento de las Bases de Datos Relacionales Transaccionales (OLTP) se produce al incluir Cargas de Trabajo Anal\u00edticas (OLAP) con consultas que recuperan gran cantidad de informaci\u00f3n. En muchos casos para fines ajenos a la propia aplicaci\u00f3n como los sistemas BI. Este tipo de acceso tiene un impacto considerable en [&hellip;]<\/p>\n","protected":false},"author":134360241,"featured_media":1914,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","_crdt_document":"","content-type":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false},"categories":[221],"tags":[286,239,275],"class_list":["post-2130","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tecnologias","tag-amazon","tag-aurora-rds","tag-readers-auto-scaling-es"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/keepler.io\/wp-content\/uploads\/2023\/07\/keepler-aurora-rds.jpg?fit=1280%2C450&ssl=1","jetpack_shortlink":"https:\/\/wp.me\/p9CeZw-ym","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts\/2130","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/users\/134360241"}],"replies":[{"embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/comments?post=2130"}],"version-history":[{"count":1,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts\/2130\/revisions"}],"predecessor-version":[{"id":2240,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/posts\/2130\/revisions\/2240"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/media\/1914"}],"wp:attachment":[{"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/media?parent=2130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/categories?post=2130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/keepler.io\/es\/wp-json\/wp\/v2\/tags?post=2130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}