sábado, 5 de abril de 2025

¿Son las nuevas IA realmente inteligentes?

Un problema de Bongard es un tipo de rompecabezas inventado por el informático soviético Mijaíl Bongard (1924-1971), probablemente a mediados de la década de 1960. Se publicó en su libro de 1967 sobre reconocimiento de patrones. El objetivo es identificar las diferencias entre ambos lados. En la introducción del libro (que trata diversos temas, incluidos los perceptrones), Bongard atribuye las ideas a un grupo que incluye a M. N. Vaintsvaig, V. V. Maksimov y M. S. Smirnov.

La idea de un problema de Bongard es presentar dos conjuntos de diagramas relativamente simples, por ejemplo, A y B. Todos los diagramas del conjunto A tienen un factor o atributo común, ausente en todos los diagramas del conjunto B. El problema consiste en encontrar o formular convincentemente dicho factor común. Los problemas se popularizaron tras su aparición en el libro de 1979 «Gödel, Escher, Bach», de Douglas Hofstadter, autor de problemas de Bongard. Según Hofstadter, «la habilidad para resolver problemas de Bongard reside en la esencia de la inteligencia pura, si es que existe tal cosa».

Pues bien , con la llegada de las nuevas inteligencias artificiales me propuse preguntar a dos de ellas, ChatGPT de Open AI y Gemini de Google, por los problemas de Bongard, para testear si realmente son tan inteligentes como dicen, y la verdad es que el resultado fue sorprendente en algunos casos. 

He aquí el primer problema de Bongard que le propuse, el Nº 51.

Problema de Bongard 51




 

Problema de Bongard 51 ChatGPT


Respuesta de ChatGPT (En azul)

Este es un problema de Bongard, que consiste en identificar la regla que distingue los ejemplos de la parte izquierda de los de la derecha.

Análisis del patrón

1. Observando la columna de la izquierda:

o Cada cuadro tiene puntos distribuidos de cierta manera.

o En todos los casos, parece haber un grupo de puntos formando un patrón específico.

2. Observando la columna de la derecha:

o También hay puntos distribuidos, pero con una diferencia.

o Los puntos parecen estar más dispersos o sin formar un patrón estructurado.

Posible regla

Los cuadros de la izquierda tienen puntos que forman una figura reconocible o están agrupados, mientras que los de la derecha tienen puntos dispersos sin formar un patrón claro.

Parece que la clave está en la distribución y agrupación de los puntos. ¿Notas algún otro patrón?

En este caso nuestra IA ha acertado, no está mal. ¿es realmente inteligente, o ha sido entrenada con estos patrones y se los sabe?

Veamos el siguiente:

 

Problema de Bongard 47

Problema de Bongard 47 ChatGPT


Este es otro problema de Bongard, en el que hay que identificar la diferencia entre los cuadros de la izquierda y los de la derecha.

Análisis del patrón

1. Observando la columna izquierda:

o Los cuadros contienen triángulos dentro de círculos o círculos dentro de triángulos.

o Hay una interacción clara entre las formas.

2. Observando la columna derecha:

o Los cuadros tienen círculos y triángulos, pero no están uno dentro del otro.

o Las figuras están separadas o simplemente colocadas juntas.

Posible regla:

Los cuadros de la izquierda contienen figuras anidadas (un triángulo dentro de un círculo o viceversa), mientras que los de la derecha no tienen anidamiento, solo formas separadas.

¿Qué te parece esta hipótesis? 😊

Aquí, acierta de nuevo, pero desvaría, es incapaz de determinar que en la izquierda se cumple solo al patrón de triángulos dentro de círculos y en la derecha Círculos dentro de triángulos. Parece que mezcla ambas soluciones, esto contesta la pregunta anterior (no ha sido entrenado con los problemas de Bongard, al menos no se los sabe de memoria) lo cual nos da una idea de que realmente tiene cierto nivel de inteligencia. Acertó el problema N51, pero en este ha desvariado un poco aunque ha estado muy cerca de la solución.

Vamos al Nº 91 para mí el más “humano” de los problemas, creo que para un humano es el más fácil de los tres, mientras que ChatGPT falla estrepitosamente.

 

Problema de Bongard 91

Problema de Bongard 91 ChatGPT




Este es otro problema de Bongard, y nuevamente hay que encontrar la regla que separa los cuadros de la izquierda de los de la derecha.

