Skip to content

Commit 2266a13

Browse files
authored
Merge pull request #9 from Sh0cko/main
Refactorización de monolitos a microservicios en PHP
2 parents cb3663a + 904299a commit 2266a13

File tree

1 file changed

+102
-0
lines changed
  • docs/temas/Refactorización de monolitos a microservicios en PHP

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
# Refactorización de monolitos a microservicios en PHP
2+
### Joel Cuevas Estrada - 22210298
3+
4+
Migrar un monolito en PHP hacia una arquitectura de microservicios es un proceso que requiere estrategia, ya que no se trata solo de dividir código, sino de transformar la manera en que tu sistema funciona, escala y se mantiene. Te hago un desglose en pasos, buenas prácticas y ejemplos aplicados a PHP:
5+
6+
## 1. Evaluación del monolito
7+
8+
Antes de separar, identifica:
9+
10+
- Módulos lógicos claros: autenticación, facturación, catálogo, notificaciones, etc.
11+
12+
- Dependencias internas: qué partes del código se llaman entre sí.
13+
14+
- Cuellos de botella: consultas pesadas, controladores muy grandes, partes difíciles de testear.
15+
16+
## 2. Definir límites (Bounded Contexts)
17+
18+
Inspírate en Domain-Driven Design (DDD):
19+
- Cada microservicio debe cubrir un dominio específico.
20+
21+
- Ejemplo en un e-commerce en PHP:
22+
User Service → registro/login, tokens JWT
23+
Catalog Service → productos, categorías
24+
Order Service → pedidos y pagos
25+
Notification Service → emails y SMS
26+
27+
## 3. Preparar comunicación entre servicios
28+
En PHP puedes usar varios enfoques:
29+
- REST con Slim o Laravel Lumen → servicios ligeros.
30+
- gRPC (con extensiones PHP) → más rápido en sistemas complejos.
31+
- Mensajería asíncrona (RabbitMQ, Kafka) → para procesos como correos o logs.
32+
33+
## 4. Refactor paso a paso
34+
- Extrae un servicio pequeño del monolito (ej. notificaciones).
35+
- Expón una API para ese servicio.
36+
- Haz que el monolito consuma esa API en lugar del código interno.
37+
- Itera con otros módulos hasta reducir el monolito a un núcleo mínimo.
38+
39+
## 5. Manejo de datos
40+
- El monolito probablemente tenga una sola base de datos (MySQL, MariaDB, PostgreSQL).
41+
- En microservicios, cada servicio debería tener su propia base de datos o esquema.
42+
- Si no puedes separarlo aún, comienza con schemas separados dentro de la misma BD.
43+
44+
## 6. Observabilidad y despliegue
45+
- Logs centralizados (Graylog, ELK, Monolog en PHP).
46+
- Health checks para cada microservicio.
47+
- Contenerización con Docker + Docker Compose para orquestar microservicios PHP.
48+
- Eventualmente, migrar a Kubernetes si el sistema crece.
49+
50+
## 7. Herramientas útiles en PHP
51+
- Frameworks ligeros: Slim, Lumen, Symfony MicroKernel.
52+
- Autenticación: JWT con Firebase PHP JWT.
53+
- Mensajería: php-amqplib (RabbitMQ).
54+
- Service Discovery: Consul o Eureka (aunque en PHP suelen delegarse a Docker/K8s).
55+
56+
## Ejemplo practica
57+
58+
### Monolito (antes)
59+
Supongamos que tienes un monolito Laravel y separas el módulo de notificaciones:
60+
Monolito (antes)
61+
```` php
62+
// Dentro del monolito
63+
class OrderController {
64+
public function store(Request $request) {
65+
$order = Order::create($request->all());
66+
Notification::send($order->user, new OrderCreated($order));
67+
return response()->json($order);
68+
}
69+
}
70+
````
71+
### Después de extraer a microservicio (Slim API)
72+
```` php
73+
// Notification Service (API independiente)
74+
$app->post('/send', function ($request, $response) {
75+
$data = $request->getParsedBody();
76+
mail($data['email'], "Order Created", "Your order #{$data['order_id']} was created.");
77+
return $response->withJson(['status' => 'sent']);
78+
});
79+
````
80+
### Después de extraer a microservicio (Slim API)
81+
````php
82+
83+
class OrderController {
84+
public function store(Request $request) {
85+
$order = Order::create($request->all());
86+
Http::post('http://notification-service/send', [
87+
'email' => $order->user->email,
88+
'order_id' => $order->id
89+
]);
90+
return response()->json($order);
91+
}
92+
}
93+
````
94+
## Bibliografia
95+
96+
Fowler, M. (2015). Microservices: a definition of this new architectural term. MartinFowler.com. https://martinfowler.com/articles/microservices.html
97+
98+
Balalaie, A., Heydarnoori, A., & Jamshidi, P. (2016). Microservices architecture enables DevOps: Migration to a cloud-native architecture. IEEE Software, 33(3), 42–52. https://doi.org/10.1109/MS.2016.64
99+
100+
Vogel, A. (2019). Migrating from Monolith to Microservices. InfoQ. https://www.infoq.com/articles/migrating-monolith-microservices/
101+
102+
PHP-FIG. (2020). PHP Standards Recommendations (PSR). PHP Framework Interop Group. https://www.php-fig.org/psr/

0 commit comments

Comments
 (0)