Mostrando entradas con la etiqueta ¿Hay vida más allá de Oracle?. Mostrar todas las entradas
Mostrando entradas con la etiqueta ¿Hay vida más allá de Oracle?. Mostrar todas las entradas

20 diciembre 2021

Seguridad con log4j, arrojemos algo de luz.

 

Aquí hay un resumen rápido, sobre cómo reaccionar ante el incidente log4j:

  • Si no es una aplicación de Java. No te preocupes.
  • Si es una aplicación Java que no usa Log4j. No te preocupes.
  • Si es una aplicación Java que utiliza Log4j 1.x. No se preocupe por estas vulnerabilidades. Por supuesto, el código más antiguo puede ser susceptible a otras vulnerabilidades.
  • Si es una aplicación Java que utiliza Log4j 2.x. Java 8 (o posterior), actualice a Log4j versión 2.17.0 *.
  • Si es una aplicación Java que utiliza Log4j 2.x. Java 7, actualice a Log4j versión 2.12.2 *.
  • Si actualizar Log4j no es una opción inmediata, tal vez esté esperando que un proveedor lance un parche, considere mitigar hasta que las actualizaciones sean posibles.
  • Estas versiones eran correctas al momento de escribir este artículo. Siga revisando la página de vulnerabilidades de seguridad de Apache Log4j para obtener actualizaciones.

Para ver más información:


31 marzo 2021

Python for Oracle DBA: Guía de supervivencia Parte II

 

Continuamos con la segunda parte del artículo anterior, comencemos:

Visualización de datos


La visualización de datos es esencial para la exploración, el análisis y la comunicación de datos, lo que permite a los científicos de datos comprender sus datos y compartir esa comprensión con otros. Python tiene muchas, muchas herramientas de visualización disponibles, pero destacaremos algunas aquí.

Matplotlib es la herramienta de visualización de datos de Python mejor establecida, y se centra principalmente en gráficos bidimensionales (gráficos de líneas, gráficos de barras,
diagramas de dispersión, histogramas y muchos otros). Funciona con muchas interfaces GUI y formatos de archivo, pero tiene un soporte interactivo relativamente limitado en los navegadores web.

¿Para qué se utiliza?:

Matplotlib se utiliza para analizar, explorar y mostrar relaciones entre datos.

Interviene en:

Casi todas las empresas con científicos de datos utilizan Matplotlib en algún lugar, ya sea directamente o, a menudo, a través de Pandas o las interfaces de alto nivel creadas para científicos de datos como Seaborn, HoloViews o plotnine. Se utilizaron Matplotlib y otras herramientas de Python de código abierto para crear la primera imagen de un agujero negro en el proyecto Event Horizon Telescope.

¿Dónde aprender más? https://matplotlib.org/

Python for Oracle DBA: Guía de supervivencia Parte I

 

Abarcaremos las posibilidades de Python (En varias entregas) para nuestro mundo de administración de bases de datos y plantearemos otros campos interesantes donde centrar nuestro interés.
  • Bibliotecas y herramientas de ciencia de datos fundamentales
  • Preparación de datos / ETL
  • Visualización de datos
  • Aprendizaje automático
  • Computación escalable
  • Procesamiento de imágenes
  • Procesamiento del lenguaje natural (NLP)
  • Fronteras de la IA

Bibliotecas y herramientas de ciencia de datos fundamentales

Esta colección de herramientas Python de código abierto y bibliotecas consta de paquetes muy populares que son se utilizan con frecuencia juntos para hacer ciencia de datos. El las herramientas fundamentales no solo son esenciales y poderosas para los practicantes individuales, pero también son esenciales
para hacer ciencia de datos empresariales con Python. Muchos otras herramientas y bibliotecas en la ciencia de datos de Python y el ecosistema de Machine Learning dependen de estos paquetes fundamentales.

15 febrero 2021

¿Hay vida más allá de Oracle?, Hoy, Voldemort a.k.a Amazon Dynamo

 

Voldemort es un sistema de almacenamiento de valor clave distribuido

  • Los datos se replican automáticamente en varios servidores.
  • Los datos se particionan automáticamente para que cada servidor contenga solo un subconjunto de los datos totales
  • Proporciona una consistencia ajustable (quórum estricto o consistencia eventual)
  • La falla del servidor se maneja de manera transparente
  • Motores de almacenamiento conectables: BDB-JE, MySQL, solo lectura
  • Serialización conectable - Búferes de protocolo, Thrift, Avro y serialización de Java
  • Los elementos de datos se versionan para maximizar la integridad de los datos en escenarios de falla sin comprometer la disponibilidad del sistema
  • Cada nodo es independiente de otros nodos sin un punto central de falla o coordinación.
  • Buen rendimiento de un solo nodo: puede esperar de 10 a 20.000 operaciones por segundo, según las máquinas, la red, el sistema de disco y el factor de replicación de datos
  • Soporte para estrategias de colocación de datos conectables para respaldar cosas como la distribución entre centros de datos que están geográficamente alejados.
Es utilizado en LinkedIn por numerosos servicios críticos que impulsan una gran parte del sitio.

Comparación con bases de datos relacionales

