Diagramas de arquitectura — Reto 2 CCP (v7)

Versión 7 del 3 de octubre de 2026. Dibuja las diez decisiones de adrs-ccp-reto2.md en cuatro vistas: componentes, concurrencia, información y despliegue. Tiene diez diagramas, entre uno y tres por vista, y cada ASR tiene un diagrama de estructura, uno de comportamiento con su medida y uno de datos.

Fuente: draw.io. Desde esta versión, el original de cada diagrama es un archivo draw.io por vista, en drawio/. Los enlaces de la tabla los abren en draw.io web. Las imágenes de png-v7/ se exportan de esos archivos: un cambio se hace en el draw.io y después se vuelve a exportar la imagen.

Estado: propuesta. Los diez ADR están en estado Propuesta, así que cada diagrama también lo está. Lo que aparece dibujado sin un ADR que lo respalde está marcado propuesta en el texto y listado en los huecos.

Las cuatro vistas

Vista Qué responde Diagramas Archivo draw.io Página
Componentes Qué componentes hay, por dónde se hablan y cómo funcionan por dentro los que sostienen cada ASR DG-CMP-001 panorama · DG-CMP-002 seguridad · DG-CMP-003 cadena del pedido vista-componentes.drawio vista-componentes.md
Concurrencia Profundiza la vista de componentes: qué grupos de procesos corren y con cuántas réplicas, qué hilos corren dentro, por qué canales, temas y colas del bróker pasa cada paso y en qué orden DG-CON-001 vista general · DG-CON-002 seguridad · DG-CON-003 cadena del pedido vista-concurrencia.drawio vista-concurrencia.md
Información Qué datos sostienen cada táctica, en qué base viven y por qué estados pasa la etapa DG-CLS-001 cadena · DG-CLS-002 seguridad · DG-STM-001 estados de la etapa vista-informacion.drawio vista-informacion.md
Despliegue Dónde corre cada componente, con qué tecnología y qué queda como instancia única DG-DEP-001 vista-despliegue.drawio vista-despliegue.md

Cada página se sostiene sola: trae su leyenda, su propósito y los enlaces a las demás.

Qué cambió frente a la versión 6

La v6 tenía 40 diagramas: un panorama, tres cajas negras, diez cajas blancas con su secuencia interna, dos diagramas de hilos, cinco secuencias de punta a punta, cinco de información y dos de despliegue. La v7 los reduce a diez para que cada vista tenga entre uno y tres.

Lo que tenía la v6 Dónde queda en la v7
Tres cajas negras por ASR (DG-CMP-002 a 004) Dos diagramas por camino: DG-CMP-002 junta ASR-1 y ASR-2; DG-CMP-003 junta ASR-3 y ASR-4
Diez cajas blancas (DG-CST-001 a 010) Cuatro, abiertas dentro del diagrama de su camino: Verificador y Reacción en DG-CMP-002; Coordinador y Monitor en DG-CMP-003. Las otras seis quedan como caja negra
Doce secuencias internas (DG-SEQ-001 a 012) Las partes de cada caja blanca muestran el orden de su operación crítica con los conectores numerados; los hilos de cada parte van en DG-CON-002 y DG-CON-003
Dos diagramas de hilos (DG-CON-001 y 002) y cinco secuencias de punta a punta Tres diagramas de concurrencia, uno por diagrama de componentes, que agregan procesos, hilos, temas, colas y el orden del flujo. Las medidas de cada ASR van como notas sobre el tramo que las cumple
La secuencia del orden de las etapas (DG-SEQ-013) El orden queda en DG-CMP-003 (las entregas 1, 2 y 3) y en DG-STM-001 (Pendiente pasa a EnCurso cuando la anterior completa)
Tres diagramas de clases Dos: la cadena (DG-CLS-001) y la seguridad (DG-CLS-002), que junta identidad, bitácora y reacción
Los estados de la sesión y del actor (DG-STM-002) Atributos en DG-CLS-002 y orden en DG-CMP-002
Dos despliegues Uno, con cada servicio en su propio nodo y el bróker, la base y la Lista de revocación como piezas compartidas

Los ID se renumeran: DG-CMP-001 sigue siendo el panorama, pero el resto de los números no coinciden con los de la v6. Las líneas «Diagramas afectados» del final traen los ID nuevos para cada ADR.

Dónde se ve cada decisión

ADR Tácticas (ID) Elemento que la aloja Componentes Concurrencia Información y despliegue
ADR-001 · eventos, bróker durable y base transaccional EST-03 · MOD-04 · DIS-17 Todo el sistema DG-CMP-001 a 003 DG-CON-001 a 003 DG-DEP-001
ADR-002 · Coordinador que orquesta con estado por etapa INT-08 · DIS-15 OrquestadorCadena · RepositorioCadena DG-CMP-001 · DG-CMP-003 DG-CON-001 · DG-CON-003 DG-CLS-001 · DG-STM-001 · DG-DEP-001
ADR-003 · etapas consecutivas INT-10 OrquestadorCadena DG-CMP-001 · DG-CMP-003 — DG-STM-001
ADR-004 · plazo vencido, barrido y sondeo DIS-04 · DIS-03 · DIS-01 BarridoPlazos · SondeoSalud DG-CMP-001 · DG-CMP-003 DG-CON-001 · DG-CON-003 DG-CLS-001 · DG-STM-001 · DG-DEP-001
ADR-005 · idempotencia por pedido y etapa DIS-17 Facturación · Inventario · Validación de despacho DG-CMP-001 · DG-CMP-003 DG-CON-001 · DG-CON-003 DG-CLS-001 · DG-DEP-001
ADR-006 · un reintento y escalamiento DIS-12 · DIS-14 Reanudador · Bandeja DG-CMP-001 · DG-CMP-003 DG-CON-001 · DG-CON-003 DG-STM-001 · DG-DEP-001
ADR-007 · huella del dispositivo verificada tras la sesión SEG-02 · SEG-09 · SEG-15 Gestor de sesión · ComparadorHuella · Notificador DG-CMP-001 · DG-CMP-002 DG-CON-001 · DG-CON-002 DG-CLS-002
ADR-008 · detección por evento en la misma transacción SEG-09 · SEG-18 · DIS-17 Detector · Pedidos · Inventario DG-CMP-001 · DG-CMP-002 DG-CON-001 · DG-CON-002 DG-CLS-002 · DG-DEP-001
ADR-009 · revocación en la puerta de entrada SEG-02 · SEG-13 Puerta de entrada · Lista de revocación DG-CMP-001 · DG-CMP-002 DG-CON-001 · DG-CON-002 DG-CLS-002 · DG-DEP-001
ADR-010 · compensación dentro de una reacción ordenada DIS-13 · SEG-13 · SEG-14 · SEG-15 OrquestadorReaccion · Pedidos · Inventario DG-CMP-001 · DG-CMP-002 DG-CON-001 · DG-CON-002 DG-CLS-002

Los componentes que quedan como caja negra

Componente Por qué no se abre
Gestor de sesión · Detector de escrituras indebidas Fijan t0 y t_det, pero su trabajo interno es una sola consulta; DG-CON-002 muestra los hilos que lo hacen
Puerta de entrada · Notificador a seguridad La consulta a la Lista y la entrega del aviso se ven completas en las secuencias
Facturación · Inventario · Validación de despacho Siguen la misma receta de ADR-005, que se ve en DG-CLS-001 y DG-CON-003
Pedidos Sigue la misma receta que Inventario: bitácora y outbox en la transacción, y anulación como compensación
App móvil Calcula la huella, pero los identificadores del equipo que la forman no están definidos
Bandeja de pedidos escalados Guarda el pedido escalado y se lo muestra a una persona; ninguna táctica vive dentro de ella
Lista de revocación · Bróker de mensajes · Base transaccional Son productos comprados; su estructura se ve en el despliegue
Logística · Área de seguridad Están fuera del alcance

Los ADR nombran sus tácticas sin el ID del catálogo del curso. La versión 1.2.0 de la skill exige el ID, así que esta tabla hace la traducción. La columna A2 de cada ADR puede copiarla tal cual.