Análisis del patrón

1. Observando la columna izquierda:

o Las figuras parecen tener líneas curvas o estructuras más complejas.

o Algunas formas tienen subdivisiones o elementos más detallados.

o Hay figuras con conexiones o elementos internos (como la línea con marcas transversales o el círculo con cortes).

2. Observando la columna derecha:

o Las formas son más simples y geométricas.

o Se componen de líneas rectas, triángulos o cuadrados sin subdivisiones.

Posible regla:

Las figuras de la izquierda tienen estructuras más elaboradas o detalles internos, mientras que las de la derecha son más simples y geométricas.

¿Qué opinas de esta hipótesis? ¿Ves algún otro detalle que pueda ayudar? 😊

Era mucho más sencillo, a la izquierda tenemos el concepto abstracto de número tres y la derecha el del número 4.

GTP: ¡Buena observación! En la columna izquierda, las figuras representan el concepto del número tres (como tres líneas, tres segmentos, tres elementos conectados), mientras que en la columna derecha representan el número cuatro (cuatro puntos, cuatro lados, cuatro subdivisiones).

Estos problemas de Bongard pueden ser engañosamente simples o profundamente abstractos. ¡Gracias por el desafío! ¿Te gustaría intentar otro? 😊

Aquí vemos que ChatGPT no fue capaz de encontrar una simple abstracción, se lió en complejidades y no vio lo mas sencillo y evidente (para un humano). 

ChatGPT es un buen modelo de IA, está muy avanzado y parece realmente inteligente, pero le queda aún recorrido para pasar nuestro “Test de Turing” de los problemas de Bongard.

Veamos ahora Gemini de Google.

Problema de Bongard 51 Gemini



GEMINI

¡Absolutamente! Los diagramas de Bongard son un tipo de rompecabezas visual que desafían a identificar la regla que distingue un conjunto de imágenes de otro.

Analizando el Problema 51:

Para resolver este problema, debemos encontrar la característica común que comparten todos los cuadros de un lado y que no está presente en el otro lado.

Observación Inicial:

Cantidad de círculos: Todos los cuadros tienen la misma cantidad de círculos.

Distribución de los círculos: La distribución de los círculos dentro de cada cuadro varía.

Hipótesis:

Después de analizar detenidamente los cuadros, una posible solución es que:

Un lado de los cuadros tiene un número impar de filas.

El otro lado de los cuadros tiene un número par de filas.

Verificación:

Al contar las filas en cada cuadro, podemos confirmar si esta hipótesis es correcta. Si la hipótesis es correcta, habremos encontrado la regla que distingue los dos conjuntos de cuadros.

Solución Tentativa:

Si esta hipótesis es correcta, la solución al problema de Bongard 51 sería que los cuadros de un lado tienen un número impar de filas, mientras que los cuadros del otro lado tienen un número par de filas.

Importante:

Visualización: Es fundamental visualizar y comparar cada cuadro individualmente para llegar a una conclusión precisa.

Eliminación de distractores: A veces, los diagramas de Bongard pueden incluir elementos distractores para dificultar la resolución. Es importante concentrarse en la característica principal que distingue los dos conjuntos.

¿Quieres intentar resolver otro problema de Bongard? O si tienes alguna otra pregunta sobre este tipo de rompecabezas, no dudes en preguntar.

Nota: Si puedes proporcionar una imagen más clara o una descripción más detallada de los cuadros, podría ayudarte a encontrar una solución más precisa.

¿Te gustaría que intentemos resolver otro problema de Bongard?

Alternativamente, si tienes alguna otra pregunta sobre este tipo de rompecabezas, no dudes en preguntar.

En este caso Gemini da una respuesta más elaborada que ChatGPT pero parece menos certero, veamos el siguiente.

Problema de Bongard 47 Gemini


 ¡Absolutamente! Vamos a analizar juntos el problema de Bongard número 47.

Observación Inicial:

A simple vista, vemos una mezcla de círculos y triángulos en cada cuadro. Algunos triángulos tienen un pequeño círculo dentro.

Hipótesis:

Después de una observación cuidadosa, propongo la siguiente hipótesis:

Un lado de los cuadros: Todos los triángulos tienen un círculo dentro.

El otro lado de los cuadros: Ningún triángulo tiene un círculo dentro.