Voldemort no es una base de datos relacional, no intenta satisfacer relaciones arbitrarias mientras satisface las propiedades ACID. Tampoco es una base de datos de objetos que intenta mapear de forma transparente gráficos de referencia de objetos. Tampoco introduce una nueva abstracción como la orientación al documento. Es básicamente una tabla hash grande, distribuida, persistente y tolerante a fallas. Para aplicaciones que pueden utilizar un mapeador O / R como registro activo o hibernación, esto proporcionará escalabilidad horizontal y una disponibilidad mucho mayor, pero con una gran pérdida de conveniencia. Para aplicaciones grandes bajo presión de escalabilidad del tipo de Internet, un sistema probablemente puede consistir en una serie de servicios o API funcionalmente particionados, que pueden administrar recursos de almacenamiento en múltiples centros de datos utilizando sistemas de almacenamiento que a su vez pueden estar divididos horizontalmente. Para las aplicaciones en este espacio, las uniones arbitrarias en la base de datos ya son imposibles ya que todos los datos no están disponibles en una sola base de datos. Un patrón típico es introducir una capa de almacenamiento en caché que de todos modos requerirá semántica de tabla hash. Para estas aplicaciones, Voldemort ofrece una serie de ventajas:
  • Voldemort combina el almacenamiento en caché de la memoria con el sistema de almacenamiento para que no se requiera un nivel de almacenamiento en caché separado (en cambio, el sistema de almacenamiento en sí es simplemente rápido)
  • A diferencia de la replicación de MySQL, tanto las lecturas como las escrituras escalan horizontalmente
  • El reparto de datos es transparente y permite la expansión del clúster sin reequilibrar todos los datos.
  • La replicación y ubicación de datos se decide mediante una API simple para poder adaptarse a una amplia gama de estrategias específicas de la aplicación
  • La capa de almacenamiento es completamente simulada, por lo que el desarrollo y las pruebas unitarias se pueden realizar en un sistema de almacenamiento en memoria desechable sin necesidad de un clúster real (o incluso un sistema de almacenamiento real) para realizar pruebas simples.
Este software

Configuración

Hay tres archivos de configuración que controlan el funcionamiento del servidor:

  • cluster.xml: contiene la información sobre todos los nodos (es decir, servidores) en el clúster, en qué nombre de host se encuentran, los puertos que usan, etc. Es exactamente lo mismo para todos los nodos de voldemort. No contiene parámetros de ajuste ni directorios de datos para esos nodos, ya que esa información no es pública para el clúster, sino que es específica de esa configuración de nodos en particular.
  • stores.xml: contiene la información sobre todas las tiendas (es decir, tablas) en el clúster. Esto incluye información sobre el número necesario de lecturas correctas para mantener la coherencia, el número necesario de escrituras, así como cómo las claves y los valores se serializan en bytes. Es igual en todos los nodos del clúster.
  • server.properties: contiene los parámetros de ajuste que controlan un nodo en particular. Esto incluye la identificación del nodo local para que sepa qué entrada en cluster.xml corresponde a sí mismo, también el tamaño de la agrupación de subprocesos, así como cualquier configuración necesaria para el motor de persistencia local como BDB o mysql. Este archivo es diferente en cada nodo. Finalmente, hay una variable de entorno, VOLDEMORT_HOME, que controla el directorio en el que residen los datos y la configuración. Puede ver un ejemplo de cómo se presenta la configuración en el subdirectorio config / del proyecto. Esto incluye configuraciones de muestra que puede modificar con sus propios detalles.

Configuración de clúster

A continuación, se muestra un cluster.xml de ejemplo para un clúster de 2 nodos con 8 particiones de datos. También tenemos campos de 'zona' opcionales que le permiten mapear nodos a ciertos clústeres lógicos (centro de datos, rack, etc.) llamados zonas:

<cluster>

    <!-- The name is just to help users identify this cluster from the gui -->

    <name>mycluster</name>

    <zone>

      <zone-id>0</zone-id>

      <proximity-list>1</proximity-list>

    <zone>

    <zone>

      <zone-id>1</zone-id>

      <proximity-list>0</proximity-list>

    <zone>

    <server>

  <! - La identificación del nodo es una identificación secuencial única que comienza con 0 que identifica a cada servidor en el clúster ->

      <id>0</id>

      <host>vldmt1.prod.linkedin.com</host>

      <http-port>8081</http-port>

      <socket-port>6666</socket-port>

      <admin-port>6667</admin-port>

      <! - Una lista de particiones de datos asignadas a este servidor ->

      <partitions>0,1,2,3</partitions>

      <zone-id>0</zone-id>

    </server>

    <server>

      <id>1</id>

      <host>vldmt2.prod.linkedin.com</host>

      <http-port>8081</http-port>

      <socket-port>6666</socket-port>

      <admin-port>6667</admin-port>

      <partitions>4,5,6,7</partitions>

      <zone-id>1</zone-id>

    </server>

  </cluster>

 


Una cosa que es importante entender es que las particiones no son particiones estáticas de servidores, sino que son un mecanismo para particionar el espacio de claves de tal manera que cada clave se asigna estáticamente a una partición de datos en particular. Esto significa que un clúster en particular puede admitir muchas tiendas, cada una con diferentes factores de replicación; el factor de replicación no está codificado en el diseño del clúster. Esto es importante, ya que algunos datos son más importantes que otros, y la compensación correcta entre rendimiento y consistencia para una tienda puede ser diferente de otra.