ADR Táctica como la nombra el ADR ID Nombre en el catálogo Nota
ADR-001 Usar intermediarios (bróker de mensajes) MOD-04 Usar intermediarios —
ADR-001 Transacciones locales por servicio DIS-17 Transacciones —
ADR-001 (el estilo) EST-03 Dirigida por eventos El ADR no cita el estilo; se añade porque es la decisión de estructura global
ADR-002 Orquestación INT-08 Orquestación —
ADR-002 Log de transacciones (estado por pedido y etapa) DIS-15 Log de transacciones —
ADR-003 Protocolo de comportamiento (orden de las etapas) INT-10 Protocolo temporal y de comportamiento El ADR la pone en la familia «cerrar distancia»; el catálogo la pone en «gestionar la interacción»
ADR-004 Excepción / timeout (plazo vencido) DIS-04 Excepción / timeout —
ADR-004 Monitor DIS-03 Monitor —
ADR-004 Ping / echo (sondeo de salud, apoyo) DIS-01 Ping / echo —
ADR-005 Transacciones (idempotencia por clave única) DIS-17 Transacciones —
ADR-006 Reintento (un intento, sin espera creciente) DIS-12 Reintento —
ADR-006 Degradación con gracia (entrega a una persona) DIS-14 Degradación con gracia —
ADR-007 Identificar y autenticar actores (dispositivo incluido) SEG-02 Autenticar actores —
ADR-007 Detectar intrusiones SEG-09 Detectar intrusiones —
ADR-007 Informar SEG-15 Informar a los actores —
ADR-008 Detectar intrusiones (escritura contra permiso vigente) SEG-09 Detectar intrusiones —
ADR-008 Registro de auditoría SEG-18 Registro de auditoría Cumplimiento parcial: ver huecos
ADR-009 Revocar acceso SEG-13 Revocar el acceso —
ADR-009 Autenticar y autorizar en el borde SEG-02 Autenticar actores La Puerta verifica el token; la autorización por permiso vigente la hace el Detector después
ADR-010 Rollback por compensación DIS-13 Rollback —
ADR-010 Revocar, bloquear e informar (reacción ordenada) SEG-13 · SEG-14 · SEG-15 Revocar el acceso · Bloquear al actor · Informar a los actores —

Piezas técnicas

Estos términos aparecen en las secuencias y en la vista de información.

Término Qué es
Token · jti Token firmado que el Gestor de sesión entrega al abrir la sesión; jti es su identificador único. Revocar una sesión es anotar su jti en la Lista de revocación
Huella del dispositivo Resumen de identificadores del equipo que la App móvil calcula al abrir sesión
Outbox Tabla donde el servicio guarda el evento en la misma transacción que la escritura; un relevo lo publica después. Ninguna escritura queda sin evento
Idempotencia Repetir la operación no produce un segundo efecto. Aquí la da una fila con clave única por (idPedido, etapa)
Compensación Operación inversa que deshace el efecto de una escritura sin tocar lo que vino después
Entrega al menos una vez El bróker reentrega todo mensaje que su consumidor no confirmó. No se pierde nada, pero un mensaje puede llegar dos veces
Cola de mensajes fallidos Cola a la que va un mensaje que no se pudo procesar, en vez de perderse. Aquí es cola.fallidos, que desencola la Bandeja de pedidos escalados; la vista de componentes la rotula «Dead-Letter-Queue»
Actualización condicional La fila cambia solo si sigue en el estado que el hilo espera. Resuelve la carrera entre dos hilos que escriben la misma fila
t0 · t_det · t_stop · t_señal Apertura de la sesión (ASR-1), detección de la escritura indebida (ASR-2), instante en que la etapa deja de avanzar y instante de la señal (ASR-3). Desde ahí corren las medidas
p99 La duración que solo el 1 % de las ejecuciones supera

Diferencias entre diagramas por resolver

Las páginas describen cada diagrama tal como está dibujado en el draw.io. Cuando un diagrama choca con un ADR o con otro diagrama, la página de su vista lo lista en su sección «Diferencias por resolver». Estas son las que piden una decisión de diseño; las demás son erratas o conexiones sueltas:

