Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Comparando estilos: ¿Cómo elijo?

19/24
Recursos

Aportes 49

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

RESUMEN:

Comparando estilos: ¿Cómo elijo?
Estilos monolíticos.

Estilos donde se despliegan un artefacto de software

  1. **Eficiencia: **Al tener un solo artefacto se puede ser optimizado de manera más personalizada. // En estilos distribuido, es un problema debido a los canales de comunicación, red, intenet que comunican los componentes.

  2. Curva de aprendizaje: El monolitico contiene toda la información allí. Un monolitico bien diseñado permite tener todas las piezas en el mismo lugar, por lo que se facilita la lectura y entendimiento. // El el caso distribuido hay que entender cada componente.Nota: Un componente interno en un distribuido puede ser visto como un monolítico. Es la base de los microservicios.

  3. **Capacidad de prueba: **Son más fáciles de probar una funcionalidad de principio a fin. // En distribuidos necesito tener todos lso componentes disponibles, incluyendo los BUS de eventos.

  4. Capacidad de modificación: Un cambio que se despliega todo junto garantiza menos estaddos intermedios. Las versiones nunca coexisten // En distribuidos diferentes compoentes tienen diferentes versiones, por lo que requiere de compatibilidad entre versiones. Una modificación en un distribuido es más difícile hacer llegar.

Estilos distribuidos.

Componentes que luego de ser desplegados se conectan de alguna forma.

  1. Modularidad: Es separar componentes que prestan servicios

  2. **Disponibilidad:**Es mayor que en monolítica, podemos tener multiples copias de un componente, que esté disponible significa que sea más barato, tener una copia entera de un monolitco es mucho más caro que copiar el componente distribuido que necesitamos que escale. Microservicios aprovecha recursos.

  3. Uso de recursos: Es m{as f{acil gestionar los recursos del sistema

  4. Adaptabilidad: Al ser distribuido se puede detewctar mucho más fácil qué componente necesita ser adaptado del sistema y es más fácile realizar esa actualización // en monolítos puede ser mucho más complicado, como lanzar una app en un sistema operativo diferente.

¿Como elijo qué necesito?

Tener en cuenta los requisitos, los objetivos de negocio / arquitectura de software, atributos de calida/ Estrategias de arquitectura, Escenarios/ Desiciones arquitectonicas. Con el fin de analizar que sacrificios, riesgos y no riesgos cuento y como impacta en mi proyecto

Apuntes:

Comparando estilos: ¿cómo elijo?

Estilos monolíticos
• Estilos de arquitectura dónde vamos a desplegar un solo artefacto de software.
• Es mucho más fácil darle prioridad a la eficiencia de ejecución.
• Son más fáciles de probar.
• La curva de aprendizaje suele ser más suave.
• La capacidad de modificación es más fácil. Si los componentes están juntos va a ser más fácil asegurar que no habrá estados intermedios.
• El monolito tiene todos sus módulos internamente por lo que podemos modularizar pero es más fácil romper esa modulación y de esa forma no garantizar la separación.
• A medida que tenemos que escalar el tener otra copia del monolito va a ser más caro.
• Todo nuestro monolito tiene que ser adaptado a un diferente contexto.
Estilos distribuidos
• Cada despliegue es independiente y luego se ve cómo se interconectan.
• Para poder hacer una prueba de principio a fin necesitamos tener todos los eventos disponibles.
• Para entender la aplicación en su conjunto necesitamos entender cada uno de sus componentes.
• Tenemos el problema de que al ser desplegabas independientemente van a poder ser versionadas independientemente y tendremos que mantener compatibilidad para atrás quizás más de una versión.
• Es natural modularizar en un estilo distribuido porque necesitamos definir cuáles son los componentes que vamos a desplegar independientemente.
• La disponibilidad es mayor. Podemos tener múltiples copias de cada componente y a su vez cada componente va a ser más pequeño lo que hará su disposición más barato.
• La adaptabilidad para desplegarse en contextos diferentes es más simple.

En resumen la arquitectura se define por el tipo de problema y los objetivos del negocio, es decir que el estilo esta directamente relacionado con el ecosistema existente y o la forma en la que se aborda la solución del problema

¿Cómo elijo?
Para ello los separaremos en dos familias

Estilo Monolítico.- Estilo donde se despliega un sólo artefacto de software. Es eficiente ya que un sólo sistema bien detallado puede resolver el problema. Son más fáciles de probar. Tiene curva de aprendizaje suave ya que toda la información está ahí. Es fácil de modificar ya que es uno solo.

Estilo Distribuido.- Cada despliegue es independiente, al final se unen para obtener un resultado. Su eficiencia depende del sistema de comunicación entre las dos aplicaciones. Para hacer una prueba debes tener tus componentes disponibles. Su curva de aprendizaje es grande y necesitas entender todos sus componentes. Este no es tan fácil de modificar, es mejor adaptarlo para que cada componente tenga cierta estabilidad. Es fácil de modular. Más disponibilidad de sus componentes, ya que son más pequeños y usan menos recursos.

Sistema elegido: Lapasoft --> Sistema de gestión de notas de alumnos de una escuela secundaria.

Atributos de calidad percibidos:

  • Disponibilidad de realización de consultas vía web.
  • Actualización rápida y constante de las notas de los alumnos.
  • Funciones variadas: ver inasistencias, mensajes personalizados de las autoridades del instituto, etc.

¿Estas de Acuerdo con las decisiones tomadas?
Sí, estoy de acuerdo, todo ayuda a pasar de un sistema manual a uno automatizado, ganando así eficiencia.

Enfasis en el atributo de calidad de “Mensajes personalizados de las autoridades del instituto”: Esta funcionalidad permite a los profesores, preceptores y directores hacer llegar un mensaje a los padres del alumno inscripto sin necesidad de mandar una nota en papel, los cuales podrían (en alguna futura migración a una app móvil) recibir una notificación en sus telefonos al instante en el que el texto haya sido enviado. ¿Qué se vería favorecido? Se favorece a la capacidad de llegar en una pieza un mensaje a sus receptores, ya que una nota manual podría ser modificada o suprimida por un alumno. ¿Qué se vería afectado negativamente? Un contra sería la posibilidad de que por algún error en el software la notificación nunca llegue, y por lo tanto el mensaje pase desapercibido.

Muy prometedor el Curso Profesional de Arquitectura de Software, https://platzi.com/clases/pro-arquitectura/

ARQUITECTURA MONOLÍTICA
Las aplicaciones monolíticas o sistemas monolíticos, tienen como característica el uso de una base de código única para sus servicios o funcionalidades.

Aunque son fáciles de desarrollar, una aplicación que aglutina toda su funcionalidad no es la mejor opción, en el caso de que se tengan aspiraciones de crecimiento complejas, más usuarios, más desarrolladores…

By: https://bit.ly/2yTvof0

monolitico: un solo artefacto
distribuido: varios interconectados

**Monolítico: ** se despliega un solo artefacto de software se le da prioridad a la eficiencia y ejecución, tienen curva de aprendizaje mas suave, fácil de probar y modificable. Un componente de un estilo distribuido se puede ver como uno monolítico de forma aislada. Se despliegan todos los componentes juntos.

Distribuido: cada despliegue es independiente, tiene mas disponibilidad, modularidad, mejor uso de recursos y adaptabilidad.

Comparar Estilos
Estilos Monolíticos: estilos de arquitectura donde solo se despliega un artefacto de software.

  1. Estos estilos son mas fácil de probar y medir
  2. Su curva de aprendizaje suele ser mas suave.
  3. Capacidad de modificación es mas fácil de mantener.

Estilos Distribuidos: Cada despliegue es independiente y luego se Conectan.

  1. La modularidad y la disponibilidad son mejores en estos estilos.
  2. La adaptabilidad es mejor ya que puedes adaptar un componente a escoger toda la arquitectura.

¿Como elijo un estilo?

  • Para estas altura ya deberíamos de entender de requerimientos, los funcionales y no funcionales, cuales son las restricciones y riesgos.
  • Esta estructura debe construirse (Conectarse todo lo anterior dicho) para llegar así a atributos de calidad y escenarios de arquitectura .

Esa estructura nos ayudaran a analizar que estilo podemos elegir, permitiéndonos iterar, ya sabiendo que sacrificios realizar (Trade-offs) para cada unos de esos requerimientos. y saber que riesgos eran en verdad riesgos o no lo eran.

Hola, compañeros.

Les dejo el enlace a un mapa mental que hice con todo lo visto durante el curso. ¡Espero les sea de ayuda!

https://miro.com/app/board/o9J_kk-Yns8=/

Aquí les comparto este enlace. Arquitectura de monolitico. Considero que es explica detalladamente este tipo de arquitectura.

Una “arquitectura de microservicios” es un enfoque para desarrollar una aplicación software como una serie de pequeños servicios, cada uno ejecutándose de forma autónoma y comunicándose entre sí, por ejemplo, a través de peticiones HTTP a sus API.

las ventajas y desventajas de los estilos se deben evaluar con todo lo visto anteriormente, riesgos, restricciones, requerimientos etc. para decidir sobre un estilo u otro.

Estilos monolíticos:

  • Es mucho más facil darle prioridad a la eficiencia de ejecución. Al tener un solo artefacto de SW puede ser optimizado y muy bien detallado en como se comunica internamente, usando memoria interna o llamados a procedimientos.
    -Son mucho mas faciles de probar y se pueden hacer pruebas de inicio a fin.
    -La curva de aprendizaje es mucho más sencilla ya que se tienen todos los componentes en un mismo elemento.
    -El mantenimiento es mucho más sencillo ya que su despliegue es total y no se tienen versiones intermedias o finales, sino que solo existe una versión.

Estilos distribuidos:
-La disponibilidad de un sistema distribuido es mucho mayor ya que al estar dividido en componentes se puede tener acceso individual a cada uno de ellos.
-La adaptabilidad es mucho más simple ya que los componentes son desplegados independientemente y pueden ser mejorados a las necesidades del proyecto.
-La comunicacación debe ir por red o usando algun protocolo de comunicacion.
-Las pruebas unitarias no son tan sencillas ya que se debe contar con todos los componentes finalizados.




ESTILO MONOLÍTICO

  • En este etilo se le da prioridad a la eficiencia de ejecución
  • Son más fáciles de probar al probar una funcionalidad de principio a fin
  • Curva de aprendizaje es más suave porque todo está junto en el mismo lugar
  • La capacidad de modificación es más fácil también

ESTILO DISTRIBUIDO

  • Modularidad, permite desplegar independientemente los componente que vamos a desplegar
  • Disponibilidad: Podemos tener múltiples copias del servicio que se hará más pequeño hacíendo que sea más barato
  • Adaptabilidad, es más fácil en estilo distribuido dónde en el caso del monolítico tiene que adaptar todo el sistema

¿Cómo elegir que estilo necesito para mi aplicación ?

Basándonos en los requerimientos funcionales, no funcionales, restricciones, riesgos y conectarlos para llegar a los atributos de calidad de tal forma ver si resolvemos nuestro problema para que hagamos un análisis y hacer un loop para conocer los sacrificio que vamos a hacer y identificar que era o no era un riesgo

Los estilos monolíticos son más fáciles de desplegar

El estilo arquitectónico monolítico consiste en crear una aplicación autosuficiente que contenga absolutamente toda la funcionalidad necesaria para realizar la tarea para la cual fue diseñada, sin contar con dependencias externas que complementen su funcionalidad.

Una arquitectura distribuida permite que sea utilizada por todos los usuarios que interactúan en la red. Modularidad. Esta característica permite que los sistemas distribuidos sean escalables, teniendo capacidad para crecer de forma simple y eficiente.

Excelente clase, muy claro.

19. Mis apuntes sobte: "Comparando estilos: ¿cómo elijo?"
Existen dos estilos, veamos sus ventajas:

19.1. Estilos monolíticos: Eficiencia, curva de aprendizaje, capacidad de prueba, capacidad
de modificación.

19.2. Estilos distribuidos: Modularidad, disponibilidad, uso de recursos, adaptabilidad.

Estilos Monolíticos:
|
Consiste en crear una aplicación autosuficiente que contenga absolutamente toda la funcionalidad necesaria para realizar la tarea para la cual fue diseñada.
Es más fácil darle prioridad a la eficiencia de ejecución. Al tener un solo artefacto de software, este puede ser optimizado y se puede ser muy detallista en las comunicaciones internas ya que sus componentes trabajan juntos, compartiendo los mismos recursos y memoria.
|
|
Ventajas:

1 - Eficiencia. El entorno en el que se construyen este tipo de soluciones esta muy bien definido y ofrece poco margen a fallos.
2 - Son aplicaciones autosuficientes.
3 - Seguridad. cada instalación administra su propia base de datos.
4 - Performance. Debido que todo el procesamiento lo realizan localmente y no requieren consumir procesos distribuidos para completar una tarea.
5 - Fácil de probar. Es posible realizar todas las pruebas necesarias sin depender de nada más.
6 - Autonomía. les permite funcionar independientemente del resto de aplicaciones.

Desventajas:

1 - Entornos rígidos. No son fácilmente actualizables.
2 - Anclado a una tecnología. Implica que utilicemos el mismo Stack tecnológico para absolutamente todo, lo que impide que aprovechemos todas las tecnologías disponibles.
3 - Escalado. Implica escalar absolutamente toda la aplicación, gastando recursos para funcionalidad que quizás no necesita ser escalada
4 - Tolerancia a fallos. si la aplicación falla, falla todo el sistema, quedando totalmente inoperable.
5 - Mala Adaptabilidad. En proyectos muy grandes, puede ser abrumador para un nuevo programador hacer un cambio en el sistema.
6 - Versiones. Cualquier mínimo cambio en la aplicación implicará realizar una compilación de todo el artefacto.

|
|
Estilos Distribuidos:
Los sistemas distribuidos sirven para coordinar las acciones de varios componentes. Esta coordinación se logra mediante el intercambio de mensajes, es decir, con trozos de datos que transmiten información.
|
Ventajas:

1 - Se pueden agregar fácilmente más nodos al sistema distribuido, es decir, se puede escalar según sea necesario.
2 - Todos los nodos en el sistema distribuido están conectados entre sí. Por tanto, cada uno de los nodos puede compartir datos fácilmente con los otros nodos.
3 - Tolerancia a fallos. La falla de un nodo no conduce a la falla de todo el sistema distribuido. Los otros nodos aún se pueden comunicar entre sí.
4 - Compatibilidad. Los dispositivos pueden funcionar con diferentes sistemas operativos. 
5 - Middleware. Actualmente, las interfaces de programación de aplicaciones (API), funcionan como puerta de enlace por donde las aplicaciones pueden comunicarse. Las aplicaciones no necesitan saber nada sobre otras aplicaciones, excepto su API.

Desventajas:

1 - Es difícil proporcionar una seguridad adecuada en los sistemas distribuidos porque tanto los nodos como las conexiones deben asegurarse.
2 - Puede ocurrir una sobrecarga en la red si todos los nodos del sistema distribuido intentan enviar datos a la vez.
3 - La base de datos conectada a los sistemas distribuidos es bastante complicada y difícil de manejar en comparación.

4- Los sistemas distribuidos son mas complejos, esto provoca que sea mas difícil comprender sus propiedades.

Consideraria que devOps es casi obligatorio para mantener un buen rendimiento de desarrollo en un sistema distribuido mientras no serian obligatorio en uno monolitico.
Estan deacuerdo que opinan?

Buena Clase.!

Excelente

Excelente! muy buena comparación y así poder elegir cuál se adapta mejor a los requerimientos, saludos desde México

Estilos distribuidos

¿Cómo elegir?

Styles

Podemos decir entonces que monoliticos son los que estan en un solo software y los distribuidos son los que se unen no esta mal

ventajas monolítico
Eficiencia de ejecución
capacidad de prueba
curva de aprendizaje
capacidad de modificación

ventajas distribuido
modularidad
disponibilidad
uso de recursos
adaptabilidad

Existe la posibilidad de tener una lista de los libros mencionados hasta el momento?

Según los resultados del análisis de requerimientos, restricciones y riesgos, es donde tendremos más claro que tipo de estilo de arquitectura de software usar.

Guido, mil gracias.

Buena explicación

De acuerdo a la comparación de estilos hecha, me inclinaría por usar el estilo Monolítico debido a su curva de aprendizaje más suave y porque puedo ver en operación un solo despliegue mientras que en el distribuido debo entrar a modificar cada módulo.

En resumen, considerar, los riesgos, restricciones y requisitos, te permitirá identificar correctamente la arquitectura de software que más beneficia al proyecto a desarrollar.

Cómo elegir un estilo de arquitectura de software para mi proyecto

.

Enfoque Agnóstico en Tecnología

Es la capacidad de un componente de software para ser interoperable y compatible en diversos sistemas y ambientes sin tener que hacerle grandes cambios, no solo para hardwares y software sino en procesos y tareas.

Fuente:

Estilos monolíticos: Estilos donde se despliegan un artefacto de software.
Estilos distribuidos: Componentes que luego de ser desplegados se conectan de alguna forma.

😃

excelente explicación, gracias

<h1>Comparando los estilos</h1>

Separando estilos monolíticos (un sólo artefacto) y distribuidos (desplique individual).

  • Individual
    Se puede controlar cuáles son las llamadas a procesos, no hay que hacer comunicación por internet. Facilidad de teseteo. Tiene toda la información en un lugar, i.e. todas las piezas. La curva de aprendizaje es más sencilla.

  • Distribuidos
    Para hacer una prueba hay que tener todos los componentes y un bus compatible.
    Habrá que entender cada uno de los componentes para examinar el proyecto.
    Es más facil aprender a trabajar en microservicios. Tenemos diferentes versiones independientes en cada uno de los componentes, es dificil hacer llegar una nueva versión.
    Es más fácil modularizar por la naturaleza del estilo.
    Tiene más disponibilidad que el estilo monolítico, además es más barato cuando se trata de escalar algún componente en específico y es más fácil de adaptar.

Cada arquitectura tiene sus puntos fuertes como débiles, ¿Entonces cual elegir?
la que mejor se adapte a los requerimientos que se necesiten, en algunos casos serán distribuidos o monolíticos.

Para los que tengan duda de que es un microservicio, aquí les dejo un link que les puede ayudar a solucionar sus dudas https://platzi.com/tutoriales/1247-arquitectura-software/9250-que-es-un-microservicio/

Interesante tema!

Monolítico: se despliega un solo artefacto de software se le da prioridad a la eficiencia y ejecución, tienen curva de aprendizaje mas suave, fácil de probar y modificable. Un componente de un estilo distribuido se puede ver como uno monolítico de forma aislada. Se despliegan todos los componentes juntos.
Distribuido: cada despliegue es independiente, tiene mas disponibilidad, modularidad, mejor uso de recursos y adaptabilidad.