整体架构
- Proxy最主要是要连接CLIENT和MYSQL,通信至关重要,以Netty作为通信组件,封装MYSQL协议,主要解决粘包和拆包问题
- MYSQL协议层,解析mysql协议,主要负责将Netty接收的TCP包,按照MYSQL协议,解析成SQL语句;还有就是将处理完合并后的SQL语句解析成MYSQL协议发送到指定的地方
- MYSQL协议解析成SQL语句之后,使用SqlParser组件将MYSQL解析成语法树,获取SQL的各个部分的信息
- 然后使用SqlRouter组件读取配置的分库分表或者其他策略,重写SQL语句,并且选择路由的节点
- 然后把这些SQL放到SqlExecutor组件中,选择合适的执行策略,例如线程池,栅栏,信号量等
- 最后再通过通信层将这些需要执行的SQL发送到MYSQL
- mysql处理完成之后,返回的数据通过通信层接收,SqlExecutor组件执行,最后的结果可能需要通过ResultMerger组件进行合并之后,再通过通信层发送回客户端
MYSQL 协议
mysql协议基础packet
- payload len