Está en la página 1de 4

QUE ES UN KERNEL?

El núcleo o kernel es la parte central de un sistema operativo y es el que se encarga


de realizar toda la comunicación segura entre el software y el hardware del ordenador. El
núcleo kernel es la parte más importante del sistema operativo Unix y sus derivados,
como Linux y todas las distribuciones que dependen de él.
Aunque Windows también posee su propio kernel, hay una diferencia fundamental entre
este y el de Linux. Mientras que el núcleo de Windows es completamente hermético y
nadie puede modificarlo, el de Linux es de código abierto, por lo que cualquiera puede
hacerles las modificaciones que quiera, esto permite que existan distintas distribuciones
de Linux.

QUE ES UN UNIKERNEL?

Un unikernel es una aplicación que se compila junto a la parte del kernel del
Sistema Operativo que necesita y que tiene como resultado un binario que incluye
ambos. Este binario luego puede ser ejecutado tanto en baremetal o en una máquina
virtual sin la necesidad de un sistema operativo intermediario (es decir, sin tener que
ejecutar Linux, Windows o lo que sea por debajo), con los beneficios de rendimiento y
seguridad que esto implica. Es decir, se podria “aplicar un unikernel” en el servidor web
Apache y asi tendriamos un host o máquina virtual dedicada a ejecutar un servidor web.

Un unikernel es una imagen binaria especializada de un kernel que funciona sin memoria
virtual (en un espacio de direcciones único) junto con las bibliotecas necesarias para que
funcione una aplicación, todo ello compilado de forma estática y ejecutado en un
hipervisor sin la supervisión ni control de ningún sistema operativo. Los unikernels tratan
de eliminar las capas intermedias entre las aplicaciones y el hardware para reducir la
complejidad.
¿Qué es un hipervisor?
QUE ES UN HIPERVISOR?

Un hipervisor, conocido también como monitor de máquina virtual (VMM), es un software


que crea y ejecuta máquinas virtuales (VM) y que, además, aísla el sistema operativo y
los recursos del hipervisor de las máquinas virtuales lo que permite crearlas y
gestionarlas.

Cuando el sistema de hardware físico se usa como hipervisor, se denomina "host", y las
múltiples máquinas virtuales que utilizan sus recursos se denominan "guests"
VENTAJAS DE LOS UNIKERNELS

En general el proceso para generar un unikernel es muy costoso. Además, muchas veces,
este desarrollo en general es limitado a una aplicación, e.g., Apache, con lo cual es difícil
reutilizar código. Por supuesto que, una vez creado, las ventajas de los unikernels son
muchas y variadas como apuntábamos antes:
 Mejor seguridad: menos código qué atacar, aislación completa de otras
aplicaciones (ya que no comparten ni las llamadas al sistema operativo).

 Mejor rendimiento: el unikernel está optimizado para su función específica en lugar


de tener que proporcionar servicios genéricos. No hay overhead en llamadas al
sistema o en cambios de contexto o niveles de privilegio.

 Limitación de recursos. El tamaño de un unikernel en órdenes de magnitud más


pequeño que un sistema operativo normal. Por esta misma razón se arranca (boot)
mucho más rápidamente.

COMPETENCIA DE LOS UNIKERNELS


La principal competencia de unikernels son los containers. Los containers son, a
groso modo, virtualización por software. Los containers tienen varias ventajas frente a los
unikernels como mejores tiempos de desarrollo, menos consumo de memoria y menos
consumo de CPU. Claro, que estas ventajas son ciertas si miramos al container en sí. El
container sigue dependiendo de un sistema operativo “normal” por debajo con lo que esta
eficiencia dependerá mucho de como esté desplegado. Y debido a esta misma
dependencia, su principal desventaja es que la aislación no es completa. En otras
palabras, el “attack surface” del container es más grande que el de unikernels. Para toda
aplicación que sea crítica (tanto a nivel de seguridad como de rendimiento) mejor
optar por un unikernel.

¿POR QUÉ ES TAN DIFÍCIL LA IMPLEMENTACIÓN?

La razón de la existencia de todas estas herramientas son los problemas que surgen al
implementar el software en producción. Algunos de los problemas comunes que deben
abordarse son los siguientes:
1. Consistencia del medio ambiente. Es mucho más fácil escribir un fragmento de
código que se ejecutará en una sola plataforma. Por lo tanto, debe minimizar las
diferencias de plataforma entre implementaciones.
2. Escalabilidad. Puesto que debería poder escalar rápidamente su infraestructura
para satisfacer los picos de demanda y minimizar los costos.
3. Seguridad. Esto se explica por sí mismo. Quiere que su software sea propenso a
los piratas informáticos en todos los niveles.
4. Supervisión. Desea monitorear de manera efectiva la carga en su infraestructura y
extraer todo tipo de datos para optimizar sus operaciones.
5. Sea amigable con los desarrolladores. Los desarrolladores de software quieren
hacer el menor trabajo posible para publicar su última compilación para los
clientes. Al mantener contentos a sus desarrolladores, evitará muchos problemas
más adelante.

