TDSQL-C Serverless 服务是如何实现通过接入层来实现恢复感知
在一些极限的测试场景下,数据库实例会频繁的自动启停,这时候如何保证数据库实例停止后快速恢复呢?如何保证在恢复数据库实例时无需用户重复链接,直到恢复访问?
站在用户的角度考虑,谁都不希望数据库每次启停都耗费大量的时间,更不希望在这个过程中对业务有任何的影响。因此,极致压缩冷启动时间,做到链接不断转发请求的能力相当关键。为了实现这一能力,TDSQL-C 做了众多探索,最后选定了通过在接入层增加一个恢复感知器来实现秒级冷启动这一方案。同比于通过 proxy 来实现链接的保持和转发能力的方案,TDSQL-C采用的方案更加贴合 Serverless 服务为用户提供低成本的理念。这是因为采用 proxy 模式需要支付额外的成本,整体设计会更加复杂,并且还需要设计多租户的能力。
建连流程
这一方案的核心要点是在 TDSQL-C 的接入层增加了一个恢复感知器(下文简称:perceptron),通过 perceptron 模块来实现请求转发,perceptron 在和客户端握手之后,不断开与用户连接,恢复实例后,与 TDSQL-C 握手,后续转发四层报文。以下为 perceptron 与 TDSQL-C 建连的具体过程:

在实例暂停的状态下,如果有连接发起时,MySQL客户端首先会同 preceptron 进行 TCP 握手(P0)。

完成 TCP 握手之后,preceptron 会向客户端发送 “随机数 A” 进行挑战(P1),MySQL 客户端用自己的账号密码和 “随机数 A” 来计算并回复自己的 “登录解答 A”(P2)。

由于 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 进行相互的转发。
注意:
目前腾讯云原生数据库TDSQL-C有新春特惠活动,新人1.88元起
测试一下
那么下面我们来模拟一下用户恢复数据库实例的链接不断机制。首先我们选好一个暂停状态的 serverlss 实例,如果其在运行中我们也可以通过手动暂停来停止实例的运行。

通过监控数据和控制台,我们可以看到上面的实例已经处于完全暂停状态了,接下来我们通过远程连接工具,直接对数据库发起连接请求。

如下图所示,我们在发起数据库连接请求时,可以做到秒级数据库恢复,并且在整个连接的过程中用户侧对实例恢复和重连毫无感知,极大程度地提高了 Serverlss 产品的易用性。

