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

一、Mycat线程模型

4.Mycat原理解析-线程模型_第1张图片

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中进行配置:
    2

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

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

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

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

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

你可能感兴趣的:(数据库,Mycat原理解析)