save progress
This commit is contained in:
173
docs/router/transports/udp.md
Normal file
173
docs/router/transports/udp.md
Normal file
@@ -0,0 +1,173 @@
|
||||
# UDP Transport
|
||||
|
||||
The UDP transport provides connectionless, fire-and-forget messaging suitable for broadcast notifications and scenarios where delivery guarantees are not critical.
|
||||
|
||||
## Overview
|
||||
|
||||
| Property | Value |
|
||||
|----------|-------|
|
||||
| Plugin Assembly | `StellaOps.Router.Transport.Udp.dll` |
|
||||
| Transport Name | `udp` |
|
||||
| Default Port | 5102 |
|
||||
| Security | Network isolation (no encryption) |
|
||||
| Use Case | Broadcast, metrics, fire-and-forget events |
|
||||
|
||||
## Configuration
|
||||
|
||||
### router.yaml
|
||||
|
||||
```yaml
|
||||
Router:
|
||||
Transport:
|
||||
Type: udp
|
||||
Udp:
|
||||
Host: "0.0.0.0"
|
||||
Port: 5102
|
||||
ReceiveBufferSize: 65536
|
||||
SendBufferSize: 65536
|
||||
MulticastGroup: null # Optional multicast group
|
||||
MulticastTtl: 1
|
||||
EnableBroadcast: false
|
||||
```
|
||||
|
||||
### microservice.yaml
|
||||
|
||||
```yaml
|
||||
routers:
|
||||
- host: gateway.internal
|
||||
port: 5102
|
||||
transportType: Udp
|
||||
priority: 1
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
|
||||
```bash
|
||||
ROUTER__TRANSPORT__TYPE=udp
|
||||
ROUTER__TRANSPORT__UDP__HOST=0.0.0.0
|
||||
ROUTER__TRANSPORT__UDP__PORT=5102
|
||||
```
|
||||
|
||||
## Options Reference
|
||||
|
||||
| Option | Type | Default | Description |
|
||||
|--------|------|---------|-------------|
|
||||
| `Host` | string | `0.0.0.0` | Bind address |
|
||||
| `Port` | int | `5102` | UDP port number |
|
||||
| `ReceiveBufferSize` | int | `65536` | Socket receive buffer size |
|
||||
| `SendBufferSize` | int | `65536` | Socket send buffer size |
|
||||
| `MulticastGroup` | string | `null` | Multicast group address (e.g., `239.1.2.3`) |
|
||||
| `MulticastTtl` | int | `1` | Multicast time-to-live |
|
||||
| `EnableBroadcast` | bool | `false` | Allow broadcast to `255.255.255.255` |
|
||||
| `MaxDatagramSize` | int | `65507` | Maximum UDP datagram size |
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Fire-and-Forget Events
|
||||
|
||||
For events where acknowledgment is not required:
|
||||
|
||||
```csharp
|
||||
[StellaEndpoint("POST", "/events/metrics", FireAndForget = true)]
|
||||
public sealed class MetricsEndpoint : IStellaEndpoint<MetricsBatch, EmptyResponse>
|
||||
{
|
||||
public Task<EmptyResponse> HandleAsync(MetricsBatch request, CancellationToken ct)
|
||||
{
|
||||
// Process metrics - no response expected
|
||||
return Task.FromResult(new EmptyResponse());
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Multicast Broadcasting
|
||||
|
||||
For broadcasting to multiple listeners:
|
||||
|
||||
```yaml
|
||||
Router:
|
||||
Transport:
|
||||
Type: udp
|
||||
Udp:
|
||||
MulticastGroup: "239.0.1.1"
|
||||
MulticastTtl: 2
|
||||
```
|
||||
|
||||
Services join the multicast group to receive broadcasts:
|
||||
|
||||
```csharp
|
||||
// All services with this config receive broadcasts
|
||||
routers:
|
||||
- host: "239.0.1.1"
|
||||
port: 5102
|
||||
transportType: Udp
|
||||
```
|
||||
|
||||
## Performance Characteristics
|
||||
|
||||
| Metric | Typical Value |
|
||||
|--------|---------------|
|
||||
| Latency (p50) | < 0.5ms |
|
||||
| Latency (p99) | < 2ms |
|
||||
| Throughput | 150,000+ pps |
|
||||
| Memory per socket | ~1KB |
|
||||
|
||||
*Note: No delivery guarantees; packets may be lost under load*
|
||||
|
||||
## Limitations
|
||||
|
||||
1. **No delivery guarantees**: Packets may be dropped
|
||||
2. **No ordering guarantees**: Packets may arrive out of order
|
||||
3. **Size limits**: Maximum datagram size ~65KB (64KB practical limit)
|
||||
4. **No acknowledgments**: Sender doesn't know if message was received
|
||||
5. **No fragmentation handling**: Large messages must fit in single datagram
|
||||
|
||||
## When to Use UDP
|
||||
|
||||
**Good fit:**
|
||||
- Real-time metrics and telemetry
|
||||
- Service discovery announcements
|
||||
- Health check broadcasts
|
||||
- Low-latency gaming or streaming metadata
|
||||
|
||||
**Not recommended:**
|
||||
- Transaction processing
|
||||
- Data that must not be lost
|
||||
- Large payloads (use TCP/TLS instead)
|
||||
|
||||
## Security Considerations
|
||||
|
||||
UDP transport does **not** provide encryption or authentication. Consider:
|
||||
|
||||
- Network segmentation
|
||||
- Firewall rules to restrict UDP traffic
|
||||
- Application-level message signing if integrity is needed
|
||||
- DTLS wrapper for encrypted UDP (not built-in)
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Messages Not Received
|
||||
|
||||
1. Check firewall allows UDP traffic on the configured port
|
||||
2. Verify receiver is bound to correct address/port
|
||||
3. Check for buffer overflow (increase `ReceiveBufferSize`)
|
||||
4. Monitor for packet loss with network tools
|
||||
|
||||
### Multicast Not Working
|
||||
|
||||
1. Verify multicast routing is enabled on network
|
||||
2. Check `MulticastTtl` is sufficient for network topology
|
||||
3. Ensure IGMP snooping is properly configured
|
||||
4. Verify all receivers joined the multicast group
|
||||
|
||||
### High Packet Loss
|
||||
|
||||
1. Reduce message rate
|
||||
2. Increase buffer sizes
|
||||
3. Check for network congestion
|
||||
4. Consider switching to TCP for reliable delivery
|
||||
|
||||
## See Also
|
||||
|
||||
- [TCP Transport](./tcp.md) - Reliable delivery
|
||||
- [Transport Overview](./README.md)
|
||||
- [Router Architecture](../ARCHITECTURE.md)
|
||||
Reference in New Issue
Block a user