Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

676
Visualizações
¿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!

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

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.

over 4 years ago · Santiago Trujillo Relatório

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.

over 4 years ago · Santiago Trujillo Relatório

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.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda