first commit
This commit is contained in:
84
microservices_example.md
Normal file
84
microservices_example.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# Microservices Architecture Example
|
||||
|
||||
## Service Decomposition
|
||||
|
||||
### 1. Sensor Data Service
|
||||
**Responsibility**: Sensor data ingestion, validation, and storage
|
||||
```
|
||||
Port: 8001
|
||||
Database: sensor_db (MongoDB)
|
||||
Endpoints:
|
||||
- POST /sensors/data # Ingest sensor readings
|
||||
- GET /sensors/{id}/data # Get sensor history
|
||||
- GET /sensors # List sensors
|
||||
```
|
||||
|
||||
### 2. Room Management Service
|
||||
**Responsibility**: Room metrics, aggregations, and space management
|
||||
```
|
||||
Port: 8002
|
||||
Database: room_db (MongoDB)
|
||||
Endpoints:
|
||||
- GET /rooms # List rooms
|
||||
- GET /rooms/{id}/metrics # Current room metrics
|
||||
- GET /rooms/{id}/history # Historical room data
|
||||
```
|
||||
|
||||
### 3. Analytics Service
|
||||
**Responsibility**: Data analysis, reporting, and insights
|
||||
```
|
||||
Port: 8003
|
||||
Database: analytics_db (PostgreSQL/ClickHouse)
|
||||
Endpoints:
|
||||
- GET /analytics/summary # Dashboard summary
|
||||
- GET /analytics/trends # Trend analysis
|
||||
- GET /analytics/reports/{id} # Generated reports
|
||||
```
|
||||
|
||||
### 4. Notification Service
|
||||
**Responsibility**: Alerts, events, and real-time notifications
|
||||
```
|
||||
Port: 8004
|
||||
Database: events_db (MongoDB)
|
||||
Message Queue: RabbitMQ/Kafka
|
||||
Endpoints:
|
||||
- POST /notifications/send # Send notification
|
||||
- GET /events # System events
|
||||
- WebSocket: /ws/notifications # Real-time alerts
|
||||
```
|
||||
|
||||
### 5. API Gateway
|
||||
**Responsibility**: Request routing, authentication, rate limiting
|
||||
```
|
||||
Port: 8000
|
||||
Routes all requests to appropriate services
|
||||
Handles CORS, authentication, logging
|
||||
```
|
||||
|
||||
## Inter-Service Communication
|
||||
|
||||
### Synchronous (HTTP/REST)
|
||||
```python
|
||||
# Analytics Service calling Sensor Service
|
||||
import httpx
|
||||
|
||||
async def get_sensor_data(sensor_id: str):
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.get(f"http://sensor-service:8001/sensors/{sensor_id}/data")
|
||||
return response.json()
|
||||
```
|
||||
|
||||
### Asynchronous (Message Queue)
|
||||
```python
|
||||
# Sensor Service publishes event
|
||||
await message_queue.publish("sensor.data.received", {
|
||||
"sensor_id": "sensor_001",
|
||||
"timestamp": datetime.utcnow(),
|
||||
"data": sensor_reading
|
||||
})
|
||||
|
||||
# Room Service subscribes to event
|
||||
@message_queue.subscribe("sensor.data.received")
|
||||
async def handle_sensor_data(message):
|
||||
await room_service.update_room_metrics(message.data)
|
||||
```
|
||||
Reference in New Issue
Block a user