Как дебажил межсервисное взаимодействие

«Как дебажил межсервисное взаимодействие» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для дебага межсервисного взаимодействия в Go я обычно использую:

  1. Логирование - добавляю детальные логи на входящие/исходящие запросы:
log.Printf("Request to %s: %+v", url, req)
resp, err := client.Do(req)
log.Printf("Response: %+v, Error: %v", resp, err)
  1. HTTP клиент с трассировкой:
client := &http.Client{
    Transport: &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
    },
}
  1. Инструменты:
  • Wireshark/tcpdump для анализа сетевого трафика
  • Postman для ручной проверки эндпоинтов
  • gRPC UI для gRPC сервисов
  1. Метрики и трейсы - OpenTelemetry для распределенной трассировки:
tracer := otel.Tracer("service-name")
ctx, span := tracer.Start(ctx, "api-call")
defer span.End()

Для сложных случаев использую mock-серверы (httptest.Server) в тестах.