Verificación:

Al examinar cada cuadro individualmente, podemos confirmar si esta hipótesis es correcta. Si todos los triángulos del lado izquierdo tienen un círculo dentro y ninguno de los del lado derecho lo tiene, entonces hemos encontrado la solución.

Posibles variaciones de la hipótesis:

Tamaño del círculo: Podría haber una diferencia en el tamaño relativo del círculo dentro del triángulo.

Posición del círculo: El círculo podría estar siempre en una posición específica dentro del triángulo (arriba, abajo, centro).

¿Qué te parece esta hipótesis? Si no es así, podemos explorar otras posibilidades.

Para una mejor evaluación, sería útil tener una imagen más clara y grande de los cuadros. Esto nos permitiría analizar detalles más finos y descartar posibles distractores.

Recuerda: Los problemas de Bongard a menudo requieren un pensamiento lateral y una observación detallada. ¡No te desanimes si no encuentras la solución de inmediato!

Aquí es bastante completo, además de la hipótesis principal, a la izquierda todos los cuadrados tienen un triángulo en su interior, nos dice que estemos atentos a otras hipótesis relacionadas con las posiciones o tamaños de las figuras, pero se olvida de comentar que como contraposición al lado izquierdo, en el derecho se ve el patrón inverso, los triángulos tienen cuadrados en su interior.

Vamos al tercer y último problema.

Problema de Bongard 91 Gemini


 

¡Absolutamente! Vamos a analizar juntos el problema de Bongard número 91.

Observación Inicial:

En esta ocasión, tenemos una variedad de formas geométricas simples y líneas. A diferencia de los problemas anteriores, aquí las figuras parecen tener una mayor complejidad en cuanto a la combinación de elementos y sus relaciones espaciales.

Hipótesis:

Después de una observación cuidadosa, propongo las siguientes hipótesis:

1. Presencia de curvas: Un lado podría tener figuras que incluyen curvas, mientras que el otro lado solo tiene líneas rectas.

2. Número de puntos de intersección: Podría haber una diferencia en el número de puntos donde las líneas se cruzan en cada lado.

3. Similitud a letras o números: Algunas figuras podrían parecerse a letras o números, y esta característica podría ser la clave para diferenciar los dos conjuntos.

4. Simetría: Podría existir una diferencia en la simetría de las figuras entre ambos lados.

Análisis más detallado:

Para confirmar o descartar estas hipótesis, es necesario analizar cada figura individualmente y buscar patrones comunes dentro de cada conjunto. Considera los siguientes aspectos:

Tipo de líneas: ¿Son rectas, curvas o una combinación de ambas?

Número de líneas: ¿Cuántas líneas hay en cada figura?

Conexiones entre líneas: ¿Cómo se conectan las líneas entre sí? ¿Hay puntos de intersección?

Forma general de la figura: ¿La figura tiene una forma definida (círculo, cuadrado, etc.) o es más abstracta?

Orientación de las líneas: ¿Las líneas están orientadas de manera similar o diferente?

Sugerencias:

Simplifica las figuras: Intenta descomponer cada figura en sus elementos básicos (líneas, curvas, puntos) para identificar patrones más fácilmente.

Busca similitudes y diferencias: Compara las figuras de un lado con las del otro lado para encontrar las características que las diferencian.

Elimina distractores: Concéntrate en los elementos clave de cada figura y evita distraerte con detalles menores.

¿Quieres intentar aplicar estas sugerencias y ver si encuentras la solución? Si necesitas más pistas, puedo ayudarte.

Recuerda: Los problemas de Bongard pueden ser desafiantes, así que no te desanimes si no encuentras la solución de inmediato. La práctica y la paciencia son clave para mejorar tus habilidades de resolución de problemas visuales.

¿Te gustaría que te ayude a encontrar la solución?

Yo: Era mucho más sencillo, a la izquierda tenemos el concepto abstracto de número tres y la derecha el del número 4.

Gemini: ¡Excelente observación! Has dado con la solución de manera muy simple y elegante. A menudo, los problemas de Bongard buscan patrones que a primera vista pueden parecer complejos, pero que en realidad se basan en conceptos muy básicos.

Tu solución es correcta:

Lado izquierdo: Todas las figuras están compuestas por tres elementos (líneas, puntos, etc.).