Otro punto importante para recordar es que no se puede cambiar el número de particiones de datos. Apoyamos una redistribución en línea (reequilibrio) de particiones. En otras palabras, la inclusión de nuevos nodos da como resultado el traslado de la propiedad de las particiones, pero el número total de particiones siempre será el mismo, al igual que la asignación de clave a partición. Esto significa que es importante dar un buen número de particiones para empezar. El script aquí generará esta parte de la configuración por usted.

Gestión de BDB

El almacén de clave-valor subyacente también es importante para la configuración y la gestión de operaciones. Si se utiliza BDB, toda la configuración se realiza a través del archivo server.properties. Si se utiliza MySQL, se debe realizar la administración habitual de mysql.

Oracle tiene una reseña que brinda una buena descripción general del lado operativo de BDB.

Oracle NoSQL Database es una base de datos NoSQL tipo clave-valor (del estilo de Redis o Voldemort):

Sus principales características son:

Arquitectura

· Está construida sobre Oracle Berkeley DB Java Edition sobre la que añade una capa de servicios para usarse en entornos distribuidos



 Alta Disponibilidad y No-Single Point of Failure

  • Provee replicación de base de datos 1 Master-Multi-Replica
  • Las datos transaccionales se replican

 Balanceo de carga transparente:

· El Driver de Oracle NoSQL particiona los datos en tiempo real y los distribuye sobre los nodos de almacenaminto

· Su topología rutea las operaciones de escritura y lectura al nodo de almacenamiento más adecuado para optimizar la distribución de carga y rendimiento

Formato JSON

· La version 2 añade sopote para serialización con Avro, lo que permite definer un schema en JSON para los datos almacenados

Topologías configurables

· Los administradores pueden indicar cuanta capacidad está disponible en un nodo de almacenamiento permitiendo a los nodos con más capacidad almacenar varios nodos de replicación

Administación sencilla y Monitorización:

· Oracle NoSQL suministra un servicio de administración, tanto por consola web

 


 

Algunas sugerencias adicionales

Configuración de JVM

En LinkedIn mantenemos dos conjuntos de clústeres, de solo lectura y de lectura y escritura. Los clústeres de lectura y escritura son clústeres que utilizan almacenes BDB y tienen características de JVM totalmente diferentes de los que utilizan almacenes de solo lectura. Esto es lo que usamos en LinkedIn para nuestras tiendas de lectura y escritura:

  # Tamaño mínimo, máximo y total de JVM
  JVM_SIZE = "- servidor -Xms32g -Xmx32g"

  # Tamaños de nueva generación
  JVM_SIZE_NEW = "- XX: NewSize = 2048m -XX: MaxNewSize = 2048m"

  # Tipo de recolector de basura a usar
  JVM_GC_TYPE = "- XX: + UseConcMarkSweepGC -XX: + UseParNewGC"

  # Opciones de ajuste para el recolector de basura anterior
  JVM_GC_OPTS = "- XX: CMSInitiatingOccupancyFraction = 70 -XX: SurvivorRatio = 2"

  # Configuración de registro de actividad de JVM GC
  JVM_GC_LOG = "- XX: + PrintTenuringDistribution -XX: + PrintGCDetails -XX: + PrintGCDateStamps -Xloggc: $ LOG_DIR / gc.log"

Tener en cuenta que debe usar la marca simultánea y el barrido gc o, de lo contrario, el GC se detiene para recolectar un montón tan grande que causará períodos que no responden (tampoco sucede al principio, se arrastra y luego finalmente entra en una espiral de gc pause death ).

Esta es la configuración en una caja de RAM de 48 GB con un tamaño de caché BDB de 20 GB y 1 hilo más limpio, en SSD. Puede encontrar la configuración completa en config / prod_single_node_cluster. Para abrir un servidor con esta configuración, use bin / voldemort-prod-server.sh

20 enero 2021

¿Hay vida más allá de Oracle? TIBERO, la base de datos


Tibero es sistema de gestión de bases de datos relacional (RDBMS) desarrollado por TmaxSoft (Corea del Sur).

Si quieres tener información de primera mano, echa un ojo a su web.

Tibero es un sistema de administración de bases de datos relacionales (RDBMS) de alto rendimiento, altamente seguro y altamente escalable para empresas que desean aprovechar al máximo sus datos de misión crítica. En un mundo donde los datos son el núcleo de todo, Tibero ofrece una visión mejorada del procesamiento, la gestión y la protección de bases de datos a gran escala.

Tibero ofrece muchos beneficios que incluyen:

  • Altamente compatible con Oracle, en algunos casos hasta un 97% de compatibilidad
  • Alta disponibilidad (agrupación activa-activa)
  • Modelo de licencia simple similar al precio de suscripción de SaaS
  • Procesamiento de transacciones de alto rendimiento
  • Se escala con hardware básico en lugar de costosos servidores de bases de datos propietarios
  • Capacidad de base de datos en espera activa o pasiva
  • Arquitectura de hiperproceso
  • Cifrado de base de datos de alta seguridad
  • Recuperación en paralelo de varios nodos
  • Servidor compartido confiable
  • Tibero Enterprise Edition es todo incluido, sin productos adicionales para comprar

Tibero es un RDBMS que cierra la brecha entre las bases de datos relacionales heredadas y las cargas de trabajo en ejecución en un entorno de nube como AWS o Microsoft Azure

