我一直在试图弄清楚为什么通过 OpenStack Keystone 请求访问令牌相对较慢(最低约为 400 毫秒,在某些情况下超过一秒)。
为了找到原因,我使用了 OSProfiler,似乎大部分时间都花在与数据库通信上。我可以看到 Keystone 在请求令牌时执行了大约一百次数据库调用。对数据库的单个调用相对较快(2-6 毫秒之间),但这样做 100 次很容易导致仅在数据库请求中就有 500 毫秒的延迟。
目前,数据库是通过网络访问的(网络往返时间约为 0.3 毫秒)。从 TCP 和 MySQL 开销来看,每个数据库查询的时间都是合理的,因此并不算太疯狂。
我主要想知道的是这是否是预期的行为,Keystone 执行这么多查询来请求令牌是否正常。缓存已启用,我知道缓存正在工作,因为我可以看到 Keystone 使用数据库,并且在调试缓存库时,它确实表明它在访问缓存时获得命中。
现在我看到的唯一选择是完全消除网络并将数据库移动到与 Keystone API 相同的机器上。
更新:这是在乌苏里使用 Fernet 令牌