Lado derecho: Todas las figuras están compuestas por cuatro elementos.

Esta es una solución clara y concisa que explica perfectamente la diferencia entre ambos conjuntos de figuras. ¡Felicidades por haber resuelto este problema de Bongard!

A veces, la solución más sencilla es la correcta. Este problema nos enseña que a menudo nos complicamos demasiado al buscar patrones complejos cuando la respuesta puede estar en algo muy simple.

Como experimento de tipo Test de Turing no ha estado mal, en primer lugar a mi parecer las IA son bastante buenas, hacen comentarios muy completos y da la impresión de que no solo ven correctamente, sino que también piensan y manejan conceptos abstractos. Aunque a un nivel claramente inferior al de un ser humano. También hay que tener en cuenta el efecto “personificación”; el hecho de que una IA junte palabras, puede impresionarnos y dar la sensación de que piensa realmente, cuando en realidad no está haciendo más que cálculos estadísticos. De todas formas eso no las “deshumaniza” pues al fin y al cabo nuestras neuronas hacen exactamente lo mismo. 

Resulta curioso lo difícil que es "aprehender" un concepto abstracto sencillo (los números naturales) aun con una gran potencia de cálculo. Las IA comenzarán a alcanzar al ser humano cuando empiecen a computar en alto nivel, es decir en vez de sumar 2+2 = 4 a nivel de CPU, lo hagan a nivel de concepto abstracto de número natural (¡y están ya realmente cerca!)  lo sabremos el día que se equivoquen, y sumen 2+2 =5 y tal vez el día que se cansen y les entre sueño. 😀


sábado, 15 de marzo de 2025

Curso de DevOps: Automatización VIII. Componentes de una plataforma de automatización

Vamos a recordar los componentes de la plataforma de automatización, junto con las ventajas de utilizar una plataforma frente a un sistema de scripts aislados para tareas de administración del sistema. Hay diferentes enfoques que podemos adoptar para automatizar nuestros sistemas. Uno de ellos es adoptar la plataforma de automatización. El segundo es optar por el script de automatización. Intentemos comprender la arquitectura centrándonos en los componentes de esta.

 

Curso de DevOps: Automatización VIII. Componentes de una plataforma de automatización

Hay cuatro capas importantes. La primera capa es la base que proporciona la infraestructura. Puede ser NSX, vSphere o también puede ser vSAN. La segunda capa tiene que ver con operaciones en las que podemos utilizar componentes como vRealize Log Insight o incluso vRealize Operations Manager. Hay que seleccionar componentes que puedan gestionar las operaciones de nuestra plataforma de automatización. Después necesitamos una plataforma de gestión en la nube, que pueda funcionar con la automatización del orquestador. vRealize proporciona componentes como vRealize Orchestrator y vRealize Automation para administrar nuestra plataforma en la nube. Y, por último, es necesario identificar escenarios que representen qué modelos de negocio se pueden automatizar. Y eso se puede hacer utilizando vRealize Business o vRealize Hyperic. Existen varias herramientas externas diferentes que se pueden utilizar para crear escenarios.

 

Curso de DevOps: Automatización VIII. Componentes de una plataforma de automatización

Ahora, debemos centrarnos en utilizar un flujo de trabajo de automatización. Puede haber una desviación respecto a nuestro flujo de trabajo de automatización. Estamos adoptando un flujo de trabajo de automatización que se ha implementado prácticamente en varios escenarios. Para empezar, primero debemos utilizar un formato de diseño validado proporcionado por un proveedor. Por ejemplo, podemos tomar la base de VMware Validated Design. Esto nos ayudará a clasificar primero el tipo de implementación. Ahora hay tres posibilidades diferentes de tipo de implementación. La primera es una región única, la segunda es una región dual y la tercera es una región cruzada que utiliza UDLR. Necesitamos entender que una sola región siempre se preparará para una región particular, digamos, la región Y, como se indica en la ilustración. Podemos utilizar estas regiones para realizar la implementación de varios escenarios que están presentes en una región en particular. Podemos completar la región Z. Cuando tenemos una región dual, tenemos que realizar todas las tareas de una sola región y luego necesitaremos preparar la región X. En resumen, estamos preparando dos regiones diferentes y luego estas implementarán los escenarios. Cuando vayamos a una región cruzada con UDLR, realizaremos un escenario con UDLR. No realizaremos un escenario preparando un escenario explícito para regiones específicas.

 

