El estilo arquitectónico de Microkernel o también conocido como arquitectura de Plug-in, permite crear aplicaciones extensibles, mediante la cual es posible agregar nueva funcionalidad mediante la adición de pequeños plugins que extienden la funcionalidad inicial del sistema.
En una arquitectura de Microkernel las aplicaciones se dividen en dos tipos de componentes, en sistema Core (o sistema central) y los plugins (o módulos), el sistema Core contiene los elementos mínimos para hacer que la aplicación funcione y cumpla el propósito para el cual fue diseñada, por otra parte, los módulos o plugins con componentes periféricos que se añaden o instalan al componente Core para extender su funcionalidad. En este sentido, solo puede haber un componente Core y muchos Plugins.
La idea central de este estilo arquitectónico es permitir la extensión de su funcionalidad o personalización, pero respetando el principio Open-Closed, es decir, está abierto para extender la funcionalidad, pero cerrado para modificar su funcionalidad principal. De esta forma, se logra que los desarrolladores pueden crear plugins para agregar nueva funcionalidad o extender la existente, pero sin alterar la funcionalidad Core del sistema.
Los ejemplos más claros de esta arquitectura son los IDE’s de desarrollo como Eclipse, Netbeans, Visual Studio, Visual Studio Code o los sistemas de ofimática como Word, Powerpoint, Excel, etc. Todas estas aplicaciones permiten que los desarrolladores creen nueva funcionalidad, la cual se instala para extender o agregar nuevas características. En el caso de los IDE’s de desarrollo, tenemos plugins para permitir el uso de servidores de aplicaciones, soportar nuevos lenguajes de programación, para editar archivos de determinada extensión, para conectarnos a la base de datos, utilizar terminales, para conectarnos con sistemas de control de versiones, consumir servicios, etc. En el caso de los programas de ofimática tenemos la opción de conectarnos con servicios como Sharepoint, almacenamiento en la nube con Google Drive, DropBox, One Drive, integración con Slack, plugins para insertar firmas electrónicas, traducción, etc.
Como se estructura una arquitectura de Microkernel
Los sistemas que utilizan una arquitectura de Microkernel no son fáciles de desarrollar, pues necesitamos crear aplicaciones que son capaces de agrandar dinámicamente su funcionalidad a medida que nuevos plugins son instalados, al mismo tiempo que debemos de tener mucho cuidado de que los plugins no modifiquen o alteren la esencia de la aplicación.
El solo hecho de lograr que un sistema acepte plugins ya es complicado, sobre todo porque el sistema Core y los plugins son desarrollados por lo general por equipos separados, por lo que el sistema Core debe de dejar muy en claro como los plugins deben se desarrollados y deben de tener un archivo descriptor que le diga al sistema Core como debe de instalarse o debería de mostrar el plugin ante el usuario.
Para permitir la construcción de plugins, el sistema Core debe de proporcionar un API o una definición la cual el plugin debe de implementar, de esta forma tenemos el sistema Core y el API que provee para que los desarrolladores creen los plugins. El API es una serie de clases o interfaces que deben ser implementadas por el Plug-in, las cuales serán analizadas por el sistema Core al momento de la instalación.
En la imagen anterior podemos ver el rol que tiene el API en la arquitectura. El API en realidad es un componente independiente del sistema Core, el cual contiene solamente las clases e interfaces que deberán conocer tanto el sistema Core como los Plugins.
Por lo general hay una interface o clase abstracta llamada Plugin la cual debe de implementar una clase del componente Plugin, la cual servirá como punto de entrada para el sistema Core, la cual le dará toda la información del Plugin al sistema Core.
Ventajas
Testabilidad: Debido a que los Plugins y el sistema Core son desarrollados de forma por separado, es posible probarlos de forma aislada.
Performance: En cierta forma, muchas de las aplicaciones basadas en Microkernel trabajan de forma Monolítica una vez que el Plug-in es instalado, lo que hace que todo el procesamiento se haga en una sola unidad de software.
Despliegue: Debido a la naturaleza de Plugins es posible instalar fácilmente todas las características adicionales que sea necesarias, incluso, pueden ser agregar en tiempo de ejecución, lo que en muchos casos ni siquiera requiere de un reinicio del sistema.
Dinamismo: Las aplicaciones basadas en Plugins pueden habilitar o deshabilitar características basadas en perfiles, lo que ayuda que solo los plugins necesarios sean activados, incluso, pueden ser activados solo cuando son utilizados por primera vez (hot deploy), lo que hace que los módulos que nunca se utilizan, no se activen nunca, ahorrando una gran cantidad de recursos.
Construcción modular: El sistema de Plugins permite que diferentes equipos puedan trabajar en paralelo para desarrollar los diferentes Plugins.
Reutilización: Debido a que los Plugins puede ser instalados en cualquier instancia del sistema Core, es posible reutilizar los módulos en varias instancias, incluso, es posible comercializarlas de forma independiente. Solo como ejemplo, existe empresas que se dedican exclusivamente a desarrollar Plugins para venderlos, como es el caso de los Plugins de Wordpress.
Desventajas
Escalabilidad: Las aplicaciones basadas en Microkernel son generalmente desarrolladas para ser ejecutadas en modo Standalone. Si bien existen aplicaciones que implementan el estilo de Microkernel que son altamente escalables como algunos servidores de aplicaciones, la realidad es que este no es un estilo arquitectónico que se distinga por crear aplicaciones altamente escalables.
Alta complejidad: Las aplicaciones basadas en Microkernel son difíciles de desarrollar, no solo por la habilidad técnica para soportar la agregación de funcionalidad adicional por medio de Plugins, si no que requiere un análisis muy elaborado para identificar hasta qué punto puede ser extendida la aplicación sin afectar la esencia del sistema Core.
Conclusiones
Como hemos podido analizar a lo largo de esta sección, el estilo arquitectónico de Microkernel permite extender la funcionalidad de sistema mediante la adición de Plugins, dichos plugins pueden ser desarrollados por terceros, lo que amplía las posibilidades de la aplicación Core si necesidad de costear los desarrollos, al mismo tiempo que permites que puedan personalizar al máximo el sistema.
Por otra parte, podemos observar que un sistema basado en Microkernel permite tener múltiples equipos de desarrollo que construyen los módulos en paralelo sin interferir unos con otros, al mismo tiempo que permite que estos componentes sean probados de forma independientes, por lo que podemos decir que este estilo es fácil de probar.
Sin embargo, hemos visto que uno de las principales problemáticas de este estilo arquitectónico es su alta complejidad de desarrollar y su escalabilidad, lo cual puede ser una limitante para sistemas que deben ser diseñados para un alto escalamiento.
Acerca de este libro
Todo lo que acabas de ver en este artículo es solo una pequeña parte del libro Introducción a la arquitectura de software, el libro más completo en español sobre arquitectura de software, donde cubrimos los temas más importantes para convertirte en un arquitecto de software profesional.
¿Quieres convertirte en arquitecto de software pero no sabes cuál es el camino adecuando? o simplemente no sabes que guía estudiar para convertirte en arquitecto de software, te invito a que veas mi libro: