超节点

版本:24.03 LTS SP3

ubs-atomic 配置说明 ​

本文档说明 ubs-atomic 的构建配置项和运行时配置项,以及各配置项的取值范围、默认值和配置建议。

构建配置 ​

构建类型 ​

通过 build.sh -T <type> 指定构建类型,默认为 Release。

表 1 构建类型说明

构建类型说明构建目录
Release默认。-O2 优化,开启 -D_FORTIFY_SOURCE=2,无调试信息dist/release
Debug-O0 -ggdb3,带完整调试信息,UT/覆盖率默认使用该类型dist/debug
RelWithDebInfo-O2 优化并保留调试信息relwithdebinfo
MinSizeRel最小体积优化minsizerel

build.sh 常用参数 ​

表 2 build.sh 参数说明

参数说明
-D / --debugDebug 构建
-T <type>指定构建类型(Debug/Release/RelWithDebInfo/MinSizeRel)
-t <target>指定构建目标:all(默认)、package(RPM 打包)、test(构建并运行 UT)
-V <ver>指定发布版本,格式 1.0.0-1 或纯 release 号(如 2)
-c清理构建目录
-j <N>指定并行任务数,默认为 CPU 线程数(本地构建自动减 2)
-v输出详细构建日志
--ninja / --make强制指定构建生成器(默认自动检测,有 Ninja 时优先使用)
--asan / --lsan / --tsan / --ubsan分别启用 Address/Leak/Thread/UndefinedBehavior Sanitizer
--std <N>指定 C++ 标准版本,默认 17

CMake 缓存变量 ​

表 3 CMake 变量说明

变量默认值说明
UBS_ATOMIC_VERSION1.0.0RPM 包版本号
UBS_ATOMIC_PACKAGE_RELEASE1RPM 包 release 号
BUILD_TESTSOFF是否构建测试目录
ENABLE_COVERAGEOFF是否生成覆盖率报告(依赖 lcov + genhtml)

平台相关编译选项 ​

  • ARM64(aarch64)平台自动附加 -march=armv8-a+lse,启用 LSE 原子指令。
  • x86_64 平台不传入该选项,可直接本地编译(不在默认配套范围)。

安全编译选项 ​

Release 与 Debug 构建均默认启用安全编译选项(详见安全说明)。

资源规格配置 ​

锁对象共享内存大小 ​

锁对象直接构建在调用方提供的共享内存上,各锁对象的最小共享内存需求如下:

表 4 锁对象共享内存需求

资源类型宏定义大小
分布式读写锁UB_RW_LOCK_SIZE640 字节
分布式互斥锁UB_MUTEX_LOCK_SIZE384 字节
分布式自旋锁UB_SPIN_LOCK_SIZE64 字节
分布式事务资源-8 字节(1 个 uint64_t,需 8 字节对齐)

建议为每个锁对象预留独立且对齐的共享内存区域,所有节点使用相同的地址布局。

共享内存规划 ​

ubs-atomic 不管理共享内存生命周期,调用方负责创建、映射、清零和销毁。共享内存域配置可参考 sample_code/share_mem/ubsm_region.conf:

ini
request_size_mb=1024
hosts=computer01,computer02
配置项说明
request_size_mb每个共享内存对象大小,单位 MB。
hosts参与共享内存域的主机名列表,必须和执行环境中的节点主机名一致。

运行时配置 ​

分布式读写锁配置 ​

锁配置(ub_lock_config_t,创建时固定) ​

表 5 ub_lock_config_t 配置项

配置项类型默认值说明
lease_timetime_ms_t60000锁租约时长,单位 ms。建议设置为业务临界区最长执行时间的 2~3 倍。
heartbeat_timeouttime_ms_t500心跳超时阈值,单位 ms。超时未收到持锁者心跳则触发故障检测。

加锁策略(ub_lock_policy_t,每次加锁可变) ​

表 6 ub_lock_policy_t 配置项

配置项类型默认值说明
timeout_tstime_ms_t10000本次加锁的绝对超时时间,单位 ms。
allow_delay_releaseboolfalse是否允许延迟释放。开启后解锁时延迟通知等待者,可减少跨节点通知开销,但会延迟锁释放时机,适合高吞吐、低实时性场景。
recursiveboolfalse是否允许同一线程递归加锁。

锁模式兼容性 ​

表 7 锁模式兼容矩阵

已持有 \ 请求S(共享读)SX(共享排他)X(独占写)
S(共享读)兼容兼容互斥
SX(共享排他)兼容互斥互斥
X(独占写)互斥互斥互斥

互斥锁/自旋锁超时 ​