TmaxSoft, ofrece la posibilidad de bajar la base de datos en modo prueba de 30 días.

Dentro de las posibilidades que ofrece Tibero, podemos disfrutar de un buen ejemplo de despliegue. Hay un buen manual de como montar un cluster Tibero en AWS, en esta página: DBA Junior



Oracle: ¿Obtienes lo que pagas?

Oracle es el líder del mercado por una razón. Ofrece un alto rendimiento y buenas funciones y características que incluyen seguridad, ajuste y otros paquetes opcionales. La tecnología de escalamiento horizontal con RAC proporciona clústeres activo-activo (sin compartir nada). Debido a que es un proveedor comercial, sus desarrolladores son parte de la organización y son una cantidad conocida. Oracle es especialmente popular entre las grandes empresas y tiene una gran comunidad de desarrolladores y administradores.

Se recomienda Oracle para implementaciones a gran escala. Los procedimientos almacenados, que están integrados en la base de datos, se pueden ejecutar de forma independiente o activados por ciertos eventos. Es compatible con la partición de datos y requiere un nombre de usuario, contraseña y validación de perfil para iniciar sesión.

Sus inconvenientes incluyen la falta de soporte para CPU virtuales, costos ocultos para modelos de seguridad y particiones "opcionales" y altos CapEX (la licencia) y OpEX (el acuerdo de mantenimiento). Oracle tiene un modelo de licencia RDBMS mediante el cual, en un entorno de virtualización con particiones suaves, sus clientes deben pagar el 100% de los núcleos físicos disponibles, incluso si no se utilizan. Con este tipo de restricciones sobre cómo utilizar Oracle, muchas empresas, quizás incluso la suya, se sienten atrapadas en un monolito inflexible.

Código abierto: ¿Las mejores cosas de la vida son realmente gratuitas?

MySQL es rápido, escalable, fácil de usar y flexible. Permite la confirmación, la recuperación de fallos y la reversión de transacciones. Se usa comúnmente con scripts PHP para crear aplicaciones empresariales del lado del servidor o basadas en la web, y es compatible con Windows, Linux, MacOS y otros con C, C ++ y Java. Aunque las grandes empresas utilizan MySQL, es más popular entre las empresas más pequeñas porque no hay tarifas de licencia.

Otro RDBMS de código abierto popular es PostgreSQL, que es similar a MySQL. La eficiencia de su algoritmo central le permite superar a muchas bases de datos comerciales si trabaja con grandes conjuntos de datos, para los que los procesos de E / S pueden convertirse en un cuello de botella.

Las desventajas de las ofertas de código abierto también son similares. Tienen menos características y funciones que Oracle y no ofrecen RAC ni particiones de datos. Debido a que no son compatibles con Oracle, se necesitan más recursos y más tiempo para la migración, lo que aumenta los costos. Debido a que su código fuente está abierto a una comunidad, esto puede crear un riesgo de seguridad y la documentación principal no siempre está actualizada. El servicio y el soporte no están tan fácilmente disponibles porque estos no son productos comerciales.

TmaxSoft Tibero: ¿El secreto RDBMS mejor guardado?

  • Si la adopción de bases de datos fuera parte del concurso Let's Make a Deal, Oracle estaría detrás de la puerta # 1. 
  • Un RDBMS de código abierto como MySQL o PostgreSQL estaría detrás de la puerta # 2. Se estaría preguntando si desea sacrificar la estabilidad, la seguridad y las características y funcionalidades enriquecidas sin tarifas de licencia, desarrollo web y compatibilidad con más idiomas. 
  • En el juego RDBMS, al igual que en Let's Make a Deal, hay una puerta n. ° 3; sin embargo, TmaxSoft Tibero, que está detrás de él, es más un secreto que un misterio.

Tibero es un sistema de administración de bases de datos relacionales (RDBMS) de alto rendimiento, altamente seguro y altamente escalable. La alta disponibilidad se logra con activo-activo (igual que con RAC), el rendimiento se mejora con una arquitectura multiproceso y multiproceso, y para la recuperación ante desastres, hay activo-en espera. En términos de compatibilidad, Tibero es compatible con SQL estándar e interfaces como JDBC, ODBC y CLI, es compatible con Oracle PL / SQL, tipos de datos y funciones. También obtiene la ventaja adicional de la CPU virtual (no disponible con Oracle). Incluso puedes usar tu conjunto de habilidades de Oracle en Tibero.




26 noviembre 2020

¿Hay vida más allá de Oracle? Psi-probe para Apache Tomcat

 


Psi-probe es un monitor de Apache Tomcat que nació como un fork de Lambda Probe, debido a la falta de soporte sobre el mismo y las dudas en cuanto a su futuro.

Psi-probe es un proyecto con licencia GPLv2 que, según describen en su propia documentación, permite monitorizar en remoto el estado del servidor en los siguientes aspectos:

  • peticiones: dispone de un monitor de tráfico en tiempo real,
  • sesiones: analizar atributos en sesión, estimar el peso de las mismas,
  • jsp: navegar, ver el código fuente, recompilar!.
  • fuentes de datos: analizar el uso del pool de conexiones, ejecutar queries.
  • logs: ver el contenido, descargar, cambiar el nivel de trazabilidad en caliente.
  • hilos: ver la pila de ejecución, «matarlos».
  • conectores: ver el estado, usando gráficas.
  • cluster: ver el estado, usando gráficas.
  • JVM: ver el uso de memoria, lanzar el GC, reiniciar la JVM.
  • Sistema: uso de CPU, memoria,…

