Mobile app -----> Firebase Function
| ------------------> External API
| waiting...
| CPU billed?
| <------------------ External API Responds
Mobile app <----- Firebase Function Responds
Na minha função Firebase de 2ª geração, estou fazendo uma solicitação para uma API externa. Naturalmente, essa API levará algum tempo para responder. Minha função Firebase retornará com uma resposta após a conclusão dessa solicitação de API.
Minha pergunta é: serei cobrado pelo tempo de CPU enquanto aguardo essa API externa? A CPU não está sendo usada ativamente, então faria sentido se eu não fosse cobrado. Perguntei à Gemini e ela concorda fortemente com esse ponto de vista neste bate-papo da Gemini: https://g.co/gemini/share/d37b5aed9c41 (por favor, role para baixo até a última pergunta lá, o começo do bate-papo é sobre outra coisa). A Gemini acha que o faturamento baseado em solicitação significa exatamente isso.
No entanto, não estou convencido e o gráfico aqui em Billable Instance Time me faz pensar que, na verdade, sou cobrado pela CPU durante o tempo ocioso em que não faço nada na CPU, exceto esperar a API responder.
Alguém tem uma resposta definitiva para isso? Sou cobrado da mesma forma que alguém que faz tarefas que exigem muita CPU por simplesmente esperar por uma resposta da rede?
Sim.
Você é cobrado pelo tempo que uma função estiver no meio da invocação, do momento em que ela começa até o momento em que ela retorna uma resposta. A ocupação da CPU nunca é o problema - o que importa é que a CPU esteja alocada e disponível para executar o trabalho durante uma invocação. A única vez em que você não é cobrado pela CPU em uma determinada instância do servidor é se não houver solicitações ativas para essa instância (eventualmente permitindo que ela diminua).
As funções Gen 2 melhoram isso ao permitir múltiplas solicitações simultâneas, para que todas compartilhem o mesmo tempo total de faturamento. Você vai querer ler esta documentação para entender melhor como funciona. Especificamente:
Veja também: