首页 文章

Cloud Spanner不能正确管理会话吗?

提问于
浏览
1

我已经查找了这个问题,但找不到有关它的足够信息 .

Google Cloud Spanner客户端库自动处理会话,每个节点的限制为10.000个会话,此处没问题 .

我有一个微服务应用程序,它也有谷歌 Cloud 功能 . 我正在 Cloud 功能上做一些特定的数据库工作,我也在不断地调用这些功能 . 过了一会儿,Cloud Spanner开始出错了;

Too many active sessions in database, limit is 10000. Increase the node count to allow more sessions.

我知道限制,但没有任何操作会导致我的应用程序超出这些限制 .

在我注意到这一点后,我有两个问题,我找不到任何答案;

1- Does Cloud Functions creates new session for every call? (I am using HTTP Trigger)

这是我到目前为止所做的事情;

1-这是我的示例 Cloud 函数声明;

exports.myFunction = function myFunction(req, res) {}

在我意识到这个问题之前,我在这个范围之外宣布我的数据库实例;

const db = Spanner({projectId: '[my-project]'}).instance('[my-cs-instance]').database('[my-database]');

exports.myFunction = function myFunction(req, res) {}

在这个问题之后,我把它放在这样的范围内,并在我完成后关闭数据库会话;

exports.myFunction = function myFunction(req, res) {
const db = Spanner({projectId: '[my-project]'}).instance('[my-cs-instance]').database('[my-database]');
// codes
db.close();
}

这没有改变任何东西,一段时间后它仍然超过会话限制 .

你有什么经验导致这种情况吗?这与 Cloud 功能或 Cloud 扳手本身有关吗?

2- If every transaction object use one connection at a time, what happens in this scenario.

除了这些 Cloud 功能之外,我还有一个REST endpoints . 它在开始监听HTTP endpoints 时创建一个数据库实例,而我不再在其生命周期中创建任何其他实例 . 在那个 endpoints ,我正在制作CRUD,我正在使用事务,它们都使用我在进程开始时创建的相同实例 . 我的经验是;

  • 有时事务或其他CRUD操作会有一点延迟,但不会一直发生 .

我的问题是;

  • 这是因为当事务开始工作时,是否会锁定连接,所有其他操作应该等到它结束?如果是这样,我应该为该 endpoints 上的事务创建独立的数据库实例吗?

提前致谢

1 回答

相关问题