Desde 2003, he usado IntelliJ como mi herramienta principal para desarrollar aplicaciones y servicios. Hace diecinueve años, me impresionó tanto la pequeña cantidad de RAM requerida para usar el IDE como las capacidades de refactorización incluidas con la versión 1.x.
Desarrollar en Java no requiere que use el producto IntelliJ IDEA. Otros desarrolladores en mi proyecto actual usan Eclipse o VS Code, pero estas herramientas no son necesarias. Cuando pueda escribir sus componentes, servicios y aplicaciones con un editor de texto simple y una sesión de terminal, terminará con el mismo código Java compilado.
Entonces, ¿por qué gasto el dinero en IntelliJ todos los años? Porque IntelliJ IDEA está diseñado para facilitar las cosas a los desarrolladores, lo que equivale a que yo sea mucho más productivo. Por ejemplo, hacer clic con el botón derecho en una clase me brinda la opción de reubicar la clase en cuestión de segundos. Cuando IntelliJ encuentra una oportunidad para eliminar el código duplicado, crea el nuevo código compartido y actualiza correctamente las ubicaciones que dependen del método centralizado. IntelliJ también es una excelente fuente de validación durante las revisiones de código.
Si bien este ejemplo puede parecer un poco elemental, me pregunto por qué más ingenieros de software no adoptan un enfoque similar al crear sus servicios.
Supongamos que su equipo de características ha estandarizado el uso de Spring Boot para los servicios de API. Como resultado del arduo trabajo y el diseño detallado de su equipo, los consumidores públicos consideran que sus API son exitosas. Su organización decide utilizar Kubernetes para estos servicios.
Para cada servicio Spring Boot que desarrolla su equipo, así es como se ve el ciclo de vida de alto nivel:
Se inicializa un servicio Spring Boot y se agrega un código personalizado. Ese servicio se incluye en un contenedor en una imagen de Docker , que finalmente se implementa en Kubernetes.
Al utilizar Kubernetes, obtenemos las siguientes ventajas:
Si está interesado en usar Kubernetes con Spring Boot, consulte la siguiente URL:
Basándonos en el éxito de estas populares API, imaginemos que a los líderes ejecutivos les gustaría monetizar los servicios para obtener ingresos de los consumidores más activos. Todavía estará disponible un nivel gratuito, pero se introducirán límites en el uso de la API.
Si bien el equipo podría implementar alguna lógica personalizada en el nivel de Spring Boot, esto no tiene sentido. Lo que necesitamos es una forma centralizada de manejar este nuevo requisito.
El año pasado, comencé a familiarizarme con la suite de productos Kong como parte de un estado de solución a largo plazo para uno de mis clientes. El escenario que describí anteriormente refleja situaciones que he encontrado en los últimos cinco años: la centralización de componentes comunes es clave para una implementación exitosa de microservicios.
Si quieres leer más sobre Kong, echa un vistazo a mi publicación del pasado mes de mayo:
Cómo dejé de codificar componentes de servicio repetitivos con Kong
Para el caso de uso mencionado anteriormente, podríamos manejar los siguientes componentes en el nivel de puerta de enlace API:
Dado que Kong Gateway es de código abierto y un "líder" en el Cuadrante Mágico de Gartner de 2021 para la gestión de API de ciclo de vida completo, Kong Gateway es una forma segura de manejar estos componentes comunes. Saber que Kong también proporciona un controlador de entrada para usar dentro de Kubernetes valida aún más la decisión del producto.
Puede encontrar todo lo que necesita para comenzar con Kong Ingress Controller (KIC) en esta página de GitHub:
Controlador de entrada Kong para Kubernetes
La siguiente ilustración muestra el diseño deseado para los dos servicios:
Las solicitudes llegan a Kubernetes para el servicio API n.° 1 o n.° 2. El controlador Kong Ingress intercepta las solicitudes y valida la clave API proporcionada. Con base en esa información, el controlador determina si el consumidor que realiza la solicitud ha excedido su límite de solicitud.
Si no se ha excedido el límite de frecuencia, la solicitud se envía al servicio correspondiente. Sin embargo, si se supera el límite de velocidad, se devolverá una respuesta HTTP 429 (demasiadas solicitudes). En todos los casos, el módulo de registro se puede configurar fácilmente para realizar un seguimiento de todas las solicitudes entrantes, incluidos todos los metadatos proporcionados por el consumidor de la API.
Cuando damos un paso atrás y observamos la arquitectura y el diseño resultantes, vemos rápidamente los beneficios:
Como resultado de este modelo, los desarrolladores del equipo de características que trabajan en los servicios de Spring Boot solo necesitan concentrarse en el trabajo proporcionado por el propietario del producto para mejorar o ampliar el servicio. Estos desarrolladores no necesitan preocuparse por las claves API, la limitación de velocidad o cualquier otro componente compartido administrado en otro lugar.
Los ingenieros de DevOps que respaldan la implementación de Kubernetes tampoco tienen que diseñar ningún aspecto de diseño personalizado para manejar esos componentes compartidos. Esto se debe a que Kong Gateway está diseñado para adaptarse a esas necesidades y funciona bien a través de Kong Ingress Controller.
Desde 2021, he estado tratando de vivir de acuerdo con la siguiente declaración de misión, que creo que puede aplicarse a cualquier profesional de TI:
“Concentre su tiempo en ofrecer características/funcionalidades que amplíen el valor de su propiedad intelectual. Aproveche los marcos, productos y servicios para todo lo demás”.
-J. Vester
Al comienzo de esta publicación, hablé sobre cómo prefiero IntelliJ IDEA sobre un editor de texto y una sesión de terminal. En realidad, la razón central se relaciona directamente con mi declaración de misión personal. El producto IDEA me permite concentrarme en las cosas correctas; mientras tanto, maneja las tareas repetitivas relacionadas con la escritura del código fuente original.
De manera similar, Spring, Docker, Kubernetes y Kong han proporcionado soluciones y marcos para trabajar con la misma misión. Cada aspecto mencionado anteriormente se puede rastrear hasta una única fuente de verdad para un elemento determinado. Como resultado, no hay duplicación de servicios o funcionalidades en todo el panorama de aplicaciones.
Si se encuentra implementando el mismo proceso por segunda vez, sin duda es hora de considerar refactorizar su diseño.
Si su nivel de servicio cae en un modal similar al que he discutido aquí y no está utilizando Kong Gateway o Kong Ingress Controller, ciertamente deberían estar en su lista de productos para revisar cuando esté listo para refinar su diseño de servicio.
¡Que tengas un gran día!