国产开源数据库:腾讯云TBase在分布式HTAP领域的探索与实践

导语 | TBase 是腾讯TEG数据平台团队在开源 PostgreSQL 的基础上研发的企业级分布式 HTAP 数据库系统,可在同一数据库集群中同时为客户提供强一致高并发的分布式在线事务能力以及高性能的数据在线分析能力。本文是对腾讯 TBase 专家工程师伍鑫在云+社区沙龙 online 的分享整理,将为大家带来腾讯云 TBase 在分布式 HTAP 领域的探索与实践。

点击视频查看完整直播回放

一、TBase分布式数据库介绍

1. TBase 发展历程

                       

腾讯云从 2009 年便开始在内部的业务上进行尝试,在企业分布式数据库领域的自研过程是比较有经验的。当时主要是为了满足一些较小的需求,比如引入PostgreSQL 作为 TDW 的补充,弥补 TDW 小数据分析性能低的不足,处理的需求量也较小。

但业务慢慢的大了后,需要有一个更高效的在线交易事务的处理能力,对数据库要进行一个扩展,所以后面我们就持续的投入到数据库的开发过程中。

2014 年 TBase 发布的第一个版本开始在腾讯大数据平台内部使用;2015 年 TBase 微信支付商户集群上线,支持着每天超过 6 亿笔的交易;2018 年的时候 V2 版本对事务、查询优化以及企业级功能做了较大增强,慢慢的开始面向一些外部客户;2019 年 TBase 中标了 PICC 集团的核心业务,协助了他们在国内保险行业比较领先的核心系统,并稳定服务了很长的时间。

考虑到 TBase 整体能力的持续发展,我们是希望把 TBase 的能力贡献给开源社区,这样能更多的支持数据库国产化项目。于是在 2019 年 11 月,我们把数据库进行了开源,希望能助力数字化产业升级。

2. PostgreSQL 数据库简介

                       

TBase 是基于单机 PostgreSQL 自研的一个分布式数据库,除了具备完善的关系型数据库能力外,还具备很多企业级的能力。同时增强了分布式事务能力,以及比较好的支持在线分析业务,提供一站式的解决方案。

在数据安全上,我们有着独特之处,包括三权分立的安全体系,数据脱敏、加密的能力。其次在数据多活、多地多中心的灵活配制上面,也提供了比较完善的能力,保障了金融行业在线交易中一些高可用的场景。为金融保险等核心业务国产化打下坚实基础。

PostgreSQL 是一个开源的 RDBMS,开源协议基于 BSB 风格,所以源代码可以更加灵活的供大家修改,也可以在修改的基础上进行商业化。

PostgreSQL 是由图灵奖得主 MichaelStonebraker 主导的一个开源项目,如上图所示,它已经迭代得比较久了,到现在已经发布到 12 版本,并且一直在持续的迭代,整体处于一个比较活跃的水平。

3. PostgreSQL 发展趋势

                       

PostgreSQL 在近十年开始受到的大家的关注,首先是因为它的内核功能,包括社区的持续活跃,在过去几年获得了持续的进步。上图是来自 DB-Engines 的统计,根据数据我们可以看到在去年整体大家都有一些退步和增长不太高的情况下 PostgreSQL 的进步是比较明显的。

下图中黄色的曲线是 PostgreSQL,我们可以很直观的看到它发展趋势是比较良好的。

                       

目前开源的 TBase 版本是基于 PostgreSQL10,我们也在持续的匹配 PostgreSQL 更多的功能,后续也会回馈到开源社区,希望和整体的 PostgreSQL生态有一个良好的结合和互动。


二、开源 TBase 定位及整体架构

1. 开源 TBase 的定位

                       

数据库按照业务场景主要分为:OLAP、OLTP 和 HTAP。

OLAP 的业务特点是数据量较大,一般是 10PB+,对存储成本比较敏感。它的并发相对于 OLTP 不会太高,但对复杂查询可以提供比较好的支持。

OLTP 的数据量相对较小,很多中小型的系统都不会达到 TB 级的数据量,但对事务的要求和查询请求的要求会比较高,吞吐达到百万级 TPS 以上。并且 OLTP 对于容灾能力要求较高。

国内的国产化数据库很多会从 OLAP 领域进行切入,从OLTP 角度切入会相对比较难,目前这一块还是被 IBM 或者Oracle 垄断的比较严重,我们希望尽快在这一块实现国产化。而 TBase 因为在保险行业有比较长时间的耕耘,在 OLTP 核心业务能力上有比较强的。

另外一个是 HTAP。在之前大部分的业务部署中,大家会把 TP 和 AP 分开,在中间可能有 ETL 或者流复式的技术将两套系统进行交互。但更理想的情况是可以在一套系统中同时完成两种业务类型的支持。

当然这个会比较复杂。首先大家可以看到他们的业务特点差别比较大,内核领域的优化方向也是完全不一样的,或者说技术上差异比较大。

TBase 推出 HTAP 也是从具体的需求出发,实际上 TBase 是更偏向于 TP,同时兼顾了比较好的 AP 的处理能力,在一套系统里尽量做到比较好的兼容。但如果要做更极致性能的话,还是要对HTAP 进行隔离,对用户提供一种完整的服务能力。

                       

TBase 的角度也是根据需求衍生出来的。腾讯云最早是做交易系统,后面慢慢的补充了 AP 的分析能力。

这块面临的主要的业务场景需求,首先是交易数据可能会大于 1T,分析能力大于 5T,并发能力要求达到 2000 以上,每秒的交易峰值可能会达到 1000 万。在需要扩展能力的情况下,需要对原有的事务能力、分析能力,或者数据重分布的影响降到最低。同时在事务层面做到一个完备的分布式一致性的数据库。

