DESARROLLO EN EL MUNDO CLOUD
¿Por qué es importante el mundo Cloud?
Demanda variable
Apis públicas
Backend
Demanda fija???
Apis internas
Apis partners
Source: http://media.amazonwebservices.com/AWS_Cloud_Best_Practices.pdf
¿Qué es el mundo Cloud?
Cloud Computing permite el aprovisionamiento dinámico de recursos (computación, almacenamiento…)
Características principales
Elasticidad
Pago por uso
Configurabilidad (API / web)
Seguridad
Asignación de recursos bajo demanda
¿Tipos de Cloud?
Cloud públicas
Pago por uso
Máximo grado de escalabilidad
Economía de escala
Fiabilidad
Flexibilidad
Independencia de localización
Cloud privadas
Mayor seguridad y privacidad
Mayor control
Aprovechamiento de infraestructura actual
Cloud híbridas
Aúna lo mejor de ambas soluciones, utilizando los
recursos de la cloud públicas sólo cuando es necesario
Fuente:http://www.interoute.es/cloud-article/what-hybrid-cloud
¿Tipos de Cloud?
No hay una regla fija
Dependerá del tamaño de la empresa y de la infraestructura
Dependerá de los conocimientos de administración y desarrollo
¿Qué tipo escojo para mi Api?
¿Iaas, Saas, Paas?
IaaS: Infraestructure as a Service
AWS
Windows Azure
Google Cloud Platform
PaaS: Platform as a Service
App Engine
Windows Azure
Heroku
SaaS: Software as a Service
Apigee
Amazon SES
¿Iaas, Saas, Paas?
¿Existe un administrador de sistemas?
¿Tengo conocimientos del PaaS?
¿qué presupuesto tienes?
¿qué flexibilidad necesitas?
¿Existe una política de no casarse con ningún cloud dentro de la organización?
¿Necesitas algún servicio que sólo te puede dar un determinado Cloud?
¿Qué escojo para mi Api?
¿Iaas, Saas, Paas?
AWS
¿Iaas, Saas, Paas?
Google
¿Iaas, Saas, Paas?
Windows Azure
¿Iaas, Saas, Paas?
Open Stack
¿Iaas, Saas, Paas?
Open Stack Red Hat
¿Iaas, Saas, Paas?
¿Cual escojo?
Coste (incluir costes de administración)
¿Mi Api necesita de algún servicio?
Requisitos legales
¿Qué control tengo que tener sobre los recursos?
¿Qué recursos necesitamos?
¿Qué conocimiento tienen los desarrolladores?
¿Qué requisitos de Big Data tengo?
Consideraciones en el desarrollo
Las Apis deben ser stateless
Autenticación y autorización. ¿Voy a utilizar un Api Manager?
Se debe utilizar el mínimo recurso de computo. ¿La Api necesita más recursos de memoria o de CPU?
Hay que tener cuidado a la hora de almacenar información. ¿Se pueden perder los datos al autoescalar?
Datos estáticos, utilizar un CDN
Normativa legal
Revisar los controles de elasticidad. ¿Podemos conocer la demanda?
Optimización de coste. Se desarrolla pensando en el Cloud
¿Quién no ha calculado el coste utilizando la calculadora de AWS?
Consideraciones en el desarrollo
Cálculo de costes y mejor instancia
Consideraciones en el desarrollo
Calcular estadísticamente qué servicios se van a utilizar.
Calcular número medio de peticiones hora
Estresar (normalmente una hora)
Instancia de más memoria
Instancia de más CPU
Sí con una instancia no se alcanzan las peticiones medias, probar la instancia mayor.
¿Qué obtenemos?
Coste por petición
Coste apróx
Verificando el cloud
Consideraciones en el desarrollo
Calculamos estadísticamente el máximo de peticiones /hora
Al redimensionar la infraestructura para peticiones media, deberíamos autoescalar
Comprobamos que se autoescala correctamente
Calculamos costes
¿Es seguro?
Seguridad
Estrictas normas reglamentarias
Herramientas de seguridad
WAF: permiten crear redes privadas y controlar el acceso a las instancias y aplicaciones
Los firewalls de red integrados
Cifrado en tránsito con TLS en todos los servicios
Opciones de conectividad que permiten establecer conexiones privadas o dedicadas desde su oficina o entorno local
¿Es seguro?
Seguridad
La disponibilidad tiene una importancia suprema en la nube. Los clientes aprovechan los beneficios de los servicios y las tecnologías de Cloud creados desde el principio para proporcionar resiliencia frente a los ataques DDoS.
Capa de seguridad adicional a sus datos en reposo en la nube mediante el suministro de características de cifrado escalables y eficientes.
Ejemplos
Gobierno de Apis
Ejemplos
DevOps
DevOps (acrónimo inglés de development -desarrollo- y operations -operaciones-) es una práctica de ingeniería de software que tiene como objetivo unificar el desarrollo de software (Dev) y la operación del software (Ops).
La principal característica del movimiento DevOps es defender enérgicamente la automatización y el monitoreo en todos los pasos de la construcción del software, desde la integración, las pruebas, la liberación hasta la implementación y la administración de la infraestructura.
DevOps - SCM
Software que gestiona la gestión eficaz del código fuente
Git (Github, gitlab, confluence, Azure Devops, AWS Code Commit…). Su característica principal es la gestión distribuida de repositorios.
Subversion. Gestión centralizada de resposotorios.
DevOps - Herramientas de CI
Herramientas que permiten hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes. Entendemos por integración la compilación y ejecución de pruebas de todo un proyecto.
Jenkins: De las más antiguas y más potentes, posee un conjunto de plugins que permite hacer una gran cantidad de operaciones.
Gitlab: Posee una interacción muy interesante con su repositorio de control de versiones, se basa en un fichero .gitlab-ci.yml de tu repositorio de código y se ejecuta en runner.
CircleCI: Herramienta muy sencilla para hacer entrega continua muy integrada con Github.
AWS Code Deploy
Azure reports
DevOps - Tools
Herramientas de automatización de scripts:
Puppet: Se instalan agentes en los servidores que descargan de un catálogo la lista de cambios (permite monitorizar los cambios aplicados). Más orientado a los administradores.
Chef: Basada en Ruby, permite generar recetas que son ejecutadas en los servidores. Más orientada a desarrolladores.
Ansible: Basada en Python, usa playbooks escritos en yaml que son ejecutados en los servidores (posee una estación con el mapa de los servidores a gestionar y listado de credenciales SSH)
DevOps - Infrastructure as a code
Permite gestionar tu infraestructura como si fuera código.
Terraform: Multi Proveedor, se está implantando en el mercado.
Cloud Formation: Disponible en AWS y fue el primer sistemas de estas características.
Píldora de conocimiento
Microservicios
Servicios “pequeños” y fáciles de abordar.
Cada servicio debe ser monolítico.
Píldora de conocimiento
Docker
Sistema de virtualización ligero
Permite realizar contenedores portables.
Lo están implementando los principales Cloud.
Ideal para microservicios
Kubernetes
Referido en inglés comúnmente como “K8s”, es un sistema de código libre para la automatización del despliegue, ajuste de escala y manejo de aplicaciones en contenedores1 que fue originalmente diseñado por Google y donado a la Cloud Native Computing Foundation (parte de la Linux Foundation). Soporta diferentes entornos para la ejecución de contenedores, incluido Docker.
Píldora de conocimiento
Kubernetes
Referido en inglés comúnmente como “K8s”, es un sistema de código libre para la automatización del despliegue, ajuste de escala y manejo de aplicaciones en contenedores1 que fue originalmente diseñado por Google y donado a la Cloud Native Computing Foundation (parte de la Linux Foundation). Soporta diferentes entornos para la ejecución de contenedores, incluido Docker.
Píldora de conocimiento
Ruegos y preguntas