ub_mutex_lock、ub_spin_lock 的 timeout_ms 参数为 0 时使用默认值 10000ms。自旋锁仅建议用于极短临界区,超时时间不宜设置过大。

通信队列配置 ​

全局通信配置(ub_comm_conf_t) ​

表 8 ub_comm_conf_t 配置项

配置项类型约束说明
cpu_idint32_t-1 或有效 CPU ID后台分发线程绑核 CPU ID;-1 表示不绑核。
max_nodesuint8_t1~16集群最大节点数。
current_node_iduint8_t必须存在于节点映射中当前节点 ID,集群内唯一。
num_ringsuint8_t1~7当前节点创建的业务 Ring 数量(不含内部保留 Ring)。
ring_descsub_ring_desc_t *非空,长度不小于 num_ringsRing 配置数组。

Ring 配置(ub_ring_desc_t) ​

表 9 ub_ring_desc_t 配置项

配置项类型约束说明
ring_capacityuint32_t必须为 2 的幂Ring 容量,按消息条目计。
max_msg_sizeuint32_t不小于消息头 + 消息体单条消息最大大小,单位字节。
priorityuint8_t业务 Ring 取 1~7Ring 优先级,数值越小级别越高;0 为内部分布式锁 Ring 和系统消息保留。

拥塞阈值 ​

通过 ub_comm_queue_set_congestion_threshold 配置本地 Ring 拥塞阈值百分比:

  • 取值范围 0~100,默认 80(即 80% 水位)。
  • 0 表示所有非满状态都按拥塞处理。
  • 只影响当前节点本地 Ring,远端生产者通过共享 Ring 对象读取新阈值。
  • 达到阈值后发送返回 UB_COMM_SEND_CONGESTED,消息仍成功入队。

队列状态 ​

表 10 队列状态说明

状态判定条件
UB_COMM_QUEUE_IDLEused == 0
UB_COMM_QUEUE_NORMAL0 < used < congestion_threshold
UB_COMM_QUEUE_CONGESTEDused >= congestion_threshold 且 used < total
UB_COMM_QUEUE_FULLused >= total

心跳配置(ub_comm_queue_heartbeat_config_t) ​

表 11 心跳配置项

配置项类型约束说明
heartbeat_interval_msuint32_t大于 0本节点消费者心跳序号刷新周期,单位 ms,会发布给其他节点用于超时窗口计算。
check_interval_msuint32_t大于 0本节点生产者心跳监控线程轮询周期,单位 ms。
timeout_msuint32_t大于 0 且不小于 2 × check_interval_ms本节点观察 peer 的最小超时阈值,单位 ms。

说明:本节点观察某个 peer 的实际超时窗口为 max(timeout_ms, peer heartbeat_interval_ms × 3, check_interval_ms × 2)。

日志配置 ​

通过 ub_atomic_set_log_level 设置日志输出阈值,通过 ub_atomic_register_log_func 注册自定义日志回调(回调内不应阻塞过久,如需保存日志内容应自行拷贝)。

表 12 日志级别

级别值说明
LOG_LEVEL_DEBUG0调试日志
LOG_LEVEL_INFO1普通信息日志
LOG_LEVEL_WARN2告警日志
LOG_LEVEL_ERROR3错误日志
LOG_LEVEL_CRITICAL4严重错误日志

保留值与全局约束 ​

表 13 保留值与约束汇总

项目约束
Ring 优先级 0内部分布式锁 Ring 和系统消息保留,业务不得配置和发送。
消息类型 0xFF / 0xFE / 0xFD系统保留消息类型,业务侧不应发送或注册。
集群最大节点数16。
Ring 优先级范围0~7,共 8 级,数值越小级别越高。
ring_capacity必须为 2 的幂。
事务资源地址必须 8 字节对齐。
消息大小消息头 + 消息体不得超过目标 Ring 的 max_msg_size。
ring_regions 一致性各节点看到的节点映射数组内容和顺序应保持一致。
版本一致性所有参与方应使用相同版本的库和头文件,避免共享内存布局不一致。

样例配置参考 ​

锁功能验证样例的节点/共享内存配置可参考 sample_code/ub_lock/dw_lock.conf:

ini
self=NodeA
nodes=2
lock_shm=shm_ub_lock
shm.NodeA=shm_node1_export
shm.NodeB=shm_node2_export
ip.NodeA=192.168.100.100
ip.NodeB=192.168.100.101
配置项说明
self本节点身份标识。
nodes节点总数。
lock_shm存放读写锁对象的全局共享内存名。
shm.<NodeX>各节点通信队列导出共享内存名。
ip.<NodeX>各节点 IP,用于 query/rebuild 测试交换查询结果。

共享内存创建方法参见 sample_code/share_mem/README.md。