Halo Tech

Halo数据库 TAC架构概述

    经过多轮技术迭代 —— 不断更新、推翻、优化,打磨出这套更高效、更稳定、更好用的TAC版本!
一、架构概述
    TAC架构基于公司自研的分布式共享存储HSM。采用存算分离,并且所有计算节点共用同一份数据。TAC架构具有如下特性:
Image
TAC架构原理图
存算分离、共享存储
  • 所有节点共用一份数据,节省了存储空间;
  • 扩容节点无需拷贝数据,扩容更快速、高效。
缓存融合、数据强一致
  • 采用缓存融合技术,保证数据强一致
RW(主节点):核心写节点+本地读节点
  • 读操作(数据查询):直接在本地节点处理,流程简洁高效(①→④);
  • 写操作(插入 / 更新 / 删除):本地执行(①→④)。
RO(只读节点):高效读节点+智能写路由
  • 读操作(数据查询):同样本地节点处理,分担主节点读压力(①→④);
  • 写操作:不直接执行,而是通过专属流程(①→②→③→④)转发给主节点执行,执行完成后将结果返回给客户端。

    划重点!📌对上游系统来说,RW 主节点和 RO 只读节点均可接收并执行读写操作,无需区分主从节点。从底层逻辑来看,主节点负责核心写操作,只读节点专注分担读压力,通过这样的实现方式,既实现了负载分发,又由于写操作集中于一个节点,避免了分布式锁的高成本开销,非常适合TP、AP或者TP/AP混合的场景。

二、关键功能特性与场景适配
核心功能:所有的读操作都在本地执行,所有的写都在主节点处理。可观察日志监控从节点写操作的实际行为。
Image
1. 函数 / 存储过程:只读标记与灵活配置
  • 系统属性:系统表pg_proc中proreadonly字段,用于标记函数 / 存储过程的只读属性,默认值为false;
  • 语法新增:支持ALTER FUNCTION/PROCEDURE funcname (NOT) READONLY语法,灵活修改函数 / 存储过程的读写属性;
  • 执行逻辑:标记为readonly的函数 / 存储过程,在 RO 只读节点可本地执行,无需转发主节点,提升执行效率;非只读函数 / 存储过程,自动转发至 RW 主节点执行。例如:
CREATE OR REPLACE FUNCTION add_numbers(    a INT,    b INT) RETURN INTISBEGIN    RETURN a + b;END add_numbers;/SELECT proname, proconfig, prosecdef, proreadonly FROM pg_proc WHERE proname = 'add_numbers';--该函数为读函数,设置为只读ALTER FUNCTION add_numbers(a INT, b INT) READONLY;SELECT proname, proconfig, prosecdef, proreadonly FROM pg_proc WHERE proname = 'add_numbers';select add_numbers(2,9);
只读节点执行结果如下:
Image
2. 视图:只读标志,自动判断读写
    系统表pg_viewdef的属性字段viewreadonly为视图只读标志(默认为false)。自定义视图自动判断读写,并根据读写来考虑本地处理或者转发处理。例如:
Image
3. 预处理语句:支持重连,稳定性拉满
    PREPARE/EXECUTE等语句转发主节点执行,支持主节点网络中断重连不影响只读节点会话。例如:
Image
4. 数据导入导出:主节点统一执行,保障数据一致

    数据导入导出是业务中常见的操作,所有COPY命令均由主节点统一执行,避免了多节点导入导出导致的数据不一致问题。例如:

CREATE TABLE copy_stdin (    id   int,    name text,    score numeric(5,2));\copy copy_stdin FROM STDIN CSV HEADERid,name,score1,Alice,98.52,Bob,873,Cathy,99.9\.SELECT * FROM copy_stdin;\copy (SELECT * FROM copy_stdin) TO '/home/wangjiajia/Workspace/Halo_Database/.build/data/Nac790/copycsv.csv' CSV HEADER;
create table t_copy(id int,name varchar(20));create table t_copy2(id int,name varchar(20));insert into t_copy select generate_series(1,100000),substring('abcdefghijiklmnopqrstuvwxyz',(random()*5)::int,(random()*20)::int) as name;copy t_copy to '/home/wangjiajia/Workspace/Halo_Database/.build/data/Nac790/cpyy';
copy t_copy2 from '/home/wangjiajia/Workspace/Halo_Database/.build/data/Nac790/cpyy';
Image
5. 匿名块和事务块:主节点统一执行
Image
主节点日志:
Image
三、总结

    本次 TAC架构的升级,不是简单的 “修修补补”,而是从底层逻辑到细节场景的全面优化:

✅ 通过智能 SQL 路由,实现了负载的合理分发,大幅提升系统性能;

✅ 通过缓存融合、核心操作主节点统一执行,保障了数据一致性;

✅ 通过多场景适配,降低了使用门槛,提升了架构的易用性。

    这套架构,为大规模数据处理与高并发访问提供了坚实的技术基础,也为后续的产品优化打下了良好的铺垫。未来,我们还将持续打磨 Halo 数据库产品,不断攻克行业技术难题,为客户提供更优质、更高效的产品及服务~