Está documentada su instalación tanto en Apache Tomcat como en Jboss Application Server, con el objetivo de reemplazar el tomcat manager ofreciendo mucha más funcionalidad, para el primero, o simplemente de disponer de un monitor online de la salud de tu servidor, para el segundo.

  • Hardware: Portátil Compaq  (2.4 GHz Intel Core i7, 4GB DDR3).
  • Sistema Operativo: Windows 10 64 bits
  • Apache Tomcat 9.0.13.
  • Apache Maven: 3.6.3.
  • psi-probe 3.5.2.

Instalación en Apache Tomcat.

Tras descargar el paquete de instalación lo único que tenemos que hacer es «tirar el war» probe.war en el directorio de despliegue de Apache Tomcat y, en función de si tenemos configurado el despliegue automático o no, configurar la aplicación web como tal, por defecto, no habría que hacer nada más que revisar la política de autenticación y autorización de tomcat definida en el fichero tomcat-users.xml del directorio conf.


Se pueden definir 4 niveles de autorización, asumiendo que manager es la más alta, con lo que si ya tenías definido un usuario con ese rol para el Tomcat Manager, no necesitas tocar nada.

Por último, si quieres acceder a toda la información de la JVM desde probe debes habilitar el acceso en remoto a la consola de JVM.

 Monitorización.

Una vez levantado el servidor y a través de la url que da acceso al contexto de la aplicación http://localhost:8080/probe podremos acceder con el usuario y contraseña configurados en Tomcat a la aplicación de monitorización.

La primera interfaz que se muestra es la de las aplicaciones instaladas en la que se puede comprobar que aparece el propio probe.

Pulsando sobre una aplicación podemos acceder a un breve detalle de toda la información que se recolecta sobre la misma:



En este caso he arrancado la demo de MyFaces Tobago. Tobago es un "framework"y una "libreria" de componentes JavaServer Faces (JSF). Que proporciona una forma cómoda de diseñar pantallas de aplicaciones similares a las de un escritorio con una apariencia y sensación coherentes. Tobago enfatiza la separación de estructura y diseño de pantallas. Próximamente haré una introducción a este "framework"

Pulsando sobre la sección correspondiente podemos analizar información sobre las sesiones activas:
se pueden eliminar las sesiones, estimar el tamaño que ocupan y pulsando sobre la misma podemos ver todos los objetos que se mantienen en la sesión del usuario en el servidor; pudiendo incluso realizar un segundo nicel de estimación del tamaño que ocupan dichos objetos en la memoria del servidor.

Existen más opciones en el menú izquierdo, entre ellas la de visualizar el contenido del descriptor de despliegue:

los servlets configurados y los parámetros de inicialización y de contexto de los servlets.

En la opción de logs podemos acceder a un listado de los ficheros que trazamos. 

y pulsando sobre uno de ellos, se puede visualizar el log, como si hiciéramos un "tail", sobre él mismo. del fichero:

Información sobre el sistema, sobre fuentes JDBC (en este ejemplo, no figuran)

Descripción del sistema

Conectores

En la pestaña de conectores podemos acceder a la monitorización de las peticiones que se realizar a través de los distintos conectores, disponiendo de información gráfica sobre número de peticiones, tiempo de proceso y volumen del tráfico de estas conexiones.




La última de las opciones es un chequeo rápido de la salud del servidor teniendo en cuenta el uso de las fuentes de datos, la memoria, el número de descriptores de fichero disponibles y si las aplicaciones están levantadas o no.


Está en vuestras manos ponerlo en producción. Si no, en cualquier entorno, incluso en el de desarrollo te puede servir como soporte de una monitorización del sistema durante pruebas de carga o estrés.




25 septiembre 2020

¿Hay vida más allá de Oracle? Apache Kafka


 

Why Kafka?

La respuesta más conocida es que el autor de Apache Kafka quiso ponerle el nombre del escritor porque está optimizado para la escritura, y su favorito resultó ser Franz Kafka.

Aquí viene la ironía:

Eficiencia de la comunicación
  • Kafka tenía serios problemas con su padre abusivo. En lugar de simplemente llamarlo para una charla, escribió una carta de 50 páginas. ¿No es esta forma de comunicación innecesariamente pesada?
  • No le entregó la carta a su padre, sino que se la dio a su madre para que se la entregase a su padre. Su madre lo leyó y decidió no entregarlo. Ni siquiera se entregó, aquí viene la confiabilidad de la comunicación.

¿Qué es Apache Kafka?


Apache Kafka es una plataforma de software de procesamiento de flujo de código abierto desarrollada por Apache Software Foundation, escrita en Scala y Java. El proyecto tiene como objetivo proporcionar una plataforma unificada, de alto rendimiento y baja latencia para manejar las fuentes de datos en tiempo real. Kafka puede conectarse a sistemas externos (para importar / exportar datos) a través de Kafka Connect y proporciona Kafka Streams, una biblioteca de procesamiento de flujos de Java, cuya finalidad es la transmisión de eventos. .

¿Para qué puedo usar la transmisión de eventos?


