Olá boudhayan_dev ,
ok. Não tenho certeza de como o FaaS é executado em segundo plano, pois até onde sei não há opções para ir a um "nível mais profundo" e ter menos abstração. Mas seria interessante saber mais sobre isso.
Avalados por :
Estou utilizando as Funções do SAP Cloud. Meu caso de uso é muito simples: o usuário chama a função, a função se conecta ao MongoDB Atlas com a string de conexão (não usando o serviço SAP CP Mongo, pois ainda não é suportado), realiza operações CRUD e retorna resultados.
Eu defini minha função na nuvem da seguinte maneira - index.js -
const mongoose = require('mongoose');
const Address = require('./models/Address')
module.exports = async function(event, context)
{
const mongoConfig = context.getSecretValueJSON('mongodb','config.json');
try{
await mongoose.connect(mongoConfig.config.uri,
{ useNewUrlParser:true,useCreateIndex:true});
console.log("Conectado ao banco de dados")
let address = new Address({"city":"Berlim"})
await address.save()
console.log("Informações de endereço salvas com sucesso")
return address;
}catch(error){
console.log("Erro - "+ error)
return error }
};
O esquema e modelo correspondente estão definidos em um arquivo diferente - Address.js
const mongoose = require("mongoose");
const addressSchema = new mongoose.Schema({
city: {
type: String,
required: true,
trim: true
}
}, { strict: false });
const Address = mongoose.model('Address', addressSchema);
module.exports = Address
Agora, o problema é que toda vez que a função é chamada, o mongoose abre uma nova conexão com o banco de dados, o que me parece uma forma muito ineficiente de fazer as coisas. Gostaria de saber como organizar o código para que a conexão seja feita apenas uma vez (preferencialmente durante o deploy inicial da função).
Olá boudhayan_dev ,
ok. Não tenho certeza de como o FaaS é executado em segundo plano, pois até onde sei não há opções para ir a um "nível mais profundo" e ter menos abstração. Mas seria interessante saber mais sobre isso.
Olá Marius Obert
FaaS é definitivamente adequado para o nosso caso de uso. A demora devido à conexão não é muito significativa, mas ainda assim gostaria de mantê-la ao mínimo. Entendo que o FaaS utiliza contêineres do Kubernetes para o deployment. Então, quando a função é reiniciada após um longo período de tempo, o mesmo contêiner é utilizado? Se for o mesmo contêiner, posso realizar uma conexão condicional.
Olá Boudhayan!
Excelente pergunta! Não tenho uma resposta definitiva para isso, diria que é mais uma questão de opinião.
O modelo de negócios por trás do FaaS é que você só paga quando sua função é executada. Isso significa que sua função pode não estar "ativa" em absoluto durante certos intervalos de tempo. O provedor só "iniciará" sua função quando você tentar acessá-la. Por exemplo, manter uma conexão aberta através de várias solicitações provavelmente não é possível, já que a função pode ser encerrada.
Se você precisa chamar essa função com tanta frequência que o custo de criar as conexões é muito caro, pode valer a pena considerar se realmente precisa do FaaS em primeiro lugar.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute