Giter Club home page Giter Club logo

epcsd-spring-2023-productcatalog's Introduction

Mis notas

kafka

amigoscode: https://www.youtube.com/watch?v=SqVfCyfCJqw

  janrax@janrax-Legion-5-Linux:~/Escritorio/Code/epcsd-spring-2023-productcatalog$ docker-compose ps
  Name                                  Command               State                                            Ports
  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  epcsd-spring-2023-productcatalog_adminer_1     entrypoint.sh php -S [::]: ...   Up      0.0.0.0:18080->8080/tcp,:::18080->8080/tcp                                              
  epcsd-spring-2023-productcatalog_kafka_1       /etc/confluent/docker/run        Up      0.0.0.0:19092->19092/tcp,:::19092->19092/tcp, 0.0.0.0:29092->9092/tcp,:::29092->9092/tcp
  epcsd-spring-2023-productcatalog_productdb_1   docker-entrypoint.sh postgres    Up      0.0.0.0:54320->5432/tcp,:::54320->5432/tcp                                              
  epcsd-spring-2023-productcatalog_userdb_1      docker-entrypoint.sh postgres    Up      0.0.0.0:54321->5432/tcp,:::54321->5432/tcp                                              
  epcsd-spring-2023-productcatalog_zookeeper_1   /etc/confluent/docker/run        Up      0.0.0.0:22181->2181/tcp,:::22181->2181/tcp, 2888/tcp, 3888/tcp



  janrax@janrax-Legion-5-Linux:~/Escritorio/Code/epcsd-spring-2023-productcatalog$ docker exec -it epcsd-spring-2023-productcatalog_kafka_1 bash

  [appuser@a3a6858689f7 /bin]$ kaftopics --create --topic mytopic --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1
  
  [appuser@a3a6858689f7 /bin]$ kafka-console-producer --topic mitopic --bootstrap-server localhost:9092
  >hola
  >que pasa
  
  # Desde otra sesión
  [appuser@a3a6858689f7 bin]$ kafka-console-consumer --topic mitopic --bootstrap-server localhost:9092 --from-beginning
  hola
  que pasa

ejercicio 2

Ante el escenario planteado, una solución adecuada para resolver el acceso a los microservicios de la plataforma Photo&Film4You en las condiciones acordadas sería utilizar el patrón de servicio de descubrimiento (Service Discovery Pattern) junto con el patrón de puerta de enlace (Gateway Pattern).

El patrón de servicio de descubrimiento permitiría que los microservicios de Photo&Film4You registren dinámicamente su ubicación e información de configuración en un registro centralizado. Esto permitiría que el buscador ShootMe consulte este registro para obtener información sobre los microservicios disponibles y sus ubicaciones en tiempo de ejecución. Con esta información, ShootMe podría comunicarse con los microservicios de Photo&Film4You para obtener los resultados de las búsquedas de los usuarios.

Para implementar este patrón, se podría utilizar una puerta de enlace como intermediario entre ShootMe y los microservicios de Photo&Film4You. Esta puerta de enlace sería responsable de recibir las solicitudes de ShootMe y enrutarlas a los microservicios adecuados mediante la información de descubrimiento proporcionada por el registro. La puerta de enlace también podría gestionar otras funciones como la autenticación, la autorización y el control de carga para garantizar un acceso seguro y eficiente a los microservicios.

Ventajas del uso de esta solución:

  1. Escalabilidad: La arquitectura elástica de microservicios de Photo&Film4You es compatible con esta solución, ya que los microservicios pueden registrarse y desregistrarse dinámicamente en el registro. Esto permite un crecimiento y una reducción flexibles de la infraestructura según la demanda.
  2. Descubrimiento automatizado: El buscador ShootMe puede obtener de manera dinámica y automática información actualizada sobre los microservicios disponibles sin depender de direcciones IP o nombres fijos.
  3. Centralización de la gestión: El registro centralizado facilita la gestión de los microservicios y proporciona una visión global del estado y la disponibilidad de los mismos.
  4. Acoplamiento débil: ShootMe no necesita conocer los detalles de la infraestructura interna de Photo&Film4You. Se acopla a los microservicios a través de la puerta de enlace, reduciendo la dependencia y la posibilidad de efectos secundarios no deseados.

