使用MySQL行级锁定建议的“连接调度器”?

使用MySQL行级锁定建议的“连接调度器”?,mysql,sql,transactions,locking,row,Mysql,Sql,Transactions,Locking,Row,我正在考虑可能的方法来快速解决这个问题,我在这里称之为连接调度。。。事情是这样的 我有几十台服务器可以接受有限数量的客户端。另一方面,我有成千上万的客户端试图连接到其中一台服务器上的空闲插槽。这些会话的持续时间有限,因此,如果连接的客户端没有自动断开连接,一段时间后,它将被强制退出。以下是正确的: 服务器可以报告客户端连接/断开连接的事件 如上所述,过期的客户端会话被强制终止 我想这样做: 创建一个双面RESTWeb服务。一方将接受来自服务器的关于客户端连接/断开连接的通知,而另一方将由客户端自

我正在考虑可能的方法来快速解决这个问题,我在这里称之为连接调度。。。事情是这样的

我有几十台服务器可以接受有限数量的客户端。另一方面,我有成千上万的客户端试图连接到其中一台服务器上的空闲插槽。这些会话的持续时间有限,因此,如果连接的客户端没有自动断开连接,一段时间后,它将被强制退出。以下是正确的:

服务器可以报告客户端连接/断开连接的事件 如上所述,过期的客户端会话被强制终止 我想这样做: 创建一个双面RESTWeb服务。一方将接受来自服务器的关于客户端连接/断开连接的通知,而另一方将由客户端自己使用,查询空闲插槽/空闲服务器。我想我应该有一个DB表,其中每一行代表一个服务器及其状态,它可能类似于:

id | server_ip | requests | connections | max_allowed ------------------------------------------------------------- 1 | 30.9.50.150 | 5 | 80 | 200 2 | 30.9.50.151 | 15 | 130 | 200 客户端查询端:


所以,我读了一些关于MySQL锁定模式的东西,例如,但是我不能确定在这个场景中我需要什么,以维护每个服务器表行的一致数据。有人能就适当的锁定模式/事务布局给出建议吗

市场上有很多负载平衡产品和服务。恕我直言,重新发明爆胎要比重新发明轮子容易得多。普通负载平衡器在这里不起作用,因为我们谈论的VPN服务器数量非常有限,客户端数量可能非常多,因此除了进行负载平衡外,这东西还需要稍微智能化一点,并将状态通知客户
SELECT requests as curr_reqs, connections as curr_conns
FROM server WHERE id = server_id;

-- if client-connect occurred:
UPDATE server SET connections = (curr_conns + 1), requests = (curr_reqs - 1)
WHERE id = server_id;

-- if client-disconnect occurred:
UPDATE server SET connections = (curr_conns - 1)
WHERE id = server_id;
SELECT id as free_id, requests as curr_reqs, server_ip as free_ip FROM server
WHERE connections < (0.6 * max_allowed) AND
requests < max_allowed
ORDER BY requests DESC;

-- if a free record is obtained:
UPDATE server SET requests = (curr_reqs + 1)
WHERE id = free_id;