•
o Clase del día - 7/03/2025
Aprovisionamiento de recursos informáticos On-premise
En el pasado, el aprovisionamiento de recursos informáticos On-
premise (en las instalaciones de la empresa) representaba el concurso de
diferentes proveedores de bienes y servicios, como eran los
representantes de ventas, ingenieros de preventa, fabricantes de los
equipos, fabricante del sistema operativo, fabricante de la base de datos,
agentes aduanales, transportistas, instaladores del site, proveedor de
energía, proveedor de comunicaciones, instaladores del hardware,
instaladores del software, entre otros.
Entonces, el aprovisionamiento de recursos informáticos era un proceso
complejo y tardado, el cual culminaba con el sistema en producción.
Después había que reaprovisionar cuando crecían las necesidades de la
empresa.
Cómputo como servicio
El concepto de cómputo en la nube (cloud computing) está basado en las
ideas del profesor John McCarthy de la Universidad de Stanford.
En un discurso en 1961, predijo que la tecnología de tiempo compartido
(la posibilidad de que múltiples usuarios y procesos utilicen una misma
computadora) podría llevar en el futuro, a ofrecer las capacidades de
cómputo y las aplicaciones como servicios públicos.
Esta idea se concretaría en lo que actualmente conocemos como
cómputo en la nube, al ofrecer servicios virtualizados a nivel
masivo en Internet.
Por otra parte, en 1984 John Burdette Gage acuñó el slogan The network
is the computer para Sun Microsystems, el cual significa que la
computadora de escritorio es una "ventana" a la red, y mediante el
software apropiado, es posible transferir tareas de cómputo a otras
computadoras.
A la posibilidad de trasferir tareas de cómputo a otras computadoras se
le conoce como computation offloading.
Fábricas de información
En 2006 aparece el artículo "The Information Factories" en la prestigiosa
revista WIRED [1].
En este artículo se presenta la idea de "fábricas de información"
(Information Factories).
El autor, George Gilder, argumenta que la tecnología de la información
evoluciona hacia un modelo de procesamiento y almacenamiento de
datos centralizados en grandes centros de datos.
Estos centros de datos estarían equipados con grandes servidores y
redes de alta velocidad.
Entonces, en lugar de depender de computadoras personales, los
usuarios accederán a servicios informáticos a través de redes de
comunicación utilizando dispositivos más simples, como serían las
computadoras portátiles y los dispositivos móviles como tabletas y
teléfonos celulares.
"The desktop is dead. Welcome to the Internet cloud, where massive
facilities across the globe will store all the data you'll ever use", The
Information Factories, George Gilder.
Este modelo de informática centralizada permitiría contar con
capacidades "ilimitadas" de procesamiento y almacenamiento, lo cual
proporcionará niveles de escalabilidad sin precedentes.
Si bien George Gilder no introduce el concepto de cómputo en la
nube como tal, su artículo explora las implicaciones sociales y
económicas de este modelo de computación basado en la idea de
"fábrica de información".
Proveedores de servicios en la nube
Amazon
En 2006 Amazon lanzó la plataforma Amazon Web Services
(AWS) incluyendo los servicios Elastic Computer (EC2) y Storage Cloud
(S3).
AWS popularizó el modelo de Infraestructura como Servicio
(IaaS, Infrastructure as a Service), el cual permite a las empresas alquilar
recursos de cómputo y almacenamiento en lugar de invertir en hardware
propio.
Google
En 2008 Google lanzó Google App Engine, inicialmente como una
plataforma para desarrollar y alojar aplicaciones web.
Posteriormente, Google lanza el servicio Google Cloud Storage en 2010
y en 2013 el servicio Google Compute Engine (GCE). Con estos servicios
Google entra en el mercado de infraestructura como Servicio (IaaS).
La marca Google Cloud Platform (GCP) se lanzó oficialmente en 2011.
Microsoft
En 2010 Microsoft lanzó la plataforma Windows Azure (ahora conocida
como Microsoft Azure), con servicios para desarrolladores al nivel de
plataforma (PaaS), entre otros:
• Windows Azure Compute para la ejecución de aplicaciones en la
nube utilizando máquinas virtuales administradas por Microsoft.
• Windows Azure Storage para el almacenamiento de datos
estructurados y no estructurados.
• Windows Azure SQL Database el cual es SQL Server en la nube.
En 2012 Microsoft lanzó los servicios:
1) Azure Virtual Machines, con el cual Microsoft entra en el mercado de
IaaS.
2) Azure Virtual Network el cual permite crear redes virtuales en la nube.
3) Azure Storage IaaS el cual ofrece almacenamiento para las máquinas
virtuales.
En 2015 Microsoft lanza el servicio Azure Container Service el cual
permite ejecutar contenedores Docker en Azure.
Definición de cómputo en la nube
El Instituto Nacional de Estándares y Tecnología (NIST) de Estados
Unidos, define el cómputo en la nube de la siguiente manera [2]:
"Cloud computing is a model for enabling ubiquitous, convenient, on-
demand network access to a shared pool of configurable computing
resources (e.g., networks, servers, storage, applications, and services) that
can be rapidly provisioned and released with minimal management effort
or service provider interaction."
Las cinco características esenciales del cómputo en la nube
1. Autoservicio bajo demanda
Los usuarios pueden unilateralmente aprovisionar automáticamente
capacidades en la infraestructura del proveedor del servicio de nube,
tales como tiempo de servidor, almacenamiento y red, de acuerdo a sus
necesidades sin intervención humana.
2. Acceso amplio por medio de la red
Las capacidades que ofrece el proveedor de nube están disponibles a
través de la red, y son accedidas mediante mecanismos estándares
utilizando clientes heterogéneos como teléfonos celulares, tabletas,
computadoras de escritorio, etc.
3. Recursos compartidos
Los recursos de cómputo del proveedor de nube son compartidos por
múltiples usuarios usando un modelo “multiinquilino” (multitenant). Los
recursos físicos y virtuales (procesamiento, almacenamiento, memoria,
ancho de banda, etc.) son asignados y reasignados dinámicamente de
acuerdo a las necesidades de los usuarios.
Los recursos asignados son transparentes en términos de la ubicación, se
manera que el usuario no tiene que saber qué recurso físico está
utilizando. No obstante, el usuario puede determinar en qué región o
datacenter creará los recursos virtuales.
4. Elasticidad
Las capacidades pueden ser aprovisionadas y des-aprovisionadas
elásticamente (manualmente o automáticamente), permitiendo al
usuario escalar hacia arriba o hacia abajo, horizontalmente o
verticalmente, bajo demanda. La escalabilidad hacia arriba con
frecuencia parece ser ilimitada.
5. Medición del servicios
Los recursos de nube pueden ser monitoreados con la finalidad de
controlar y optimizar automáticamente su utilización. Este monitoreo se
realiza a diferentes niveles de abstracción de acuerdo al tipo de servicio
(almacenamiento, procesamiento, ancho de banda, cuentas de usuario,
etc.).
Los tres modelos de servicio del cómputo en la nube
1. Infraestructura como servicio
En el nivel de Infraestructura como servicio o Infrastructure as a
Service (IaaS), el usuario puede aprovisionar procesamiento (máquinas
virtuales), almacenamiento (discos virtuales), redes y otros servicios que
le permiten ejecutar cualquier software.
En este nivel el usuario tiene el control de sistema operativo, el
almacenamiento, algunos componentes de la red, y las aplicaciones que
ejecutan sobre el sistema operativo.
2. Plataforma como servicio
En el nivel de plataforma como servicio o Platform as a Service (PaaS), el
usuario puede aprovisionar servicios de instancias de bases de datos,
respaldos, ejecución de servicio web, plataformas de desarrollo y
pruebas, y otros servicios sin la necesidad de aprovisionar o controlar la
infraestructura subyacente (servicios de IaaS como serían la máquina
virtual, la red o el almacenamiento).
3. Software como servicio
En el nivel de software como servicio o Software as a Service (SaaS), el
usuario puede utilizar las aplicaciones publicadas por el proveedor de
nube, las cuales ejecutan sobre la infraestructura de nube. El usuario no
tiene que aprovisionar servicios de PaaS o de IaaS.
Los servicios al nivel de SaaS se acceden mediante una aplicación cliente,
p.e. un navegador (web browser). Los usuarios acceden a las aplicaciones
de SaaS mediante un usuario y contraseña o mediante un par de claves.
Referencias
4. The information Factories, George Gilder, WIRED, 2006.
5. The NIST Definition of Cloud Computing, Peter Mell, Timothy
Grance, NIST U.S. Department of Commerce, 2011.
6. Fundamentos y plataformas de cloud computing, Remo Suppi
Boldrito, Universitat Oberta de Catalunya, 2a. ed., 2022.
7. ¿Qué es la nube pública, privada e híbrida?
8. Cuadrante Mágico para servicios estratégicos de plataforma en la
nube
o Clase del día - 3/03/2025
Túnel SSH
El túnel SSH es un mecanismo que utiliza el comando SSH para
implementar un canal encriptado (una VPN cliente-servidor), esto es,
usando SSH es posible ejecutar un cliente el cual se comunicará con un
servidor remoto (application server) utilizando el túnel SSH.
El sistema SSH consiste en un cliente y un servidor.
Para abrir una terminal con conexión segura ejecutamos el comando
"ssh" el cual se conecta al servidor SSH.
En general, las distribuciones físicas de Linux no tienen instalado el
servidor SSH, por tanto, es necesario instalarlo.
Por otra parte, las máquinas virtuales en la nube tienen instalado el
servidor SSH, lo que permite al usuario conectarse a la máquina virtual
utilizando el comando "ssh".
El túnel SSH opera en la capa 5 del modelo OSI (capa de sesión) y en la
capa 6 (capa de presentación). El túnel SSH utiliza la capa de sesión para
establecer, mantener y finalizar la sesión entre el cliente y el servidor, y la
capa de presentación para encriptar el tráfico entre el cliente y el
servidor.
Cuando habilitamos el túnel SSH para comunicar el cliente con el
servidor, el cliente se conecta localmente al cliente SSH (el cliente SSH
hace las veces de servidor); entonces el cliente SSH envía los datos al
servidor SSH, el cual a su vez redirige los datos al servidor (el servidor
SSH hace las veces de cliente del servidor).
Debido a que el túnel SSH permite mapear los puertos, el cliente se
puede conectar al cliente SSH a través de un puerto diferente, al puerto
que utiliza el servidor SSH para conectarse al servidor.
El mapeo de puertos es de utilidad cuando el puerto que utiliza el
servidor está ocupado.
En el siguiente diagrama podemos ver que el cliente se conecta a un
servidor proxy en el cliente SSH, a través del puerto 3049, mientras que
un cliente proxy en el servidor SSH, se conecta al servidor a través del
puerto 2049:
Podemos notar que los programas cliente SSH y servidor SSH funcionan
como proxys transparentes, cuando se utilizan para implementar un
túnel SSH.
Creación de claves pública y privada
Para implementar el túnel SSH primeramente debemos crear las claves
pública y privada:
1. Acceder a la computadora cliente utilizando SSH.
2. Para crear el par de claves, ejecutar el siguiente comando en la
computadora cliente (la opción -t indica el algoritmo a utilizar y la
opción -b el tamaño de la llave en bits):
ssh-keygen -t rsa -b 2048
Presionar la tecla Enter cuando se pregunta el nombre del archivo.
Cuando se pregunta la contraseña presionar la tecla "Enter" si no se
requiere la contraseña. La contraseña permite encriptar la clave privada
en la computadora cliente. Si se define una contraseña ésta se deberá
ingresar cada vez que se ejecute SSH.
3. Para copiar la clave pública a la computadora (host) que ejecuta el
servidor:
ssh-copy-id usuario@host
Dónde "usuario" es el nombre del usuario en la computadora que
ejecuta el servidor y "host" es la dirección IP de esta computadora.
4. En la computadora cliente probar el acceso a la computadora servidor
(ahora la autenticación utilizará las claves pública y privada por tanto no
se preguntará la contraseña):
ssh usuario@host
Implementación de un túnel SSH
Ahora vamos a crear una VPN cliente-servidor entre los programas
Cliente.java y Servidor2.java utilizando un túnel SSH en modo local
forwarding.
1. Acceder a la computadora servidor utilizando SSH.
2. Ejecutar en el servidor:
javac Servidor2.java
java Servidor2
3. Acceder a la computadora cliente utilizando SSH.
4. Ejecutar el siguiente comando en la computadora cliente:
ssh -N -f -L 40000:localhost:50000 usuario@host
Dónde:
• -N No se ejecutará un comando remoto, solo se creará el túnel
SSH.
• -f ssh se ejecutará en segundo plano (background).
• -L 40000:localhost:50000, el cliente se conecta al cliente SSH por
el puerto 40000, el endpoint "localhost:50000" indica que el
servidor SSH se conecta al servidor en localhost por el puerto
50000. En este caso, se está realizando un mapeo del puerto
40000 al puerto 50000.
• usuario es el nombre del usuario en la computadora remota (que
ejecuta el servidor).
• host es la dirección IP de la computadora remota.
Se puede ver que el túnel queda ejecutando en segundo plano
ingresando el siguiente comando:
ps -ef | grep ssh
5. Ejecutar en la computadora cliente:
javac Cliente.java
java Cliente
En este caso suponemos que el programa Cliente.java se conecta al
puerto local 40000 de localhost, y el programa Servidor2.java abre el
puerto 50000 (podemos ver que SSH mapea el puerto local 40000 al
puerto remoto 50000).
También se puede ejecutar el programa Servidor2.java como comando
remoto, desde la computadora cliente de la siguiente manera:
ssh -L 40000:localhost:50000 usuario@host java Servidor2
Referencias
6. SSH man page
7. SSH tunnel
8. Cómo configurar la autenticación basada en claves de SSH en un
servidor Linux
• Colapsar
2. Aspectos básicos del cómputo en la nube
o Clase del día - 10/03/2025
Los cuatro modelos de despliegue del cómputo en la nube
1. Nube privada
Los servicios de nube son aprovisionados para el uso exclusivo de una
sola organización.
La organización puede ser propietaria de la infraestructura, de un tercero
o de una combinación de ambas.
De igual forma, la administración y operación puede ser realizada por la
misma organización, por un tercero o una combinación de ambas.
En cuanto a la ubicación, la infraestructura puede estar on-premise (en
las instalaciones de la organización), o bien, off-premise (fuera de las
instalaciones de la organización).
2. Nube comunitaria
Los servicios de nube son aprovisionados para el uso de una comunidad
de usuarios u organizaciones con objetivos compartidos (p.e. empresas,
instituciones de gobierno, etc.).
Al igual que la nube privada, la propiedad, administración y operación
de la infraestructura puede ser de la comunidad, un tercero o una
combinación de ambos.
La infraestructura puede estar ubicada en instalaciones de la comunidad,
un tercero o una combinación de ambas.
3. Nube pública
Los servicios de nube son aprovisionados para el público en general.
La infraestructura está ubicada en las instalaciones del proveedor de los
servicios de nube (Amazon, Microsoft, Google, etc.).
4. Nube híbrida
La infraestructura de nube es una composición de dos o más modelos
de despliegue (nube privada, nube comunitaria, nube pública).
La comunicación entre las redes de las diferentes nubes, se realiza
mediante tecnologías propietarias o estándares que permitan
implementar canales de comunicación seguros (como son las VPN).
Clase del día - 10/03/2025
Servicios virtuales a nivel masivo
El cómputo en la nube es un modelo de arquitectura basado en una
infraestructura de cómputo ofrecida como servicios virtuales a nivel
masivo.
El concepto clave en el cómputo en la nube es el "servicio", así, se ofrece:
• IaaS (Infrastructure as a Service) Servicio de creación de
infraestructura virtual y física.
• PaaS (Platform as a Service) Servicios de DBMS, plataformas de
desarrollo y pruebas.
• SaaS (Software as a Service) Servicio de aplicaciones de software.
• Otros servicios con la terminación "as a Service":
o DaaS (Data as a Service) Servicio de acceso a datos.
o DRaaS (Disaster Recovery as a Service) Servicio de
recuperación de máquinas virtuales ante desastres.
Principios del cómputo en la nube
Escalabilidad en la nube
La escalabilidad es la capacidad de un sistema en la nube de aumentar o
disminuir los recursos aprovisionados (CPU virtuales y memoria de una
máquina virtual, disco de sistema operativo, disco de datos.
La escalabilidad vertical se refiere al crecimiento o descrecimiento de las
capacidades de una computadora.
La escalabilidad horizontal se refiere a la creación o eliminación de
máquinas virtuales.
Disponibilidad en la nube
La disponibilidad es la capacidad de un sistema en la nube para estar
accesible (disponible) en todo momento, de manera que los usuarios
puedan acceder el sistema.
La disponibilidad se mide en porcentaje que representa el tiempo
durante el cual el sistema está disponible (tiempo de actividad o uptime).
La disponibilidad es: 100 x el tiempo de actividad / tiempo total.
Por ejemplo, si el sistema está disponible 364 días de 365 días, entonces
la disponibilidad es del 99.7260%
Los proveedores de nube establecen la disponibilidad de los servicios en
un SLA (Service Level Agreement) o Acuerdo de nivel de servicio.
Confiabilidad en la nube
La confiabilidad es la capacidad de un sistema en la nube para funcionar
durante largos períodos de tiempo sin interrupciones.
Para garantizar la confiabilidad, los proveedores de nube implementan
diversas estrategias, por ejemplo:
Geo-Redundant Storage. La replicación de los respaldos en regiones a
cientos de kilómetros de la región actual.
Zona de disponibilidad. Uno o más datacenters equipados con su
propia alimentación, refrigeración y red.
Dominios de error. Las máquinas virtuales que pertenecen a un mismo
dominio de error comparten la misma fuente de alimentación y red
física.
Dominios de actualización. Las máquinas virtuales dentro de un mismo
dominio de actualización se reiniciarán simultáneamente durante el
mantenimiento planeado. Solo se reiniciará un dominio de actualización
a la vez.
Balanceo de carga. Un balanceador de carga permite escalar un
sistema, y al mismo tiempo evita puntos únicos de falla aumentando la
disponibilidad.
Site Recovery. Permite replicar y recuperar máquinas virtuales en caso
de falla o desastre.
Respaldos. Copia de seguridad de máquinas virtuales y archivos,
permitiendo la recuperación de los datos en caso de ransomware,
pérdida o corrupción de los datos
Alta disponibilidad en DBMS. Crea una réplica de la base de datos en
una zona de disponibilidad diferente.
o Clase del día - 13/03/2025
Transparencia
La transparencia es la capacidad de los usuarios para acceder los
recursos de nube sin la necesidad de conocer los detalles de la
infraestructura de nube.
Podemos dividir la transparencia en siete categorías:
Transparencia en el acceso a los datos. Los usuarios y aplicaciones
acceden a los datos en la nube de manera estandarizada.
Transparencia de ubicación. Los usuarios de nube acceden a los
recursos independientemente de su localización física.
Transparencia de migración. Los usuarios de nube no son afectados
por la migración de los datos y de los procesos que pueda realizar la
plataforma.
Transparencia de reubicación. La transparencia de reubicación se
refiere a la capacidad de la nube de cambiar la ubicación de un
recurso mientras está en uso, sin que el usuario que accede el recurso
se vea afectado.
Transparencia de replicación. La transparencia de replicación es la
capacidad de la nube de ocultar la existencia de recursos replicados.
Transparencia de concurrencia. La transparencia de concurrencia se
refiere a la capacidad de la nube de ocultar el hecho de que varios
usuarios y procesos comparten los diferentes recursos de manera
concurrente.
Transparencia ante fallas. La transparencia ante fallas es la capacidad
de la nube de ocultar una falla.
Por ejemplo, si un sistema que se encuentra totalmente replicado,
cuando el sistema principal falla entonces el usuario accederá de manera
transparente a la réplica del sistema.
Más adelante en el curso veremos cómo replicar un sistema completo en
la nube utilizando un administrador de tráfico de red y cómo
implementar sistemas tolerantes a fallas en la nube mediante balance de
carga.
Rendimiento
El rendimiento es la eficiencia con la que un sistema en la nube utiliza
los recursos de nube, incluyendo la capacidad de procesamiento,
almacenamiento, ancho de banda, entre otros recursos.
Desempeño
El desempeño se refiere a la velocidad con la ejecuta un sistema en la
nube.
El desempeño depende de las técnicas de programación y del
rendimiento del sistema. El objetivo es mantener el sistema funcionando
de manera consistente incluso bajo cargas de trabajo pesadas.
La elasticidad en la nube
Debido a que el cómputo en la nube está basado fundamentalmente en
la virtualización de los recursos informáticos, este modelo de
arquitectura ofrece una ventaja única, la posibilidad de hacer crecer y
decrecer los recursos aprovisionados.
Supongamos un servicio de streaming bajo demanda, como es el caso
de Netflix. En este tipo de servicio la demanda crece los fines de semana
y decrece los días entre semana.
Si el proveedor del servicio no aprovisiona los recursos suficientes para
atender la demanda del fin de semana, entonces muchos usuarios se
quedarán sin servicio.
Por otra parte, si el proveedor del servicio aprovisiona los recursos
necesarios para atender a sus usuarios el fin de semana, estos recursos
estarán subutilizados los días entre semana, lo cual resulta en pérdidas
económicas.
Sin lugar a dudas, el éxito que han alcanzado las empresas proveedoras
de streaming bajo demanda, se debe a que su modelo de negocio está
basado en la posibilidad que les ofrece la nube para crecer y decrecer
los recursos aprovisionados, a esta característica de la nube se le
llama elasticidad.
El cómputo elástico es la habilidad de hacer crecer y decrecer
rápidamente la capacidad de cómputo (CPUs), la memoria y el
almacenamiento para adaptarse a la demanda.
Para implementar el cómputo elástico se utilizan herramientas de
monitoreo, las cuales aprovisionan y des-aprovisionan recursos
conforme son necesarios, sin detener la operación.
Sin embargo, hay proveedores de nube que afirman que no existe tal
cosa como "nube privada", ya que el tema de elasticidad se ve acotado
en un equipo "privado" debido a la limitada escalabilidad.
En cambio, en la nube pública la escalabilidad es casi ilimitada, ya que si
se agotan los recursos de un data center, sin ningún problema se puede
escalar a otro data center, ya sea del mismo proveedor o de otros
proveedores.
Una característica importante de la nube (pública) es "pagar por lo que
se usa", esto significa que solo se paga por los recursos aprovisionados.
En el caso de un centro de cómputo tradicional (también es el caso de la
"nube privada") la empresa paga por todo el equipo, lo use a toda su
capacidad o no.
Consideremos la siguiente gráfica:
Escenario On-premise
Al inicio los requerimientos informáticos de la empresa son pocos, sin
embargo ésta debe hacer una gran inversión inicial ya que debe
adquirir el equipo que le permita operar durante un periodo de tiempo
determinado.
Para saber cuál será la inversión inicial se deberá hacer una planeación
de capacidad.
Suponiendo que la empresa crece, entonces en determinado momento
deberá realizar la actualización de su equipo informático.
Entonces se deberá hacer una planeación de capacidad para establecer
el tamaño de la inversión, estimando un tiempo determinado de
operación.
No obstante las previsiones, la empresa podría decrecer, por tanto los
requerimientos informáticos también decrecen. El costo de la
actualización no se recupera, incluso, en poco tiempo el equipo se hará
obsoleto.
Escenario nube
Ahora supongamos que la empresa utiliza servicios en la nube. Entonces
la inversión inicial es mínima, ya que la empresa contratará los
servicios indispensables para operar. Conforme la empresa crece, la
elasticidad de la nube permite adecuar el tamaño de la infraestructura
informática de acuerdo a las necesidades.
Si la empresa decrece, también decrecen sus necesidades y el costo de la
infraestructura informática. En la gráfica, las barras corresponden al
costo de los servicios de nube. Podemos ver que este costo se ajusta a
las necesidades de la empresa.
Podemos concluir que al utilizar los servicios de nube se optimiza la
relación costo/beneficio, ya que solo pagamos lo que realmente usamos.
Referencia
What is elastic computing or cloud elasticity?