同时 TBase 也进行了很多企业级能力的增强,三权分立的安全保障能力、数据治理能力、冷热数据数据及大小商户数据的分离等。

           

前面我们介绍了 TBase 的发展过程,在这过程中我们也希望可以为开源社区进行一些贡献。

实际上在国内环境中替换核心业务还是比较难,更多的是从分析系统切入,最近几年才开始有系统切入到核心的交易事务能力上,TBase 也希望通过开源回馈社区,保证大家可以通过 TBase 的 HTAP 能力来填补一些空白,扩充生态的发展。

开源后我们也受到了比较多的关注和使用,其中还包括欧洲航天局的 Gaia Mission 在用我们的系统进行银河系恒星系统的数据分析,希望有更多的同学或者朋友加入到 TBase 的开发过程中,也希望通过本次介绍,方便大家更好的切入到 TBase 开源社区的互动中。

2. TBase 总体构架

                       

一个集群是由这几个部分组成:GTM、Coordinator和 Datanode。其中 GTM 主要负责全局事务的管控,是提供分布式一致性协议的基石;Coordinator 是用户业务的访问入口,对用户的请求进行分析和下发,具体的计算和数据存储则是放到了 Datanode 当中。


三、HTAP方面能力介绍

             

刚才我们讲的是 HTAP,下面我们先讲一下 OLTP,TBase 在这部分的能力是比较突出的。

如果用户需要在事务或者并发交易量上有要求的话,就需要一套比较好的分布式事务的系统。具体的需求包括高性能和低成本,在这部分,TBase 相较于传统的 IBM 或者国外更贵的一体机有较大的优势。

另外一个需求就是可扩展,在节点扩展的情况下去近似线性的扩展事务处理能力。那要如何达成这个目标?

                       

简单介绍一下事务的 MVCC 的处理,单机 PostgreSQL 主要是维护一个当前的活跃事务列表,它有一个结构叫 Proc array,相当于每一个用户的 session 有新的事务请求的话,会在事物列表里去记录当前活跃的事务,当需要判断 tuple 的可见性的话,会在活跃事务列表里拿一个 Snapshot 去跟存储上面的 tuple header 中记录的 XID 信息进行一个对比,去做 MVCC 的访问控制。

如果是扩展到分布式的情况,一个比较简单的方式是需要有一个中心节点。按之前的构架,在 GTM 上面会有一个中心化的活跃事物列表,来统一的为每一个访问的请求去分配 Snapshot。

但这个时候就有一个比较大的问题,中心节点会成为瓶颈,GTM 也会有一些问题,比如说快照的尺寸过大或者占用网络较高。

GTM 如果做一个中心化的节点的话,实际上存在一个单点瓶颈,每一个请求都要保证它拿到 snapshot 的正确性,这就需要对活跃事务列表进行上锁,这个在高并发情况下锁冲突会很大。我们是怎么解决这个问题的呢?

                       

这实际上也是业界一个通用的问题。目前我们看到互联网行业的方案,是从 Google Spanner 的方向衍生出来的。

Google Spanner 是一个全球分布式数据库,可以在各大洲之间提供一致性的数据库服务能力。它的控制并发技术特点,一是通过 KV 存储基于全局时间的多版本并发控制,另外一个是它通过使用成本比较高的 GPS 和全球一致的服务时间戳机制来提供一个 TrueTime API,基于真实时间制作一套提交协议。因为它的整体全球分布式,导致平均误差会大概在 6 毫秒左右,整体的事务时延是比较高的。

另外,有较多的系统会借鉴 Google Spanner 做事务模型,CockRoachDB 也是其中之一。

                       

另外,Percolator 也是 Google 为搜索引擎提供的一个比较有效率的数据库,使用 KV 存储,基于全局逻辑时间戳的 MVCC 进行并发控制。它的时间戳由专门的时间戳服务提供,分布式事务第一阶段需要对修改记录加锁,提交阶段结束锁定;事务提交时间复杂度为 O(N),N 是记录数,导致提交的性能会有影响,当然这样的设计也和系统需求相关。

                       

下面看一下 TBase 在分布式事务上的能力,这部分我们也是在前面的基础上做了较大改进。

首先我们对 GTM 集群做了优化,从原始的全局 XID 改成了分配全局时间戳GlobalTimeStamp(GTS),GTS 是单调递增的,我们基于 GTS 设计了一套全新的 MVCC 可见性判断协议,包括 vacuum 等机制。这样的设计可以把提交协议从 GTM 的单点瓶颈下放到每一个节点上,减轻压力,同时通过时间戳日志复制的方式实现 GTM 节点主备高可用。

这种协议下 GTM 只需要去分配全局的 GTS,这样的话单点压力就会被解决得比较明显。根据我们的推算, 滕叙 TS85 服务器每秒大概能处理 1200 万 TPS,基本能满足所有分布式的压力和用户场景。

                       

我们刚才也提到,在 Percolator 的实现下,需要对 Tuple 上锁并修改记录,这样的话性能是比较差的。而实际上我们对提交协议做了一个优化,在对 Tuple Header 的 GTS 写入做了延迟处理,事务提交的时候不需要为每一个 Tuple 修改 GTS 信息,而是把 GTS 的信息存储在相应的 GTS Store File 当中,作为事务恢复的保障。

当用户第一次扫描数据的时候,会从 GTS Store File 中取到状态,再写入到 Tuple Header 中,之后的扫描就不需要再去遍历状态文件,从而实现加速访问,做到事务处理的加速。这样在整体上,让数据库在事务层面保证了比较高效的设计。

                       

关于集中数据分布的分类情况,有以下三种。

第一种情况是复制表。复制表中的每个存储节点都有完整的数据副本,适用于变化较少的小表,可以加速关联查询。

第二种是 HASH 分布,这是比较经典的一种方式。简单来讲就是将数据按照分布列进行 hash,把数据打散在各个存储节点中,如果 hash key 选择不当,则可能造成数据倾斜的情况。

第三种是基于 RANGE 的分布。RANGE 分布会将数据按照分段打散成小的分片,和 hash 相比分布上不会特别严格,对上层的节点弹性有比较好的支持。但它在计算的时候,相对 hash 的效果不会特别好。

在整体上,TBase 选择的是复制表和增强的 hash分布。

                       

下面介绍一下如何看分布式查询,PushQuery 和 PullData。

最开始早期的一些系统可能会选择更快速的实现,比如说存储上是分成多个 DN,然后把数据拉取到 CN 进行计算。

这种情况下优缺点都比较明显,优点是更高效更快速,缺点是 CN 是一个瓶颈,在网络上压力比较大。所以我们更倾向于上图中右边的方式,把有的数据和计算下放到 DN 结点上。

最基本的情况下,希望所有的计算可以放到 DN 上来进行。DN 在做重分布的时候,需要跟 DN 间有交互的能力,这个在 TBase V2 之后做了比较多的增强,目前 TBase 可以将计算尽量的分散到 DN 结点上来进行。

                       

上图介绍的是 SQL Shipping 和 PlanShipping 的区别。

实际上当处理一个 query 或者一个查询计划的时候,会有两种情况。一种是说我直接把 SQL 通过分析发到 DN 上执行,CN只负责结果的收集。这样的优化效果会比较好,因为不需要在多个节点建立分布式一致性的提交协议,另外在计算资源上效率会更高。我们在 OLTP 领域的一些优化会采用这样的方式。

另一种情况是在 OLAP 领域,更正规的 PLAN 的分布式。在 CN 上对 query 做一个整体的plan,按照重分布的情况把计划分解成不同的计算分片,分散到 DN上进行处理

刚才讲到,就是如果能把对 OLTP 推到某单个 DN 上来做的话,效果会比较好。我们举个简单的例子。

                       

两张表的分布列是 f1,数据列是 f2,若 query 可以写成分布键的关联情况,并且采用的是 hash 分布,就可以把 query 推到不同的 DN 上来做。因为不同 DN 间的数据受到分布件的约束,不需要做交叉计算或者数据的重分布。

第二类是有分布键的等值链接,同时还有某一个分布键的具体固定值。

                       

在这种情况下,CN 可以通过 f1 的值判断具体推到哪个 DN 中去做。

还有一些更复杂的查询,比如存在子查询的情况,但方式也是类似的分析方法。

                       

子查询可能会有一个复杂情况,如果在多层的子查询中都可以判断出来跟上层有相同的单一节点分布情况,query 也可以下发到 DN 中。这种情况下对 OLTP 性能会有比较好的影响,集群的能力会得到比较好的优化。

针对比较复杂的 query,可能就需要涉及到优化配置的调整。

             

方式主要分为两种:规则优化(RBO)和代价优化(CBO)。RBO 主要是通过规则来判断查询计划到底符不符合进行优化,这个是比较早期的一些实现方法,因为计算量相对较小,所以对某些场景比较高效,但明显的缺点是弹性不足,同时不能用于比较复杂的场景。

实际上更多的这种数据库使用的是 CBO 的方式。简单讲,CBO 会对所有路径的进行动态规划,选择成本最小的一条作为执行计划。这种方式的优点是有较好的适用性,能够适合复杂场景的优化,性能表现较稳定。缺点是实现复杂,需要一定的前置条件,包括统计信息、代价计算模型构建等。

但这也是不绝对的,两者没有谁可以“赢”过对方的说法,更多是需要对二者进行一个结合。TBase 主要是在 CBO 上进行优化,比如在计算一些小表的场景中,不需要进行 redistribution,直接 replication 就可以了。

关于分布式中文 distribution 的一些调整的情况,我们还是打个简单的比方。两张表,TBL_A 和 TBL_B。

             

如果 f1 是分布列,分布类等值的情况下会变成 push down,这种情况下可以在 DN 上直接进行计算。

上图中间的情况中,TBL_A 是分布键,TBL_B 是非分布键。在这种情况下,如果 TBL_B 足够小,必须要对 TBL_B 进行重分布,也就是对 TBL_B 进行 replication,这时就会涉及到一些代价的估算。而如果 TBL_B 比较大的话,可能需要对 TBL_B 进行 redistribution。

                        

刚才我们也讲到,TBase 在 OLAP 方面也有比较强的能力,这部分的优化思路主要是借助了计算的并行。计算的全并行能力主要体现在几个方面。

首先是节点级的并行,因为我们是分布式的数据库,所以可以有多个节点或者进程进行计算;另外一层是进程级的并行,目前 TBase 没有改成线程模型,所以并行主要体现在进程级模型中,基于 PostgreSQL 进程并行的能力做了一些增强。还有一层是指令集的并行,对指令进行优化,后面也会对这部分进行持续的增强。

                       

那么 Postgres 的查询计划,或者是进程并行的能力是如何实现的呢?最早期我们 follow 的是 PG10,并行能力并不是非常强,只提供了基础的框架和部分算子的优化,这是 TBase 当时进行优化的一个点。

在分布式的情况下,很多单机可以进行并行,但在分布式中就不可以进行并行,所以我们希望对这些能力进行一些增强,从而保证更大范围的一个并行能力。

并行计算其实是一种自底向上推演的方式,比如说底层的一个节点可以并行,那么如果递推向上到了某一层不能并行,就可以把下面所有可以并行的地方加一个 Gather Node,把结果从多个进程中进行收集,继续向上进行规划。这也是我们希望增强的一个点。

下面我们介绍一些具体的优化。

                        

早期 PG 的 HashJoin 在 outer plan 是可以做并行的,但在 inner 构建 hash table 的情况则不能做并行的。