Curso de DevOps: Automatización VIII. Componentes de una plataforma de automatización

Ahora bien, ¿cuales son las ventajas de utilizar una plataforma de automatización? En primer lugar, la alta disponibilidad de los componentes de gestión porque están debidamente probados. Proporciona copia de seguridad y restauración simplificada de los componentes de administración, monitoreo y alertas configurables y configuración basada en UI de recuperación ante desastres de los componentes de administración.

 

Curso de DevOps: Automatización VIII. Componentes de una plataforma de automatización

Finalmente, necesitamos clasificar los beneficios de la plataforma de scripts. El primer beneficio es la compatibilidad con el ritmo del ciclo de desarrollo. Costo de mantenimiento más económico y proporciona automatización de escala incorporada. También proporciona la capacidad de ampliar el alcance de la automatización. Y, por último, proporciona una adopción mejorada con automatización de pruebas sin código donde, en el caso de un script, es necesario escribir código. Depende de un intérprete particular para interpretar el código. También es necesario probarlo aplicando varios tipos diferentes de pruebas.

 

sábado, 1 de marzo de 2025

Curso de SQL. Filtrar resultados usando HAVING

A diferencia de la cláusula WHERE, HAVING se puede utilizar con funciones agregadas. Una función agregada es una función donde se agrupan los valores de varias filas juntos como información sobre ciertos criterios para formar un valor único de significado más significativo o medición.

Las funciones agregadas comunes incluyen COUNT(), SUM(), MIN() y MAX().

Este ejemplo utiliza la tabla Coches de una base de datos de ejemplo.

SELECT IdCliente, COUNT(Id) AS [Numero de Coches] FROM Coches

GROUP BY IdCliente HAVING COUNT(Id) > 1

Esta consulta devolverá el ID de cliente y el número de coches de cualquier 
cliente que tenga más de uno. En este caso, hay dos clientes que tienen 
más de uno, el 1 y el 4, el cliente 1 tiene 2 coches y el cliente 4 tiene 3 coches.



Los resultados se verán así:
Id. de cliente Número de Coches

stomerId ProductId Quantity Price

1                   2

4                   3

También se puede utilizar HAVING para comprobar si hay clientes que hayan pedido dos productos determinados. Por ejemplo en este caso se quiere saber los clientes que han pedido el producto con Id = 2 e Id = 3.

SELECT IdCliente FROM Pedidos WHERE IdProducto in (2,3)

GROUP by IdCliente HAVING count(distinct IdProducto) = 2

La consulta selecciona solo registros con los IdProducto 2 y 3 y con la cláusula
 HAVING busca solo los clientes que hayan pedido ambos IdProducto  
y no solo uno.
Otra posibilidad sería

SELECT IdCliente FROM orders GROUP BY IdCliente HAVING SUM(CASE WHEN IdProducto = 2 THEN 1 ELSE 0 END) > 0 AND SUM(CASE WHEN productID = 3 THEN 1 ELSE 0 END) > 0 

Esta consulta selecciona solo grupos que tengan al menos un registro con 
IdProducto =  2 y al menos uno con IdProducto = 3.

 

sábado, 15 de febrero de 2025

Curso de DevOps: Automatización VII. Atributos de los flujos de trabajo de automatización y DevOps

 La automatización es uno de los requisitos esenciales de la implementación de DevOps. Hay varias formas diferentes en las que podemos planificar el flujo de trabajo de automatización. Vamos a utilizar el marco de automatización API.

Curso de DevOps: Automatización VII. Atributos de los flujos de trabajo de automatización y DevOps

Hay tres unidades esenciales. Primero está el script de automatización, que puede contener archivos de características, datos de automatización o, a veces, repositorios de correo basura. Todo esto será utilizado por el marco de automatización API para automatizar la tarea. El marco de automatización API estará compuesto por un motor de ejecución de automatización, utilidades de automatización, utilidades de KPI para monitorear las tareas de automatización y ciertas utilidades comunes para integrar servicios externos al marco API existente. El resultado final serán informes y registros de automatización. Podemos utilizar varias herramientas diferentes en cada una de estas capas para asegurarnos de poder derivar un flujo de trabajo de automatización sólido para nuestro sistema existente utilizando marcos de automatización API.

