Ответ
Разрабатывал распределённый сервис для обработки событий в реальном времени на Go. Использовал Kafka для очередей, gRPC для межсервисного взаимодействия и ClickHouse для хранения аналитики.
Особенности:
- Кастомный балансировщик нагрузки на основе consistent hashing
- Оптимизированный протокол сериализации (Protocol Buffers + сжатие)
- Graceful shutdown с дообработкой очереди
// Упрощённый пример обработчика событий
func (s *Service) ProcessEvents(ctx context.Context) error {
for {
select {
case <-ctx.Done():
return s.drainQueue() // Дообработка при завершении
case event := <-s.eventChan:
if err := s.handleEvent(event); err != nil {
s.metrics.ErrorInc()
continue
}
s.metrics.SuccessInc()
}
}
}
Проект обрабатывал 50k+ RPS с p99 < 100ms.