Zalando SE
// problem
Problem
Zalandos Bestell-Pipeline basierte auf synchrone REST-Aufrufe zwischen 180+ Microservices. Bei Traffic-Spitzen kaskadierten Timeouts. p99-Latency lag bei 2.4 Sekunden im Checkout-Flow.
// approach
Approach
Stufenweise Migration auf Event-Sourcing mit Kafka als Backbone. Jeder Service wurde einzeln migriert — zuerst Event-Publishing parallel zum REST-Call, dann Umstellung des Consumers. Die alte REST-Route blieb als Fallback 4 Wochen aktiv. Parallel wurde ein Dead-Letter-Queue-System aufgebaut um verwaiste Events abzufangen.
// code
func (p *EventPublisher) PublishOrderCreated(
ctx context.Context,
order Order,
) error {
event := OrderCreatedEvent{
ID: uuid.New(),
OrderID: order.ID,
Payload: order.ToPayload(),
Timestamp: time.Now().UTC(),
Version: schema.V2, // dual-write compat
}
msg, _ := json.Marshal(event)
return p.kafka.Produce(ctx, &kafka.Message{
TopicPartition: kafka.TopicPartition{
Topic: &p.topic,
Partition: kafka.PartitionAny,
},
Value: msg,
Headers: []kafka.Header{
{Key: "event-type", Value: []byte("order.created.v2")},
{Key: "trace-id", Value: []byte(trace.FromContext(ctx))},
},
})
} // outcome
Ergebnis
73% Reduktion der Inter-Service-Latency p99 (2.4s → 0.65s)
Zero-Downtime über die komplette 14-monatige Migration
Checkout-Fehlerquote von 1.2% auf 0.03% gesenkt
Grundlage für Real-Time-Inventory-Tracking geschaffen