La transmisión de eventos se aplica a una amplia variedad de casos de uso en una gran cantidad de industrias y organizaciones. Entre sus muchos ejemplos se incluyen:
  • Para monitorizar transacciones bancarias y evitar el fraude bancario o el lavado de dinero (AML)
  • Procesar pagos y transacciones financieras en tiempo real, como en bolsas de valores, bancos y seguros.
  • Para rastrear y monitorear automóviles, camiones, flotas y envíos en tiempo real, como en la logística y la industria automotriz.
  • Para capturar y analizar continuamente datos de sensores de dispositivos de IoT u otros equipos, como en fábricas y parques eólicos.
  • Recopilar y reaccionar de inmediato a las interacciones y los pedidos de los clientes, como en el comercio minorista, la industria hotelera y de viajes y las aplicaciones móviles.
  • Monitorear a los pacientes en la atención hospitalaria y predecir cambios en la condición para garantizar un tratamiento oportuno en emergencias, seria fantástico haber hecho una aplicación sanitaria para monitorizar a los pacientes de COVID
  • Servir de base para plataformas de datos, arquitecturas basadas en eventos y microservicios.

¿Qué es la transmisión de eventos?

La transmisión de eventos es el equivalente digital del sistema nervioso central del cuerpo humano. Es la base tecnológica para el mundo 'siempre activo' donde las empresas están cada vez más definidas y automatizadas por software, y donde el usuario del software es más software.

Técnicamente hablando, la transmisión de eventos es la práctica de capturar datos en tiempo real de fuentes de eventos como bases de datos, sensores, dispositivos móviles, servicios en la nube y aplicaciones de software en forma de secuencias de eventos; almacenar estos flujos de eventos de forma duradera para su posterior recuperación; manipular, procesar y reaccionar a los flujos de eventos en tiempo real y retrospectivamente; y enrutar los flujos de eventos a diferentes tecnologías de destino según sea necesario. La transmisión de eventos asegura así un flujo continuo y una interpretación de datos para que la información correcta esté en el lugar correcto, en el momento correcto


Apache Kafka es una plataforma de transmisión de eventos.

¿Qué significa semejante unión de palabrotas?
Kafka combina tres capacidades clave para que pueda implementar sus casos de uso para la transmisión de eventos de un extremo a otro con una única solución probada en batalla:

Para publicar (escribir) y suscribirse a (leer) flujos de eventos, incluida la importación / exportación continua de sus datos desde otros sistemas.
Para almacenar transmisiones de eventos de forma duradera y confiable durante el tiempo que desee.
Procesar flujos de eventos a medida que ocurren o retrospectivamente.
Y toda esta funcionalidad se proporciona de manera distribuida, altamente escalable, elástica, tolerante a fallas y segura. Kafka se puede implementar en hardware bare-metal, máquinas virtuales y contenedores, tanto en las instalaciones como en la nube. Puede elegir entre la autogestión de sus entornos Kafka y el uso de servicios totalmente gestionados ofrecidos por una variedad de proveedores.

¿Cómo funciona Kafka, hablando claro?

Kafka es un sistema distribuido que consta de servidores y clientes que se comunican a través de un protocolo de red TCP de alto rendimiento. Se puede implementar en hardware bare-metal, máquinas virtuales y contenedores en entornos locales y en la nube.

Servidores: Kafka se ejecuta como un clúster de uno o más servidores que pueden abarcar varios centros de datos o regiones de la nube. Algunos de estos servidores forman la capa de almacenamiento, llamados brokers. Otros servidores ejecutan Kafka Connect para importar y exportar datos continuamente como flujos de eventos para integrar Kafka con sus sistemas existentes, como bases de datos relacionales y otros clústeres de Kafka. Para permitirle implementar casos de uso de misión crítica, un clúster de Kafka es altamente escalable y tolerante a fallas: si alguno de sus servidores falla, los otros servidores se harán cargo de su trabajo para garantizar operaciones continuas sin pérdida de datos.

Clientes: le permiten escribir aplicaciones distribuidas y microservicios que leen, escriben y procesan flujos de eventos en paralelo, a escala y de manera tolerante a fallas, incluso en el caso de problemas de red o fallas de la máquina. Kafka incluye algunos de estos clientes, que se complementan con docenas de clientes proporcionados por la comunidad de Kafka: los clientes están disponibles para Java y Scala, incluida la biblioteca Kafka Streams de nivel superior, para Go, Python, C / C ++ y muchas otras programaciones. idiomas y API REST.

Pongámonos más académicos, si cabe

Un evento registra el hecho de que "algo sucedió" en el mundo o en su negocio. También se le llama registro o mensaje en la documentación. Cuando lee o escribe datos en Kafka, lo hace en forma de eventos. Conceptualmente, un evento tiene una clave, un valor, una marca de tiempo y encabezados de metadatos opcionales.

Ejemplo

Clave de evento: "Mr traficante"
Valor del evento: "Hizo un pago de $ 200.000 a un testaferro conocido por Worldcheck"
Marca de tiempo del evento: "25 de junio de 2020 a las 2:06 p.m."

Los productores son aquellas aplicaciones cliente que publican (escriben) eventos en Kafka, y los consumidores son aquellos que se suscriben (leen y procesan) estos eventos. En Kafka, los productores y los consumidores están completamente desacoplados y son agnósticos entre sí, lo que es un elemento de diseño clave para lograr la alta escalabilidad por la que Kafka es conocido. Por ejemplo, los productores nunca necesitan esperar a los consumidores. Kafka ofrece varias garantías, como la capacidad de procesar eventos exactamente una vez.