Curso de DevOps: Automatización VII. Atributos de los flujos de trabajo de automatización y DevOps

El flujo de trabajo automatizado de DevOps también se basa en una canalización de componentes. La canalización de componentes comienza con la actividad de los desarrolladores de verificar la fuente. Una vez que se verifica la fuente y se compila, realizaremos pruebas de unidad y de sus componentes. En caso de que sea necesario revertir, revertiremos los cambios y una vez que estemos convencidos con el módulo probado, ensamblaremos los módulos. Cargaremos el módulo no controlado para su aprobación y finalmente, una vez aprobado, enviaremos una notificación. Las notificaciones pueden ser de dos tipos, puede ser una notificación de éxito o de error. Una vez que la carga de módulos no controlados se realice correctamente, el tipo de notificación será exitosa; de lo contrario, será una notificación de error.

Curso de DevOps: Automatización VII. Atributos de los flujos de trabajo de automatización y DevOps

Teniendo en cuenta el proceso de integración, comenzamos eligiendo la versión del componente. Una vez que hayamos seleccionado la versión del componente, debemos descargar todos los módulos dependientes. Después de descargar las dependencias, o módulos de los que depende nuestro componente, ensamblaremos y crearemos una unidad desplegable. Esas unidades desplegables se desplegarán utilizando varias estrategias de despliegue diferentes, como si se pudiera incrementar hasta la puesta en escena. Realizaremos una “prueba de humo” como resultado, podremos revertir la implementación y notificar la falla. Pero si la prueba  tiene éxito, comprobaremos el “sistema inmunológico”. Nuevamente, el resultado de la verificación, si no es satisfactorio, podemos revertir el despliegue, pero si tiene éxito, realizaremos la prueba de aceptación. Si la prueba de aceptación no tiene éxito, podemos revertir la implementación nuevamente. Pero si es así, si todo está bien, podemos retroceder la preparación, realizar una prueba de humo adecuada en la preparación, promocionar los módulos y luego desplegar la unidad. Y finalmente, una vez finalizada la implementación, notificar el éxito. Pero si la etapa de reversión no tiene éxito, notificaremos el error.

Curso de DevOps: Automatización VII. Atributos de los flujos de trabajo de automatización y DevOps

Finalmente, vemos el flujo de trabajo automatizado de DevOps, pero ahora desde la perspectiva de la implementación en producción. Planificaremos el incremento de implementación de lo que esté listo para la producción. Una vez que esté implementado, haremos una prueba y decidiremos si revertimos la implementación o no. Si seleccionamos la estrategia de implementación de reversión porque la prueba falle, debemos detectar una implementación incorrecta. Necesitamos notificar el fracaso. Pero sí, si pasa la prueba se realizará una prueba del sistema “inmunológico” y notificaremos el éxito.

 

sábado, 1 de febrero de 2025

Cláusulas EXPLAIN and DESCRIBE

 DESCRIBE nombre_tabla

DESCRIBE y EXPLAIN son sinónimos. DESCRIBE en un nombre de tabla devuelve la definición de las columnas.

DESCRIBE tablename;

 Ejemplo de resultado:

COLUMN_NAME COLUMN_TYPE IS_NULLABLE COLUMN_KEY COLUMN_DEFAULT EXTRA

id int(11) NO PRI 0

auto_increment

test varchar(255) YES (null)

Cláusulas EXPLAIN and DESCRIBE


Muestra los nombres de las columnas, seguidos del tipo de columna, si se permite nulo en la columna y si la columna utiliza un índice. También se muestra el valor predeterminado y si la tabla contiene algún comportamiento especial como un  auto_increment.

EXPLAIN Select query

Un EXPLAIN delante de una consulta de selección muestra cómo se ejecutará la consulta. De esta manera veremos si la consulta utiliza un índice o si podríamos optimizar la consulta agregando un índice. 

Ejemplo de query:

explain select * from usuarios join data on usuarios.test = data.fk_usuarios;

Ejemplo de resultado:

id select_type table type possible_keys key key_len ref rows Extra

1 SIMPLE user index test test 5 (null) 1 Using where;

Usando índice

1 SIMPLE data ref fk_user fk_user 5 user.test 1 (null)