简单来说,hashjoin 可以分为几步。首先是 build hash table,第二步是获取部分 outer plan 数据,计算哈希值,并进行匹配。这里我们将 inner hash table 构建过程也做了并行化处理,保证 Hashjoin 的左右子树都可以进行并行,并继续向上层节点推到并行化。

另外一种情况是 AGG(Aggregation)。

                       

很多情况下都是一个两阶段的 Agg,需要在 DN 上做一些 partial agg,然后到上层计划分片进一步做 final agg。实际上在这种情况下,中间碰到 redistribute 需要先在 DN 进行数据的整合,然后再去做 final 的 Agg。

在有多层子查询的情况下,每一层都进行计算会导致最后整体的并行计算不会很高。所以我们在 redistribution 也做了一些并行,也就是在 Partial Agg 的情况下可以按照 hash 分布去发到对应的上层 DN 节点上进行并行。

还有一些数据传输方面的优化。

                      

我们提到 redistributio 节点可以进行并行能力的增强,而在数据的接受和发送上也需要进行优化提升。早期的版本是单条的处理模式,网络的延迟会比较高,性能会不太好,所以我们在这部分进行了一些优化,从而实现比较好的并行执行的能力。


四、开源TBase企业级能力介绍

实际上 TBase 还做了一些企业级能力的增强,后面也持续的会去做一些开源贡献和优化。

           

目前开源 Tbase 企业级已经可以实现多地多中心,或者是多活能力的构建,包括安全、管理、审计的能力,TBase 在安全上面有比较高的要求,后面也会持续的贡献出来。

还有就是在水平扩展能力上,TBase 可以做到在用户感知比较小的情况下进行扩容。扩容在大数据量的情况下是一个普遍的痛点,我们在这方面的能力上也会有一个持续的增强。

此外,TBase 还有自研的分析表以及冷热数据的分离,也都是有比较好的效果,对于用户成本的降低,还有数据分布的灵活性都会有比较好的提升。

TBase 在今年 7 月 13 号开源发布了 v2.1.0 版本,我们也持续的在开源能力上做着建设,包括多活能力的持续增强、维护性的增强,性能安全持续的升级,包括通过一些企业客户发现的问题也都会持续的贡献出来。还包括统计信息增强以及增强对小表重分布的优化,也是希望大家可以持续关注 TBase,和我们进行更多的讨论和切磋。


五、Q&A   

Q:TBase的布置有哪些要求?

A:大家可以访问 TBase 的开源版本,上面有具体的使用方法和基于源码的构建,还有搭建的流程,都有比较明确的文档。如果大家想尝试的话,可以使用正常的 X86 服务器或者本机的 Linux 服务器就可以做一些简单的搭建,企业级项目上大家也可以做一些尝试,保持沟通。

   

Q:为什么选择基于 PostgreSQL 开发呢?

A:实际上大家会面临 MySQL 和 PostgreSQL 两个方向上的选择,我主要介绍我们选择 PostgreSQL 的原因。

一是 PostgreSQL 的协议会更加友好,在协议的灵活性上会比较好一些,大家可以随意的对它的代码做改动和完整发布。

另外它的内核实现上也比较严谨,有自己的独到之处,持续的也在增强,包括它的迭代速度也是比较快。我们早期一直在跟进,持续的 merge PostgreSQL 的一些 feature,也是伴随着 PostgreSQL 的成长,我们的内核也做了一个比较快速的迭代。同时我们也在了解内核的情况下,做了一些更深入的调优。

   

Q:DN节点的存储集群是基于Raft吗?多Leader还是单Leader呢?

A:目前我们的 DN 结点没有用到 Raft 协议,是做的主备复制。我知道有很多新的业务会基于 Raft 的提交协议,或者是用这种复制的协议去做一致性和高可用。但实际上 Raft 的多副本对提交协议还是有一些性能影响的,整体的流程相对于传统的会有更长的时延,相当于 CAP 原理,C提高了,A会有部分影响。

而我们更倾向于 OLTP 系统,所以在事务上的要求和时延响应的要求是比较高的,于是做了这样的选择。

   

Q:能详细讲讲分布式事务的实现流程吗?怎么样保证多机之间的分布式事务,两阶段提交吗?

A:现在我们基本是 follw 两阶段提交。一个是两阶段提交的控制流程、控制协议,另一个是事务隔离的协议。刚才主要讲了 MVCC,在提交协议上基本上两阶段提交的增强版。

由于使用了 GTM,导致它和传统的单机模式不太一样,做了一些统一的协调,刚才也着重介绍了。这样的一个优势是减轻了 GTM 上的压力,另外在 prepare 阶段会有部分的阻塞情况,但在优化之后影响是非常小的,却能极大的减轻 GTM 的压力。

Q:底层的存储是怎么同时满足行存和列存的需求呢?还是按照块(Tile)连续存储?

A:我们开源版本的底层存储主要是行存,后面会在列存和 HTAP 进行持续的增强,进一步提升 HTAP 的能力。等逐步稳定之后,会再考虑迭代开源版本。

Q:最少需要多少服务器搭建?

A:其实单点搭建也是可以的。一个 DN、一个 CN、一个 GTM 也可以。实际上最好布成两 DN,可以体验更多的分布式搭建。实际上我们在企业服务的集群上已经超过了上千个节点,包括解决 GTM 的单点压力上,对集群整体的扩展性有比较好的提升,所以从两个节点到多节点都可以去尝试一下。

Q:GTM的授时,有采用batch或者pipeline吗?还有现在Tbase支持的从库的读一致性吗?

A:有的。GTM 的授时我们也做了更多的优化,简单说可以做一些并行的 GTS 的单调授时,根据现行的规模或者是我们对客户场景的预估,在 x86服务器中大概可以达到1200万QPS的授时的能力。在增强服务器的情况下,整体的能力是比较强的,基本上不会在这部分产生瓶颈。

   

