Pull to refresh

Comments 4

Подход запрос-ответ через брокер считается дурной практикой, если вам нужно чтобы был ответ на запрос то лучше ставить сервисы за балансировщик. Брокеры нужны чтобы "когда-нибудь" обрабатывать сообщения, а не моментально отвечать

статья похожа на набор вредных советов. Тут кафка как собаке 5 нога:
* api gateway невозможно масштабировать, при падении он всё потеряет
* ключи(поле key) в кафке для выбора партиций используют, здесь партиция только 0, кафку тоже получается не замасштабируешь. Нужно коньюмер группу для этого использовать
* second microservice тоже не масштабирутся потому что 1 инстанс сервиса == 1 партиция кафки.
?

В 3-й версии Docker Compose была удалена функция "depends_on" для контроля за зависимостями сервисами, которая была доступна в 2-й версии. Эта функция позволяла автоматически ожидать, пока зависимые сервисы будут полностью запущены, прежде чем запускать зависящий сервис.

Вы тут немного путаете, в самом docker compose depends_on остаётся и работает, а вот в docker swarm он игнорируется

Я еще я заметил сразу не читая весь код целиком, что вы любите паниковать, тем самым нарушая один из принципов самого GO.

if err != nil {
		panic(err)
	}

В таких местах лучше заменить на Fatal, а лучше вообще обработать ошибку.

go func() {
		for {
			select {
			case msg := <-partConsumer.Messages():
				responseID := string(msg.Key)
				mu.Lock()
				ch, exists := responseChannels[responseID]
				if exists {
					ch <- msg
					delete(responseChannels, responseID)
				}
				mu.Unlock()
			}
		}
	}()

А вот в этой горутине вы читаете из канала, при этом никак не обрабатывая дефолт, например на случай если канал уже закрыт.

requestID := fmt.Sprintf("%d", time.Now().UnixNano())

responseChannels[requestID] = responseCh

А вот таким кодом есть риск поломаться, если в хендлер придет нагрузка, вы конечно можете сказать ято это прекрасный вариант схлопнуть запросу, скажу что нет. Для этого используйте sync и SingleFlightGroup.

И это я глянул только 1 сервис, не смотря что там дальше, при этом я не го разработчик, а девопс. Но даже я на своем уровне знания код так не пишу, потому что он уж очень новичковый, и напоминает код который пишут ютуберы, которые пытаются учить гошке.

Если вы беретесь за то чтобы показать как надо, то делайте это правильно, представьте сколько не окрепших умов попытаются протащить такое в продакшен))) Ну и на последок, тащить gin ради 1 ручки, можно было бы взять чего попроще, родной http или fastHttp ну на крайняк mux, который вроде до сих пор в архиве.

У меня все, коллеги разработчики если что еще поправят.

Sign up to leave a comment.

Articles