Skip to content

Commit

Permalink
Make html
Browse files Browse the repository at this point in the history
  • Loading branch information
dixnne committed Oct 18, 2024
1 parent 7d3cea0 commit c567884
Show file tree
Hide file tree
Showing 2,577 changed files with 468,765 additions and 584 deletions.
11 changes: 7 additions & 4 deletions book/chapters.adoc
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
// Image route per chapter
ifndef::backend-pdf[]
:imagesdir: book/chapters/_example/images/
endif::[]
include::chapters/1-server/1-server.adoc[]

include::chapters/2-db/2-db.adoc[]

include::chapters/3-rest/3-rest.adoc[]

include::chapters/4-costs/4-costs.adoc[]

include::chapters/5-backend/5-backend.adoc[]

include::chapters/6-frontend/6-frontend.adoc[]

include::chapters/7-professionals/7-professionals.adoc[]

include::chapters/8-timelimits/8-timelimits.adoc[]
250 changes: 125 additions & 125 deletions book/chapters/1-server/1-server.adoc

Large diffs are not rendered by default.

116 changes: 58 additions & 58 deletions book/chapters/2-db/2-db.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -15,73 +15,73 @@ El diseño de la base de datos para la Nintendo eShop debe ser capaz de manejar
El diseño principal de la base de datos se basa en una arquitectura relacional con las siguientes entidades clave:

1. **Tabla `Users`** (Usuarios)
- Esta tabla almacena la información de los usuarios registrados en la plataforma.
- **Campos**:
- `user_id` (PK, int, auto-increment): Identificador único del usuario.
- `username` (varchar, único): Nombre de usuario.
- `email` (varchar, único): Dirección de correo electrónico.
- `password` (varchar): Hash de la contraseña del usuario.
- `subscription_status` (enum: 'active', 'inactive', 'expired'): Estado de la suscripción.
- `created_at` (timestamp): Fecha de creación del perfil.
- `last_login` (timestamp): Último inicio de sesión.
- `country` (varchar): País del usuario, importante para localizar servicios y precios regionales.
* Esta tabla almacena la información de los usuarios registrados en la plataforma.
* **Campos**:
** `user_id` (PK, int, auto*increment): Identificador único del usuario.
** `username` (varchar, único): Nombre de usuario.
** `email` (varchar, único): Dirección de correo electrónico.
** `password` (varchar): Hash de la contraseña del usuario.
** `subscription_status` (enum: 'active', 'inactive', 'expired'): Estado de la suscripción.
** `created_at` (timestamp): Fecha de creación del perfil.
** `last_login` (timestamp): Último inicio de sesión.
** `country` (varchar): País del usuario, importante para localizar servicios y precios regionales.

2. **Tabla `Products`** (Productos)
- Almacena todos los juegos, DLCs y demás productos que la Nintendo eShop tiene disponibles.
- **Campos**:
- `product_id` (PK, int, auto-increment): Identificador único del producto.
- `title` (varchar): Nombre del juego o producto.
- `description` (text): Descripción del producto.
- `price` (decimal): Precio del producto.
- `category_id` (FK, int): Categoría a la que pertenece el producto.
- `release_date` (date): Fecha de lanzamiento del juego.
- `stock` (int): Cantidad disponible (si aplica, en el caso de productos digitales generalmente ilimitado).
- `rating` (decimal): Clasificación promedio de los usuarios.
* Almacena todos los juegos, DLCs y demás productos que la Nintendo eShop tiene disponibles.
* **Campos**:
** `product_id` (PK, int, auto*increment): Identificador único del producto.
** `title` (varchar): Nombre del juego o producto.
** `description` (text): Descripción del producto.
** `price` (decimal): Precio del producto.
** `category_id` (FK, int): Categoría a la que pertenece el producto.
** `release_date` (date): Fecha de lanzamiento del juego.
** `stock` (int): Cantidad disponible (si aplica, en el caso de productos digitales generalmente ilimitado).
** `rating` (decimal): Clasificación promedio de los usuarios.

