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

时间:2018-01-13 12:09:15

标签: javascript node.js google-cloud-platform google-cloud-functions google-cloud-spanner

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

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

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

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

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

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

1-云功能是否为每次通话创建新会话? (我正在使用HTTP触发器)

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

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

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 Functions或Cloud Spanner本身有关吗?

2-如果每个事务对象一次使用一个连接,则在此方案中会发生什么。

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

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

我的问题是;

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

提前致谢

1 个答案:

答案 0 :(得分:0)

现在已根据#89处的问题和#91处的解决方案修复此问题,并在#71987137处记录为Google Issue Trackers

如果问题仍然存在,请在Google issue tracker报告,然后重新审核。

相关问题