Diferencia Diagramas Qué hay que decidir
Dónde corre el Reanudador DG-CON-001 lo dibuja como proceso propio dentro del grupo de la cadena; ADR-006, DG-CMP-003 y DG-CON-003 lo ponen dentro del Coordinador Si es un proceso o un hilo del Coordinador, y corregir el ADR o los diagramas
Cuántas réplicas corre cada proceso DG-CON-001 usa grupos con N réplicas, 1 activo + 1 en espera y P réplicas ≤ particiones, con el Coordinador y la Bandeja en [1]; DG-DEP-001 despliega ×2 el Coordinador y la Bandeja, 1..3 el Monitor y ×1 la Puerta, que DG-CON-002 dibuja en [2]. ADR-002 fija un solo Coordinador Una sola política de réplicas para las dos vistas, y el ADR que la respalde
Qué tipo de bróker hay DG-CON-001 a 003 dibujan canales con clave de partición, y la clave de cada flujo de la cadena cambia entre DG-CON-001 y DG-CON-003; ADR-001 y DG-DEP-001 usan RabbitMQ con colas durables Si hay particiones, y en qué ADR se decide
Qué hace el Monitor DG-CMP-001 avisa al Coordinador las fallas; ADR-004 y DG-CMP-003 piden las vencidas y encolan la señal. DG-DEP-001 sondea tres etapas; DG-CMP-003 y DG-CON-003, dos La interacción del Monitor y qué etapas sondea
Quién escribe en la Lista de revocación DG-CMP-001 dibuja al Notificador registrando en la Lista; ADR-009 deja a la Reacción como el único que escribe Si el Notificador escribe en la Lista, y qué ASR y qué ADR lo piden
Marcas de táctica El bróker de la cadena es T8 en DG-CMP-001 y T4 en DG-CMP-003, y las etapas pasan a T9 y T10 Una marca por táctica y el ID del catálogo del bróker de la cadena y de la cola de mensajes fallidos

Las erratas y las conexiones sueltas de cada diagrama están en la sección de su vista.

Matriz ASR × ADR × diagrama

ASR ADR Componentes Concurrencia Información y despliegue Hueco
ASR-1 · suplantación del vendedor ADR-001, ADR-007 DG-CMP-001 · DG-CMP-002 DG-CON-001 · DG-CON-002 DG-CLS-002 · DG-DEP-001 Identificadores de la huella; quién registra el cambio legítimo; canal del aviso; tendero sin señal (R-007a)
ASR-2 · escritura indebida ADR-001, ADR-008, ADR-009, ADR-010 DG-CMP-001 · DG-CMP-002 DG-CON-001 · DG-CON-002 DG-CLS-002 · DG-DEP-001 Lista de revocación caída (TO-009a); pedido indebido con la cadena en curso (R-010a); bitácora sin separar (SEG-18)
ASR-3 · cadena detenida ADR-001 a ADR-004 DG-CMP-001 · DG-CMP-003 DG-CON-001 · DG-CON-003 DG-CLS-001 · DG-STM-001 · DG-DEP-001 Plazo de cada etapa sin medir (TO-004a); Monitor como punto único (R-004a); dónde guarda sus señales
ASR-4 · reanudación sin duplicar ADR-001 a ADR-006 DG-CMP-001 · DG-CMP-003 DG-CON-001 · DG-CON-003 DG-CLS-001 · DG-STM-001 · DG-DEP-001 Confirmación que llega después de escalar; carga manual por transitorios (R-006a); factura en un sistema externo (NR-005a)

Huecos y ADR pendientes

Las preguntas abiertas no van dentro de los diagramas; están aquí.

Decisiones que faltan (ADR pendientes).

  • Sincronización de la fila CadenaEtapa. Tres hilos la tocan: ConsumidorMensajes, Reanudador y BarridoPlazos. DG-CON-003 dibuja los dos hilos que la escriben y la actualización condicional por estado, marcada propuesta. Ningún ADR la decide.
  • Confirmación que llega después de escalar. Si la etapa confirma cuando la fila ya está Escalada, la actualización condicional la ignora, y el responsable recibe un pedido cuya etapa sí terminó. Hay que decidir si la fila pasa a Completada y el pedido sale de la Bandeja (DG-CON-003, DG-STM-001).
  • Qué hace la Puerta si la Lista de revocación no responde (TO-009a): rechazar todo protege ASR-2 y deja el sistema sin servicio; dejar pasar hace lo contrario. DG-CON-002 no dibuja ese camino.
  • Separar la bitácora. El registro de auditoría del catálogo (SEG-18) pide una traza fuera del alcance del atacante. Hoy la bitácora vive en la base del servicio que el actor escribió (DG-CLS-002).
  • Deduplicación del aviso. El Notificador registra cada idAlerta para no avisar dos veces cuando el bróker repite la alerta (DG-CON-002). Es propuesta.
  • Estructura interna del Coordinador. DG-CMP-003 le da dos puertos de entrada, uno para etapa.completada y otro para la Cola de reintentos, que entrega directo al Reanudador. Es propuesta.

