Медленный внешний прогноз погоды под 8k RPS

ЗадачаMiddle30 минпроверка — Спринтнапиши код10-t051

Внешний сервис прогноза (slowForecast / aiForecast, тело не меняем) отвечает около секунды, а нагрузка на нашу ручку /weather — порядка 8000 RPS.

  1. Предложите и реализуйте решение.
  2. Расширение: ручка принимает город (?city=), а внешний сервис умеет отдавать прогноз сразу по нескольким городам. Доработайте решение.
main.gogo
1package main2 3func slowForecast() int {4	time.Sleep(time.Second)5	return rand.Intn(70) - 306}7 8func main() {9	http.HandleFunc("/weather", func(w http.ResponseWriter, r *http.Request) {10		fmt.Fprintf(w, "{\"temperature\":%d}\n", slowForecast())11	})12	if e := http.ListenAndServe(":3333", nil); e != nil {13		panic(e)14	}15}16 17// slowForecast отвечает за секунду (долго), а нагрузка на наш сервис высокая.18// 1. предложить и реализовать решение.19// 2. расширение: сервис может отдавать данные не по одному городу — поправить решение.
⌘ Enter — проверить