3. **Tabla `Categories`** (Categorías)
- Almacena las categorías de productos (como géneros de juegos, tipos de productos, etc.).
- **Campos**:
- `category_id` (PK, int, auto-increment): Identificador único de la categoría.
- `name` (varchar): Nombre de la categoría (ej. "Aventura", "Acción", "RPG").
- `description` (text): Descripción de la categoría.
* Almacena las categorías de productos (como géneros de juegos, tipos de productos, etc.).
* **Campos**:
** `category_id` (PK, int, auto*increment): Identificador único de la categoría.
** `name` (varchar): Nombre de la categoría (ej. "Aventura", "Acción", "RPG").
** `description` (text): Descripción de la categoría.

4. **Tabla `Transactions`** (Transacciones)
- Almacena todas las transacciones realizadas por los usuarios.
- **Campos**:
- `transaction_id` (PK, int, auto-increment): Identificador único de la transacción.
- `user_id` (FK, int): Referencia al usuario que realizó la compra.
- `total_amount` (decimal): Monto total de la transacción.
- `payment_method` (varchar): Método de pago utilizado.
- `status` (enum: 'pending', 'completed', 'failed'): Estado de la transacción.
- `transaction_date` (timestamp): Fecha y hora de la transacción.
* Almacena todas las transacciones realizadas por los usuarios.
* **Campos**:
** `transaction_id` (PK, int, auto*increment): Identificador único de la transacción.
** `user_id` (FK, int): Referencia al usuario que realizó la compra.
** `total_amount` (decimal): Monto total de la transacción.
** `payment_method` (varchar): Método de pago utilizado.
** `status` (enum: 'pending', 'completed', 'failed'): Estado de la transacción.
** `transaction_date` (timestamp): Fecha y hora de la transacción.

5. **Tabla `Transaction_Details`** (Detalles de la Transacción)
- Detalla los productos adquiridos en cada transacción.
- **Campos**:
- `transaction_detail_id` (PK, int, auto-increment): Identificador único del detalle de transacción.
- `transaction_id` (FK, int): Identificador de la transacción principal.
- `product_id` (FK, int): Producto adquirido.
- `quantity` (int): Cantidad de productos adquiridos (para productos físicos o suscripciones).
* Detalla los productos adquiridos en cada transacción.
* **Campos**:
** `transaction_detail_id` (PK, int, auto*increment): Identificador único del detalle de transacción.
** `transaction_id` (FK, int): Identificador de la transacción principal.
** `product_id` (FK, int): Producto adquirido.
** `quantity` (int): Cantidad de productos adquiridos (para productos físicos o suscripciones).

6. **Tabla `Subscriptions`** (Suscripciones)
- Almacena la información sobre las suscripciones de los usuarios al servicio online.
- **Campos**:
- `subscription_id` (PK, int, auto-increment): Identificador único de la suscripción.
- `user_id` (FK, int): Identificador del usuario.
- `subscription_type` (varchar): Tipo de suscripción (por ejemplo, "mensual", "anual").
- `start_date` (date): Fecha de inicio de la suscripción.
- `end_date` (date): Fecha de finalización de la suscripción.
- `status` (enum: 'active', 'expired', 'cancelled'): Estado de la suscripción.
* Almacena la información sobre las suscripciones de los usuarios al servicio online.
* **Campos**:
** `subscription_id` (PK, int, auto*increment): Identificador único de la suscripción.
** `user_id` (FK, int): Identificador del usuario.
** `subscription_type` (varchar): Tipo de suscripción (por ejemplo, "mensual", "anual").
** `start_date` (date): Fecha de inicio de la suscripción.
** `end_date` (date): Fecha de finalización de la suscripción.
** `status` (enum: 'active', 'expired', 'cancelled'): Estado de la suscripción.

