
巨杉内核笔记 | 会话(Session)
SequoiaDB 巨杉数据库是一款金融级分布式关系型数据库,坚持从零开始打造分布式开源数
据库引擎。“内核笔记系列”旨在分享交流 SequoiaDB 巨杉数据库引擎的设计思路和代码
解析,帮助社区用户深入理解 SequoiaDB 的实现原理,共建开源开放的数据库技术生态。
01 基本概念
会话与连接是两个容易混淆的概念。会话(Session) 指是通信双方从开始通信到通信结束期
间的一个上下文(Context)。这个上下文是一段位于服务器端的内存,记录了本次连接的客户
端机器,通过哪个应用程序和哪个用户登录等信息。而连接是指从客户端到数据库实例的一
条物理路径。连接可以在网络上建立,也可以在本机通过 IPC 机制建立。通常会在客户端进
程与一个专用服务器或一个调度器之间建立连接。
02 SequoiaDB 中的会话设计
分布式数据库 SequoiaDB 的集群通常由数据节点、协调节点和编目节点组成,集群内的不
同节点间存在多种类型的连接。因此 SequoiaDB 中存在多种会话,且不同的会话对应不同
的服务。会话的主要任务是处理通信的对端发来的请求。
集群中典型的会话结构如下图。
协调节点监听客户端发起的连接请求,连接建立后创建一个 coord session,即协调节点会话,
之后便由这个会话处理对应的客户端发起的所有请求。coord session 在接收到客户端发来的
处理请求后,会结合编目信息进行分析,确认需要下发到哪些节点去执行,可能会发送给编
目节点、一个或多个数据节点。数据节点在接收到协调节点发来的消息时,会创建一个 shard
session 来处理请求,执行指定的操作,并返回数据。
03 通信平面
SequoiaDB 集群内的节点间存在多个通信通道,不同类型的节点提供不同的服务。为了保证
这些服务各自能够正常工作,SequoiaDB 的节点提供了多个通信平面。简单来说,一个通信
平面对应一个服务端口,不同的端口提供不同类型的服务,这也是为什么在安装 SequoiaDB
时,要求预留一定范围内的端口号的原因。
SequoiaDB 中当前提供了如下几个通信平面:
local 平面(local service): 使用节点配置文件中指定的基础服务端口号 svcname
评论