4.Mycat原理解析-线程模型

一、Mycat线程模型

这里写图片描述

Mycat的线程主要包括下面几个部分:

  • 主线程
  • IO线程:包括NIOAcceptor、NIOConnector、NIOReactor
  • 调度线程(ScheduledExecutorService):包括scheduler、heartbeatScheduler
  • 业务线程池:包括timerExecutor、businessExecutor

Mycat中,所有的线程(池)都是在Mycat启动时初始化的,具体的实现可以参考MycatServer类中的代码。下面我们就上面的线程逐一讲解各自的作用。

1、IO线程:NIOAcceptor、NIOConnector、NIOReactor

  • NIOAcceptor:单线程,用于接受客户端连接请求
  • NIOConnector:单线程,用于处理后端连接数据库的操作
  • NIOReactor:通过线程池(NIOReactorPool)管理,线程的个数固定,默认为机器核数,例如:4核4G的机器,线程的个数就是4,可以在server.xml中进行配置:
    <property name=”processors”>2</property>

机器的核数可以通过Runtime.getRuntime().availableProcessors()来获取

2、调度线程(ScheduledExecutorService):scheduler、heartbeatScheduler

  Mycat线程模型使用了 1+N 的设计方式,1表示调度线程,N表示下面要说的业务线程池(timerExecutor),调度线程只负责调度,具体的逻辑交给timerExecutor执行。

  • scheduler主要负责下面几件事情
    (1)定时检查不同分片表结构一致性
    默认1min执行一次,可以在server.xml里面配置:
    <property name=”checkTableConsistencyPeriod”>1</property>
    (2)定时清理保存在SqlStat中的数据
    每5s执行一次
    (3)定时检查全局表一致性
    默认每24h执行一次,可以在server.xml里面配置:
    <property name=”glableTableCheckPeriod”>8640000</property>
    (4)定时清理结果集排行榜,控制拒绝策略
    默认每10min执行一次,可以在server.xml里面配置:
    <property name=”clearBigSqLResultSetMapMs”>600000</property>
    (5)清理catlet class
    仅执行一次,项目启动后5min执行

  • heartbeatScheduler主要负责下面几件事情
    (1)定时更新系统时间
    每20ms执行一次
    (2)定时检查处理器
    默认每1s执行一次,可以在server.xml里面配置:
    <property name=”processorCheckPeriod”>1000</property>
    (3)数据节点空闲连接超时检查
    默认每5min执行一次,可以在server.xml里面配置:
    <property name=”dataNodeIdleCheckPeriod”>300000</property>
    (4)数据节点心跳检测
    默认每10s执行一次,可以在server.xml里面配置:
    <property name=”dataNodeHeartbeatPeriod”>10000</property>
    (5)定时清理老的连接
    每5s执行一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值