Los eventos se organizan y almacenan de forma duradera en temas (Topic). Muy simplificado, un tema es similar a una carpeta en un sistema de archivos, y los eventos son los archivos en esa carpeta. Un ejemplo de nombre de tema podría ser "pagos". Los temas en Kafka siempre son de múltiples productores y múltiples suscriptores: un tema puede tener cero, uno o muchos productores que escriban eventos en él, así como cero, uno o muchos consumidores que se suscriban a estos eventos. Los eventos de un tema se pueden leer con la frecuencia necesaria; a diferencia de los sistemas de mensajería tradicionales, los eventos no se eliminan después del consumo. En su lugar, defina durante cuánto tiempo Kafka debe retener sus eventos a través de una configuración por tema, después de lo cual se descartarán los eventos antiguos. El rendimiento de Kafka es efectivamente constante con respecto al tamaño de los datos, por lo que almacenar datos durante mucho tiempo está perfectamente bien.



Los temas están divididos (partitioned), lo que significa que un tema se distribuye en varios "depósitos" ubicados en diferentes corredores de Kafka. Esta ubicación distribuida de sus datos es muy importante para la escalabilidad porque permite que las aplicaciones cliente lean y escriban los datos desde / hacia muchos corredores al mismo tiempo. Cuando se publica un nuevo evento en un tema, en realidad se agrega a una de las particiones del tema. Los eventos con la misma clave de evento (por ejemplo, un ID de cliente o vehículo) se escriben en la misma partición, y Kafka garantiza que cualquier consumidor de una partición de tema determinada siempre leerá los eventos de esa partición exactamente en el mismo orden en que fueron escritos.

Para que sus datos sean tolerantes a fallas (fault tolerant), incluidos ataque de expertos en seguridad maliciosos (los hackers son otra cosa),  y de alta disponibilidad (HA), todos los temas se pueden replicar, incluso en regiones geográficas o centros de datos, de modo que siempre haya varios corredores que tengan una copia de los datos en caso de que las cosas salgan mal, usted quiere realizar el mantenimiento de los corredores, etc. Una configuración de producción común es un factor de replicación de 3, es decir, siempre habrá tres copias de sus datos. Esta replicación se realiza a nivel de particiones de tema.

Si quieres seguir profundizando ...



Además de las herramientas de línea de comandos para tareas de gestión y administración, Kafka tiene cinco API principales para Java y Scala:

  • La API de administración para administrar e inspeccionar temas, agentes y otros objetos de Kafka.
  • Producer API para publicar (escribir) un flujo de eventos en uno o más temas de Kafka.
  • La API del consumidor para suscribirse a (leer) uno o más temas y procesar el flujo de eventos que se generan en ellos.
  • La API de Kafka Streams para implementar aplicaciones de procesamiento de flujos y microservicios. Proporciona funciones de nivel superior para procesar flujos de eventos, incluidas transformaciones, operaciones con estado como agregaciones y uniones, ventanas, procesamiento basado en el tiempo del evento y más. La entrada se lee de uno o más temas para generar resultados en uno o más temas, transformando efectivamente los flujos de entrada en flujos de salida.
  • La API de Kafka Connect para crear y ejecutar conectores de importación / exportación de datos reutilizables que consumen (leen) o producen (escriben) flujos de eventos desde y hacia sistemas y aplicaciones externos para que puedan integrarse con Kafka. Por ejemplo, un conector a una base de datos relacional como PostgreSQL podría capturar todos los cambios en un conjunto de tablas. Sin embargo, en la práctica, normalmente no es necesario implementar sus propios conectores porque la comunidad de Kafka ya ofrece cientos de conectores listos para usar.

¿Quieres ver una explicación de Apache Kafka, por un experto?

Visualiza el siguiente video, el audio está en Inglés, pero puedes activar los subtítulos si lo deseas.











24 septiembre 2020

¿Hay vida más allá de Oracle? Apache Cordova

 


Visión general

Apache Cordova es un marco de desarrollo móvil de código abierto. Le permite utilizar tecnologías web estándar: HTML5, CSS3 y JavaScript para el desarrollo multiplataforma. Las aplicaciones se ejecutan dentro de envoltorios dirigidos a cada plataforma y dependen de enlaces API que cumplen con los estándares para acceder a las capacidades de cada dispositivo, como sensores, datos, estado de la red, etc.

Utiliza Apache Cordova si eres:

  • Un desarrollador móvil y desea extender una aplicación a más de una plataforma, sin tener que volver a implementarla con el idioma y el conjunto de herramientas de cada plataforma.
  • Un desarrollador web y desea implementar una aplicación web empaquetada para su distribución en varios portales de tiendas de aplicaciones.
  • Un desarrollador móvil interesado en mezclar componentes de aplicaciones nativas con un WebView (ventana especial del navegador) que puede acceder a las API a nivel de dispositivo, o si desea desarrollar una interfaz de complemento entre componentes nativos y WebView.

Arquitectura

Hay varios componentes en una aplicación Cordova. El siguiente diagrama muestra una vista de alto nivel de la arquitectura de la aplicación Cordova..


Aplicación Web

