= introducción == conceptos previos * software libre * GNU/Linux * comandos básicos * instalación software: ''apt'', ''yum'' * shell scripts * ssh * Seguridad y redes * DNS * direccionamiento IPv4 * conceptos básicos redes * NAT * Bridges Linux * Redes virtuales * Seguridad * usuarios, privilegios, sudo * 666 o 777 * instalación software * concepto cortafuegos: iptables * Editor de textos * en consola * VIM * emacs (emacs-nox) * atom, sublime-text * Programación == qué es el cloud computing? ==== NIST ==== * organismo de EEUU, definición cloud computing * servicio (ofrecer recursos) de forma automática y a demanda * accesible a través de la red * público/privado * modelo multi-tenancy (se comparten recursos con otros usuarios, pero se debe garantizar *aislamiento* y *seguridad*) * los recursos/servicios se agrupan en pools * elasticidad * usar recursos según a mis necesidades (subir y bajar) * escalabilidad: siempre sube * Pago por uso ==== ... as a Service ==== * modelo de negocio no basado en la venta de licencias o hardware * oferta de servicios con características de la nube * tradicionalmente se definen 3 capas * SaaS : Software as a Service * la capa que se ofrece al público * uso app a una web en lugar de tenerla instalada en el equipo * no todas las apps webs son SaaS, deben cumplir ciertas características * aplicaciones móbiles que son front-end de aplicaciones SaaS * ejemplos: servicios Google, Office365, Dropbox * PaaS : Plataform as a Service * desarrollo web en la nube * utilizado por desarrolladores de soft * desarrollo + despliegue * ejemplos: Heroku, Google App Engine, Windows Azure, Openshift, CloudFoundry * capa fina de separación entre PaaS y IaaS * [[https://www.paasfinder.org/compare]]: comparador de plataformas PaaS * los contenedores ha dado en la línea de flotación de PaaS * IaaS : Infraestrure as a Service * Utilizado principalmente por administradores de sistemas * capacidad de cómputo, redes y diversos modos de almacenamiento * ejemplos: AWS, GCE, Azure, OpenStack {{ :info:cursos:openwebinars:pasted:20180625-044323.png }} == Evolución de las aplicaciones ==== aplicación monolítica ==== * todos los componentes en el mismo nodo * escalado vertical * aumentar recursos de la máquina en función de las necesidades (RAM, Disco, etc..) * limitaciones hardware * arquitectura muy sencilla * los componentes se conectan entre ellos con recursos locales * consideraciones de seguridad * el compromiso de un componente compromete a todos * interferencias entre componentes * un componente funciona mal/fallar, afecta al resto de componentes * complejidad de las actualizaciones * parada completa de la aplicación, aunque se tenga que actualizar solo un pequeño componente * infraestructura estática y fija por años * aplicación no tolerante a fallos * asume que la tolerancia a fallos la gestiona la capa inferior a la aplicación ==== aplicación distribuida ==== * idelamente un componente por nodo * a veces 2-3 componentes por nodo * a veces, un componente en varios nodos * escalado horizontal * permite ampliar recursos sobre un componente en concreto * introduce la elasticidad (permite crecer y decrecer con facilidad) * arquitectura más compleja * el desarrollador ha de tener en cuenta que están en nodos diferentes, mucho más complejo * considereciones de seguridad * es más complicado que un problema se extienda * menos interferencias entre componentes * simplicidad en las actualizaciones * más sencillo ==== ¿SOA,cloud native o microservicios? ==== === SOA === * Arquitectura orientada a servicio * servicios independientes * limitado a cierto tipo de aplicaciones (gran aplicación corporativa) -> visión general que se tiene * orientado a desarrollo * servicios indepedientes * múltiples tecnologías interaccionando * comunicación via WSDL y SOAP * colas de mensajes * se relaciona con aplicaciones corporativas === cloud native === * énfasis en la adaptación de la infraestructura a la demanda * orientado a que desde "sistemas" que se puede ofrecer a la aplicación * uso extensivo de la elasticidad: infraestructura dinámica * aplicaciones resilientes * resiliencia = capacidad de alguien/algo de responder ante la adversidad * la app se comunica con el nivel inferior para solicitar lo que necesite (Disco, RAM) * elasticidad horizontal * automatización === microservicios === * deriva del esquema SOA * no existe definición formal * servicios llevados a la mínima expresión (un proceso - un nodo): microservicios * comunicación vía HTTP REST (API RESTFUL) * más fáciles de programar * difícil conversión de aplicaicones monolíticas a microservicios -> nuevos desarrollos * relacionado con procesos ágiles de desarrollo: entrega continua * suele implementarse sobre contenedores * [[https://www.nginx.com/blog/introduction-to-microservices/]] {{ :info:cursos:openwebinars:pasted:20180625-084354.png?600 }} {{ :info:cursos:openwebinars:pasted:20180625-084411.png?600 }}