- Sistema de Reservación de Habitaciones - Arquitectura de Microservicios
Este proyecto presenta el diseño y arquitectura de un Sistema de Reservación de Habitaciones basado en microservicios. El sistema está diseñado para ser escalable, mantenible y robusto, implementando patrones de arquitectura moderna que permiten el manejo eficiente de reservas, pagos, notificaciones y gestión de inventario de habitaciones.
- Arquitectura de Microservicios: Separación clara de responsabilidades
- API Gateway: Punto único de entrada para todas las solicitudes
- Escalabilidad Horizontal: Cada servicio puede escalarse independientemente
- Tolerancia a Fallos: Implementación de circuit breakers y retry policies
- Interfaz Responsiva: Diseño adaptable para web y móvil
- Facilitar la reserva de habitaciones de manera intuitiva y eficiente
- Gestionar el inventario de habitaciones en tiempo real
- Procesar pagos de forma segura y confiable
- Mantener comunicación proactiva con los usuarios
- Proporcionar análitica y reportes del negocio
- Implementar una arquitectura escalable y mantenible
- Garantizar alta disponibilidad (99.9% uptime)
- Asegurar la consistencia de datos en transacciones críticas
- Optimizar el rendimiento para manejar picos de tráfico
- Facilitar el despliegue continuo y la integración continua
graph TD
subgraph Frontend
A1[Web App]
A2[Mobile App]
end
subgraph API Gateway
B[API Gateway]
end
subgraph Microservices
C1[Search Service]
C2[Reservation Service]
C3[Payment Service]
C4[Notification Service]
C5[Availability Service]
C6[User Management Service]
end
subgraph Databases
D1[(Search DB)]
D2[(Reservations DB)]
D3[(Payments DB)]
D4[(Availability DB)]
D5[(Users DB)]
end
A1 --> B
A2 --> B
B --> C1
B --> C2
B --> C3
B --> C4
B --> C5
B --> C6
C1 --> D1
C2 --> D2
C3 --> D3
C4 -->|Email/SMS| E[External Notification Services]
C5 --> D4
C6 --> D5
Descripción de la Arquitectura:
- Frontend Layer: Aplicaciones web y móvil que consumen los servicios
- API Gateway: Punto único de entrada, manejo de autenticación, rate limiting y routing
- Microservices Layer: Servicios especializados con responsabilidades específicas
- Data Layer: Bases de datos especializadas por dominio de negocio
classDiagram
class APIGateway {
+routeRequests()
+authenticate()
+rateLimit()
+loadBalance()
}
class AuthService {
+login()
+register()
+validateToken()
+refreshToken()
}
class InventoryService {
+listRooms()
+checkAvailability()
+updateAvailability()
+getRoomDetails()
}
class ReservationService {
+createReservation()
+modifyReservation()
+cancelReservation()
+getReservationHistory()
}
class PaymentIntegration {
+processPayment()
+refundPayment()
+validatePaymentMethod()
+getPaymentHistory()
}
class NotificationService {
+sendEmail()
+sendSMS()
+sendPushNotification()
+getNotificationHistory()
}
class Database {
+userData
+roomData
+reservationData
+paymentData
+notificationData
}
class PaymentGateway {
+authorize()
+capture()
+refund()
+validateCard()
}
class EmailService {
+send()
+validateTemplate()
}
class SMSService {
+send()
+validateNumber()
}
APIGateway --> AuthService : authenticate()
APIGateway --> InventoryService : listAvailability()
APIGateway --> ReservationService : routeBooking()
ReservationService --> InventoryService : checkAvailability()
ReservationService --> PaymentIntegration : processPayment()
ReservationService --> NotificationService : notifyUser()
ReservationService --> Database : storeReservation()
AuthService --> Database : userRecords()
InventoryService --> Database : roomRecords()
PaymentIntegration --> PaymentGateway : authorize/capture()
NotificationService --> EmailService : sendEmail()
NotificationService --> SMSService : sendSMS()
Descripción del Diagrama UML de Componentes:
Este diagrama ilustra la estructura y las relaciones entre los componentes principales del sistema de reservación de habitaciones. La arquitectura sigue el patrón de microservicios con separación clara de responsabilidades:
Componentes Principales:
- APIGateway: Actúa como punto de entrada único, manejando el enrutamiento, autenticación, rate limiting y balanceeo de carga entre servicios
- AuthService: Gestiona toda la lógica de autenticación y autorización, incluyendo login, registro, validación de tokens JWT y refresh de sesiones
- InventoryService: Administra el catálogo de habitaciones, verificación de disponibilidad, actualizaciones de inventario y detalles de habitaciones
- ReservationService: Núcleo del negocio que maneja el ciclo completo de reservas: creación, modificación, cancelación e historial
- PaymentIntegration: Procesa pagos, reembolsos, validación de métodos de pago e integración con gateways externos
- NotificationService: Sistema de comunicación multi-canal para emails, SMS, push notifications y tracking de entregas
Servicios Externos:
- PaymentGateway: Integración con proveedores de pago (Stripe, PayPal) para autorización y captura de pagos
- EmailService y SMSService: Servicios especializados para el envío de notificaciones
Base de Datos: Repositorio centralizado que almacena todos los datos del sistema de forma segmentada por dominio
Flujo de Interacciones:
- El API Gateway recibe todas las peticiones y las enruta al servicio correspondiente
- Los servicios se comunican entre sí siguiendo patrones de arquitectura distribuida
- Las operaciones críticas (reservas) involucran múltiples servicios trabajando en conjunto
- Los servicios externos se integran a través de adapters para mantener el bajo acoplamiento
sequenceDiagram
participant U as User
participant API as API Gateway
participant AUTH as AuthService
participant INV as InventoryService
participant RES as ReservationService
participant PAY as PaymentIntegration
participant DB as Database
participant NOT as NotificationService
Note over U,NOT: Proceso Completo de Reserva
U->>API: login(credentials)
API->>AUTH: validateCredentials()
AUTH->>DB: verifyUser()
DB-->>AUTH: userValid
AUTH-->>API: authToken
API-->>U: loginSuccess + token
U->>API: searchAvailability(dates, guests, token)
API->>AUTH: validateToken(token)
AUTH-->>API: tokenValid
API->>INV: listRooms(dates, guests)
INV->>DB: queryAvailableRooms(dates)
DB-->>INV: availableRooms
INV-->>API: availableRooms
API-->>U: displayRooms
U->>API: selectRoom(roomId, dates, token)
API->>AUTH: validateToken(token)
AUTH-->>API: tokenValid
API->>RES: createReservation(userId, roomId, dates)
RES->>INV: checkAvailability(roomId, dates)
INV->>DB: confirmRoomAvailability
DB-->>INV: roomAvailable
INV-->>RES: roomAvailable
RES->>DB: saveReservation(details)
DB-->>RES: reservationSaved
RES->>PAY: processPayment(reservationId, paymentInfo)
PAY->>DB: logPaymentAttempt
PAY->>PaymentGateway: authorizePayment(paymentInfo)
PaymentGateway-->>PAY: authorizationResult
PAY->>DB: updatePaymentStatus
PAY-->>RES: paymentSuccess
RES->>NOT: sendNotification(userId, reservationDetails)
NOT->>EmailService: sendConfirmationEmail()
NOT->>SMSService: sendConfirmationSMS()
EmailService-->>NOT: emailSent
SMSService-->>NOT: smsSent
RES-->>API: reservationConfirmed
API-->>U: confirmationDetails
Descripción del Diagrama de Secuencia UML:
Este diagrama muestra el flujo temporal completo del proceso de reserva, desde la autenticación del usuario hasta la confirmación final. Representa la interacción entre todos los componentes del sistema en un escenario de uso típico:
Fases del Proceso:
1. Fase de Autenticación:
- El usuario envía credenciales al API Gateway
- Se valida la identidad contra la base de datos
- Se genera y retorna un token JWT para sesiones posteriores
2. Fase de Búsqueda:
- El usuario solicita búsqueda de habitaciones con parámetros específicos
- El API Gateway valida el token de autenticación
- El servicio de inventario consulta disponibilidad en tiempo real
- Se retornan las opciones disponibles al usuario
3. Fase de Selección y Reserva:
- El usuario selecciona una habitación específica
- Se revalida la autenticación y disponibilidad
- El servicio de reservas inicia el proceso de creación
- Se verifica nuevamente la disponibilidad para evitar condiciones de carrera
4. Fase de Persistencia:
- Los detalles de la reserva se almacenan en la base de datos
- Se mantiene la integridad transaccional durante todo el proceso
5. Fase de Procesamiento de Pago:
- Se inicia el procesamiento del pago de forma asíncrona
- Se registra el intento de pago para auditoria
- Se comunica con el gateway de pagos externo
- Se actualiza el estado del pago en el sistema
6. Fase de Notificación:
- Una vez confirmado el pago, se activa el sistema de notificaciones
- Se envían confirmaciones por múltiples canales (email y SMS)
- Se registra el estado de entrega de las notificaciones
7. Fase de Confirmación:
- Se consolida toda la información de la reserva
- Se retorna la confirmación completa al usuario
Características Importantes:
- Validación Continua: El token se valida en cada operación crítica
- Verificación Doble: La disponibilidad se confirma múltiples veces para garantizar consistencia
- Procesamiento Asíncrono: Los pagos y notificaciones se manejan de forma no bloqueante
- Trazabilidad Completa: Cada paso se registra para auditoria y debugging
- Manejo de Errores: Cada servicio puede fallar independientemente sin afectar el flujo completo
stateDiagram-v2
[*] --> Pending : createReservation()
Pending --> Confirmed : checkAvailability() & roomAvailable
Pending --> Failed : checkAvailability() & roomUnavailable
Confirmed --> Paid : processPayment() & paymentSuccess
Confirmed --> PaymentFailed : processPayment() & paymentError
Confirmed --> Cancelled : cancelReservation()
PaymentFailed --> Confirmed : retryPayment() & paymentSuccess
PaymentFailed --> Cancelled : cancelReservation()
Paid --> Modified : modifyReservation()
Paid --> Cancelled : cancelReservation()
Paid --> CheckedIn : checkIn()
Modified --> Paid : confirmModification()
Modified --> Cancelled : cancelReservation()
CheckedIn --> CheckedOut : checkOut()
CheckedIn --> NoShow : noShowTimeout()
CheckedOut --> Completed : finalizeStay()
NoShow --> Completed : processNoShow()
Cancelled --> [*]
Failed --> [*]
Completed --> [*]
note right of Paid : Estado principal para\nreservas activas
note right of Completed : Estado final\npositivo
Descripción del Diagrama de Transición de Estados:
Este diagrama modela el ciclo de vida completo de una reserva en el sistema, mostrando todos los estados posibles y las transiciones válidas entre ellos. Es fundamental para la lógica de negocio y garantiza la integridad de las operaciones:
Estados Principales:
Estados Iniciales:
- Pending: Estado inicial cuando se crea una nueva reserva, pendiente de verificación de disponibilidad
- Failed: Estado de falla cuando la habitación no está disponible en el momento de la verificación
Estados de Confirmación:
- Confirmed: La reserva ha sido validada y la habitación está reservada, pero pendiente de pago
- PaymentFailed: El procesamiento del pago ha fallado, pero la reserva aún puede ser recuperada
Estados Activos:
- Paid: Estado principal de las reservas activas, el pago ha sido procesado exitosamente
- Modified: Estado temporal cuando se están realizando cambios a una reserva existente
Estados de Finalización:
- CheckedIn: El huésped ha llegado y se ha registrado en la habitación
- CheckedOut: El huésped ha completado su estadía y se ha retirado
- NoShow: El huésped no se presentó en la fecha programada
- Completed: Estado final positivo, la reserva ha sido completada exitosamente
- Cancelled: Estado final cuando la reserva ha sido cancelada por cualquier motivo
Transiciones Críticas:
Flujo Principal (Camino Feliz):
Pending → Confirmed: Verificación exitosa de disponibilidadConfirmed → Paid: Procesamiento exitoso del pagoPaid → CheckedIn: Registro del huésped en fecha programadaCheckedIn → CheckedOut: Finalización normal de la estadíaCheckedOut → Completed: Cierre exitoso de la reserva
Flujos de Recuperación:
PaymentFailed → Confirmed: Reintento exitoso de pagoModified → Paid: Confirmación de modificaciones realizadas
Flujos de Cancelación:
- Desde
Confirmed,Paid,Modified, oPaymentFailed→Cancelled - Permite cancelaciones en múltiples puntos del proceso
Flujos de Excepción:
CheckedIn → NoShow: Timeout automático si no hay actividadNoShow → Completed: Procesamiento de no-show con posibles penalizaciones
Reglas de Negocio Implementadas:
- No Retorno: Los estados finales (
Completed,Cancelled,Failed) no permiten transiciones adicionales - Recuperación de Pagos: Fallos de pago no terminan inmediatamente la reserva
- Flexibilidad de Modificación: Las reservas pagadas pueden ser modificadas antes del check-in
- Gestión de No-Shows: Sistema automatizado para manejar ausencias de huéspedes
- Trazabilidad: Cada transición genera eventos para auditoria y análisis de negocio
Consideraciones Técnicas:
- Estados implementados como enum en el código
- Transiciones validadas mediante máquina de estados
- Eventos generados en cada cambio de estado para sistemas downstream
- Timeouts automáticos para transiciones temporales (NoShow)
- Logging completo de cambios de estado para troubleshooting
Las siguientes pantallas fueron diseñadas utilizando Uizard para proporcionar una experiencia de usuario intuitiva y responsiva:
Características:
- Formulario dual de login/registro
- Validación en tiempo real
- Integración con OAuth (Google, Facebook)
- Diseño responsivo para móvil y desktop
Características:
- Filtros avanzados (fechas, huéspedes, precio, amenidades)
- Búsqueda geolocalizada
- Sugerencias automáticas
- Vista de mapa integrada
Características:
- Cards responsivas con información clave
- Filtros laterales dinámicos
- Ordenamiento por precio, rating, distancia
- Paginación optimizada
Características:
- Filtros por rango de precios
- Selección de amenidades
- Filtros por tipo de habitación
- Filtros por rating y reseñas
Características:
- Galería de imágenes interactiva
- Información detallada de amenidades
- Calendario de disponibilidad
- Reseñas y ratings de usuarios
Características:
- Especificaciones técnicas
- Políticas de cancelación
- Servicios incluidos
- Información de ubicación
Características:
- Proceso paso a paso
- Validación en cada etapa
- Resumen de reserva en tiempo real
- Opciones de personalización
Características:
- Detalles completos de la reserva
- Información de contacto
- Enlaces a gestión de reserva
- Opciones de compartir
- Framework: FastAPI (Python)
- Justificación: Alto rendimiento, documentación automática, typing nativo
- Base de Datos: PostgreSQL + Redis
- PostgreSQL: Para datos transaccionales y consistencia ACID
- Redis: Para caché, sesiones y datos de alta velocidad
- Mensajería: RabbitMQ
- Justificación: Confiabilidad, patrones de mensajería avanzados, facilidad de configuración
- Framework: React.js
- Justificación: Ecosistema maduro, componentes reutilizables, amplia comunidad
- Estado: Redux Toolkit
- Estilos: Tailwind CSS
- Móvil: React Native
- Contenedorización: Docker & Docker Compose
- Orquestación: Kubernetes (producción)
- API Gateway: Kong / AWS API Gateway
- Monitoreo: Prometheus + Grafana
- Logs: ELK Stack (Elasticsearch, Logstash, Kibana)
- Pagos: Stripe / PayPal
- Notificaciones:
- Email: SendGrid
- SMS: Twilio
- Mapas: Google Maps API
- Registro y Autenticación: JWT con refresh tokens
- Perfiles de Usuario: Información personal, preferencias
- Autenticación Social: Google, Facebook, Apple
- Verificación de Email: Confirmación de cuenta
- Recuperación de Contraseña: Reset seguro via email
- Búsqueda Avanzada: Por ubicación, fechas, huéspedes
- Filtros Dinámicos: Precio, amenidades, rating, tipo
- Búsqueda Geolocalizada: Basada en ubicación actual
- Sugerencias Inteligentes: Autocompletado y recomendaciones
- Vista de Mapa: Integración con Google Maps
- Catálogo de Habitaciones: Información detallada
- Disponibilidad en Tiempo Real: Sincronización instantánea
- Gestión de Precios: Precios dinámicos por temporada
- Galería de Imágenes: Múltiples fotos por habitación
- Reviews y Ratings: Sistema de reseñas de usuarios
- Proceso de Reserva Guiado: Flujo paso a paso
- Validación de Disponibilidad: Verificación en tiempo real
- Gestión de Estados: Tracking completo del estado
- Modificación de Reservas: Cambio de fechas, cancelaciones
- Historial de Reservas: Registro completo para usuarios
- Múltiples Métodos: Tarjetas, PayPal, wallets digitales
- Pagos Seguros: Cumplimiento PCI DSS
- Procesamiento Asíncrono: Manejo de fallos y reintentos
- Reembolsos Automáticos: Para cancelaciones elegibles
- Reportes Financieros: Dashboard de transacciones
- Notificaciones Multi-canal: Email, SMS, push
- Templates Personalizables: Para diferentes eventos
- Preferencias de Usuario: Control granular de notificaciones
- Tracking de Entrega: Estado de notificaciones enviadas
- Notificaciones en Tiempo Real: WebSockets para actualizaciones
- Microservicios Independientes: Escalado por demanda individual
- Load Balancing: Distribución de carga automática
- Auto-scaling: Escalado automático basado en métricas
- Circuit Breakers: Protección contra fallos en cascada
- Database Sharding: Particionamiento horizontal de datos
- Read Replicas: Réplicas de lectura para consultas
- Caching Strategy: Redis para datos frecuentes
- Data Partitioning: Separación de datos por región/tipo
- CDN Integration: Entrega de contenido global
- API Rate Limiting: Protección contra abuso
- Connection Pooling: Optimización de conexiones BD
- Async Processing: Procesamiento asíncrono para operaciones pesadas
- Metrics Collection: Prometheus para métricas
- Distributed Tracing: Jaeger para trazabilidad
- Centralized Logging: ELK stack para logs
- Real-time Alerting: Alertas proactivas de problemas
- API Security: OAuth 2.0, JWT, API Keys
- Data Encryption: En tránsito y en reposo
- Security Scanning: Análisis automático de vulnerabilidades
- Compliance: GDPR, PCI DSS, SOC 2