7. **Tabla `Reviews`** (Reseñas de Productos)
- Permite a los usuarios dejar opiniones y calificaciones de los productos que han comprado.
- **Campos**:
- `review_id` (PK, int, auto-increment): Identificador único de la reseña.
- `user_id` (FK, int): Referencia al usuario que realizó la reseña.
- `product_id` (FK, int): Referencia al producto reseñado.
- `rating` (int): Puntuación otorgada al producto (por ejemplo, entre 1 y 5 estrellas).
- `review` (text): Texto de la reseña.
- `created_at` (timestamp): Fecha en que se dejó la reseña.
* Permite a los usuarios dejar opiniones y calificaciones de los productos que han comprado.
* **Campos**:
** `review_id` (PK, int, auto*increment): Identificador único de la reseña.
** `user_id` (FK, int): Referencia al usuario que realizó la reseña.
** `product_id` (FK, int): Referencia al producto reseñado.
** `rating` (int): Puntuación otorgada al producto (por ejemplo, entre 1 y 5 estrellas).
** `review` (text): Texto de la reseña.
** `created_at` (timestamp): Fecha en que se dejó la reseña.

==== Diagrama de Base de Datos

Expand Down Expand Up @@ -181,6 +181,6 @@ Ref: Products.product_id > Reviews.product_id

Para una plataforma de la magnitud de la Nintendo eShop, un sistema de base de datos relacional robusto y escalable es esencial. Las siguientes opciones se consideran ideales:

- **PostgreSQL**: Ofrece características avanzadas como particionamiento nativo y soporte para JSON, lo que puede ser útil si es necesario almacenar datos semiestructurados. PostgreSQL es también altamente escalable y tiene una gran comunidad de soporte.
- **MySQL**: Es una opción ampliamente utilizada en Ecommerce, conocida por su velocidad en lecturas y su robustez. Con la configuración adecuada, MySQL puede manejar grandes volúmenes de datos.
- **Base de datos distribuida (Cassandra, CockroachDB)**: Si la necesidad de escalabilidad es extrema, una base de datos distribuida como Cassandra o CockroachDB puede manejar grandes volúmenes de datos replicados globalmente, pero requiere un mayor esfuerzo de mantenimiento y configuración.
* **PostgreSQL**: Ofrece características avanzadas como particionamiento nativo y soporte para JSON, lo que puede ser útil si es necesario almacenar datos semiestructurados. PostgreSQL es también altamente escalable y tiene una gran comunidad de soporte.
* **MySQL**: Es una opción ampliamente utilizada en Ecommerce, conocida por su velocidad en lecturas y su robustez. Con la configuración adecuada, MySQL puede manejar grandes volúmenes de datos.
* **Base de datos distribuida (Cassandra, CockroachDB)**: Si la necesidad de escalabilidad es extrema, una base de datos distribuida como Cassandra o CockroachDB puede manejar grandes volúmenes de datos replicados globalmente, pero requiere un mayor esfuerzo de mantenimiento y configuración.
98 changes: 50 additions & 48 deletions book/chapters/4-costs/4-costs.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -7,107 +7,109 @@ Para ofrecer una visión completa de los costos potenciales de la plataforma **N
En este entorno, la carga de trabajo es moderada y las necesidades de escalabilidad son mínimas. Se espera un volumen de transacciones significativamente menor que el máximo estimado de **10 millones de transacciones diarias** (probablemente entre 1 y 2 millones).

==== Infraestructura de Servidores
- **Instancias de servidores medianas** (AWS EC2, GCP o Azure): 2-4 instancias.
- **Costo de balanceadores de carga y CDN**: Menor uso de servicios de distribución.
- **Costo estimado**: $2,000 - $5,000 USD/mes.
* **Instancias de servidores medianas** (AWS EC2, GCP o Azure): 2*4 instancias.
* **Costo de balanceadores de carga y CDN**: Menor uso de servicios de distribución.
** **Costo estimado**: $2,000 * $5,000 USD/mes.

