Java para la nube y la nube para Java

Java para la nube y la nube para Java

Muchas organizaciones eligen ejecutar aplicaciones Java existentes en la nube y desarrollan cada vez más nuevas aplicaciones nativas de la nube en Java. ¿Por qué existe una sinergia entre Java y la nube?  Dmitry Kornilov y Tomas Langer, dos ingenieros que trabajan en tecnología Java empresarial y tienen opiniones sólidas sobre ese tema.

¿Por qué utilizar Java para la nube?

Langer: Una de las razones por las que usamos Java es por la cantidad de soporte y servicios que brinda. Hay muchas bibliotecas, tecnologías y características que apoyan a los desarrolladores, especialmente considerando cuánto tiempo los desarrolladores han estado desarrollando aplicaciones para el lado del servidor.

En segundo lugar, dado que Java es un lenguaje mecanografiado, tiene una gran ventaja sobre los lenguajes no mecanografiados debido a su mantenimiento. Java es menos propenso a errores en tiempo de ejecución y puede realizar análisis de código estático con mayor facilidad. Por ejemplo, si una empresa está buscando un lenguaje para ejecutar sus aplicaciones durante los próximos 10 años, sugeriría Java, ya que tiene los beneficios que mencioné anteriormente, además de estándares de formato sólidos y un ecosistema completo que permite a las empresas tener un futuro de fácil mantenimiento.

En última instancia, el costo del software no está en escribir el código. El costo real del software está en el mantenimiento. Java tiene una gran ventaja en sus IDE, porque es fácil agregar nuevas funciones, corregir errores y refactorizar entornos si una organización necesita realizar cambios.

¿Cómo se compara Java, cuando está construyendo para la nube, con C, C ++, C # y lenguajes más nuevos como Python?

Langer: Escribir código en C es muy difícil debido a la gestión de la memoria. Aunque ha habido mejoras en el idioma, todavía tiene muchas características del idioma que son realmente complicadas. Por ejemplo, si necesita hacer aritmética de punteros, deberá ocuparse de qué es una referencia, qué es un valor, etc. Por lo tanto, el lenguaje es mucho más complejo. Además, si comete un error en C, la aplicación se bloqueará, el proceso finalizará y su trabajo desaparecerá.

Creo que C, C ++ y lenguajes similares son muy buenos si necesitas escribir algo súper pequeño y eficaz y si tienes gente que realmente entienda esos lenguajes. Sin embargo, ahora que ha habido mejoras en Java SE 9 y versiones posteriores, se pueden lograr velocidades similares con la ventaja adicional de poder ejecutar el mismo binario en prácticamente cualquier sistema.

Una gran diferencia con cualquier otro lenguaje de programación es Project Loom , que admite código de bloqueo aparentemente síncrono que no bloquea los hilos. Por ejemplo, si escribe en un sistema de archivos y está ocupado, su código se bloqueará, pero los subprocesos en los que estaba ejecutando serán utilizados por otra cosa que no necesita bloquearse. Una vez que se lanza Project Loom, las aplicaciones pueden deshacerse de cosas como la programación reactiva (que reduciría el código de andamiaje) y el rendimiento de las aplicaciones aumentará sin muchos cambios en el código fuente. Ningún otro lenguaje de programación hace esto. Por lo que hemos visto hasta ahora en Project Loom, unirá el mundo sincrónico y el mundo sin bloqueos a la perfección, lo que será un gran beneficio.

Python tiene una ventaja sobre Java cuando escribe aplicaciones simples porque es más rápido escribir su primera aplicación o programa. Sin embargo, escribir aplicaciones grandes en Python es un gran problema de formato. Agregar o eliminar un espacio en el lugar incorrecto hará que todo el programa colapse. Esto no sucedería en Java porque es completamente funcional incluso si eliminara todos los espacios de todo el programa. Java es mucho mejor para el mantenimiento, la resolución de problemas y la detección de errores en el código. Puedo tomar el código Java de otra persona que no entiendo y reformatearlo rápidamente en mi IDE y leerlo.

¿cuando está creando una nueva aplicación, ¿por qué implementarla en Oracle Cloud para empezar?

Langer: Hoy en día, si desea escribir una aplicación de interpretación, utilizará la programación reactiva. La versión actual de Helidon, versión 2.3.0 , tiene una integración reactiva con Oracle Cloud Infrastructure. Esto significa que tiene soporte reactivo completo en servicios como almacenamiento de objetos, bóveda, verificación de firmas, cifrado y descifrado. Siempre es bueno tener una implementación nativa de esa integración con la nube, y esto es algo que Helidon admite directamente. Oracle Cloud Infrastructure tiene un SDK que es más adecuado para bloquear aplicaciones, pero es algo que está listo y es más beneficioso porque la integración de Java se mantiene y se completa.