Esta lista no es exhaustiva, pero estos son algunos problemas comunes que no tenían
una solución fácil hasta hace poco.

Una pila de implementación típica constaba de varias máquinas virtuales que se


ejecutaban en varios servidores. A veces es una máquina virtual por aplicación, una
máquina virtual por cliente o una máquina virtual por concepto (una para la base de datos,
otra para la caché, etc.). Puede notar la cantidad de recursos que se desperdician: cada
máquina virtual tiene que ejecutar su propia instancia de un sistema operativo (Linux, la
mayoría de las veces), lo que genera una duplicación de responsabilidades. También
puede imaginar lo difícil que es administrar una infraestructura de este tipo: puede
terminar efectivamente con más de 100 servidores (por ejemplo, una plataforma SaaS)
que son todas máquinas virtuales independientes.

El proceso de implementación de un enfoque basado en VM puede ser de dos


maneras. El sistema de compilación puede producir una imagen completa de una
máquina virtual con software integrado y la máquina virtual simplemente se reinicia una
vez que llega la actualización. O bien, el sistema de compilación produce solo el paquete
de software, que se carga en los servidores mediante una colección de scripts. La
desventaja de ambos enfoques es una configuración compleja y, eventualmente,
inconsistencias entre las VM. Una verdadera pesadilla comienza cuando necesitas
actualizar la versión del sistema operativo. Tendría que hacerlo dos veces: primero, el
sistema operativo host y luego el sistema operativo invitado.

Sin embargo, este enfoque tiene sus ventajas. De esta manera, obtiene un control
completo del entorno para cada aspecto del sistema y puede configurarlo para que se
adapte perfectamente a sus necesidades. También simplifica la depuración, ya que puede
conectarse directamente a una máquina virtual y usarla como una estación de trabajo
normal.

DESPLIEGUE

El Despliegue de software son todas las actividades que hacen que un sistema


de software esté disponible para su uso.1
El proceso de implementación general consiste en varias actividades interrelacionadas
con posibles transiciones entre ellas. Estas actividades pueden ocurrir en el lado
del desarrollador de software o en el lado del consumidor o en ambos. Debido a que cada
sistema de software es único, los procesos o procedimientos precisos dentro de cada
actividad difícilmente pueden definirse. Por lo tanto, la "implementación" debe
interpretarse como un proceso general que debe personalizarse de acuerdo con los
requisitos o características específicos.2

DESPLIEGUE MEDIANTE CONTENEDORES

Con la aparición de tiempos de ejecución de contenedores como Docker y sistemas de


orquestación de contenedores como Kubernetes, se manifestó una nueva era en la
infraestructura de software. 

Los contenedores intentan lograr el mismo concepto que las máquinas virtuales pero
eliminando la duplicación de esfuerzos entre máquinas. ¿Recuerda el concepto de
kernel? Bueno, en lugar de cargar un sistema operativo completo para una aplicación,
Docker permite que los contenedores usen el kernel del sistema operativo host mientras
les permite descargar bibliotecas y programas específicos de la aplicación. Dado que el
kernel de Linux es tan común y realmente no cambia entre las distribuciones, se logra una
independencia completa de la plataforma. Al ajustar el contenedor y su imagen, puede
ajustar las bibliotecas y la configuración específicas que usará su aplicación, lo que se
traduce en ganancias de rendimiento sin la sobrecarga de ejecutar un sistema operativo
completo. 

DESPLIEGUE USANDO UNIKERNELS

Si bien los contenedores se están convirtiendo rápidamente en un estándar de la


industria, los unikernel todavía tienen mucho por hacer. Unikernels intenta impulsar los
conceptos de contenedores aún más, eliminando la necesidad de un sistema operativo
por completo. Unikernels logra esto mediante el uso de sistemas operativos de
biblioteca. Los sistemas operativos de biblioteca proporcionan características similares
(pero limitadas a un solo usuario) al sistema operativo normal, pero en forma de
bibliotecas que usa su aplicación. Entonces, en lugar de mantener un kernel residente en
la memoria, todo se administra a través de bibliotecas binarias preconstruidas. Sin
embargo, los Unikernels no manejan la asignación de recursos, por lo que aún requieren
un hipervisor:

VENTAJAS DE KERNEL
QUE ES UNIKERNEL

También podría gustarte