经过多轮测试,我们累加内核侧、管控侧、perceptron 侧的总体冷启动时间,整体重连时间约在 2000ms 左右。
TDSQL-C Serverless 服务是如何实现通过接入层来实现恢复感知的更多相关文章
- 利用京东云Serverless服务快速构建5G时代的IoT应用
10月31日,在2019年中国国际信息通信展览会上,工信部宣布:5G商用正式启动.5G商用时代来了! 5G的商用,使得数据传输速度.响应速度.连接数据.数据传输量.传输可靠性等方面都有了显著的提升,这 ...
- Netty 服务端:新连接接入
本文主要分析服务端新连接的接入过程,主要分为以下 3 各步骤: select 操作: processSelectedKeys 操作. 1. select 操作 在分析 select 操作前,先要回顾一 ...
- 如何评估 Serverless 服务能力?这份报告给出了 40 条标准
编者按:两年前,我们还在讨论什么是 Serverless,Serverless 如何落地.如今,已经有评测机构给出了 40 条标准来对 Serverless 的服务能力进行评估,这些评估细则既是技术生 ...
- 含辞未吐,声若幽兰,史上最强免费人工智能AI语音合成TTS服务微软Azure(Python3.10接入)
所谓文无第一,武无第二,云原生人工智能技术目前呈现三足鼎立的态势,微软,谷歌以及亚马逊三大巨头各擅胜场,不分伯仲,但目前微软Azure平台不仅仅只是一个PaaS平台,相比AWS,以及GAE,它应该是目 ...
- TDSQL-C 真·秒级启停:连接断了,又没断
你听过多少款无服务器架构(Serverless)数据库? 什么是Serverless呢?简单理解,Serverless 分为 FaaS 和 BaaS 两个部分,其中 FaaS 指的是函数即服务,Baa ...
- 降本超30%,智聆口语通过 TKE 注册节点实现 IDC GPU 节点降本增效实践
背景介绍 腾讯云智聆口语评测(Smart Oral Evaluation,SOE)是腾讯云推出的中英文语音评测产品,支持从儿童到成人全年龄覆盖的语音评测,提供单词.句子.段落.自由说等多种评测模式,从 ...
- What is GSLB
Global Server Load Balancing 中文:全局负载均衡 SLB(Server load balancing)是对集群内物理主机的负载均衡,而GSLB是对物理集群的负载均衡.这里的 ...
- 接入层高性能缓存技术nginx+redis利器OpenResty
一. OpenRestyOpenResty是一个基于 Nginx与 Lua的高性能 Web平台,其内部集成了大量精良的 Lua库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极 ...
- 腾讯大讲堂 微信红包系统设计 & 优化
http://djt.qq.com/article/view/1349 编者按:经过2014年一年的酝酿,2015微信红包总量创下历史新高,峰值1400万次/秒,8.1亿次每分钟,微信红包收发达10. ...
- Java并发编程原理与实战四十五:问题定位总结
背景 “线下没问题的”. “代码不可能有问题 是系统原因”.“能在线上远程debug么” 线上问题不同于开发期间的bug,与运行时环境.压力.并发情况.具体的业务相关.对于线上的问题利用线上 ...
随机推荐
- JavaScript:函数:函数的参数
声明函数的时候,有个括号,这里面可以加上函数的参数,这些参数,我们叫做形参(形式参数): 此时这些参数,也是已经声明了的变量,只是还没有赋值而已. 也可以不加,取决于函数的逻辑.如果函数需要从外部传进 ...
- @Data加在子类上,子类无法获取父类的属性
1.问题描述 我的子类继承父类,并在子类上加了@Data注解.但在程序运行时,输出的结果只有我在子类中定义的属性,父类的属性没有输出. 这是我定义的子类: 这个是子类继承的父类: 这个是输出结果: 可 ...
- SQLSERVER 的复合索引和包含索引到底有啥区别?
一:背景 1. 讲故事 在 SQLSERVER 中有非常多的索引,比如:聚集索引,非聚集索引,唯一索引,复合索引,Include索引,交叉索引,连接索引,奇葩索引等等,当索引多了之后很容易傻傻的分不清 ...
- 真正“搞”懂HTTP协议08之重定向
我们知道,用来传输页面的协议就是HTTP协议,全称是超文本传输协议,而浏览器展示的页面则是用HTML编写的,HTML的全称则是超文本标记语言.你看,都叫做超文本,我在第一篇文章的时候也详细的聊过,超文 ...
- 踩坑纪实----tomcat部署前端服务器不能访问中文文件夹或中文文件名问题
修改tomcat的server.xml文件(解决含有中文的文件.图片的不能下载.显示的问题): 找到下列配置信息在xml文件中的位置,添加黑体字部分的参数即可(disableUploadTimeout ...
- SQLSERVER 事务日志的 LSN 到底是什么?
一:背景 1. 讲故事 大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能理解一半了,关于 ...
- 12月5日内容总结——JS基础知识及变量常量、基本数据类型、运算符、流程控制、函数、内置对象
目录 一.JS简介 简介 ECMAScript的历史 二.JS基础 1.注释语法 2.引入js的多种方式 3.结束符号 三.变量与常量 编写和运行js代码的两种方式 变量声明 四.基本数据类型 1.数 ...
- APP测试注意点-安装卸载与运行
1.安装和卸载 应用在不同系统版本的ios和android是否可以正常安装(适配问题) 安装过程中是否可以取消 手机存储空间不足时安装应用是否有相应提示信息 安装后的应用是否可以正常卸载 卸载后是否会 ...
- appium如何获取到APP的启动activity
方法一: adb shell monkey -p 包名 -v -v -v 1 方法二: aapt dump bading apk所在路径\apk名字(或者直接把apk拖进命令行) 运行后的结果中以下两 ...
- C# 处理实体类赋值(获取嵌套类型,支持list 自定义类型)
public static T AESEncrypt<T>(T obj) where T : class { if (obj == null) { return obj; } var pr ...