==== Bases de Datos
- **DynamoDB para transacciones masivas**: Uso limitado.
- **PostgreSQL para transacciones críticas**: Instancias medianas.
- **Costo estimado**: $2,000 - $4,000 USD/mes.
* **DynamoDB para transacciones masivas**: Uso limitado.
* **PostgreSQL para transacciones críticas**: Instancias medianas.
** **Costo estimado**: $2,000 * $4,000 USD/mes.

==== Backend
- Backend en **Node.js** desplegado en pocas instancias.
- **Costo estimado**: $200 - $500 USD/mes.
* Backend en **Node.js** desplegado en pocas instancias.
** **Costo estimado**: $200 * $500 USD/mes.

==== Frontend
- **Despliegue en Vercel/Netlify** o un servicio similar con CDN básico.
- **Costo estimado**: $500 - $1,500 USD/mes.
* **Despliegue en Vercel/Netlify** o un servicio similar con CDN básico.
** **Costo estimado**: $500 * $1,500 USD/mes.

==== Costos de Desarrollo y Personal
- Equipo reducido: 3-4 desarrolladores en total (backend, frontend, DevOps).
- **Costo estimado**: $30,000 - $50,000 USD/mes.
* Equipo reducido: 3*4 desarrolladores en total (backend, frontend, DevOps).
** **Costo estimado**: $30,000 * $50,000 USD/mes.

==== Operación Continua y Mantenimiento
- **Monitoreo** básico, menor esfuerzo en mantenimiento.
- **Costo estimado**: $5,000 - $8,000 USD/mes.
* **Monitoreo** básico, menor esfuerzo en mantenimiento.
** **Costo estimado**: $5,000 * $8,000 USD/mes.

==== Costo Total Aproximado Mensual (Entorno Bajo):
- **$39,700 - $69,000 USD/mes**.
* **$39,700 * $69,000 USD/mes**.

=== Entorno Normal (Escala intermedia / Demanda moderada)

Este escenario representa una operación más estándar para un sistema como la Nintendo eShop, con un volumen de transacciones entre **3 y 5 millones de transacciones diarias**.

==== Infraestructura de Servidores
- **Instancias más grandes** y escalables, con varias réplicas y redundancia.
- **Balanceadores de carga** y **CDN** más robustos.
- **Costo estimado**: $5,000 - $10,000 USD/mes.
* **Instancias más grandes** y escalables, con varias réplicas y redundancia.
* **Balanceadores de carga** y **CDN** más robustos.
** **Costo estimado**: $5,000 * $10,000 USD/mes.

==== Bases de Datos
- **DynamoDB** con mayor capacidad de lectura/escritura.
- **PostgreSQL** gestionado en RDS u otro servicio equivalente.
- **Costo estimado**: $5,000 - $8,000 USD/mes.
* **DynamoDB** con mayor capacidad de lectura/escritura.
* **PostgreSQL** gestionado en RDS u otro servicio equivalente.
** **Costo estimado**: $5,000 * $8,000 USD/mes.

==== Backend
- Backend distribuido en varias instancias.
- **Costo estimado**: $500 - $1,000 USD/mes.
* Backend distribuido en varias instancias.
** **Costo estimado**: $500 * $1,000 USD/mes.

==== Frontend
- **Despliegue avanzado con CDN** para manejar tráfico global.
- **Costo estimado**: $1,500 - $3,000 USD/mes.
* **Despliegue avanzado con CDN** para manejar tráfico global.
** **Costo estimado**: $1,500 * $3,000 USD/mes.

==== Costos de Desarrollo y Personal
- Equipo ampliado: 6-8 desarrolladores.
- **Costo estimado**: $50,000 - $80,000 USD/mes.
* Equipo ampliado: 6*8 desarrolladores.
** **Costo estimado**: $50,000 * $80,000 USD/mes.