Q:tbase有什么安全保障机制?

A:从业务角度,我们讲到了安全隔离,以及有很强的行级安全规则、列级访问控制以及数据加密、脱敏增强,这些都可以倾向于向一个企业级的数据库去应用,现在很多企业级服务的能力也在 TBase 里面,后面我们会根据情况进行进一步的迭代。

讲师简介

伍鑫

腾讯TBase专家工程师

伍鑫,腾讯TBase数据库专家工程师。在数据库、数据复制、大数据计算等领域有丰富经验,曾发表多篇相关论文、专利。加入腾讯前曾在IBM大数据分析团队工作多年,后加入Hashdata数据库创业公司。加入腾讯后,负责TBase数据库优化器、执行器、分布式事务等多项核心功能研发。

沙龙预告

今晚8点准时分享,Tars 是由腾讯主导开源,并捐献给 Linux 基金会的微服务 RPC 框架,而 TarsBenchmark 的推出极大降低了其使用门槛,同时支持在线评测服务性能...扫描下方二维码或点击文末「阅读原文」即可预约观看今晚直播~

相关推荐

大模型的Agent Skill功能,在LLM HTTP底层交互流中是怎么承载的?

网络文章文本的 skill,昨天我实现了之后也就开始好奇起 Skills 的底层原理了——相比起各种花里胡哨的 agrnt 应用,我一直以来都很对大模型在纯粹的 HTTP 交互层面是如何交互的更感兴趣。Skill 的全部"魔法"都发生在 system prompt 的措辞和 SKILL.md 文件的编写质量上——本质上是一种 prompt engineering + 文件系统的组合。但是各种天花乱坠的 skills,是如何在底层的 HTTP 中,与大模型——这个只会嘴遁的工具交互的呢?

QcloudCommunity的博客 403

万字入门AI Infra:深入理解大模型中的数学与Infra优化

关注腾讯云开发者,一手技术干货提前解锁👇AI Infra科普、入门或者进阶 ~~ 不到 5 万字,带你融会贯通理解大模型的数学、算法、硬件到系统工程。任何问题欢迎沟通交流。可怕,我竟然有点认同这句话。当然大概率是因为姚顺宇太懂AI了,而我则是因为无知者无畏。不过仔细想想,大模型推理中的数学逻辑确实不复杂,很多原理只需要高中数学知识就能看懂。但是为什么像 vLLM 这种推理系统这么复杂呢?本文将拆解大模型中几个核心操作(RMSNorm、Softmax、Causal Mask、Sampling)背后的数学与

QcloudCommunity的博客 1162

平平无奇的源码,竟藏着Agent的核心秘密?

System Prompt 是剧本,Skill 是剧本的扩展包,Agent Loop 是演员按剧本行动。欢迎留言,我们将邀请作者针对性回复你的评论,我们将选取1则优质的评论,送出腾讯云定制文件袋套装。,让 Agent 能主动"巡逻",而不只是被动等待用户消息。OpenClaw 的 System Prompt 分层结构。的"行为底线",任何 Skill 或用户命令都无法覆盖它。精华 2:Skill 的"按需加载"避免 token 浪费。精华 1:System Prompt 是"分层乐高积木"

QcloudCommunity的博客 424

QQ音乐Harness Engineering实践

一个看似简单的需求,背后可能牵动服务调用链、配置、灰度、埋点、错误码、接口契约和历史兼容性。当 AI 开始快速生成大量代码,真正的瓶颈就不再是"写不出来",而是"看不完、想不清、管不住"。在对话式编码阶段,一种典型的工作模式逐渐流行:开发者把需求丢给 AI,扫一眼输出"看起来对"就直接采纳,不审 diff、不追问逻辑、不验证边界。以音乐商业化业务为例,一个需求可能从 TAPD 单开始,经过需求评审、技术方案、服务影响面分析、IDL 契约变更、业务代码实现、测试验证、CR、灰度上线,最后才进入稳定运行。

QcloudCommunity的博客 713

从Prompt、Context到Harness,工程的三次进化与终局之战

同时,强制要求散落各处的决策记录(Slack、邮件、文档)全部迁移至代码仓库,确保 Agent 的唯一信息来源是可信的、版本受控的仓库。更坑爹的是,研究表明,当上下文过长时,模型会出现"中间遗忘(Lost in the Middle)"现象:它对开头和结尾的内容记忆较好,对中间大段内容的关注度大幅下降。这篇文章,我想带你完整走一遍这三次进化的逻辑:它们分别解决了什么问题,它们之间是什么关系,它们的边界在哪里,以及:当三者融合,AI 工程师的终极形态究竟是什么?大语言模型的本质,就是这位金鱼助理。

QcloudCommunity的博客 715

让Skill自己训练自己:8阶段Loop、3层评测、5维AND门控,从此实现自进化

所以每一轮改动都是有据可查的,不是「感觉这里可以优化」,而是「Case 41 挂了,因为 agent 把离职问题路由到了邮箱分类,但正确答案在通讯录,所以我改 root_index.md 加个易混淆提示」。但让我最后决定把它记录下来的,不是这的个「吸收」过程,而是它真的在替我探索我不想费脑力触达的边界,这看起来更像是一个机器智能应该有的样子。不准跨层,每轮只改一层的东西。但我经过这 19 轮之后觉得,更准确的描述是互补——你在明处看着,AI 在暗处替你试错,你看不见的那一半就是 AI 能贡献的地方。

QcloudCommunity的博客 1125

只加两行代码,为什么要两天?一文深度理解业务系统的复杂性

