MySQL:网络连接框架简析

MySQL:网络连接框架简析,第1张

一直对这部分不太了解,稍微看了一下,但由于知识储备有限,错误在所难免。

总的看起来MySQL在这部分依旧使用了常规的 reactor+线程池 高并发网络模型,这里我们以poll为列,有如下特点:

貌似看起来大佬的手法都是通用的,都是按照一定模式写出来的。当然实际上涉及的东西还是非常多,但是这里我们仅仅了解网络框架部分,对于线程池\vio通信模块\net协议模块不做讨论,因为我也不了解,这里主要看看网络框架。

对于用户会话线程通常叫做thread_one_connection,接着会调用thd_prepare_connection->login_connection将准备对连接fd进行ppoll的超时参数设置为connect_timeout指定的值,也就是言外之意connect_timeout是在处理连接请求的时候生效的参数。

然后thd_prepare_connection->login_connection->check_connection,在函数check_connection中完成主要任务是:

在login_connection的末尾会将连接fd的ppoll的timeout参数设置为read_timeout/write_timeout。

最后接下来就是进行命令处理的环节了。也就是do_command。通常我们的会话就堵塞在这里等待客户端命令的到来如下:

服务器架构随着应用场景的不同采用的架构方式也是不一样的,而今天我们就通过案例分析来简单学习一下,在服务器架构中的可扩展性都有哪些特点。

MySQL的可扩展性架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段有以下两种Scale-up:纵向扩展,通过替换为更好的机器和资源来实现伸缩,提升服务能力Scale-out:横向扩展,通过加节点(机器)来实现伸缩,提升服务能力对于互联网的高并发应用来说,无疑Scaleout才是出路,通过纵向的买更的机器一直是我们所避讳的问题,也不是长久之计,在scaleout的理论下,可扩展性的理想状态是什么?可扩展性的理想状态一个服务,当面临更高的并发的时候,能够通过简单增加机器来提升服务支撑的并发度,且增加机器过程中对线上服务无影响(nodowntime),这就是可扩展性的理想状态!MySQL架构的演变MySQL简单网站架构(V1.0)一个简单的小型网站或者应用背后的架构可以非常简单,数据存储只需要一个mysqlinstance就能满足数据读取和写入需求(这里忽略掉了数据备份的实例),处于这个时间段的网站,一般会把所有的信息存到一个databaseinstance里面。

在这样的架构下,电脑培训http://www.kmbdqn.cn/来看看数据存储的瓶颈是什么?单实例单业务,依然存在V1.0所述瓶颈,遇到瓶颈时可以考虑往本文更高V版本升级,若是读请求导致达到性能瓶颈可以考虑往V3.0升级,其他瓶颈考虑往V4.0升级

mysql底层架构分为:

1、client(客户端)

2、server(服务端)

client: 主要有各种plugin、jdbc等

server: 包含了连接器、查询缓存、分析器、优化器、执行器、存储引擎

连接器 的主要作用是与 客户端 建立联系,管理客户端的连接、会话、权限验证等。

查询缓存 的作用是,在sql通过连接器之后到达服务端之后,如果sql是sel开头的语句,那么先在 查询缓存 中获取命中结果,如果有命中结果则直接返回结果。没有结果那么sql会通往 分析器 。

分析器 拿到sql后,会对sql进行词法、语法分析,同时创建sql Id,如果sql有错误,那么将会终止sql行为,将异常返回客户端。

优化器 的作用主要是对通过 分析器 的sql进行优化,比如进行 索引选择 、 重写查询 等,同时会创建 sql执行计划 ,可以通过 explain 指令进行查看。

执行器 拿到了经过优化器的sql,将会 *** 作 存储引擎 ,通过调用 存储引擎 提供的读写接口,得到返回结果。

存储引擎 是sql的最终执行者,它对外提供了读写接口,本身主要作用为执行sql、存储数据、获取数据等, 存储引擎 的设计是插件形式实现的,常见了有 InnoDB 、 MyISAM 等。

未完待续......


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8430277.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存