Desventajas del uso de esta solución:

  1. Complejidad adicional: La implementación y gestión del servicio de descubrimiento y la puerta de enlace requieren un esfuerzo adicional en términos de desarrollo y mantenimiento.
  2. Posible punto de falla: Si la puerta de enlace o el registro centralizado fallan, puede afectar el acceso a los microservicios de Photo&Film4You desde ShootMe. Se deben tomar medidas para garantizar la disponibilidad y la resiliencia de estos componentes.

Para garantizar la disponibilidad y resiliencia de los componentes, se pueden tomar las siguientes medidas:

  • Implementar redundancia: Configurar múltiples instancias de la puerta de enlace y el registro centralizado para evitar que un solo punto de falla afecte todo el sistema. Esto implica tener réplicas de los componentes en diferentes ubicaciones o servidores para distribuir la carga y proporcionar tolerancia a fallos.

  • Balanceo de carga: Utilizar un mecanismo de balanceo de carga para distribuir el tráfico entrante entre las instancias de la puerta de enlace. Esto ayuda a evitar la sobrecarga de un único componente y mejora la capacidad de respuesta y disponibilidad general del sistema.

  • Monitorización y alertas: Implementar sistemas de monitorización que supervisen el estado y el rendimiento de los componentes en tiempo real. Estos sistemas pueden generar alertas automáticas en caso de problemas o degradación del rendimiento, lo que permite una respuesta rápida ante cualquier incidencia.

  • Implementar recuperación automática: Configurar mecanismos de recuperación automática, como la autoescalabilidad, que permitan ajustar dinámicamente la capacidad de los componentes en función de la carga y la demanda. Esto garantiza que el sistema pueda hacer frente a picos de tráfico y minimiza el impacto de posibles fallos.

  • Respaldo y recuperación de datos: Establecer políticas de respaldo periódico de los datos del registro centralizado para evitar la pérdida de información crítica en caso de fallos. Además, implementar estrategias de recuperación de datos eficientes para garantizar una rápida restauración en caso de incidentes.

  • Pruebas de resistencia y continuidad: Realizar pruebas periódicas de resistencia y continuidad del sistema, simulando situaciones de estrés y fallos para evaluar la capacidad de recuperación y la disponibilidad del sistema. Esto permite identificar posibles puntos débiles y tomar medidas preventivas.

  • Seguridad y protección contra ataques: Implementar medidas de seguridad robustas para proteger los componentes contra posibles ataques cibernéticos. Esto incluye la implementación de firewalls, cifrado de datos y autenticación adecuada para prevenir accesos no autorizados y salvaguardar la integridad del sistema.

Al aplicar estas medidas, se puede mejorar la disponibilidad y la resiliencia de los componentes, asegurando un funcionamiento confiable y continuo del sistema incluso en situaciones adversas.



IPCSD

Esqueleto de proyecto para el laboratorio de IPCSD

Report Bug · Request Feature

Contenidos
  1. Sobre este proyecto
  2. Antes de empezar
  3. Instalación
  4. Enlaces a herramientas, librerías y módulos usados
  5. Contacto

Sobre este proyecto

Este es el proyecto de laboratorio de la asignatura EPCSD de la UOC. Se compone de 3 elementos (cada una tiene su repositorio GIT):

  • Un archivo docker-compose.yml para arrancar la infraestructura básica necesaria para poder ejecutar los servicios
  • Una carpeta para el microservicio ProductCatalog
  • Una carpeta para el microservicio User
  • Una carpeta para el microservicio Notification

(ir arriba)

Hecho con

(ir arriba)

Antes de empezar