关注腾讯云开发者,一手技术干货提前解锁👇业务系统复杂性一直是令开发者头痛的问题。复杂的不是增加一个需求需要耗费多少时间,而是在增加一个需求后带来的蝴蝶效应:其它功能会不会受到影响、要如何去找到这些影响,最终如何实现系统正常运行......功能之间隐秘增加的耦合、不可避免的代码腐化在导致业务复杂性增加。大家都在说的软件开发提效到底在提什么?程序员日常工作中应该如何提升开发效率?敏捷开发、瀑布流式开发孰是孰非?欢迎阅读。业务背景与目标我依然非常清晰地记得某个时候,我所在团队 Leader 曾讲过一段话:“我担

QcloudCommunity的博客 710

从零设计生产级 Multi-Agent Harness:架构、评估、记忆、成本与 MCP 工具接入全拆解

在 AI Agent 领域,Multi-Agent Harness 指的是把多个 Agent 的能力、工具、状态、通信、编排、监控统一收束在一个运行时之内的框架。第三,Agent 路由。一个输入框,一个大模型,几个工具,一段写得很漂亮的 System Prompt,再配上一个炫酷的前端,看起来就像一个能干活的“数字员工”。Multi-Agent 完全不一样——它有计划、有中间步骤、有工具调用、有 Agent 协作、有重试、有反思、有最终合成。增加 Budget、权限、重试、压缩、轨迹评估、审计、回归测试。

QcloudCommunity的博客 707

拆完Hermes源码,我发现Agent的“自我进化“根本不需要训练模型

两个月 5.2 万 Star,Hermes Agent 用一个"LLM 审判官"机制实现了 Agent 的自我进化——不改模型权重,只改"怎么用模型"的策略。OpenClaw(社区昵称"龙虾"🦞)是 2025-2026 年最火的开源 Agent 框架,30 万+ Star,插件市场 ClawHub 里有数千个插件,能接入 Telegram、WhatsApp、Slack、飞书、企业微信——几乎是一个"个人 AI 操作系统"。Skill 是英语写的,Memory 是英语写的,审查 Prompt 也是英语写的。

QcloudCommunity的博客 905

AI Infra 其实没有多少新东西

传统 Infra 追求横向扩展,而 AI Infra 呈现 “AI 大型机”特性,是因为传统后台服务的可以容忍毫秒级延迟,但 AI 集群不行,GPU 的算力是 CPU 的数百倍,微秒级的延时等待也会造成很大的算力损耗,需要硬件的高度集成。在可预见的1-3年的未来,这样的专用硬件+网络的集中式架构很难发生比较大的改变。与之相似,模型推理的批处理就是将多个输入样本打包(batch),将原本串行的 N 次轻量的推理计算,合并为 1 次重量的计算,实现单位时间内处理更多的请求,提高了 GPU 利用率。

QcloudCommunity的博客 821

程序员越早想通这些越好

永远没有正确架构,你永远无法偿还完所有的技术债务,如同你永远不会设计出完美的界面,请避开完美主义的陷阱,永远没有完美的代码,能够满足当前需求,又为未来不管是自己还是他人留有扩展空间,就很好了。我们努力的方向就是将现实世界映射到有限的数据结构中,这就需要用户自定义类型,如果你的代码中包含类似 trader portfolio 这样的概念,你就可以使用他们的名称来建模,而不是使用基本数据类型复杂嵌套表述你的目的。从另一个角度看,代码里的注释都是补丁,是碎片化的,局部的注释很难推导模块整体的顺序及耦合关系。

QcloudCommunity的博客 464

RAG已死?不,是Grep回归了!

这样一来可以直接复用已有的计算缓存,只为新增的增量部分付全价,前面累积的大头按约 1/10 的缓存价计费。所以实际的工具组合方式是灵活的:Grep(默认模式)→ Read 是最常见的路径,但 Grep(content 模式)可以独立使用,LLM 也可以直接调 Read(如果已经知道文件路径),或者一次同时发起多个 Grep 并行搜索。它从零开始构建自己的对话历史,不继承主对话的消息,这意味着它搜索过程中产生的大量 grep 结果、代码片段都留在自己的 context 里,主对话只收到一段总结性的文本结论。

QcloudCommunity的博客 574

深入浅出Harness Engineerring之核心模式与理念

在智能体生命周期的关键节点(如会话开始、工具调用后)自动触发预设动作(如代码格式化),由系统确保关键流程被执行,不依赖可能被模型遗忘的指令。简单讲就是利用向量存储这个技术,来实现模糊检索,原理是:即使字面不同,但语义相近的文本,其向量在数学空间中的位置也很接近。根据命令类型、参数和影响,自动评估其风险等级(安全、有风险、危险),并采取自动执行、请求确认或直接拦截等不同策略。关键特性是可隔离、可重建、可扩展。不是一次判断就定终身,允许你改变、允许情况复杂,通过不断观察、思考、调整,越来越懂真实的你。

QcloudCommunity的博客 621

Harness Engineering实践心得:如何高效驾驭AI?

但如果这些经验被拆成一条条 Rule、一个个 Skill、一项项 Script 检查——"XAML 不能有中文"、"编译要用这个路径的 MSBuild"、"SVN 命令必须带认证参数"——AI 就能在秒级时间里"吸收"十年的踩坑经验。然后可以看到下方的图,我的PM会很顺利的调度其他agent分别负责不同的事项,遇到问题的时候也能准确的找到合适的agent。MCP 本质上是在扩展 AI 的"感知范围"——Rule 管"该怎么做",Skill 管"怎么操作",MCP 管"能看到什么、能碰到什么"。

QcloudCommunity的博客 838

从第一性原理思考 Agentic Engineering

