Introducción al curso

1

Introducción al curso de Profesional de Arquitectura de Software

Atributos de calidad

2

Definición

3

Atributos: Idoneidad funcional

4

Atributos: Eficiencia de ejecución

5

Atributos: Compatibilidad

6

Atributos: Usabilidad

7

Atributos: Confiabilidad

8

Atributos: Seguridad

9

Atributos: Mantenibilidad

10

Atributos: Portabilidad

11

Tensiones entre atributos

12

Analizando PlatziServicios

Patrones de arquitectura

13

Patrones monolíticos vs distribuidos

14

Patrones: Modelo Vista Controlador

15

Patrones: Capas

16

Patrones: Orientado a eventos / Provisión de eventos.

17

Patrones: Microkernel - Plug-ins

18

Patrones: Comparte-nada

19

Patrones: Microservicios

20

Patrones: CQRS

21

Patrones: Hexagonal - Puertos y adaptadores

22

Patrones: Diseño orientado al dominio

23

Combinando patrones de arquitectura

24

Analizando nuevamente PlatziServicios

Diseño de una arquitectura

25

Pararse en hombros de gigantes

26

Herramientas y partes de un diseño: Tipos de conectores

27

Conectores: Llamado asincrónico / sincrónico. Modelo Cliente servidor.

28

Conectores: Enrutador, difusión

29

Conectores: Pizarra, repositorio, colas, modelo PUBSUB

30

Escenarios y tácticas

31

Escenarios: Disponibilidad, detección, reparación

32

Escenarios: Reintroducción y prevención

33

Escenarios: Mantenibilidad

34

Escenarios: Prevenir efectos dominó y diferir enlace

35

Escenarios: Eficiencia de ejecución

36

Escenarios: Seguridad

37

Escenarios: Capacidad de prueba

38

Escenarios: Usabilidad

39

Validar las decisiones de diseño: Arquitectura en evolución

40

Último análisis a PlatziServicios

Modelado y documentación de arquitectura

41

Cómo comunicar la arquitectura: Vistas y Puntos de vista

42

Documentación vs implementación

43

Conclusiones del curso

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Patrones: Comparte-nada

18/43
Recursos

Cómo hacer para compartir recursos, hay que tener en cuenta que esto agrega complejidad al sistema.

Esta arquitectura es muy potente a la hora de procesar información, porque si cada componente tiene sus datos propios se puede garantizar que esos componentes son los únicos que tienen acceso a la información.

Aportes 10

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Patrón de arquitectura Comparte-nada
Como hacer para compartir recursos?
El compartir recursos entre componentes agrega complejidad a la hora de decidir acciones. Por lo tanto, esta arquitectura plantea como no necesitar un punto de unión entre componentes.

Cómo hacer para compartir recursos, hay que tener en cuenta que esto agrega complejidad al sistema.
Esta arquitectura es muy potente a la hora de procesar información, porque si cada componente tiene sus datos propios se puede garantizar que esos componentes son los únicos que tienen acceso a la información.?
Compartir recursos entre diferentes componentes agrega mucha complejidad a la hora de decidir prioridades o disponibilidad del componente, entonces se busca crear que NO se tenga punto de unión entre componentes. Esta arquitectura es muy potente al procesar la información ya que sugiere separarl los componentes y que los recursos como BD. Y deprocesamiento sean de uso exclusivo del componente, al separar los componentes se puede enfocar en el fallo por que cada componente hace uso único de los recursos de dicho sistema.??El ejemplo más común es MapReduce donde se trabajan con grandes cantidades de datos y se seccionan para trabajar con ellos de forma agrupada y secuencial. (Separar base de datos por usuarios 1ª de la A-i, la 2ª de la J-O y la 3ª de la P-Z). y podemos optimizar al máximo, podria separarce en más capas aún.

Apuntes:

Comparte-nada

Plantea cómo hacer para no compartir nada, es decir para directamente no necesitar un punto de unión entre componentes.

Patrones: Comparte-nada

Procura que no exista un punto de unión entre componentes. Es muy potente a la hora de procesar información. Ya que como cada componente tiene su estado, BD privado y todo lo que necesite para el y solo para el. se puede optimizar ese proceso de forma que no tenemos que considerar casos de contingencia.

🤖🤖🤖
Cómo hacer para compartir recursos, hay que tener en cuenta que esto agrega complejidad al sistema.

