Opciones de cómputo en Google Cloud Platform.
IaaS - Infraestructura como servicios. Ejemplificadas con las máquinas virtuales. Nos da más flexibilidad y una mayor carga administrativa.
Carga administrativa: sistema operativo, actualizaciones, balancear las cargas, control de usuarios, recursos.
Flexibilidad: instalaciones, versiones, qué quiero actualizar. Tengo una flexibilidad absoluta.
Progresivamente encontramos utilidades como los contenedores que disminuyen la carga administrativa, como Kubernetes Engine, luego avanzamos a Cloud Run y App Engine, cada servicio tiene sus ventajas y sus desventajas según la necesidad del negocio.
Al final, encontramos Serverless. Despliego unidades atómicas de código. Google me ayuda a completar las funciones.
Es una manera de desplegar y usar servicios de cómputo, mejora la agilidad y productividad, también es un modelo económico. Ahorro de costos, aprovisionamiento adecuado.
Cuando se elige una tecnología se deben hacer las preguntas necesarias para validar su propósito en el caso de uso, como satisfacer las necesidades, retos de negocio, retos tecnológicos.
<h3>Functions as a Service</h3>La expresión más popular de Serverless son funciones. Son un pequeño bloque de código que cumple una tarea específica.
El proyecto es la unidad general sobre la cual se engloba y se manejan recursos en GCP. Se puede customizar el panel principal, para mostrar los datos que quiera conocer.
<h3>Cloud SDK: Command Line Interface - Installing Google Cloud SDK</h3>Quickstart for Debian and Ubuntu
<h4>gcloud functions - manage Google Cloud Functions</h4>gcloud functions deploy
- create or update a Google Cloud Function
gcloud functions deploy NAME --runtime RUNTIME
<h3>Events and Triggers</h3>
gcloud functions event-types list
Cuando se despliega una función se debe declarar el trigger asociado.
Trigger | Commands |
---|---|
HTTP | --trigger-http |
Pub/Sub | --trigger-topic TOPIC_NAME |
Others | --trigger-event EVENT_TYPE <br />--trigger-resource RESOURCE |
gcloud functions event-types list
<h4>Según el runtime, las funciones de segundo plano reciben:</h4>
Runtime | Args |
---|---|
Python | (data, context) |
Node.js | (data, context, callback) |
Go | (ctx, event) |
Runtime | Args |
---|---|
Python | (request) Flask |
Node.js | (request, response) Express |
Go | (http.ResponseWriter, *http.Request) |
Nota: mientras menos atómica sea una función, más tiempo tardará en desplegarse.
Es una colección de funciones y servicios que permite restringir y monitorizar los accesos dentro de la plataforma.
Algunas veces, hay tareas que se ejecutan por GCP, ante la respuesta de un evento. Un servicio ejecutando, en ese caso, existe otro recurso en el contexto de IAM, llamadas cuentas de servicio.
La cuenta de servicio predeterminada tiene permisos bastante amplios. La función puede ser editada, permitiendo modificar la cuenta de servicio.
IAM - Service accounts (aquí puedo crear o modificar mis cuentas de servicio). Así se puede limitar y controlar el funcionamiento de las funciones usando IAM and Service account. Una función debe tener los mínimos permisos necesarios.
Es uno de los elementos que se promueven en los servicios de nube. Google Cloud Platform nos dice que sus servicios son escalable, son elásticos.
Google es quién se encarga de la escalabilidad, aumentando el número de instancias según la demanda de nuestras funciones.
Una función no puede atender más de una petición concurrentemente, así que levanta una instancia más.
Las instancias de las funciones solamente pueden atender una solicitud, no tienen una concurrencia. Una vez se termina de responder a una solicitud, esa instancia queda lista para seguir recibiendo peticiones, si después de un tiempo determinado una solicitud, no encuentra quién la pueda atender, se marca el timeout.
Si una instancia no está recibiendo peticiones en un periodo determinado, Google destruirá esa instancia.
Se pueden aplicar distintas variantes de escalabilidad a una función.
<h3>Horizontal Scalability</h3>Se habla de escalamiento horizontal cuando se generan replicas de las misma unidades.
<h3>Vertical Scalability</h3>Al contrario del escalamiento horizontal, se generan instancias con más recursos. Un ajuste en las funciones, sería aumentar la memoria RAM según la necesidad de velocidad del proceso ejecutado.
Nota: todas las funciones cada vez que se ejecutan generan logs.
Cuando hablamos de supervisión, nos referimos a las métricas, valores o alertas. Información de lo que está ocurriendo en la plataforma. Confiabilidad - Desempeño. Por ejemplo, los valores visualizados en los logs llevan al discernimiento de aumentar la capacidad de nuestros servicios.
“Aquello que no se mide no se puede mejorar”
<h3>Site Reliability Engineering</h3>SRE es (una manera de trabajar):
Trabajar orientados a productos que necesitan ser confiables, necesitan ser sustentados en SRE.
Ejemplo: un indicador de número de respuestas exitosas al usuario.
La supervisión es el pilar de la confiabilidad de un producto.
Tenemos que tener la capacidad de respuesta a los incidentes. Necesitamos estudiar: ¿Qué pasó? ¿Cómo pasó? Aplicar mecanismos para que no se vuelva a presentar.
<h3>Stackdriver</h3>Es una colección de servicios.
¿Cómo puede establecerse la comunicación entre múltiples servicios de GCP? Usando los servicios de red o comunicación.
Herramientas para Firewall.
Herramientas para balancear las cargas.
Herramientas para rechazar o aceptar cierto tráfico según la fuente.
DNS.
CDN.
Utilerías para reservar las IP.
Herramientas para establecer canales (VPN), tuneles para interconexión.
Importa por dónde está viajando la información. Google tiene su propia red privada, e intentará todo lo posible por mantener la información en su propia red.
<h3>Conectores VPC</h3>Un servicio para conectar sus funciones a una VPC.
Los servicios de red mejoran la latencia y habilitan la comunicación o visualización de otros recursos dentro de una red privada.
Se encuentra en la mitad del espectro entre las distintas funciones de cómputo, porque facilita cierta flexibilidad y ofrece características de Serverless.
<h3>Containers</h3>Una forma de desplegar aplicaciones.
Los contenedores son resultado de agrupar y utilizar distintas opciones. Por ejemplo, los contenedores en Linux son el resultado de la combinación de estos recursos: processes, namespaces, cgroups, union file systems.
Processes: es un recurso manejado por el sistema operativo que tiene su propia memoria virtual y tiene un esquema de vida efímero, pueden ser creados o destruidos según las reglas.
Namespaces: los processes se combinan con los namespaces para determinar que elementos son visibles, IP, árbol de directorio. Definir mi alcance y mis recursos.
Cgroups: los cgroups me permite definir recursos como: ¿cuánta CPU, cuánta memoria, capacidades de entrada y salida?
Union file system: mecanismo que permite ir construyendo el contenedor a través de capas donde se definen las capas y se manejan las relaciones con sus bibliotecas.
Un contenedor es una unidad más portable entre entornos, es más fácil de desplegar fácilmente.
“Kubernetes (K8s) es una plataforma de código abierto para automatizar la implementación, el escalado y la administración en contenedores.” Una herramienta que permite manejar cargas de trabajo complejas, usando un orquestador como Kubernetes.
Un servicio para manejar los clusters donde se desplegaran las aplicaciones, no crea nodos, administra los nodos aprovisionados.
Kubernetes | Serverless | |
---|---|---|
Escalabilidad | No* | Sí |
Cold start | No* | Sí |
Flexibilidad | Abundante | Escasa |
Portabilidad | Sí | No* |
Pago por uso | No* | Sí |
*depende
“Kubernetes-based platform to build, deploy, and manage modern serverless workloads.” GCP
“Building Blocks that Simplify How You Deploy and Run Functions atop Kubernetes and Istio. On Any Cloud” Knative
Es una herramienta para desplegar y manejar cargas de trabajo basados en Kubernetes. Permite construir bloques de manera simplificada construir aplicaciones. Knative se puede comprender como dos componentes:
Servicing:
Eventing:
Modelo de Pub/Sub con Knative.
Knative es conocido en GCP como Cloud Run. Dentro de la nube existen dos versiones:
<h3>Managed service</h3>Google se encarga de todas las tareas repetitivas.
<h3>Cloud Run for Anthos</h3>Es otra oferta para soluciones híbridas o multicloud.
<h3>Scalability</h3>Se puede customizar las revisiones según la necesidad.
<h3>Supervision</h3>La clave está en “Continuous”, sin un agente humano. Esquemas automáticos, repetibles y auditables. Estos procesos deben ser documentados y automatizados.
<h3>Cloud Build</h3>Es una herramienta para construcción de artefactos.
Gestión de repositorios, equivalente a otro gestor de código como GitHub, o GitLab.
Equivalente a Docker Hub en Google.
Servicios Serverless.
El modelo de negocio determina las herramientas que se deben usar. Trabajo de escritorio, preguntas, ventajas y desventajas, así se decide el Stack.