Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

669
Views
¿Cómo mantener una sesión fija (persistencia de la sesión) con el enjambre docker?

Tengo una aplicación web basada en Java que se implementa en jboss-10.1.0(wildfly) . Estoy usando el modo docker swarm (docker versión 1.12.1 ) para escalar mi aplicación, todo funciona perfectamente, pero el único problema al que me enfrento es la administración de sesiones.

Ahora tomemos el escenario.

Tengo dos instancias ejecutándose para mi aplicación (es decir, App1 y App2 ). Estoy usando el balanceador de carga predeterminado proporcionado por el modo de enjambre de docker con nginx para redirigir mi aplicación de chintan.test.com:9080 a chintan.test.com:80 entonces que no necesito anotar el puerto con mi url y puedo acceder directamente con esta URL chintan.test.com .

Ahora, el balanceador de carga predeterminado usa RR ( Round-Robin algorithm ) para atender mi solicitud web. Entonces, la primera vez que visito chintan.test.com va a la instancia de App1 y muestra la página de inicio de sesión. Ingreso con credenciales y todo funciona perfectamente después de unos pocos minutos, cambia a App2 y nuevamente aparece la página de inicio de sesión.

¿Hay alguna forma o herramienta (debería ser de código abierto) a través de la cual maneje las sesiones? Entonces, al menos inicio sesión en App1 y me quedo en App1 hasta que cierre la sesión.

¡Gracias!

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Intenté usar Nginx y HA-Proxy, pero ninguno de ellos parece funcionar bien en el modo SWARM. Luego usé Traefik en Docker Swarm y funcionó para mí. La única restricción es que Traefik debe ejecutarse en el nodo del administrador, ya que debe estar al tanto de los nuevos nodos de trabajo que se agregan o eliminan. No requiere reiniciar incluso si amplía el servicio, agrega nodos, etc.

Probé la configuración con Docker compose versión 3, que es la última y se implementó con Docker stack deployment . Las instrucciones paso a paso están aquí.

Para comenzar, debe crear un docker-compose.yml (versión 3) y agregar el balanceador de carga Traefik Image. Así es como esto luce

 loadbalancer: image: traefik command: --docker \ --docker.swarmmode \ --docker.watch \ --web \ --loglevel=DEBUG ports: - 80:80 - 9090:8080 volumes: - /var/run/docker.sock:/var/run/docker.sock deploy: restart_policy: condition: any mode: replicated replicas: 1 update_config: delay: 2s placement: constraints: [node.role == manager]

y luego la imagen para la que necesita permanencia en la sesión

 whoami: image: tutum/hello-world networks: - net ports: - "80" deploy: restart_policy: condition: any mode: replicated replicas: 5 placement: constraints: [node.role == worker] update_config: delay: 2s labels: - "traefik.docker.network=test_net" - "traefik.port=80" - "traefik.frontend.rule=PathPrefix:/hello;" - "traefik.backend.loadbalancer.sticky=true"

Puedes seguir este enlace para una explicación detallada.

about 4 years ago · Santiago Trujillo Report

0

El enjambre de Docker actualmente no admite sesiones pegajosas, el round robin es la única forma de acceder a los servicios por sus puertos expuestos.

Para implementar sesiones persistentes, debe implementar un proxy inverso dentro de la ventana acoplable que admita sesiones persistentes y se comunique directamente con los contenedores por su ID de contenedor (en lugar de realizar una búsqueda de DNS en el nombre del servicio que nuevamente iría a la carga por turnos). balancín). La implementación de ese equilibrador de carga también requeriría que implemente su propia herramienta de descubrimiento de servicios para que sepa qué contenedores están disponibles.

about 4 years ago · Santiago Trujillo Report

0

Creo que la mejor manera de implementar sesiones pegajosas en un entorno escalado es a través del almacenamiento de sesiones de base de datos. Esto desvinculará su aplicación a nodos específicos.

Creo que esta es una configuración más fácil y rentable que confiar en las sesiones Sticky de Docker Enterprise ( https://docs.docker.com/datacenter/ucp/2.2/guides/user/services/use-domain-names-to- servicios de acceso/#sticky-sessions ).

Por supuesto, esto implica un par de ajustes en la aplicación como:

  • minimizar las solicitudes de sesiones por razones de rendimiento (en particular para usuarios anónimos para evitar DoS)
  • Almacenaría los datos de la sesión en una base de datos separada (no en la base de datos principal de la aplicación)
  • Los datos de la sesión deben eliminarse después de un tiempo, por lo que debería tener algún trabajo para eliminar los datos de la sesión anterior con regularidad.
  • Etc.

Esta técnica también puede proporcionar otros beneficios:

  • Puede mejorar la seguridad si también coincide con la IP del usuario/agente de usuario
  • Puede mejorar el rendimiento (porque una base de datos podrá evitar los accesos a discos)

Espero que esto ayude.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!