对负载均衡、obproxy、rootservice的迷惑

一条SQL语句经过负载均衡之后根据什么原理经过obproxy分发到对应的observer?
SQL语句的执行请求根据什么原理进入到rootservice开展执行的,rootservice的工作原理是怎样的?

@论坛小助手

1、SQL 请求对应的OBProxy 的执行流程。

执行流程如下:

  1. 客户端和 OBProxy 建立 tcp 连接,OBProxy 通过 epoll(网络通信库中实现)处理套接字的读写事件
  2. 从tcp读取字节流保存到 buffer 缓冲中,并进行 MySQL 协议报文解析,先解析报头再决定是否解析后续内容
  3. 从报文中读取 SQL,进行 SQL 解析
  4. 根据表名和 location cache(表分区信息)找到表数据分布,选取有数据节点发送SQL
  5. 从数据库连接中找到对应的 ObServer 连接,并做 ObServer 的容灾管理检查
  6. 使用选中的连接,通过高性能转发框架和后端 ObServer 进行交互
  7. 将从 ObServer 收到的数据进行协议层处理,并返回给客户端

2、 RootService

OceanBase 数据库集群会有一个总控服务(RootService),其运行在某个 OBServer上。当 RootService 所在机器故障时,其余 OBServer 会选举出来新的 RootService。RootService 主要提供资源管理、容灾、负载均衡、schema 管理等功能,其中:

  • 资源管理包括 Region/Zone/OBServer/Resource Pool/Unit 等元信息的管理,比如:上下线 OBServer、改变 Tenant 资源规格等。
  • 负载均衡决定 Unit 在多个机器间的分布。
  • 容灾通过自动复制、迁移等手段,保证日志流分布和类型与用户指定的 Locality 最终保持一致。
  • Schema 管理负责处理 DDL 请求并生成新 Schema。

谢谢您的回答,我还需要再深入学习一下