Oracle Cloud Infrastructure proporciona un servicio para desarrolladores en el que pueden apuntar a un repositorio, que crea su aplicación y la lanza. Para los desarrolladores que están comenzando con una aplicación, esto es muy beneficioso porque, aunque se requiere menos conocimiento para implementar en la nube, aún necesitan comprender algunos aspectos de la misma si fueran a profundizar, como usar Kubernetes. Por lo tanto, la nube es ideal para los desarrolladores que están creando su primera aplicación o aplicaciones de menor escala.

¿Podría describir brevemente Helidon y la programación reactiva?

Langer: Helidon es un conjunto de bibliotecas diseñadas para crear aplicaciones basadas en microservicios. Su conjunto de bibliotecas de bajo nivel usa programación reactiva, lo que significa que las operaciones de bloqueo nunca se usan, lo que le permite usar la CPU tanto como sea posible. Eso significa que puede hacer que su aplicación atienda, digamos, 50.000 solicitudes paralelas utilizando ocho subprocesos. No es necesario bloquear un hilo mientras espera que una base de datos devuelva datos. Similar a llamar a un servicio externo, en lugar de bloquear y esperar una respuesta, devuelva el hilo y cuando los bytes estén disponibles en el socket, continúe el procesamiento.

Aunque la programación reactiva es bastante complicada y más propensa a errores cuando escribe aplicaciones de bloqueo, es ideal para escribir aplicaciones muy paralelas con un rendimiento súper alto. Por ejemplo, le permite escribir aplicaciones comerciales que necesitan atender una gran cantidad de solicitudes paralelas.

Kornilov: Se trata de velocidad y rendimiento. Helidon ofrece un mecanismo para diseñar y desarrollar servicios reactivos. Los servicios de Netflix y Apple se basan en servicios reactivos, aunque esas empresas no utilizan Helidon. Las aplicaciones no reactivas no verán tantos beneficios. Esto indica que las empresas más grandes optan por utilizar servicios reactivos debido a sus ventajas.

Langer: Si un cliente tiene una implementación de servidores de aplicaciones Java en su entorno y observa el uso de la CPU, descubrirá que los entornos de producción más comunes ejecutan entre el 10% y el 20% de la utilización de la CPU. Para aumentar el rendimiento, generalmente la única opción es agregar hardware y crear un entorno más grande. Sin embargo, con la programación reactiva, el uso de la CPU bajo carga será del 100% ya que no está limitado por operaciones de bloqueo. Entonces, si un cliente quiere servir a millones de personas al mismo tiempo, necesitará una gran cantidad de servidores capaces de hacerlo con una API de bloqueo.

Helidon también tiene un tiempo de ejecución que se basa en un marco de bloqueo que usa CDI ( Contexts and Dependency Injection ) como inyección. Se llama Helidon MicroProfile (Helidon MP) , porque implementa la especificación Eclipse MicroProfile . Esta es la parte donde se escribe el código Java normal con operaciones de bloqueo. Si tiene una pequeña cantidad de solicitudes paralelas, no hay absolutamente ninguna necesidad de volverse reactivo; puede hacerlo con las API de bloqueo habituales, que son mucho más fáciles de escribir y leer. Entonces, ese escenario es compatible con Helidon MP.

Con Project Loom, podrá escribir su aplicación en Helidon MP en el entorno de bloqueo y disfrutar de los beneficios de los servicios reactivos. Esto es algo que estoy ansioso por hacer porque facilitará mucho la escritura de aplicaciones. Si se logra el mismo rendimiento con las API de bloqueo declarativo, eso realmente ayudará porque eliminaría el 80% de todos los problemas de producción con Java causados ​​por interbloqueos y un número insuficiente de subprocesos disponibles debido a que se ejecutan demasiados subprocesos.

Ese es un resumen de Helidon para escribir microservicios. O, si necesita escribir servicios de macros, también puede escribir aplicaciones grandes y complejas. Helidon es como una aplicación de VM única que servirá a sus puntos finales.

La integración de Oracle Cloud Infrastructure está disponible tanto para el mundo reactivo como para el de bloqueo. Helidon también admite mensajería y muchos otros servicios en la nube .

¿Existen otras razones para ejecutar aplicaciones Java en la nube?

Langer: Sí: servicios. Oracle Cloud Infrastructure tiene muchos servicios que requieren poca codificación por parte del desarrollador.

En última instancia, las empresas no quieren ser expertas en nada fuera de su negocio principal y no deberían tener que hacerlo. Las empresas quieren un servicio técnico que pueda comprender su lógica comercial y transferir sus requisitos comerciales al lenguaje de programación del servicio. Pero todo lo demás que pueda ser una mercancía debería seguir siendo una mercancía. Los servicios en la nube ofrecen precios claros, opciones de rendimiento claras y resultados sencillos.

