Jvmmx docker jvm

Preview:

Citation preview

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

@SuperSerch

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

Problemática

Funciones devoradoras de memoria

Canibalización del HEAP

Grandes pausas al liberar la memoria

Competencia por puertos de red

Elementos parte de la Solución

Docker

¿Qué es Docker?

Plataforma de Contenerización

Aislamiento de procesos

Construcción basada en capas

Stack interno de red

Ligado entre contenedores

JVM y "Microservicios"

Java Enterprise Edition

Java EE 7

Servlet

JAX-RS

CDI

JSON-P

Payara

Basado en Glassfish

Dos versiones: Normal y Blue (IBM)

Ediciones: Server, Embedded y Micro

Cluster mediante hazelcast

Soporte 7/24

Poniendo todo junto

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

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"]

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.

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"]

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

HAProxy

Reverse Proxy y SSL Terminator

Single-process

Event-driven

Soporte nativo a SSL (1.5)

Opera a nivel TCP y HTTP

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

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

Conclusiones

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?

¿Preguntas?

Gracias!!!!

Recommended