¿Qué lenguaje de programación podría convertirse en el lenguaje de “Cloud Computing”?

Me gusta esta pregunta, y creo que el resto de las respuestas no reconocen cuán verdaderamente transformadora es la computación en la nube.

El aspecto fundamentalmente innovador de la computación en la nube es que los servidores son software (http://www.readwriteweb.com/clou…). Es decir: hemos pasado simplemente escribiendo software que se ejecuta en sistemas operativos en hardware; ahora podemos escribir programas que controlen y orquenen hardware virtual.

Esto significa que respuestas como “NodeJS” y “Scala” pierden el punto. No, el tipo de lenguaje de programación que podría convertirse en el lenguaje de “computación en la nube” será algo así como Chef (http://en.wikipedia.org/wiki/Che… o Amazon SWF (http://aws.amazon.com/ swf /) … o una de las diversas formas en que implementa MapReduce (http://en.wikipedia.org/wiki/Map…).

Los “libros de cocina” y las “recetas” (para usar la terminología del Chef) todavía están en los primeros días. Esperaría un desarrollo significativamente mayor en la construcción de lenguajes y entornos que están escritos específicamente para la computación en la nube y el control de flujos en múltiples servidores.

No existe una relación directa entre las características de los lenguajes de programación y los conceptos involucrados en la definición actual de computación en la nube. Las plataformas de computación en la nube están construidas en muchos lenguajes desde C hasta Python, Java, C ++, Ruby.

Cada aspecto de la computación en la nube tiene lenguajes que son adecuados para la tarea. C ++ es mejor para implementar capas de administración en la nube de bajo nivel que asignan recursos de procesador y virtualizan. Muchos lenguajes web convencionales, desde php hasta Python, Ruby y Scala, son útiles en marcos como Apache o WSGI. NodeJS (que es un paradigma de marco, no un lenguaje), junto con Twisted o Tornado, son útiles para crear servicios web y backends que son eficientes y manejan un gran número de conexiones.

Nada de lo que acabo de decir es específico de la computación en la nube. Todos esos problemas son relevantes para cualquiera que construya cualquier plataforma basada en Internet, incluso las no virtualizadas.

Sin embargo, hay una dimensión del lenguaje que afecta la idoneidad para la computación en la nube de una manera más importante y ese es el entorno de desarrollo que a menudo se casa con el lenguaje . Se han creado muchos idiomas para optimizar su eficiencia en la creación de aplicaciones de escritorio. Visual Studio es probablemente el mejor ejemplo de un IDE sofisticado que comenzó como un sistema de creación de aplicaciones de escritorio, pero XCode de Apple y Eclipse de código abierto son los mismos tipos de entornos.

Algunas de las características de las plataformas en la nube hacen que estos IDE sean ineficaces:

  • Las plataformas en la nube a menudo contienen una rica combinación de diferentes idiomas, y muchos IDE prefieren un conjunto de idiomas sobre otro.
  • Las plataformas en la nube a menudo contienen una mezcla de diferentes arquitecturas (ejecutamos una aplicación en la nube que utiliza servidores Windows y servidores Linux en varios roles). No hay IDE que operen de manera transparente e idéntica en todas las plataformas, aunque Eclipse se acerca más.
  • Los IDE tienen una capacidad limitada para trabajar en código de forma remota y favorecer el desarrollo local debido a su herencia de escritorio.
  • La depuración remota a menudo debe realizarse en la línea de comandos y, a menos que un programador conozca bien el entorno de la línea de comandos, se ve obstaculizado por la falta de su IDE favorito en los servidores remotos.
  • La nube lo recompensa por crear grandes grupos de servidores especializados en lugar de tener una pequeña cantidad de servidores más grandes. Por esta razón, las aplicaciones a menudo se distribuyen en media docena (o más) de servidores virtuales, y a veces cada servidor virtual tiene su propio modelo arquitectónico. Ningún IDE aborda de manera transparente este tipo de aplicación de “enjambre de servidores”, y a medida que los desarrolladores aprenden más sobre la versatilidad de la implementación en la nube, esta “arquitectura de enjambre” se está volviendo cada vez más común.

Una vez más, muchos de estos problemas han sido ciertos durante años, pero la nube los ha acelerado, especialmente cuando se trata de arquitecturas mixtas y despliegues más grandes.

Por estas razones, la “idoneidad de varios idiomas para la nube” a menudo está sesgada. Ruby o Python pueden parecer más adecuados que C # o Java / JDE porque los dos últimos están tan fuertemente vinculados a entornos de desarrollo rígidos que las aplicaciones en la nube verdaderamente complejas y diversas se vuelven desalentadoras. Por el contrario, Python, Ruby, Scala e incluso php y perl pueden parecer superiores porque pueden controlarse fácilmente a través de herramientas de línea de comandos y sentirse “magras y malas” en comparación con sus contrapartes más listas para la empresa.

Por supuesto, esta distinción cambiará con el tiempo. Algún día, alguien creará un entorno de desarrollo de estilo IDE completamente distribuido donde la localidad, la arquitectura y los idiomas se pueden mezclar de forma transparente y parece que no hay límites entre los servidores. Pero ese día aún está lejos.

En la actualidad, aquellos que pueden “ensuciarse las manos” y trabajar eficazmente utilizando herramientas de línea de comandos rápidas y eficientes tienen una ventaja en la nube, y esos estilos de trabajo se combinan mejor con ciertas ofertas de idiomas que con otros.

Las aplicaciones que son efectivas en el uso de Infraestructura en la Nube se basan en Microservicios y SOA .

Para el Almacén persistente (MySQL, Personalizado), En el Almacén de memoria (Redis, Personalizado), un LoadBalancer y REST Endpoint juntos hacen un buen ejemplo de lo que se refiere a “Cloud Computing”. Los idiomas utilizados aquí

  • SQL
  • Config (YAML, XML)
  • JS, PHP, Ruby, GO

También podemos clasificar los idiomas utilizados en una aplicación en la nube de la siguiente manera

  • Configuración de Infraestructura – Chef, Puppet
  • Configuración de VM individual o EC2 / AMI: Docker, Vagrant
  • Microservicios como manejo de sesión, fragmentación, punto final REST, página web: JS, PHP, etc.
  • Configuración de microservicios: configuración de Nginx, variables de entorno, scripts de Shell
  • Lenguajes, protocolos utilizados por microservicios: poco frecuentes, pero SQL es un ejemplo

Desde la perspectiva de Microservices, cada uno se puede codificar en cualquier idioma, pero cada capa se codifica en un idioma separado en interés de cuál es el mejor idioma.

Pero digamos que queremos que el lenguaje domine todos los microservicios, preferiría ir. Porque está construido para aplicaciones distribuidas. Y si Go tiene las capacidades de Chef y configurar máquinas como Docker, esta sería una gran opción para los backends típicos.

More Interesting

¿Puede Amazon Cloud Drive funcionar como un reemplazo viable para CrashPlan PRO como un servicio de respaldo / recuperación de datos?

¿Cuál es la diferencia entre el almacenamiento de archivos, el almacenamiento en bloque y el almacenamiento de objetos? ¿Cuál es la arquitectura de los sistemas de almacenamiento en cada caso? ¿Cómo se recuperan los datos en cada caso?

Con AWS bajando los precios, ¿vale la pena pagar una prima a otros proveedores (es decir, Rackspace) por los servicios en la nube?

¿Cuáles son las ventajas y desventajas de las aplicaciones basadas en la nube?

¿Cuál podría ser el problema cuando el tablero dice que no se puede establecer una conexión de punto final a keystone en el software de nube OpenStack?

Si está tratando de alojar una plataforma de video blogging, ¿cuál es mejor, hosting dedicado o hosting en la nube?

¿Cuál es la diferencia entre la computación en la nube y la arquitectura cliente / servidor?

¿Qué define un servicio en la nube?

¿Pueden los centros de datos, la nube e Internet sobrevivir a una tormenta solar del tamaño de un evento de Carrington?

¿Cuál es la ventaja de AWS Chime? ¿Puede vencer a Skype?

¿En qué se diferencia ETL (Extract Load Transform) de las tecnologías de nube (Load, Extract, Transform) como Hadoop?

¿Cuál es la mejor introducción a Microsoft azure?

¿Qué tan efectivas son las tablas de Microsoft Azure para aplicaciones DB?

¿Podemos alojar un servidor Confluence en Amazon Cloud?

¿Cuál es la diferencia entre iCloud y iCloud Drive?