Para el funcionamiento de los contenedores que forman parte de la infraestructura básica del proyecto, se usaran los siguientes puertos:

  • 22181 - Apache Kafka (Zookeeper)
  • 19092 - Apache Kafka (Server)
  • 54320, 54321 - PostgreSQL
  • 18080 - Adminer
  • 18081 - Usado por el microservicio productcatalog
  • 18082 - Usado por el microservicio user

Para evitar conflictos con otras aplicaciones instaladas, se han modificado los puertos por defecto de todas las aplicaciones. Aún así, si hubiera un conflicto por un puerto ya en uso, bastaría con modificar los puertos especificados en el archivo docker-compose.yml para solucionar el problema. Este link de la documentación oficial de docker compose explica como modificar esta configuración mediante la opción ports: Networking in Compose.

AVISO IMPORTANTE: Los puertos que se modifiquen se tendran que cambiar también en la configuración de los microservicios (normalmente definidos en el archivo application.properties).

Instalación

Docker Desktop / Docker Compose

Instalaremos Docker Compose siguiendo los pasos descritos (según SO) en la siguiente guía: https://docs.docker.com/compose/install/

Bajo Windows, es posible que sea necesario registrarse, ya que Docker Desktop lo exige así para proyectos educativos/personales/no-comerciales. Como contrapartida, no será necesario instalar nada más porque ya incorpora Compose.

Es importante que reviséis con atención los requisitos de hardware y software descritos en las guías de instalación, puesto que si vuestro sistema no los cumple, aunque la aplicación se instale satisfactoriamente, dará errores al intentar arrancar contenedores. Una alternativa para aquellos que tengan sistemas un poco más antiguos es Docker Toolbox.

Una vez instalado Docker Compose, seguiremos con el esqueleto de proyecto. Se recomienda seguir la siguiente estructura de carpetas:

epcsd-spring-2023
├ README.md
├ docker-compose.yml
├ epcsd-spring-2023-notification
├ epcsd-spring-2023-productcatalog
└ epcsd-spring-2023-user

(ir arriba)

Infraestructura básica (dockers)

  • Descargar ZIP / Clonar el repositorio epcsd-spring-2023 en la carpeta de trabajo (epcsd-spring-2023 si se ha seguido la recomendación).

  • Desde la carpeta, ejecutar el comando:

    docker compose up
    (Win)
    docker-compose up
    (Linux)

Deberían arrancarse los contenedores:

  • epcsd-spring-2023-adminer_1 - adminer, un cliente SQL
  • epcsd-spring-2023-kafka_1 - el servidor de kafka
  • epcsd-spring-2023-productdb_1 - la bbdd postgresql correspondiente al servicio productcatalog
  • epcsd-spring-2023-userdb_1 - la bbdd postgresql correspondiente al servicio user
  • epcsd-spring-2023-zookeeper_1 - kafka zookeeper

Para verificar que se han levantado todos de manera correcta, ejecutaremos el siguiente comando:

docker ps -a

Deberíamos ver algo como esto:

Docker containers running

Para comprobar el funcionamiento, se puede acceder al panel Adminer en http://localhost:18080/ y hacer alguna consulta contra las BBDDs PostgreSQL que acabamos de instanciar con los siguientes datos de conexión:

  • productdb
  • Motor: PostgreSQL
  • Servidor: productdb
  • Usuario: product
  • Contraseña: product
  • Esquema: product

Adminer productdb 1

Adminer productdb 2

  • userdb
  • Motor: PostgreSQL
  • Servidor: userdb
  • Usuario: user
  • Contraseña: user
  • Esquema: user

Adminer userdb 1

Adminer userdb 2

Esqueletos de microservicios

(ir arriba)

Enlaces a herramientas, librerías y módulos usados

Contacto

Pau Pineda - [email protected]

(ir arriba)

epcsd-spring-2023-productcatalog's People

Contributors

jrgavilanes avatar ppinedar avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.