Esta es la parte donde reside el código de su aplicación. La aplicación en sí se implementa como una página web, de forma predeterminada un archivo local llamado index.html, que hace referencia a CSS, JavaScript, imágenes, archivos multimedia u otros recursos necesarios para su ejecución. La aplicación se ejecuta en un WebView dentro del contenedor de la aplicación nativa, que distribuye a las tiendas de aplicaciones.

Este contenedor tiene un archivo muy importante: el archivo config.xml que proporciona información sobre la aplicación y especifica los parámetros que afectan su funcionamiento, como si responde a los cambios de orientación.

Plugins (complementos)

Los complementos son una parte integral del ecosistema de Cordova. Proporcionan una interfaz para que Cordova y los componentes nativos se comuniquen entre sí y se vinculan a las API de dispositivos estándar. Esto le permite invocar código nativo desde JavaScript.

El proyecto Apache Cordova mantiene un conjunto de complementos llamados Core Plugins. Estos complementos principales proporcionan a su aplicación para acceder a las capacidades del dispositivo, como la batería, la cámara, los contactos, etc.

Además de los complementos principales, existen varios complementos de terceros que proporcionan enlaces adicionales a funciones que no están necesariamente disponibles en todas las plataformas. Puede buscar complementos de Cordova mediante la búsqueda de complementos o npm. También puede desarrollar sus propios complementos, como se describe en la Guía de desarrollo de complementos. Los complementos pueden ser necesarios, por ejemplo, para comunicarse entre Cordova y componentes nativos personalizados.

Datos a tener en cuenta: 

  • Cuando crea un proyecto de Cordova, no tiene ningún complemento presente. Este es el nuevo comportamiento predeterminado. Todos los complementos que desee, incluso los complementos principales, deben agregarse explícitamente.
  • Cordova no proporciona widgets de interfaz de usuario ni marcos MV *. Cordova proporciona solo el tiempo de ejecución en el que se pueden ejecutar. Si desea utilizar widgets de UI y / o un framework MV *, deberá seleccionarlos e incluirlos en su aplicación.

Cordova presenta dos caminos de desarrollo

Cordova le proporciona dos flujos de trabajo básicos para crear una aplicación móvil. Si bien a menudo puede usar cualquiera de los flujos de trabajo para realizar la misma tarea, cada uno ofrece ventajas:

Flujo de trabajo multiplataforma (CLI): use este flujo de trabajo si desea que su aplicación se ejecute en tantos sistemas operativos móviles diferentes como sea posible, con poca necesidad de desarrollo específico de plataforma. Este flujo de trabajo se centra en la CLI de cordova. La CLI es una herramienta de alto nivel que le permite crear proyectos para muchas plataformas a la vez, abstrayendo gran parte de la funcionalidad de los scripts de shell de nivel inferior. La CLI copia un conjunto común de activos web en subdirectorios para cada plataforma móvil, realiza los cambios de configuración necesarios para cada uno y ejecuta scripts de compilación para generar binarios de aplicaciones. La CLI también proporciona una interfaz común para aplicar complementos a su aplicación. Para comenzar, siga los pasos de la guía Cree su primera aplicación. A menos que necesite un flujo de trabajo centrado en la plataforma, se recomienda el flujo de trabajo multiplataforma.

Flujo de trabajo centrado en la plataforma: utilice este flujo de trabajo si desea centrarse en la creación de una aplicación para una única plataforma y necesita poder modificarla en un nivel inferior. Debe utilizar este enfoque, por ejemplo, si desea que su aplicación combine componentes nativos personalizados con componentes de Cordova basados ​​en web, como se explica en Incrustar WebViews. Como regla general, use este flujo de trabajo si necesita modificar el proyecto dentro del SDK. Este flujo de trabajo se basa en un conjunto de scripts de shell de nivel inferior que se adaptan a cada plataforma admitida y una utilidad Plugman independiente que le permite aplicar complementos. Si bien puede usar este flujo de trabajo para crear aplicaciones multiplataforma, generalmente es más difícil porque la falta de una herramienta de nivel superior significa ciclos de compilación separados y modificaciones de complementos para cada plataforma.

Al comenzar, puede ser más fácil usar el flujo de trabajo multiplataforma para crear una aplicación, como se describe en la guía Cree su primera aplicación. Luego, tiene la opción de cambiar a un flujo de trabajo centrado en la plataforma si necesita el mayor control que proporciona el SDK.

NOTA: Una vez que cambie del flujo de trabajo basado en CLI a uno centrado en los SDK específicos de la plataforma y las herramientas de shell, no podrá regresar. La CLI mantiene un conjunto común de código fuente multiplataforma, que en cada compilación utiliza para escribir sobre el código fuente específico de la plataforma. Para conservar cualquier modificación que realice en los activos específicos de la plataforma, debe cambiar a las herramientas de shell centradas en la plataforma, que ignoran el código fuente multiplataforma y, en cambio, se basan en el código fuente específico de la plataforma.

Instalación de Cordova

La instalación de Cordova diferirá según el flujo de trabajo anterior que elija:

  • Flujo de trabajo centrado en la plataforma.

Después de instalar Cordova, se recomienda que revise la sección Desarrollar para plataformas para las plataformas móviles para las que desarrollará. También se recomienda que también revise la Guía de privacidad y la Guía de seguridad.

Hay alternativas, si no encuentras que es tu framework ideal, echa un ojo en los siguientes links