需要注意的是,这一结论是有条件的:如果 AI 缺乏领域知识,过早介入反而可能引入 1.2 节所述的"似是而非"损耗——因此上下文供给(实践 1)是 AI 全链条参与的前提,而非结果。通过一个专门的自迭代 Skill 实现——当 AI 在协作过程中识别到自己被纠正(用户否定了 AI 的输出并给出了正确方向),它自动评估这个错误的根因,搜索现有的 Rules 和 Skills 中是否已有针对该类问题的处理规则。事实上,越是复杂的项目,工程师的认知负担越重(公理 3),AI 分担认知负担的潜在边际价值也越大。

QcloudCommunity的博客 756

万字干货!Harness Engineering如何工程化落地?

关注腾讯云开发者,一手技术干货提前解锁👇Harness Engineering 的概念已经火了有一阵了,全网很多文章基本都是在讲理念,讲为什么今天做 AI 开发,不能只靠一段提示词,也不能把模型当一个“更聪明的代码补全”。但与此同时,一个问题也在持续地发酵:这个问题特别重要。因为 Harness 这个词听上去很大,很像一个抽象的方法论,但它如果不能落到工程、目录、文档、脚本、工作流里,那它最后就只是一句漂亮的话。事实上,不同项目落地出来的 Harness,表面上可能完全不一样。有的项目是 CI 很强,有的

QcloudCommunity的博客 1161

全方位对比:Hermes VS OpenClaw

多账号矩阵运营 如果你的业务涉及同时管理多个社交媒体账号、多个平台的内容分发、多渠道的客户互动——OpenClaw是目前市场上的"无可替代的底座"。一个有专业背景的个人,现在可以快速构建一个垂直领域的AI助手:比如"财务分析Hermes"、"法律咨询Hermes"、"技术架构Hermes",直接通过微信提供服务,积累自己的专业IP。跨平台生态融合 如果你的工作流涉及飞书、Slack、Discord等多个平台的深度集成,需要这些平台之间的数据流转和联动——OpenClaw的生态支持是强大的。

QcloudCommunity的博客 1217

一文讲透:Harness Engineering即控制论!

而研发模式的升级我认为将会是一个飞跃的过程,之所以现在我们仍然需要需要参与编码,一个非常大的原因就是缺乏传感器和基建,仍然需要人来串流程,比如需要人来验证UI是否正确、需要人来告诉AI代码不符合代码规范,因此在有些场景我们仍然感觉 AI 完成的很吃力,但这不是 AI 能力不行,而是我们并没有为 AI 提供友好的环境……控制论中的突变理论介绍了矫枉过正和飞跃现象之间的矛盾,如果质变中经历的中间过渡态是不稳定的,那么他就是一个飞跃的过程,如果中间过渡态是稳定的,那么他就是一个渐变的过程。但是这些阶段要解决的。

QcloudCommunity的博客 1202

神级开源插件!一句话让QClaw变3D小镇,Agent工作可视化,赛博云监工

这个架构是翻了几次车才想通的—原有AI的实现机制是用 setTimeout 猜动画时长导致了幽灵 NPC、工位撞车、越改越崩,后面我停下来换了思路,推翻原有的架构,按照“意图+回传”的架构进行重构,之前的问题一次性全部解决。15 天,我和 AI 吵了 185 次架, 4.5 万行代码,开发了一款 QClaw / OpenClaw 的UGC游戏插件,这可能是人类跟 Agents 交互的新范式,插件已完全开源,有需要的欢迎自取~我天天用,用着用着我就在思考,Agent 产品现在的交互体验,基本都一个样。

QcloudCommunity的博客 1195

一文搞懂Hermes:新顶流Agent如何从经验中自我进化

Voyager 是一个能在 Minecraft 中自主探索、学习技能、无限积累能力的 AI Agent,它提出了 "Skill Library"(技能库)的概念——Agent 将成功的行为序列编码为可复用的技能函数,存储在一个持续增长的代码库中。如果 Skill 的名称和描述不够精准,或者用户的任务描述与 Skill 的触发条件有语义差距,Agent 可能会错过相关的 Skill。如果进程在写入过程中崩溃,目标文件要么是旧内容(还没被替换),要么是新内容(替换已完成),绝不会出现写了一半的损坏文件。

QcloudCommunity的博客 2631

自掏腰包一万元,拥抱AI这一年,我的工具、实践和思考

其实也很好理解,过往的每个领域(比如前端、后端、设计、测试等等)都主要是这个领域的从业者在为它添砖加瓦,但是大模型时代的 AI 应用领域却几乎是所有使用 AI 的人类一起在迭代,无分领域,无分文理,无分老少。因为每个时期的 AI 都有着不同的特点,很多时候当我费尽心思去钻研,自以为有点弄明白 AI 应该怎么玩的时候,基座模型和行业范式常常就会迎来颠覆式的变革,很多过往的经验都会倾覆,然后只能从头再来。过去一年多,被热议的 AI 范式大概是沿着四个阶段递进演化,每一个阶段其实都在解决前一个阶段的核心问题。

QcloudCommunity的博客 626

办公Agent的CI/CD时刻到来了

核心观点是:企业给员工配了一堆 AI 工具,试点跑了几百个,但真正拖慢 AI 转型速度的瓶颈不在模型能力,在"最后一公里":AI 输出和实际工作流之间的那道鸿沟。代码写完,打个 tar 包,开 FTP 传到服务器上,SSH 进去解压,改配置文件,重启服务,刷一下页面祈祷别 500。你复制,切窗口,粘贴到腾讯文档里,发现 Markdown 格式全乱了,手动调标题层级,代码块重新标记语言类型,表格散架了重排一遍。模型是越来越聪明了,但"生成"到"落地"之间那段路,还是你自己在走,一步一步,手动搬运。

QcloudCommunity的博客 607

4亿token买来5个教训:让6个AI Agent连写4天代码发生了什么?

