Cómo diseñar aplicaciones para la computación en la nube donde pueden estar involucradas múltiples nubes

StackOverflow https://stackoverflow.com/questions/1619650

  •  06-07-2019
  •  | 
  •  

Pregunta

Acabo de terminar de ver esta pregunta: https://stackoverflow.com / questions / 753122 / which-cloud-computing-platform-should-i-Choose

Pero, no estoy seguro de lo que debo hacer al diseñar una aplicación para ingenieros de seguridad, por lo que es importante un alto tiempo de actividad.

Entonces, si mi aplicación está escrita en ASP.NET, utilizando SQL Server, parece que mi mejor opción es diseñar para Azure, pero ¿sería la solución de Amazon una buena opción? ¿Cómo decidiría si debería tener todo en el mismo sistema o tener los datos en la nube de Amazon y ASP.NET en Azure?

Tengo otra aplicación en la que estoy trabajando que trata con información de servicios públicos, para agua y electricidad, por lo que hay información de uso y facturación, y se escribió en PHP con SQL Server. ¿Sería esta posiblemente una buena aplicación para la computación en la nube? Parecería que la solución de Amazon sería la mejor solución para PHP, así que mi única opción, pero, ¿cómo decides qué partes de sus ofertas usar?

Básicamente mi pregunta está en la arquitectura de la aplicación. Diseñar para hospedar es fácil, pero la computación en la nube agrega nuevos desafíos.

Mi principal preocupación es únicamente el diseño de mi aplicación.

Si decido el idioma, ¿eso me encierra en una solución en la nube?

¿Cuándo querría que la base de datos esté en una nube diferente a la aplicación?

Si quiero usar el marco LIFT (escrito en Scala), ¿alguno de ellos me permitirá instalar lo que necesito?

¿Fue útil?

Solución

Ejecutamos un SaaS de servicios financieros bastante grande en Amazon AWS.

Hay dos problemas generales en juego aquí: Arquitectura de aplicaciones y Servicios de plataforma en la nube.

Descubrí que nuestra arquitectura de aplicaciones es esencialmente la misma que lo sería si estuviéramos implementando en máquinas virtuales internas o hardware real. Creamos una aplicación n-Tier bastante estándar utilizando principalmente herramientas de código abierto (Java, Spring, Hibernate, MySQL, Terracotta, ...). Existen algunas consideraciones cuando se trata de una base de datos de alta disponibilidad / tolerante a errores (ya que las opciones basadas en hardware no están disponibles), pero, por lo demás, no estamos realmente " target " una implementación en la nube particular.

Los servicios de la plataforma en la nube es otra cuestión completamente. Con eso me refiero a cosas como:

  • Iniciar / detener / monitorear / administrar / escalar instancias
  • Disponibilidad / Redundancia (por ejemplo, Amazon tiene zonas de disponibilidad)
  • Implementar / Inicializar / Configurar instancias
  • Copia de seguridad / recuperación de archivos
  • Seguridad (por ejemplo, control de firewall)

Hay poca o ninguna estandarización en esa área, aunque es un área de interés activo.

En términos generales, probablemente querrá diseñar su aplicación de una manera neutral a la nube, pero creará procedimientos operativos que son muy específicos.

Con respecto a la división de la presentación y el DB entre diferentes proveedores, no sugeriría eso porque:

  • Si alguno de los proveedores deja de funcionar, usted está caído
  • La transferencia de datos a través de Internet es más lenta, más costosa y menos segura que la transferencia de datos dentro de un proveedor en la nube.

Un mejor uso de múltiples proveedores en la nube sería implementar copias completas de su aplicación a dos o más, equilibrando la carga entre los dos o posiblemente teniendo una en espera activa en caso de que el primario se caiga. Sin embargo, si captura datos transaccionales, necesitará una estrategia para conciliar los datos capturados en el entorno de espera. Eso puede o no ser viable, dependiendo de la naturaleza de su aplicación.

En general, puede instalar el software que desee en sus servidores virtuales, aunque no tengo experiencia específica con Azure. Si utiliza AWS o servicios similares, la instalación de LIFT no será un problema.

Otros consejos

La decisión sobre un idioma no lo bloquea en un proveedor; Sin embargo, el diseño para ejecutar en Windows lo hace. La virtualización de Windows es un mercado mucho más limitado que la virtualización de Linux; Xen, la tecnología que utilizan Linode, Slicehost, etc., no virtualizará Windows más de una vez.

Con sus aplicaciones dirigidas a Windows, sus opciones son decididamente más delgadas. En mi mercado, sé que Amazon satisface las necesidades de Windows (al igual que Azure, obviamente). Sin embargo, las soluciones más rentables como la nuestra y la de Slicehost no lo harán, Windows le costará una prima.

En cuanto a la segregación de la nube: la razón principal para segmentar su aplicación en múltiples " nubes " Es proporcionar la fiabilidad de la aplicación. Las nubes bajan (es cierto, rara vez) y tener todos sus huevos en una canasta le costará para una aplicación que requiere alta disponibilidad. Sin embargo, con su base de datos en una nube separada de su aplicación, sufrirá la latencia para hacer SQL a través de Internet (y además requiere cierta arquitectura para proteger ese tráfico, como un túnel SSH o el cifrado a nivel de protocolo que el Servidor SQL podría ofrecer). [No estoy muy seguro, soy un chico de PostgreSQL]).

No caigas en la trampa de pensar que el alojamiento en la nube es muy diferente del alojamiento. De hecho, son casi lo mismo. En mi empresa, opinamos que el alojamiento en la nube es solo una nueva forma de pensar acerca del mismo alojamiento. No es nada mágico.

Para diseñar para alojamiento en la nube, su aplicación solo necesita tener capacidades de fragmentación y ser consciente de que los nodos se pueden agregar o eliminar en cualquier momento. Eso no es terriblemente difícil de explicar dependiendo de cómo lo diseñes; por lo general, solo una aplicación de equilibrio de carga es consciente incluso de la semántica específica de la nube.

Es el comienzo de " Cloud Computing " y al igual que con cualquier surgimiento, los participantes están colocando sus " trampas de mouse " con la esperanza de atrapar a tantos como sea posible. Tomará algún tiempo antes de que los jugadores definan un terreno común (es decir, estándares de alguna forma u otra) y hasta entonces, sus armas de diferenciación " nos obligará a elegir bandos.

Supongo que esto también es " orientado a los negocios " y se rechazará ... pero bueno, pienso en los aspectos comerciales antes de la tecnología / idioma. Al final del día, todo se reduce a ganar dinero.

Si alguien piensa que no está bloqueado a un proveedor de Cloud Computing (los tipos SaaS / PaaS mientras que los proveedores del tipo IaaS están más adelantados) al comienzo del juego, bueno, estás listo para algunos grandes sorpresas ¡Dispara!

DESCARGO DE RESPONSABILIDAD: no estoy representando a un proveedor de Cloud Computing de ningún tipo (SaaS, PaaS, IaaS). ¿Les importaría a las personas que me rechazaron identificar su lealtad?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top