Otro ejemplo es la creación de una bóveda para datos cifrados. No quiero escribir, depurar o mantener un código de seguridad, porque tan pronto como escribo el código de seguridad, me estoy abriendo a problemas de seguridad. Si necesito cifrado, realmente no quiero tener mi propio código cifrando cosas y luego mi propio código descifrando cosas; Quiero tener un servicio para ello. Esto es lo que ofrece Oracle Cloud Infrastructure Vault . Simplemente solicito que los datos se cifren enviando los datos a través de la red a otro servicio que le pedirá a Oracle Cloud Infrastructure que los descifre. Puedo confiar en que el algoritmo será fuerte y que solo necesito configurar mi API hacia la nube.

Considere el almacenamiento de objetos: si es necesario almacenar grandes cantidades de datos en un archivo de un terabyte, esto es un problema. Cualquiera que lo haya probado en la historia ha fallado y los desarrolladores terminan teniendo que reconstruir el archivo de datos porque descubren que hay problemas con el espacio temporal, el espacio en disco, las copias de seguridad y más. Pero cuando utiliza un servicio en la nube, el almacenamiento se convierte en un problema de otra persona, lo que significa que el problema desaparece. La nube es confiable y es mucho más probable que encuentre y solucione todos los problemas encontrados con las herramientas y funcione como se esperaba. Esta misma capacidad para resolver problemas se aplica a cualquier servicio de la lista de servicios en la nube disponibles.

Siempre tengo gente que me pregunta: “¿Cómo se soluciona el equilibrio de carga?” Yo diría: “No lo hago. Esa es la responsabilidad de la nube “. Hay equilibradores de carga en la nube que puede configurar sin necesidad de realizar ningún trabajo. Oracle WebLogic tiene una implementación completa de equilibrio de carga; en realidad está en C ++, porque es parte del complemento de Apache que proporciona esa capacidad. Ese es un ejemplo de cómo los proveedores de servicios simplifican los marcos y las implementaciones de aplicaciones y las delegan a las infraestructuras en la nube.

Cuando se trata de cuentas de usuario seguras, existe una implementación completa de LDAP (Protocolo ligero de acceso a directorios) . Todas las especificaciones de seguridad que desea admitir en un proyecto están ahí y no es necesario implementarlas manualmente. La nube proporciona un servicio de seguridad al que puede redirigir y se encarga de todos los nombres de usuario, contraseñas, recuperación de contraseñas, autenticación de dos factores, etc. Entonces, aproximadamente el 80% del código que antes tenía que escribir ahora se ha resuelto. Por eso, la nube es el camino a seguir. Es como un servidor de aplicaciones que pasa de ser algo que necesita implementar usted mismo a algo disponible con todas las funciones listas.

Tuve una experiencia en mi trabajo anterior en la que la nube fue útil durante las pruebas. Trabajaba para una empresa que ejecutaba una aplicación en 10 países y cada país tenía diferentes requisitos para la aplicación. Antes de pasar a la nube, probar una versión requería que ejecutáramos 10 entornos completos diferentes, lo que significaba que necesitábamos crear las máquinas virtuales, iniciarlas y ejecutarlas. Teníamos cientos de servidores para encargarse de esto, y nunca supimos qué estaba en uso y qué no.

Cuando las pruebas de aplicaciones se trasladaron a la nube, toda la infraestructura funcionó de tal manera que usted podría activar sus máquinas virtuales, ejecutar las pruebas y volver a desactivarlas. Esto nos ayudó a darnos cuenta de cuánto cuestan las pruebas. Antes, la utilización de los recursos era mala porque era difícil hacer un seguimiento de todos los servidores y quién los usaba. La nube hizo que la responsabilidad fuera obvia, pero también la facilidad de uso fue muy diferente. Muchas de las herramientas y procesos que normalmente debían diseñarse manualmente estaban listos para usar. Esta fue una gran ventaja para las pruebas. Aunque la implementación se realizó internamente en un centro de datos local, las pruebas se trasladaron por completo a la nube.

Kornilov: Ese es un buen punto. Cuando usamos la nube, no existen limitaciones sobre la cantidad de recursos que podemos usar. En los centros de datos, está limitado en la cantidad de servidores, mientras que en la nube, tendrá acceso a más recursos con solo hacer clic en un botón. Esto es ideal para cargas de trabajo bajo demanda. Como explicó Langer, para las pruebas, la nube le permite pagar por los servidores de prueba y otros recursos durante los meses que usa los servidores, y el resto del año puede desactivar la tarifa.

Fuente: https://n9.cl/7eckz