Я хотел проверить возможность использования облачной функции Golang для обработки сообщений паба / подпрограммы в режиме реального времени. Я написал простую Go функцию, которая вычисляет дельту времени между unix отметкой времени в сообщении pub / sub и текущим временем:
package cloudfunction
import (
"context"
"log"
"strconv"
"time"
)
// PubSubMessage is the payload of a Pub/Sub event.
type PubSubMessage struct {
Data []byte `json:"data"`
}
// HelloPubSub hellos to the world.
func HelloPubSub(ctx context.Context, m PubSubMessage) error {
unix := string(m.Data)
i, err := strconv.ParseInt(unix, 10, 64)
if err != nil {
panic(err)
}
tm := time.Unix(i, 0)
tnow := time.Now()
log.Println("Latency cloud function : ", tnow.Sub(tm))
return nil
}
Впоследствии я могу развернуть функцию (я нахожусь в Бельгия, поэтому я использую регион europe-west1):
gcloud functions deploy HelloPubSub --runtime go113 --trigger-topic cloudfunction --region europe-west1
И затем я публикую sh сообщений в pub / sub topi c (я также запустил это из облачной оболочки, чтобы устранить мой inte rnet speed):
gcloud pubsub topics publish cloudfunction --message $(date +"%s")
Я могу представить себе, что через несколько секунд будет холодный старт, но после этого я ожидаю, что задержка значительно снизится до нескольких сотен миллисекунд, но мой тест ясно доказывает, что я не прав:
Кто-нибудь знает, находятся ли эти задержки в ожидаемом интервале или я что-то делаю ( очень очевидно) что тут не так?