Esta arquitectura es muy potente a la hora de procesar información, porque si cada componente tiene sus datos propios se puede garantizar que esos componentes son los únicos que tienen acceso a la información.

Muy buena clase!! Excelente Guido.

Un buen ejemplo tambien de un Shared-Nothing es el uso de microservicio

Esta arquitectura en efecto es muy puntual y diria que los casos de uso son minimos en comparación con los vistos anteriormente. Uno de los casos de uso es para computo cientifico en grandes batches, donde se hace analisis de grandes cantidades de información pero de manera separada
Este patrón es usado en Big Data, aquí un sencillo ejemplo: La arquitectura **Shared-Nothing** es un enfoque en el que los nodos de un sistema no comparten recursos, como memoria o almacenamiento, y trabajan de manera independiente. Esta arquitectura es común en sistemas distribuidos donde se necesita alta escalabilidad y paralelismo. En el contexto de **MapReduce**, una arquitectura de procesamiento distribuido, este patrón se adapta perfectamente ya que cada nodo realiza cálculos sobre una parte de los datos sin necesidad de compartir memoria con otros nodos. Aquí te doy un ejemplo de un proyecto que usa la arquitectura **Shared-Nothing** con el paradigma **MapReduce**. En este ejemplo, imaginemos un sistema de **procesamiento de grandes volúmenes de datos** como el recuento de palabras de grandes archivos de texto distribuidos en múltiples nodos, típico de un escenario de **Big Data**. ### Ejemplo de Proyecto con Arquitectura Shared-Nothing Usando MapReduce ### Escenario: El proyecto procesa un gran conjunto de archivos de texto para contar la frecuencia de cada palabra usando la arquitectura Shared-Nothing. El proceso se distribuye en varios nodos, donde cada nodo lee una parte del archivo, cuenta las palabras localmente y luego se agrupan (reduce) los resultados finales. /mapreduce-shared-nothing │ ├── /input # Carpeta de archivos de entrada │ ├── file1.txt │ ├── file2.txt │ └── fileN.txt │ ├── /mappers # Carpeta de mappers │ ├── mapper1.js # Nodo 1 (Mapper) │ ├── mapper2.js # Nodo 2 (Mapper) │ └── mapperN.js # Nodo N (Mapper) │ ├── /reducers # Carpeta de reducers │ ├── reducer.js # Reduce para agrupar resultados │ ├── /nodes # Scripts para iniciar nodos │ ├── node1.js # Nodo que ejecuta el mapper 1 │ ├── node2.js # Nodo que ejecuta el mapper 2 │ └── nodeN.js # Nodo que ejecuta el mapper N │ ├── /output # Carpeta para almacenar resultados finales │ ├── result.txt # Archivo con el recuento final de palabras │ ├── /config # Configuración del sistema distribuido │ └── nodeConfig.json # Configuración de nodos y archivos distribuidos │ ├── master.js # Controlador maestro del proceso MapReduce ├── mapreduce.js # Implementación básica de MapReduce ├── README.md # Documentación del proyecto └── package.json # Dependencias del proyecto Características Clave del Patrón **Shared-Nothing** con **MapReduce**: 1. **Independencia de Nodos:** * Cada nodo es responsable de su propio procesamiento y no depende de la memoria o almacenamiento compartido con otros nodos. Los nodos solo se comunican a través de los resultados intermedios (los mappers envían sus resultados al reducer). 2. **Escalabilidad Horizontal:** * El sistema puede escalar fácilmente agregando más nodos para procesar más archivos o más partes de un gran archivo. Debido a la arquitectura **Shared-Nothing**, no hay cuellos de botella causados por recursos compartidos. 3. **Alta Disponibilidad:** * Si un nodo falla, otros nodos no se ven afectados, y el trabajo de ese nodo puede ser reasignado a otro sin comprometer el procesamiento general. 4. **Optimización de Datos Localizados:** * El enfoque **MapReduce** permite distribuir los datos de entrada y su procesamiento de manera eficiente. En un entorno distribuido real, los datos pueden procesarse en nodos que están físicamente cerca de donde se almacenan los datos, reduciendo la latencia de red. Este patrón es ampliamente utilizado en aplicaciones de **Big Data**, como sistemas de procesamiento de grandes volúmenes de datos (Hadoop, por ejemplo), donde la escalabilidad y la eficiencia en el procesamiento distribuido son críticos.