一条SQL语句经过负载均衡之后根据什么原理经过obproxy分发到对应的observer?
SQL语句的执行请求根据什么原理进入到rootservice开展执行的,rootservice的工作原理是怎样的?
1、SQL 请求对应的OBProxy 的执行流程。
执行流程如下:
- 客户端和 OBProxy 建立 tcp 连接,OBProxy 通过 epoll(网络通信库中实现)处理套接字的读写事件
- 从tcp读取字节流保存到 buffer 缓冲中,并进行 MySQL 协议报文解析,先解析报头再决定是否解析后续内容
- 从报文中读取 SQL,进行 SQL 解析
- 根据表名和 location cache(表分区信息)找到表数据分布,选取有数据节点发送SQL
- 从数据库连接中找到对应的 ObServer 连接,并做 ObServer 的容灾管理检查
- 使用选中的连接,通过高性能转发框架和后端 ObServer 进行交互
- 将从 ObServer 收到的数据进行协议层处理,并返回给客户端
2、 RootService
OceanBase 数据库集群会有一个总控服务(RootService),其运行在某个 OBServer上。当 RootService 所在机器故障时,其余 OBServer 会选举出来新的 RootService。RootService 主要提供资源管理、容灾、负载均衡、schema 管理等功能,其中:
- 资源管理包括 Region/Zone/OBServer/Resource Pool/Unit 等元信息的管理,比如:上下线 OBServer、改变 Tenant 资源规格等。
- 负载均衡决定 Unit 在多个机器间的分布。
- 容灾通过自动复制、迁移等手段,保证日志流分布和类型与用户指定的 Locality 最终保持一致。
- Schema 管理负责处理 DDL 请求并生成新 Schema。
谢谢您的回答,我还需要再深入学习一下