Upload
superserch
View
249
Download
0
Embed Size (px)
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!!!!