ProxySQL源码分析4-线程分析

Main thread初始化核心模块和线程。Main线程最后一部分用watchdog做mysql work线程和idle线程的heartbeat检查,如果超过20次则重启proxy,如果设置restart,则无限重启。Admin thread核心循环:admin_main_loop,是Admin模块最重要的循环创建并监听Admin端口(默认的6032),为每个admin连接创建一个新的线程。加载各种配置信息,以及管理配置变更(动态加载、持久化到sqlite)等。如果配置HTTP Ser...
摘要由CSDN通过智能技术生成

在这里插入图片描述

  1. Main thread
    初始化核心模块和线程。Main线程最后一部分用watchdog做mysql work线程和idle线程的heartbeat检查,如果超过20次则重启proxy,如果设置restart,则无限重启。

  2. Admin thread
    核心循环:admin_main_loop,是Admin模块最重要的循环
    创建并监听Admin端口(默认的6032),为每个admin连接创建一个新的线程。
    加载各种配置信息,以及管理配置变更(动态加载、持久化到sqlite)等。
    如果配置HTTP Server,AdminRestApiServer,还会负责启动这些Server并处理web请求。

这里有一个比较trick的事情,admin这个管理账号只能local连接,其他账号可以远程连接,其他这些账号都是一样的管理员权限。如果硬要解释,那就是coder的情怀了~

  1. MySQL workers threads & MySQL idle threads
    worker thread负责处理活跃的客户端mysql请求,是主要的工作线程。
    idle thread主要就是监听非活跃的Session是否有新的请求,然后移交给worker线程处理。
    当活跃连接远小于非活跃连接的时候,idle和worker搭配可以很好地提高性能。官网数据可处理连接能到1百万。
    idle thread和work thread是1:1创建的。其交互流程入下图所示。
    在这里插入图片描述
  2. Monitor threads
    产生5类生产者线程:connection checks、ping checks、read-only checks、replication lag checks、group replication monitoring
    调度消费线程池:一方面负责check任务; 另一方面就是处理上面的check结果,比如ping失败之类的。处理主要是通过更新 MyHGM->p_update_mysql_error_counter状态来实现,如下代码。
void *monitor_ping_thread(void *arg) {
   
    MySQL_Monitor_State_Data *mmsd = (MySQL_Monitor_State_Data 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值