==== Operación Continua y Mantenimiento
- Mayor inversión en monitoreo, alertas y soporte continuo.
- **Costo estimado**: $8,000 - $15,000 USD/mes.
* Mayor inversión en monitoreo, alertas y soporte continuo.
** **Costo estimado**: $8,000 * $15,000 USD/mes.

==== Costo Total Aproximado Mensual (Entorno Normal):
- **$70,000 - $117,000 USD/mes**.
* **$70,000 * $117,000 USD/mes**.

=== Entorno Crítico (Alta Escala / Máxima demanda)

Este es el entorno más complejo y avanzado, diseñado para manejar el volumen máximo esperado de **10 millones de transacciones diarias**, con alta disponibilidad, redundancia global, y operaciones 24/7 sin interrupciones.

==== Infraestructura de Servidores
- **Instancias de alta capacidad** (dedicadas o muy grandes) y con múltiples réplicas.
- **Balanceadores de carga globales** y **CDN de alta gama** para garantizar bajas latencias.
- **Costo estimado**: $10,000 - $20,000 USD/mes.
* **Instancias de alta capacidad** (dedicadas o muy grandes) y con múltiples réplicas.
* **Balanceadores de carga globales** y **CDN de alta gama** para garantizar bajas latencias.
** **Costo estimado**: $10,000 * $20,000 USD/mes.

==== Bases de Datos
- **DynamoDB** para grandes volúmenes de transacciones, con escalabilidad automática.
- **PostgreSQL** con instancias dedicadas de alto rendimiento.
- **Costo estimado**: $7,000 - $12,000 USD/mes.
* **DynamoDB** para grandes volúmenes de transacciones, con escalabilidad automática.
* **PostgreSQL** con instancias dedicadas de alto rendimiento.
** **Costo estimado**: $7,000 * $12,000 USD/mes.

==== Backend
- **Despliegue distribuido** en múltiples regiones, con microservicios y mayor capacidad.
- **Costo estimado**: $1,000 - $2,000 USD/mes.
* **Despliegue distribuido** en múltiples regiones, con microservicios y mayor capacidad.
** **Costo estimado**: $1,000 * $2,000 USD/mes.

==== Frontend
- **Despliegue en una red global** de CDN con baja latencia y gran capacidad para picos de tráfico.
- **Costo estimado**: $3,000 - $5,000 USD/mes.
* **Despliegue en una red global** de CDN con baja latencia y gran capacidad para picos de tráfico.
** **Costo estimado**: $3,000 * $5,000 USD/mes.

==== Costos de Desarrollo y Personal
- Equipo completo: 10+ personas (backend, frontend, DevOps, QA, UX/UI).
- **Costo estimado**: $80,000 - $120,000 USD/mes.
* Equipo completo: 10+ personas (backend, frontend, DevOps, QA, UX/UI).
** **Costo estimado**: $80,000 * $120,000 USD/mes.

==== Operación Continua y Mantenimiento
- Soporte continuo 24/7, con inversión en monitoreo avanzado y alertas.
- **Costo estimado**: $15,000 - $30,000 USD/mes.
* Soporte continuo 24/7, con inversión en monitoreo avanzado y alertas.
** **Costo estimado**: $15,000 * $30,000 USD/mes.

==== Costo Total Aproximado Mensual (Entorno Crítico):
- **$116,000 - $189,000 USD/mes**.
* **$116,000 * $189,000 USD/mes**.

=== Resumen de Costos

[options="header"]
|========================================================
| Entorno | Costo Estimado Mensual (USD)
| **Bajo** | $39,700 - $69,000 USD/mes
| **Normal** | $70,000 - $117,000 USD/mes
| **Crítico** | $116,000 - $189,000 USD/mes
| **Bajo** | $39,700 * $69,000 USD/mes
| **Normal** | $70,000 * $117,000 USD/mes
| **Crítico** | $116,000 * $189,000 USD/mes
|========================================================

***

Loading

0 comments on commit c567884

Please sign in to comment.