23
Docker y JVM Experiencias en la construcción del Buscador del Repositorio Nacional @SuperSerch

Jvmmx docker jvm

Embed Size (px)

Citation preview

Page 1: Jvmmx docker jvm

Docker y JVMExperiencias en la construcción del Buscador del Repositorio Nacional

@SuperSerch

Page 2: Jvmmx docker jvm

La aplicación

La información se debe cosechar de otros repositorios, incluyendo el contenido de archivos adjuntos

La información se debe procesar para trabajarse con SPARQL

Las búsquedas pueden entregar demasiados resultados

Page 3: Jvmmx docker jvm

Problemática

Funciones devoradoras de memoria

Canibalización del HEAP

Grandes pausas al liberar la memoria

Competencia por puertos de red

Page 4: Jvmmx docker jvm

Elementos parte de la Solución

Page 5: Jvmmx docker jvm

Docker

Page 6: Jvmmx docker jvm

¿Qué es Docker?

Plataforma de Contenerización

Aislamiento de procesos

Construcción basada en capas

Stack interno de red

Ligado entre contenedores

Page 7: Jvmmx docker jvm

JVM y "Microservicios"

Page 8: Jvmmx docker jvm

Java Enterprise Edition

Java EE 7

Servlet

JAX-RS

CDI

JSON-P

Page 9: Jvmmx docker jvm

Payara

Basado en Glassfish

Dos versiones: Normal y Blue (IBM)

Ediciones: Server, Embedded y Micro

Cluster mediante hazelcast

Soporte 7/24

Page 10: Jvmmx docker jvm

Poniendo todo junto

Page 11: Jvmmx docker jvm
Page 12: Jvmmx docker jvm

JVM en Docker¿Cuál JVM?

OpenJDK (si está disponible para el SO del contenedor)

Oracle JVM (no se puede redistribuir)

Instalar vía el repo que acepta automáticamente los términos de uso (ppa:webupd8team)

Proporcionar el archivo vía ADD en el Dockerfile

Page 13: Jvmmx docker jvm

Dockerfile base FROM debian:8.3

ENV LANG C.UTF-8ADD jdk-8u92-linux-x64.tar.gz /optCOPY payara-micro-4.1.1.162.jar /optENV JAVA_HOME /opt/jdk1.8.0_92ENV PATH $PATH:$JAVA_HOME/binCMD ["/bin/bash"]

Page 14: Jvmmx docker jvm

Dockerfile base

El contenedor base da la pauta a las instrucciones y el tamaño del contenedor

ADD desempaqueta el archivo en la ruta que se le indica

COPY coloca un archivo en la ruta específica.

Page 15: Jvmmx docker jvm

Dockerfile de una appFROM serch/payara

COPY portal.war /ENV SEARCH_ENDPOINT http://search:8080/resourceENV STATISTICS_ENDPOINT http://statistics:8080/resourceCMD ["java", "-Xmx1024m", "-jar",

"/opt/payara-micro-4.1.1.162.jar", "--noCluster", "—deploy","/portal.war"]

Page 16: Jvmmx docker jvm

El ENV para configurarUtilizar variables de ambiente para la configuración.

En especial para datos sensibles.

--env MYVAR2=foo

-e MYVAR1

--env-file ./env.list

Page 17: Jvmmx docker jvm

HAProxy

Page 18: Jvmmx docker jvm

Reverse Proxy y SSL Terminator

Single-process

Event-driven

Soporte nativo a SSL (1.5)

Opera a nivel TCP y HTTP

Page 19: Jvmmx docker jvm

Dockerfile HAProxyFROM debian:8.3

ENV LANG C.UTF-8RUN echo deb http://httpredir.debian.org/debian jessie-backports main | sed 's/\(.*\)-sloppy

\(.*\)/&@\1 \2/' | tr @ '\n' | tee /etc/apt/sources.list.d/backports.listRUN apt-get update && apt-get install -y haproxy -t jessie-backports &&

rm -rf /var/lib/apt/lists/*

COPY haproxy.cfg /etc/haproxy/COPY haproxy.sh /COPY repositorionacionalcti.mx.pem /etc/haproxy/certs/

WORKDIR /etc/haproxy

CMD ["/bin/bash", "/haproxy.sh"]

EXPOSE 80EXPOSE 443

Page 20: Jvmmx docker jvm

HAProxyfrontend http_proxy bind *:80 reqadd X-Forwarded-Proto:\ http acl is_oai_pmh hdr_beg(host) -i oai-pmh acl is_portal_www hdr_beg(host) -i www acl is_portal_top hdr_beg(host) -i repositorionacionalcti use_backend app1 if is_portal_www || is_portal_top use_backend app2 if is_oai_pmh

frontend www-https bind *:443 ssl crt /etc/haproxy/certs/repositorionacionalcti.mx.pem reqadd X-Forwarded-Proto:\ https acl is_oai_pmh hdr_beg(host) -i oai-pmh acl is_portal_www hdr_beg(host) -i www acl is_portal_top hdr_beg(host) -i repositorionacionalcti use_backend app1 if is_portal_www || is_portal_top use_backend app2 if is_oai_pmh

backend app1 redirect scheme https if !{ ssl_fc } server app1_serv1 portal:8080

Page 21: Jvmmx docker jvm

Conclusiones

Page 22: Jvmmx docker jvm

ConclusionesEl diseccionado de las aplicaciones por funciones facilita su construcción

El uso de REST - JSON como medio de interoperabilidad entre partes de la aplicación

¿Microservicios?

¿Alta disponibilidad?

Page 23: Jvmmx docker jvm

¿Preguntas?

Gracias!!!!