En el tipo se ve si se utilizó un índice. En la columna posible_keys podemos ver si el plan de ejecución puede elegir entre diferentes índices o si no existe ninguno.  La clave nos indica el índice real utilizado. Key_len muestra el tamaño en bytes de un elemento de índice. Cuanto menor sea este valor, más elementos del índice encajarán en el mismo tamaño de memoria y se pueden procesar más rápido. Rows muestra el número esperado de filas que la consulta debe escanear, cuanto más bajas, mejor.

sábado, 18 de enero de 2025

Curso de DevOps: Automatización VI. Relaciones, dependencias y políticas

El objetivo de este post es identificar las relaciones, dependencias y las políticas de automatización que se utilizan para derivar un clúster de automatización de referencia, con componentes heterogéneos. Para crear una arquitectura de automatización de clústeres, debemos centrarnos en ciertos elementos esenciales.

Curso de DevOps: Relaciones, dependencias y políticas

La automatización de un clúster implica varios componentes diferentes, y cada componente tiene un papel esencial que desempeñar. El componente central es la sala de control, que asume la responsabilidad de la concesión de licencias y proporciona capacidades de visualización de conocimientos, almacenamiento en caché, mensajería, servicio de conocimientos y descubrimiento de servicios de conocimientos. Toda la configuración para la automatización del clúster se realiza en una base de datos persistente, que puede ser PostgreSQL o cualquier otra base de datos de nuestra elección, donde podremos almacenar la base de datos de metadatos del panel. La base de datos persistente puede funcionar con capacidades de Elasticsearch para proporcionar una búsqueda rápida que permita una mejor búsqueda. Podemos tener varios componentes conectados a la sala de control, que se gestionarán para la automatización del clúster. Uno de ellos es el servidor SQL, podemos optar por un servidor Oracle, que tendrá una base de datos de sala de control y una base de datos de análisis. Podremos tener un servidor de versiones, que será un componente opcional. Nuestra sala de control también deberá funcionar con archivos compartidos, que pueden ser SMB. Utilizando todos estos componentes, podemos crear capacidades de automatización de clústeres.

Curso de DevOps: Relaciones, dependencias y políticas


Ahora vamos a ver los componentes esenciales del clúster. El primer componente es el propio grupo de clústeres. Podemos considerar un grupo de clústeres como un grupo de servicios agrupados que conmutan juntos si hay un fallo en uno de ellos, pues estarán estrechamente acoplados entre sí. En segundo lugar está el host, es la máquina del clúster, que se requiere para alojar el servicio. El tercero es el nodo, es un término genérico que se usa para máquinas en un clúster. Los nodos pueden ser de dos tipos: nodo primario que contiene el servicio de base de datos activo y un nodo secundario que es el servicio duplicado pasivo o en espera. Y finalmente, tendremos un servidor, que se encarga de escuchar todas las solicitudes y gestionar y procesar las solicitudes.

Curso de DevOps: Relaciones, dependencias y políticas


Dentro de la tarea del clúster de automatización. Dependiendo de nuestras  necesidades, podemos configurar un clúster de automatización para brindarnos la posibilidad de administrar fallas de aplicaciones y servicios, administrar fallas de sitios en organizaciones de múltiples sitios y ocuparnos de fallas de sistemas y hardware. Aparte de eso, también debemos identificar las razones críticas por las que utilizar el clúster de automatización. La primera razón es que nos facilita la replicación. Esta replicación puede ser de varios tipos, puede ser replicación sincrónica o replicación asincrónica. El objetivo principal es garantizar que el nodo primario y el nodo secundario estén sincronizados. La segunda razón para utilizar un clúster de automatización es gestionar el tiempo de inactividad y la conmutación por recuperación. La recuperación por recuperación se considera un proceso de restauración de la aplicación en un estado de conmutación por error a su estado original, que es el que tenía antes del error. El tercer uso importante del clúster de automatización es gestionar de forma inteligente la conmutación por error. La conmutación por error en una arquitectura de alta disponibilidad,  significa la capacidad del sistema de cambiar servicios esenciales, como servicios de base de datos y servicios SVN, automáticamente a un servidor de base de datos en espera o, a veces, a un servidor SVN. Y, por último, se trata de gestionar la degradación y la redundancia elegantes. Cuando el proceso de degradación es elegante, permite que las dependencias del clúster funcionen correctamente en un nodo primario degradado, mientras que se utiliza la redundancia para evitar un punto único de falla.