Arquitectura de aplicaciones: menos sistemas grandes frente a sistemas más pequeños

8

re: Arquitectura de aplicaciones , es decir, " la ciencia y el arte de garantizar que el conjunto de aplicaciones que utiliza una organización para crear la aplicación compuesta sea escalable, confiable, disponible y manejable " .

Al mirar una variedad de aplicaciones en una organización, puedo ver varias razones para fusionar aplicaciones, pero a veces también buenas razones para mantenerlas separadas.

En general , ¿cuáles son los pros y los contras de tener menos sistemas grandes versus sistemas más pequeños (teniendo en cuenta que muchos de los sistemas intercambiarán información).

Estoy pensando cosas como: menos aplicaciones más grandes significa menos plomería entre aplicaciones, pero más aplicaciones más pequeñas significa más flexibilidad para los departamentos individuales.

¿Existe alguna literatura sobre esto, o alguien tiene una lista de pros y contras que han descubierto?

editar: en mi escenario, muchas de las aplicaciones pueden ser personalizables en lugar de ser desarrolladas internamente, pero siéntase libre de considerar escenarios más generales.

codeulike
fuente
1
Tenga en cuenta que las aplicaciones más grandes no significa que no haya plomería, solo significa que la plomería ocurrirá dentro de la aplicación.
deadalnix
@deadalnix: de acuerdo. Estoy asumiendo que vincular datos dentro de una aplicación es menos esfuerzo que vincular datos entre aplicaciones.
codeulike

Respuestas:

3

Justo al lado de la parte superior de mi cabeza

Sistemas más pequeños

  • Pro : amplíe el hardware básico o entornos virtualizados más baratos.
  • Pro : puede implementar escalado bajo demanda en una nube.
  • Pro : menos dependencias dentro del sistema, es decir. 1 servicio por servidor.
  • Pro - HA / DR (alta disponibilidad / recuperación ante desastres) suele ser más fácil de implementar
  • Con - Tiene que ser escalable horizontalmente
  • Con : cuanto más sistemas, más interconexiones, la gestión más complicada es

Sistemas más grandes

  • Pro : menos interconexiones, lo que generalmente significa que es menos complicado
  • Pro : responde más rápido al uso de alto pico si está dentro de la tolerancia.
  • Pro : menos recursos para administrar
  • Pro : uso de recursos más eficiente (suponiendo un uso relativamente constante)
  • Con : dependencias más complicadas dentro del sistema, es decir. N servicios por servidor
  • Con - HA / DR es típicamente más difícil / más complicado
dietbuddha
fuente
Gracias, eso es genial. ¿Cómo ve que la gestión de cambios encaja: quizás los cambios locales son más fáciles con sistemas más pequeños, los cambios en todo el dominio son más fáciles con sistemas más grandes?
codeulike
La gestión de cambios puede ser manual en menos sistemas, pero puede salirse rápidamente de control en muchos sistemas y debe automatizarse.
dietbuddha
1

En un sistema más grande, es mucho más fácil:

  • Compartir características y código. Reinventará la rueda un poco menos. Por ejemplo, si tiene diez aplicaciones que deben tener acceso a la base de datos, debe especificar la cadena de conexión en todas ellas , es decir, diez veces. O tiene que crear una biblioteca separada y hacer referencia a ella diez veces más.

  • Consolide los flujos de trabajo , incluido el proceso de implementación.

  • Administre el sistema: menos aplicaciones para administrar es generalmente más fácil .

  • Unifica la experiencia del usuario . Cuando un empleado tiene que lidiar con diez aplicaciones diferentes, puede perderse fácilmente: ¿qué aplicación ejecutar para hacer A? ¿En qué aplicación está disponible la opción B? Pero no sobreunifique . Nadie apreciará Word, PowerPoint, Outlook, Publisher, Visio, Project y Groove como una sola aplicación monolítica.

En un grupo de sistemas pequeños, por otro lado, encontrarás que:

  • Puede abandonar un sistema completo si ya no lo necesita. O comience desde cero si la base de código se vuelve inutilizable con el tiempo. Por supuesto, esto solo es cierto si otros sistemas no dependen de este, o si la interfaz es lo suficientemente ligera como para ser reescrita fácilmente en una nueva versión.

  • Puede formar un equipo de desarrolladores nuevos y esperar de ellos que comprendan la base de código existente en menos tiempo . Si es parte de un proyecto grande, es probable que requieran más tiempo, a menos que la base de código grande en general se realice de manera extremadamente profesional y se refactorice muy bien (no he visto tales bases de código en mi vida).

  • Los administradores del sistema podrán reubicar las aplicaciones más fácilmente . El sistema más grande, por otro lado, se escala bien en múltiples servidores o no.

  • Los desarrolladores pueden migrar la base de código a nuevos estándares más fácilmente . La migración de una base de código grande siempre asusta. En cambio, cuando tiene que lidiar con una pequeña base de código, luego otra, luego otra, etc., se vuelve menos aterrador.

Dicho esto, tales comparaciones funcionan solo en casos generales, pero su decisión no debe tomarse de los grupos, sino de los activos de su empresa. ¿Cómo se organiza? ¿Hay muchos equipos de desarrolladores pequeños o algunos grandes? ¿Existen pautas estrictas sobre el estilo de codificación y cosas similares?

También depende de la aplicación en sí. Por ejemplo, sería absurdo enviar todas las aplicaciones de Microsoft Office como una sola aplicación. Pero también perjudicaría la productividad, por ejemplo, separar Adobe Photoshop en una aplicación para dibujar y otra para retocar fotos. En mi opinión, la decisión de unificar o separar un producto debe ser una decisión comercial, no puramente técnica.

Finalmente, también quiero responder al segundo comentario de la pregunta original:

Estoy asumiendo que vincular datos dentro de una aplicación es menos esfuerzo que vincular datos entre aplicaciones

No siempre es verdad. Si se trata, por ejemplo, con .NET, no es inusual enviar una sola aplicación donde se intercambian diferentes componentes a través de WCF. En este caso, esto es comparable a un conjunto de aplicaciones separadas que se comunican a través de WCF.

Por supuesto, cuando tiene que lidiar con múltiples aplicaciones, debe establecer alguna forma para que se comuniquen, mientras que tener una sola aplicación monolítica no lo obliga a hacerlo. ¿Pero realmente sería capaz de escribir una gran aplicación monolítica?

Arseni Mourzenko
fuente
0

Lee esto. Es la filosofía de "muchos programas pequeños" de Unix. Linux lo usa, también. La inmensa resistencia de esta filosofía (desde fines de la década de 1960 hasta hoy) sugiere que es lo correcto.

http://en.wikipedia.org/wiki/Unix_philosophy#Eric_Raymond

http://en.wikipedia.org/wiki/Unix_philosophy#Mike_Gancarz:_The_UNIX_Philosophy

http://159.93.17.14/usoft/WWW/LJ/Articles/unixtenets.html

http://www.linuxjournal.com/article/2877

S.Lott
fuente
Bien, eso funciona para un conjunto de componentes dentro de un sistema operativo, pero ¿funciona para un conjunto de aplicaciones de base de datos dentro de una organización? Ese es un escenario bastante diferente.
codeulike
No es un escenario diferente en absoluto. ¿Puedes proporcionar algunas diferencias específicas?
S.Lott
@codeulike: ¿fue esta tu pregunta? "¿Hay alguna literatura sobre esto?" Si es así, aquí hay literatura. No recibo tu comentario en el contexto de tu pregunta.
S.Lott