Watchdog 检测到崩溃 → 启动诊断 Agent 分析原因 → 诊断 Agent 跑满 20 轮没搞定 → Watchdog 判定“已修复”,重启系统 → 重启的系统因为诊断 Agent 留下的环境变量被继承,连续 3 次拒绝启动 → 触发连续失败保护退出 → Watchdog 第 3 次巡检,发现进程和记录文件都没了,尝试手动重启,自己也停了。启动前我翻了论文、做了架构设计、写了监控+修复异常的脚本。这个发现让我的情绪从沮丧变成了兴奋——不是那种"终于修好了"的释然,是"我找到根因了"的快感。

QcloudCommunity的博客 584

赛博斗蛐蛐:9大模型决战三国志,天命在谁?

我猜是这样的,当Gemini面临决策的时候,一系列关键词比如 守城,劣势,粮草,三国等等,在语义层面的关联性中LLM发现了竖壁清野这个关键词概率非常高,所以以此为策略,然后再根据这个策略完美执行操作。MiMo 的外交是三方中最精明的。Kimi作为国产模型,也同样颠覆了我对他的看法,最后的比赛他甚至一度是优势者,存在很多夺冠的可能性,要知道他的对手可是claude和gemini,而他经常出兵慢,回过头来想想或许正是他的策略,毕竟中后期他的优势都来自于稳健的发展和较少的战斗频率(和claude比).

QcloudCommunity的博客 873

Claude Code是怎么知道你在骂他的?这 12 条发现值得关注

确实存在——5,500+ 行,集成了消息队列、工具装配、MCP 编排、会话状态、权限、分析、文件持久化和优雅关闭,基本上一个文件干了所有事。对抗虚假声明——"不要在输出显示失败时声称所有测试通过,不要压缩或简化失败的检查来制造绿色结果"。完整的 KAIROS 是一个持续驻留的守护进程,能感知你在不在电脑前、主动寻找有用的工作做,更像是住在终端里的全职同事。源码里藏着一个叫 "Buddy" 的电子宠物系统,完整度令人惊讶——这不是一个 TODO,而是一个从数值系统到 ASCII 动画都实现了的完整功能。

QcloudCommunity的博客 701

逆向深扒Claude Code源码,我发现了什么!?

Anthropic 内部用户获得更严格的质量控制 prompt、更好的验证机制(独立 Verification Agent)、以及针对 model 弱点的专门对策(如 Capybara v8 的 29-30% 错误声明率对策)。这不是代码混乱的标志——它是整个 Agent Loop 的心脏,所有的流式处理、工具调度、上下文压缩、子代理管理都在这个文件中协调。这种"胖核心"设计是刻意的:保持核心循环的原子性,避免分散到多个模块导致的协调复杂度。核心价值:Fork 代理的工具输出不会回到主代理的上下文窗口。

QcloudCommunity的博客 889

一文讲透如何构建Harness——六大组件全解析

本文将从"裸模型的四个硬伤"出发,逐一拆解 Harness 的六大组件——文件系统、Bash + 沙箱、记忆(AGENTS.md)、Web Search + MCP、上下文工程、编排 + Hooks——带你看清 AI Agent 真正的竞争壁垒,不在模型层,而在 Harness 层。如果你用过 Agent 做复杂任务,你一定有过这样的体验:一开始 Agent 的表现很好,但随着对话变长,它开始"变笨"——遗忘之前的约定,重复之前犯过的错误,甚至对同一个问题给出前后矛盾的回答。对于简单的问答场景,这无所谓。

QcloudCommunity的博客 760

Harness Engineering 来了,SDD 还有意义吗?

他们的解法是把「品味」编码进规则,然后用一个定期运行的「doc-gardening」Agent 自动扫描漂移、发起修复 PR——「技术债务就像一笔高息贷款,不断地以小额贷款的方式偿还,总比让债务不断累积要好」。代码仓库本地的、已版本化的工件,才是 Agent 所能看到的全部。在 Vibe Coding 模式下(即不做规划、随意向 AI 提需求的开发方式),大量设计决策、跨服务约定、「为什么不选另一个方案」的讨论,全部停留在一次性的 AI 对话里——下一个人,或者下一次 AI 会话,完全无从获取。

QcloudCommunity的博客 418

零废话!一文讲透从0构建AI Agent

每个工具都要写一套"定义→解析→执行"的胶水代码。上下文管理就是在"记住足够多"和"别超标"之间找平衡,常见策略包括滑动窗口、摘要压缩、RAG 检索增强。上下文窗口是 Agent 的"工作记忆",但它有硬性限制。LLM 负责"动脑"决策,代码负责"动手"执行。这是从"聊天机器人"进化到"Agent"的关键一步。每次调 API 都把完整对话历史发过去,LLM 本身是无状态的,"记忆"完全靠客户端的数组模拟。这样 Agent 一开始就知道自己"在哪里"、"手头有什么",不需要先花一轮工具调用去探索环境。

QcloudCommunity的博客 711

距离AI把小编我裁掉还有72小时

这是一个基于 OpenClaw 开源生态打造的本地化 AI Agent 助手,已于上周开启全量公测,无需复杂配置,三步即可上手,自带安全防护,支持微信直连绑定,内置多款优质国产大模型,现阶段也是完全免费使用,基本上前面提到过的痛点都可以靠它解决。对了,这里特别强调一点,上面的截图让产品同事汗流浃背,再三找我确认 QClaw 思考过程中优美的“草”字说法,不会是默认出现的吧?AI 好,AI 得学,但更重要的是,在你的工作和生活里,哪些东西是能结构化地被 AI 所接入的,不要死守着那些脏活累活不放。

QcloudCommunity的博客 673
上一篇: 重构实践:基于腾讯云Elasticsearch搭建QQ邮箱全文检索
下一篇: 存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?
腾讯云开发者
腾讯云开发者 企业官方账号 企业官方账号
博客等级 码龄10年 6291粉丝 1962原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值