文章插图
由于 preceptron 并没有存储用户的账号密码 , 所以无法校验 “登录解答 A” 是否正确,但 preceptron 能区分客户端是 MySQL 客户端,还是其他类型的客户端(preceptron 在机器学习界是分类器,区分不同类型的客户端,这也是我们以它命名的原因之一) 。
校验 “登录解答 A” 将由 TDSQL-C 计算层(下文简称:TDSQL-C)来完成,preceptron 通过管控唤醒 TDSQL-C 后(P3) , 开始下一步的登录校验流程 。
文章插图
在和 preceptron TCP 握手之后(P4),对于 TDSQL-C 来说 , preceptron 也是一个普通的 MySQL 客户端,所以也发送一个 “随机数 B” 挑战(P5)给 preceptron 。
preceptron 的回复是一个我们实现的特殊的 MySQL 报文(P6),首先它用 “随机数 B” 和 preceptron 自身的鉴权机制计算得到 “登录解答 B” 并放入报文中,其次它也将 “随机数 A” 和 “登录解答 A” 捎带在此报文中 。
文章插图
TDSQL-C 收到特殊的解答报文后会做两次校验,第一次是 “随机数 B” 和 “登录解答 B” 的正确性以及 preceptron 的身份 , 通过后再进行第二次的 “随机数 A” 和 “登录解答 A” 的正确性,通过即以用户身份进行登录,并回复 preceptron 登录成功(P7) 。
文章插图
preceptron 进而回复用户登录成功(P8) 。
文章插图
经历过这样的流程后,我们在客户端发起一次登陆请求后,实例就可以完全无感地进行实例恢复,恢复登录后,后续的请求和数据包通过 preceptron 进行相互的转发 。
比较巧妙的点在于整体流程设计采用了两个挑战随机数进行鉴权 , 这样做的优势在于:
- 实现中继模块 preceptron 不存储用户名密码的情况下也可以完成用户名密码验证;
- 保证了用户密码的安全性,也不会引入存储的密码不一致的问题;
至此,读者一定会疑问,基于 serverless 形态下如果所有请求都通过 preceptron 进行转发,这样成本和开销无疑会变大,有悖于数据库在 serverless 下的低成本特性吧?
其实,选择 serverless 的用户更在意低成本 , 而不是读写分离和链接保持能力 。因此我们在设计 preceptron 模块时,只会把触发恢复的请求链接接路由到 preceptron 上 , 当实例恢复后,新增的请求会直接发给 TDSQL-C 。
这一流程是通过 VIP 权重来实现路由的定向转发 。当实例处于暂停状态时,仅保留 preceptron 的路由;当实例恢复后时 , 同时保留 preceptron 的路由和 TDSQL-C 的路由,并设置 preceptron 的路由权重为 0,以实现新增连接直连到 TDSQL-C,同时存量与 preceptron 已经建连的链接依然能够通讯 。
三、测试一下那么下面我们来模拟一下用户恢复实例的链接不断机制 。首先我们选好一个暂停状态的 serverlss 实例,如果其在运行中我们也可以通过手动暂停来停止实例的运行 。
文章插图
通过监控数据和控制台,我们可以看到上面的实例已经处于完全暂停状态了,接下来我们通过远程连接工具,直接对数据库发起连接请求 。
文章插图
如下图所示,我们在发起数据库连接请求时,可以做到秒级数据库恢复,并且在整个连接的过程中用户侧对实例恢复和重连毫无感知,极大程度地提高了 Serverlss 产品的易用性 。
文章插图
经过多轮测试,我们累加内核侧、管控侧、perceptron 侧的总体冷启动时间 , 整体重连时间约在 2000ms 左右 。浅放一张今天下午测试的结果,欢迎大家来体验秒级的快乐!
推荐阅读
- 假期快结束了,孩子还是沉迷游戏该怎么办(沉迷游戏的真实例子)
- 【lwip】11-UDP协议&源码分析
- 👍SpringSecurity单体项目最佳实践
- 百变大侦探食物大战酱汁剧本杀真相答案详解
- 想不想修真一品忘心丹丹方获取途径说明
- 想不想修真长生果获取方法详解攻略
- 《火影忍者》:二代火影真正的死因是什么为什么说是不会解开的迷题
- 红米Note11真机曝光_红米Note11外观详情
- 天地劫英雄本色天诛案真相答案参考
- 真我gtneo2t有没有nfc_真我gtneo2t支持nfc功能吗