熔断机制

SequoiaDB 巨杉数据库在连接池复制组和上有一系列的熔断处理机制,以保证 SequoiaDB 集群在某些异常场景下,依然能通过相应的熔断机制(例如限速限流、剔除节点)确保集群可靠正常地工作。

本文档主要介绍了 SequoiaDB 在连接池和复制组两个方面的熔断处理情况,帮助用户深入了解 SequoiaDB 的可靠性保障机制。

连接池

SequoiaDB 服务端默认为每个连接创建会话线程以处理请求任务,随着会话线程越来越多,线程切换开销会越来越大,系统占用资源也会随着增加。SequoiaDB 支持使用连接池管理客户端连接,一方面能够提升连接获取效率,另一方面能灵活地指定获取连接策略,有效实现连接管理。

连接池主要从以下两方面来保证连接的可靠性:

  • 连接池最大连接数

    SequoiaDB 支持连接池,服务端会为连接池的每个连接分配会话以处理各自连接的请求任务。每个连接在服务端都需占用系统资源,例如堆栈空间、socket 描述符和内存等资源。 为了对服务器系统资源进行管控,SequoiaDB 会对连接池最大连接数 maxCount 进行相应限制。当客户端连接数达设置的最大连接数时,SequoiaDB 会限制进一步的连接请求。

  • 协调节点地址列表异常处理

    在初始化连接池时,需要指定 SequoiaDB 集群协调节点地址列表,也可以通过配置决定是否向编目节点自动同步协调节点地址列表。如果地址列表中某个协调节点异常导致连接不上,连接池会自动剔除该节点,后续连接不再尝试连接该协调节点。

复制组

SequoiaDB 复制组是指一份数据的多个拷贝,其中每一份数据拷贝被称为数据副本。在系统架构层面上,每个数据副本作为独立进程存在,也被称为节点。

复制组节点可靠性机制主要有:

  • 主节点限流机制

    在一个复制组中,主备节点通过同步日志进行数据同步。同步日志是有大小和个数限制的,主节点写同步日志是循环写的机制,为了避免循环写机制覆盖备节点尚未同步的同步日志,SequoiaDB 会在即将覆盖时对业务进行限流限速,以保证同步日志不会被覆盖。

  • 备节点剔除机制

    备节点通过向主节点请求同步日志以同步主节点数据时,如果请求的同步日志在对应主节点未能找到时,备节点会自动剔除出复制组以保证集群正常工作。

  • 节点心跳机制

    在同一个复制组中,所有节点两两之间互为心跳节点组。一个节点组中任一节点发送心跳报文到对端节点失败,则会认为对端节点异常,继而将对端节点剔除出复制组。如果异常节点是主节点,则根据实际情况决定是否触发重选选举。