Datos que faltan.

  • ¿Cuál es la duración p99 de cada etapa en operación normal? Sin ella no se fija el plazo de ADR-004. SUP-03 dice p99,9 y el glosario de los diagramas dice p99; hay que fijar uno de los dos en el ADR.
  • ¿Cuántos sondeos seguidos sin respuesta adelantan la señal de una etapa caída (el k del SondeoSalud)?
  • ¿Dónde guarda el Monitor sus señales? DG-CLS-001 dibuja una base del Monitor, pero ningún conector de los ADR le da ruta, y DG-DEP-001 no la dibuja.
  • ¿Se corren dos instancias del Monitor con un candado en la base (R-004a)?
  • ¿Qué identificadores expone el dispositivo suministrado, y quién registra un cambio legítimo de equipo por IRegistroDispositivo?
  • ¿Por qué canal llega el aviso al área de seguridad?
  • ¿Cómo se compensa un pedido indebido cuya cadena ya emitió factura o descargue (R-010a)?
  • ¿Por qué protocolo recibe Logística el pedido listo?
  • ¿Cuántos hilos consumidores necesita cada componente con la carga del Ambiente A?

Dibujado sin ADR que lo respalde.

  • DG-DEP-001: las dos instancias de los servicios sin estado salvo la Puerta, el segundo Coordinador y la segunda Bandeja, las instancias adicionales del Monitor, de Redis y de RabbitMQ, el balanceador y la observabilidad.
  • DG-CON-003: la actualización condicional de la fila CadenaEtapa.
  • DG-CON-002: la deduplicación del aviso.
  • DG-CMP-003: los dos puertos de entrada del Coordinador.
  • DG-CMP-001 y DG-CMP-003: el bróker de la cadena, la cola de mensajes fallidos y el soporte de CCP que la atiende.
  • DG-CON-001 a 003: los grupos de procesos con su política de réplicas y los canales de eventos con clave de partición.

Líneas «Diagramas afectados» para las Consecuencias de cada ADR

Los ADR citan los ID de su plan de diagramas (sección 6 de adrs-ccp-reto2.md), que no coinciden con los de la v7. Estas líneas los reemplazan.

  • ADR-001 — Diagramas afectados: DG-CMP-001 a 003, DG-CON-001 a 003, DG-DEP-001
  • ADR-002 — Diagramas afectados: DG-CMP-001, DG-CMP-003, DG-CON-001, DG-CON-003, DG-CLS-001, DG-STM-001, DG-DEP-001
  • ADR-003 — Diagramas afectados: DG-CMP-001, DG-CMP-003, DG-STM-001
  • ADR-004 — Diagramas afectados: DG-CMP-001, DG-CMP-003, DG-CON-001, DG-CON-003, DG-CLS-001, DG-STM-001, DG-DEP-001
  • ADR-005 — Diagramas afectados: DG-CMP-001, DG-CMP-003, DG-CON-001, DG-CON-003, DG-CLS-001, DG-DEP-001
  • ADR-006 — Diagramas afectados: DG-CMP-001, DG-CMP-003, DG-CON-001, DG-CON-003, DG-STM-001, DG-DEP-001
  • ADR-007 — Diagramas afectados: DG-CMP-001, DG-CMP-002, DG-CON-001, DG-CON-002, DG-CLS-002
  • ADR-008 — Diagramas afectados: DG-CMP-001, DG-CMP-002, DG-CON-001, DG-CON-002, DG-CLS-002, DG-DEP-001
  • ADR-009 — Diagramas afectados: DG-CMP-001, DG-CMP-002, DG-CON-001, DG-CON-002, DG-CLS-002, DG-DEP-001
  • ADR-010 — Diagramas afectados: DG-CMP-001, DG-CMP-002, DG-CON-001, DG-CON-002, DG-CLS-002

Lucid

La copia en Lucid de la versión 5, Reto 2 CCP v5 · Diagramas, quedó desactualizada desde la versión 6. Con la v7, el formato editable es draw.io, así que no se planea una copia nueva en Lucid.