Episodes
-
Bienvenidos a su podcast "Plataformas Computacionales a Gran Escala", el podcast donde se recuerda lo que vimos la clase anterior y se anuncia lo que veremos en la próxima clase.
Este es el episodio "03" de la temporada “2021-01” grabado el "7 de Abril del 2021" - Docker y volúmenes en Docker
En la clase anterior trabajamos alrededor de dos temas fundamentalmente:
Gestión de contenedores e imágenes en Docker. Volúmenes en Docker.Enlace al guión de completo de este podcast
-
En la clase anterior estuvimos revisando algunos conceptos relacionados a los sistemas operativos y que correspondían a la parte final del capítulo 2 del libro:
Se mencionó que es proceso
Abstracción para hacer uso de la CPU
Un programa en ejecución
Se habló del gestor de memoria
Encargado de asociar direcciones de memoria virtual a memoria física
Asignar memoria a los procesos y proteger de accesos ilegales a esta ejemplo: un proceso 1 tratando de acceder a una región de memoria del proceso 2.
Se mencionó el tipo de kernel llamado microkernel el cual es una forma diferente de implementar el kernel y donde funcionalidades básicas residen como aplicaciones del sistema operativo: drivers de dispositivos, servidor de archivos, entre otros servicios.
Se tocó el tema de los hilos de ejecución e identificando que estos son abstracciones naturales que facilitan la paralelización de código y usan eficientemente los múltiples núcleos de nuestros dispositivos electrónicos: desde celulares hasta computadoras de escritorio.Después de estos grandes temas se habló de los APIs de procesos. Los APIs o Ei-Pi-Ais que traducen interfaces de programación de aplicaciones son puertas de acceso a servicios ofrecidos, en este caso, por el sistema operativo. Es decir, los APIs permiten fácilmente a un programador el uso a funciones provistas por el sistema operativo u otros aplicativos de modo que se construyan aplicaciones más sofisticadas y ocultando al programador complejidades internas de algún tipo de aplicativo o incluso hardware. Ejemplos de APIs están
CUDA - “It allows software developers and software engineers to use a CUDA-enabled graphics processing unit (GPU) for general purpose processing”
Google Spreadsheet API - permite el acceso, gestión de hojas de cálculo y gestión de los datos al interior de estas.
API de VirtualBox - permite la gestión de máquinas virtualesComenzamos a ver el API de procesos, en particular, vimos la función fork(). La función fork() permite la creación de un nuevo proceso “exactamente” igual al proceso que invocó la función. Esta función devuelve un “entero” que puede tener tres valores:
Negativo, la función falló en su ejecución
Cero, quien está ejecutando esa parte del código es el nuevo proceso creado
Positivo, es el proceso que invocó la función fork().Vimos un par de programas para ejemplificar el uso de esta función.
--- interlude
En nuestra próxima clase hablaremos acerca de otras funciones en el API de procesos como el wait(), varias funciones de la familia execv(), veremos como redireccionar la salida de un proceso a un archivo y veremos un primer acercamiento a una tarea de programación que consiste en el desarrollo de un shell primario.
-
Episodes manquant?
-
¿Qué pensaría si le dijera que hay una forma de incrementar su memoria de intercambio (o swap) usando parte de su memoria RAM? Algo así como que usted asigna 500 MB de RAM y se convierte en una memoria de intercambio de 1GB. O si usted toma un 1GB de memoria RAM y lo convierte en un dispositivo de almacenamiento de 2 GB. Pues bien, esto es posible a través del módulo del kernel de Linux llamado zram.
---
La memoria RAM es uno de esos recursos computacionales fundamentales cuando pensamos en eficiencia y reducción de tiempos de ejecución de los programas de computador.
La RAM tiene como propósito fundamental el mantener la mayor cantidad de procesos en memoria, es decir mantener procesos listos para ser llevados a la CPU.
Gracias a la forma como los sistemas operativos hacen gestión de la memoria RAM disponible y de los costos reducidos de la RAM; ahora es posible encontrar nuevas formas para el uso de la RAM y mejorar la experiencia de usuario. Para mencionar una de estas formas tenemos a RAM disk o RAM drive. RAM disk permite tomar una parte de la RAM y usarla como un dispositivo de almacenamiento. En este sentido, imagínate tener un dispositivo para almacenar archivos pero con la velocidad de lectura y escritura de la RAM.
---
Zram es un módulo del kernel de Linux, introducido en el 2014, y que fue conocido como compcache.
Este módulo permite la creación de dispositivos de bloque en RAM pero con la capacidad de comprimir y descomprimir los datos al vuelo.
Para entender lo que es un dispositivo de bloque les puedo decir que los discos duros y memorias USB son dispositivos de bloque. Es decir, son dispositivos que permiten almacenar archivos.
Entendiendo que zram provee un dispositivo de bloque pero con capacidad de compresión de la información, este módulo permite usar la RAM como mecanismo de swap o para servir como un dispositivo de bloque para almacenar archivos. La tasa de compresión de este módulo puede alcanzar hasta un 60% de compresión[5]. Es decir, si necesitas almacenar 1 GByte de información se requerirá solo 400 MBytes de espacio en RAM. Así mismo, el costo computacional para almacenar y recuperar los datos es bajo y se ha mejorado gracias al uso de tecnologías de múltiples núcleos que permiten comprimir y descomprimir información usando el algoritmo LZO [6].
El módulo zram es útil para dispositivos con poca RAM y que ven en la memoria de intercambio una posibilidad para incrementar su capacidad de RAM. Otro tipo de usos de este módulo se encuentra en los dispositivos que se apoyan en almacenamiento de tipo flash (sistemas embebidos y Raspberry Pis) y el cual se deteriora rápidamente por su uso.
Ahora, si reduces las operaciones de E/S sobre dispositivos de almacenamiento tipo flash y en su lugar lo llevás a la RAM, puede aumentar la vida útil de tu memoria flash.
En la publicación de Enero 29 del 2021 del sitio MuyLinux titulada “Cómo habilitar swap sobre zRAM en Debian y Ubuntu” [2] se describe cómo habilitar este módulo en equipos basados en Linux Debian y Ubuntu. Se sugieren además tips acerca de como configurar el módulo de acuerdo a la cantidad de RAM del equipo donde este módulo se ejecuta.
Así que si tienes un equipo con poca RAM y deseas incrementar la swap o incluso si deseas mejorar la experiencia de uso de tu equipo moderno y eliminar la swap del mismo, zram es un módulo que vale la pena intentar.
---
Enlaces:
https://en.wikipedia.org/wiki/Zram
https://www.muylinux.com/2021/01/29/swap-zram-debian-ubuntu/
https://en.wikipedia.org/wiki/RAM_drive
https://linuxhint.com/ramdisk_ubuntu_1804/
https://www.researchgate.net/publication/220195639_An_index_rewriting_scheme_using_compression_for_flash_memory_database_systems/figures?lo=1
https://www.ele.uri.edu/Research/hpcl/2012/SBAC.pdf
-
En la clase anterior desarrollamos al menos tres actividades:
Revisión del despliegue con un solo comando de un balanceador de carga (HAProxy) usado por un conjunto de servidores web. Se mostraron los pasos para desplegar un servicio de NFS en máquinas virtuales. Y se hizo una ntroducción a Docker.Del primer ítem, se revisó el despliegue con un solo comando de un cluster que apoyaba el balanceo de carga entre un conjunto de servidores web. Dos estudiantes (Jonathan Toledo y Carlos Murillo) nos mostraron como lo llevaron a cabo y mostraron diferentes elementos que presentaban nuevas formas de hacer el aprovisionamiento de manera automática.
Del segundo ítem, se mostró como llevar a cabo el despliegue del sistema de ficheros NFS. Las máquinas virtuales se crearon con Vagrant y su aprovisionamiento se hizo de manera manual. Se propuso una tarea para que entonces los estudiantes hicieran el aprovisionamiento de manera automática de este servicio sobre tres máquinas virtuales.
Finalmente, se llevó a cabo una introducción a Docker, se habló un poco de su historia, de su importancia en el desarrollo de la virtualización centrada en los contenedores, así como algunos conceptos alrededor de la herramienta.
Se presentó como llevar a cabo el despliegue de Docker en una máquina virtual de Linux (Ubuntu Groovy) y se llevaron a cabo la ejecución de algunos de sus comandos.
---
En nuestra próxima clase llevaremos a cabo una revisión más detallada de algunos comandos de Docker para la gestión de contenedores. Hablaremos de volúmenes en Docker y si el tiempo nos lo permite veremos el uso de la herramienta docker-compose.
Vale la pena mencionar que Docker es una tecnología de mucha relevancia en la industria del software y también en el área de la investigación. Algunas de las razones por las cuales la tecnología de contenedores es tan atractiva:
Uso eficiente de recursos Permite ciclos de desarrollo de software más rápidos → fácil distribución de nuevas funcionalidades o versiones del software Soporte a la portabilidad → capacidad de correr la misma imagen de contenedor en diferentes plataformas Adecuado para microservicios → gracias a la versatilidad de la tecnología es posible dividir aplicaciones monolíticas en diferentes servicios que pueden ser modificados y escalados de forma independiente. Permite la reproducibilidad/repetibilidad experimental.Sin embargo los contenedores:
No resuelven problemas de seguridad No convierten mágicamente aplicaciones a microservicios No sustituye a las máquinas virtuales