微服务与分布式系统设计看这篇就够了!

ea785a22f2b75f88f0f7ec1bf8bb2803.png

f87e93622439d0af204866ee4a7adc53.gif

👉目录

1 分布式系统概论

2 实现分布式系统的模型

3 接入层解决了什么问题?

4 微服务的容错

5 服务发现

6 扩容

7 数据存储

8 总结

后台分布式架构形形色色,特别是微服务和云原生的兴起,诞生了一批批经典的分布式架构,然而在公司内部,或者其他大型互联网企业,都是抛出自己的架构,从接入层,逻辑层,数据层都各有特点,但这些系统设计中到底是出于何种考量,有没有一些参考的脉络呢,本文将从云原生和微服务,有状态服务,无状态服务以及分布式系统等维度探讨这些脉络。

关注腾讯云开发者,一手技术干货提前解锁👇

//////////

10 月 24 日晚 8 点,腾讯云开发者视频号「鹅厂程序员面对面」直播间,邀你共同论道《1024:AI时代 程序员何去何从》,预约观看有机会抢鹅厂周边好礼!

01

分布式系统概论

下面这个定义来自于经典的《Designing Data-Intensive Application》:

一个涉及通过网络进行通信的多台机器的系统被称为分布式系统。需要分布式系统,一般是希望能从分布式系统达到以下的好处:

  • 容错/高可用性:如果您的应用程序需要在一台机器(或多台机器、网络或整个数据中心)宕机时仍然继续工作,您可以使用多台机器来提供冗余。当一台机器失败时,另一台可以接管。

  • 可扩展性:如果您的数据量或计算需求超过单台机器的处理能力,您可以将负载分散到多台机器上。

  • 低延迟:如果您的用户遍布全球,您可能希望在全球各地设置服务器,以便每个用户都可以从地理位置靠近他们的数据中心获得服务。这避免了用户必须等待网络包绕地球半圈来响应他们的请求。

  • 资源弹性:如果您的应用程序在某些时候忙碌而在其他时候空闲,云部署可以根据需求扩展或缩减,因此您只需为您实际使用的资源付费。这在单台机器上更难实现,因为它需要预先配置好以应对最大负载,即使在很少使用时也是如此。

  • 法律合规:一些国家有数据居留法律,要求在其管辖区内的人的数据必须在该国地理范围内存储和处理 。这些规则的范围各不相同——例如,在某些情况下,它仅适用于医疗或财务数据,而其他情况则更广泛。因此,一个在几个这样的司法管辖区有用户的服务将不得不将其数据分布在几个位置的服务器上。

分布式系统虽然能带来这些好处,但是分布式系统也存在很多挑战。通过网络传输的每个请求和 API 调用都需要处理可能发生的故障:网络可能中断,服务可能过载或崩溃,请求超时。

但 DDIA 定义主要是基于有数据有状态来讨论分布式,但是从现实的实践中,分布式系统存在有状态和无状态两种:

类型相关描述
有状态

特点:

  • 有状态服务会在自身保存一些数据,因此先后的请求是有关联的。

  • 处理一个请求可能需要依赖之前请求的结果或上下文信息,这些信息被保存在服务的状态中。

  • 由于有状态服务需要维护状态的一致性,因此在扩展或部署时需要考虑状态迁移和同步的问题。

  • 有状态服务通常用于需要维护用户会话、事务处理或需要保持数据一致性的场景。

相关理论:

  • CAP理论,CAP理论是指在分布式系统设计中,‌一致性(Consistency)、‌可用性(Availability)和‌分区容错性(Partition Tolerance)这三个特性无法同时满足。一致性指的是在分布式系统中的所有数据备份在同一时刻是否同样的值;可用性指的是每个请求不管成功或者失败都有响应;分区容错性指的是系统中任意信息的丢失或失败不会影响系统的继续运作。

  • BASE理论:BASE理论是对‌CAP定理的一种实用化延伸,强调在分布式系统中适当放宽对强一致性的要求,以换取更高的可用性和系统性能。其核心思想是:我们无法做到强一致,但每个应用可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。

无状态

特点:

  • 无状态服务在处理请求时不依赖其他请求,每个请求都是独立的。

  • 处理一个请求所需的全部信息要么包含在请求本身中,要么可以从外部资源(如数据库)中获取。

  • 服务器本身不存储任何与请求相关的状态信息,因此不需要在请求之间保持状态的一致性。

  • 由于无状态服务的独立性,它们通常更容易扩展和部署,因为不需要考虑状态迁移或同步的问题。

特别的,是各种并行计算相关框架,比如:

  • MapReduce算法

  • OpenMP

  • MPI框架

为什么我们要重点说有状态的分布式架构?

目前大部分业务应用场景(特别是 to c 业务)需要存储用户的数据以及业务数据,本质还是数据密集型系统,也就是有状态的服务,那么如何设计好一个有状态的分布式架构,是大部分业务都会面临的共同问题,也是本文的重点。

这里给出设计有状态分布式架构,需要的一些考虑:

  • 数据可靠:数据写入可靠,并且多个副本间最终一致性。

  • 高可用:可以实现物理故障的容灾(粒度可能包括机器,机架,同城,跨城)。

  • 更好的用户体验:尽量让单个请求耗时减少,从用户到业务机器,非必要不跨城,如果跨城,一次请求至多一次跨城。

  • 高并发:支持高性能的读写操作,读写要求都超过单机性能。

  • 降低运维成本:支持水平扩缩容,并且尽可能利用机器资源。

02

实现分布式系统的模型

下面的图都涉及到两个概念,这两个概念很多业务分层的概念,本文用这个分层来作为例子讨论:

AO:封装了应用程序的业务逻辑和处理流程。AO 主要负责处理用户请求,调用相关的原子服务来完成特定的任务。它通常位于微服务的顶层,与其他对象进行交互,协调不同的功能模块‌。

BO:微服务中相关的原子服务,负责业务原子化的服务,通过被各种 AO 服务调用。功能可以是某个特定的业务原子功能,也可以是和数据打交道的原子服务。

实现有状态的分布式系统,通常有以下三种:

   2.1 单体应用

单体架构是一种传统的架构方式,应用程序作为一个整体进行开发、测试和部署。

61686dcda22220f9025818eef3e06a89.png

优点

  • ‌简单性‌:相对于微服务架构,单体架构的开发、测试和部署更为简单。整个服务可以简单扩展。

  • ‌性能较好‌:由于所有功能都在同一个进程中运行,通常具有较好的性能和响应能力。

  • ‌易于维护‌:所有的代码和功能都在同一个代码库中,使得维护和修改相对容易‌。

面临的问题

  • 系统复杂度高‌:随着功能的增加,代码库变得庞大和复杂,导致开发人员难以理解整个系统,进而影响代码的质量和维护性。

  • 开发速度慢‌:由于需要编译、构建和测试整个项目,每次更改代码都会消耗大量时间,增加了开发成本。

  • 难以扩展‌:单体应用难以根据不同模块的需求进行针对性的扩展,往往需要整体扩展,导致资源利用效率低下。

  • ‌难以维护‌:模块之间的耦合度较高,修改一个模块的需求往往会带来连锁反应,影响其他模块的稳定性。

  • 难以采用新技术‌:项目是一个庞大的整体,使得应用新技术的成本很高,因为必须对整个项目进行重构,这通常是不可能的。

  • 开发速度慢‌:应用太大,每启动一次都需要很长时间,因此从编辑到构建、运行再到测试这个周期花费的时间越来越长。

  • 部署困难‌:代码部署的周期很长,而且容易出问题。程序更改部署到生产环境的时间变得更长,代码库复杂,以至于一个更改可能引起的影响是未知的。

  • 系统故障隔离差‌:应用程序缺乏故障隔离,因为所有模块都运行在同一个进程当中,任何部分的故障都可能影响整个系统的稳定性,导致宕机。

   2.2 SOA 架构

SOA 架构更多是关注于改变IT服务在企业范围内的工作方式,SOA(面向服务的架构)定义了一种可通过服务接口复用软件组件并实现其互操作的方法。简单举个例子,使用 SOAP(简单对象访问协议)/HTTP 或 Restful HTTP (JSON/HTTP) 等标准网络协议来公开服务算是 SOA 的一种。

1c7ce98d5946d24a0b2eeb200d22ca8e.png

优点

  • 可扩展性和灵活性:SOA 架构将系统拆分成独立的服务,可以按需组合和重组这些服务,从而实现系统的快速扩展和灵活部署。

  • 提高系统的可重用性:每个服务都是独立的功能单元,可以在不同的系统中复用,提高了系统的开发效率和维护成本。

  • 降低系统的耦合性:SOA 架构通过服务之间的松耦合关系,降低了服务之间的依赖性,有利于系统的模块化和维护。

  • 提高系统的稳定性和可靠性:SOA 架构采用了服务注册与发现机制、负载均衡、故障恢复等机制,提高了系统的稳定性和可靠性。

面临的问题

  • 系统复杂度高:SOA 架构中涉及多个服务之间的协作和通信,系统的复杂度较高,开发、测试和维护成本相对较高。

  • 性能问题:由于服务之间的通信需要通过网络进行,可能存在网络延迟和性能损失,对系统的性能造成影响。

  • 安全性难以保障:SOA 架构中涉及多个服务之间的通信,需要对数据传输进行加密和安全控制,保障系统的安全性比较困难。

  • 部署和运维难度大:SOA 架构中涉及多个服务的部署和管理,需要专门的运维团队进行管理,增加了系统的复杂性和运维成本。

   2.3 微服务

微服务架构是一种云原生架构常用的实现方式,在这种方法中,单个应用程序由很多松散耦合并能够独立部署的更小组件或服务组成。一般认为是 SOA 架构的一种变体,一般也会使用 SOA 的原则来设计接口,但微服务更强调基于云原生,独立部署,和 devops,持续交付是一脉相承的。

ce4bd04c9a3b58f9cbcaa579f7a07d3b.png

优点

除了类似于 SOA 的优点,还有以下优点

  • 独立性‌:每个服务可以独立部署和更新,提高了系统的灵活性和可靠性。

  • ‌可扩展性‌:根据需求,可以独立扩展单个服务,而不是整个应用程序。

  • ‌容错性‌:单个服务的故障不会影响其他服务,提高了系统的稳定性‌。

对比 SOA,主要是在部署和运维难度上提升了,但是又引入了以下一些需要解决的问题:

  1. 必须有接入层:如上图,微服务化后,必然存在用户需要直接链接后端服务,那么这个时候就需要网关来解耦这块,也就是上面接入层讨论的好处。

  2. 服务容错:多个微服务部署在云上,不同母机,会带来通讯的复杂性,网络问题会成为常态,那么如何容灾,容错,降级,也是需要考虑的。

  3. 服务发现:当服务 A 发布或者扩缩容时,依赖服务 A 的服务 X 如何在保持运行的前提下自动感知到服务 A 的变化。这里需要引入第三方服务注册中心来实现服务的可发现性。比如北极星,stark,以及如何和容器,云原生结合。

  4. 服务部署:服务变成微服务之后,部署是分散,部署是独立的,就需要有一个可靠快速的部署,扩缩容方案,也包括 ci/cd,全链路、实时和多维度的可观测性等,如 tke,智妍等,k8s 就是解决这种问题的。

  5. 数据存储隔离:数据存储隔离(Data Storage Segregation, DSS) 原则,即数据是微服务的私有资产,必须通过当前微服务提供的 API 来访问数据,避免数据层产生耦合。对于有状态的微服务而言,通常使用计算与存储分类的方式,将数据下层到分布式存储方案中,从而一定程度上实现服务无状态化。

  6. 服务间调用:服务 A 采用什么方式才可以调用服务 X,由于服务自治的约束 ,服务之间的调用需要采用开发语言无关的远程调用协议。现在业界大部分的微服务架构通常采用基于 IDL (Interactive Data Language, 交互式数据语言)的二进制协议进行交互,如 pb。

通过上面讨论,目前微服务来实现分布式系统是比较符合云原生的趋势,所以下面的讨论主要是基于微服务化的设计。

下面针对微服务设计需要解决的问题,一起探讨下上面微服务需要解决的1-5个方面在系统该如何实现(第6点方案比较明确,这里不展开讲述):

03

接入层解决了什么问题?

从上面单体应用架构,微服务架构,可以看出明显的差别,就是单体应用架构每个服务都可以提供完整的服务,那么用户和后台链接数可以通过服务的无限扩容得到满足,但是微服务不行,微服务的每个对外的服务接口都得和用户建立链接,就会存在两个最主要的问题:

  1. 链接爆炸,有多少对外的微服务就多几倍的链接

  2. 服务和用户端耦合严重,用户端得知道哪个请求发往哪个服务,缺乏统一路由。

那么这个时候引入一个中间层隔离用户和后端服务是非常必要,这个中间层负责对接用户的链接,然后把请求往业务服务上发。同时考虑服务的用户有地域性,可以把中间层分成两个部分:

  1. 区域化网络接入层:负责区域化网络接入,跟用户地域就近。

  2. 业务网关:负责服务透明代理,命令字的转发等。

这时微服务架构就如下:

345e9d3960afa8f889c53b7adbf8164c.png

   3.1 区域化网络接入层

这一层需要解耦的重点是把用户的实际地域 和 业务的逻辑RS 对应起来,同时避免每个业务都去建设类似的架构,同时解决用户体验,让用户尽量访问离用户最近的业务机器,减少耗时。

所以用户到区域化网络层应该是地域就近,区域化网络层到业务网关也是就近,深圳对应深圳,上海对应上海,并且考虑机房间就近。

a46f12f7b912dd7bf32cebf0155f0da3.png

   3.2 业务网关

从上面分析可以看到,业务网关的作用最主要是透明服务代理(命令字转发),但业务网关还能提供如下作用:

  • 透明服务代理:提供统一服务入口,让微服务对前台透明,一般是通过命令字和后端 ao 接口对应起来。

  • 控制访问:收敛登录态校验,转发逻辑,染色,业务头部统一规整等功能,

  • 用户流量接入和隔离,流量转发,保护后端:如果是长连接服务,还可以收敛业务 ao 的链接,用户只需要和接入层链接,就可以使用所有服务,而不是每个用户都和 ao 链接,会造成 ao 服务的负载比较高。

  • 负载均衡:可以把用户的流量均衡(某些场景可能不是完全均衡,但也有分流的作用)请求 ao。

  • 限流降级:针对命令字会有限流,允许网关在极端情况下,进行随机请求丢弃,以避免整体服务的雪崩。

  • 就近接入,尽早跨城:尽可能先计算好用户的访问路径,比如读请求,可以直接就近访问下游 ao,bo,写请求需要知道用户数据的写点,可以尽早找到写点存在的集群,以满足至多一次跨城的需求。

    • 如果没有在一开始计算出来,在写点是跨城并且一次请求需要多次写的情况下,ao 需要调用多次 bo,bo 再去跨城的,就可能存在多次跨城。

业务网关的主要构成有:具有代理用户的接入服务 + 具有路由的转发服务。

路由实现又包含三个部分,路由存储、路由计算、路由容灾。

04

微服务的容错

   4.1 条带化

为啥说微服务的服务容错能力,要到这个概念?

微服务在部署上,特别是在云上,一种服务进行多份同构部署,以提供容灾的可能性,如果多种微服务的部署机房是无序的,那么在故障出现时,就很容易出现服务的调用链路,部分正常,部分故障,就算故障服务被剔除系统外,链路也是来回穿梭在多个机房,耗时和故障影响都不可控。(考量一些服务半死不活,也会形成二次打击)。

所以一个比较简洁的方案是一个完整的服务集群部署在同一个物理单元,在物理单元的粒度上进行服务的容错,同时在同一个物理单元内,微服务内的时耗也是最低的。

把一个完整服务集群部署在同一个物理单元(或者多个物理单元构成的逻辑单元),并且隔离流量的做法叫做条带化,其中每一个条带化的单元也叫做 set,也有人称之为单元化和逻辑单元,下文主要以条带化和 set 来表述。

使用条带化的好处:

  • ‌多 AZ 容灾‌:通过分布在不同可用区的服务器提高系统的容灾能力‌。提供 IDC(AZ 可用区)级别的物理容灾能力。

  • ‌提升用户请求访问速度‌:通过优化网络结构和部署策略,加快用户请求的处理速度‌。同 IDC(AZ 可用区)间微服务调用,耗时少。

  • 多活架构‌:通过在 IDC(AZ 可用区)之间分配流量负载,提高系统处理能力和资源利用率‌。

  • ‌故障影响控制‌:系统故障影响可以控制在故障的物理粒度范围内,确保服务的高可用性‌。

    • 一般还要求流量隔离,这样才能避免流量互相穿透在故障下带来的故障扩散效应。

    • 容灾是基于 IDC(AZ 可用区),而不是直接管理微服务,大大减少容灾维护的成本,同时可以提供容灾切换的成功率。

那么是不是自上而下都是条带化(包括逻辑层,数据层),就可以保证业务整体都有容灾能力呢?我们来对比下。

自上而下全部条带化

d3958f46846beb9649b8d6769c2c29e0.png

这个方案是把业务关心的内容都包括在条带化容灾里面,但从上面可以直接得看出因为用户存储数据不一定是在就近接入的业务网关的那个 set,所以业务网关实际也是有可能回路由到其他服务,这里其实就破坏了条带化。这种条带化没有达到流量隔离的目的。比如某个 set 的 ao 耗时变慢了,所有 set 的业务网关会收到影响,这个 set 所在机器也有可能受影响,进而导致这个 set 的 ao 和 bo 也受影响。故障会扩散。

除此之外,这种方案还有以下缺点:

  • 网关难以复用多个业务:业务网关的水平扩展与逻辑层耦合,业务网关只能 for 单个业务架构,达不到复用。

  • 容灾切换复杂:需要区域网络接入层和业务网关的路由协同处理容灾切换。如果是业务网关以下发生故障,发生切换,需要把业务网关的路由转发踢掉故障 set,区域网络接入层也要踢掉故障 set。

  • 数据层耦合限制 ao 和 bo 扩容:为了保证数据一致性,就需要牺牲整个 set 的可用性,这在一定程度会造成 ao 和 bo 的不可用。同时数据层的数据分片迁移难度也会限制扩容 set,从而影响 ao 和 bo 的扩容。

    • 更进一步说,无状态的微服务架构,自上而下都是条带化是可行,但是在有状态的微服务架构里面,无状态服务可以条带化,但是数据存储本身如果条带化,就会存在 CAP 理论中一致性和可用性的矛盾。

  • 业务网关需要理解数据分片情况:为了保证至多一次跨城,如果请求存在多次调用某个 bo 访问数据库,就得在业务网关直接知道接口需要的数据在哪个 set 的路由能力。

接入层以下条带化

ed51181b23004c5c9f468ba8e92782bf.png

这个方案是把逻辑层和数据层放在 set 里面。

这种方案的缺点:

  • 数据层耦合限制 ao 和 bo 扩容:为了保证数据一致性,就需要牺牲整个 set 的可用性,这在一定程度会造成 ao 和 bo 的不可用。同时数据层的数据分片迁移难度也会限制扩容 set,从而影响 ao 和 bo 的扩容。

    • 更进一步说,无状态的微服务架构,自上而下都是条带化是可行,但是在有状态的微服务架构里面,无状态服务可以条带化,但是数据存储本身如果条带化,就会存在 CAP 理论中一致性和可用性的矛盾。

  • 业务网关需要理解数据分片情况:为了保证至多一次跨城,如果请求存在多次调用某个 bo 访问数据库,就得在业务网关直接知道接口需要的数据在哪个 set 的路由能力

  • 业务网关只能跨城切换:这个严格来说不算缺点,因为业务网关是一个无状态的服务,可以水平扩容,甚至可以和逻辑层解耦部署,只考虑就近,多地部署即可,如果遇到机房故障,该机房机器剔除之后,还能正常地服务,也就不需要跨城切换了。

仅逻辑层条带化

caefe570c3251a42f5174df1eb17863f.png

这种方案,便是逻辑层 看作是无状态的微服务集群,把有状态的界限尽量限定在数据层,避免耦合逻辑层比较多的无状态服务。在设计微服务时,应当遵守无状态服务设计原则,与底层基础设施解耦,从而实现在不同容器之间自由调度。对于有状态的微服务而言,通常使用计算与存储分类的方式,将数据下层到分布式存储方案中,从而一定程度上实现服务无状态化。

这样做的可以解决上面两种方案 数据层耦合限制 ao 和 bo 扩容 的缺点,但是为了保证尽早跨城,尽量减少跨城,业务网关路由可以和数据库 proxy 的路由具有一定 联动关系。尽可能在业务网关路由时通过用户地域路由(在用户地域存储数据也是最优方案)的方式减少跨城。

具体的联动方式说明:

  • 用户数据有位置变化或者数据扩缩容的时候,如果某个接口时强依赖这个数据,就需要知道这个变化,针对这类型的路由,路由项得变更。

  • 当数据层需要容灾的时候,也需要根据数据库模型,进行相应的容灾路由变更,如果数据是全局可以不变,如果只有一地部署,需要根据业务场景和数据模型是决定需不需要容灾进行主写点城市切换,也可以通过改变路由来实现。这部分在数据层设计详细讨论。

   4.1.1 条带化粒度选型

既然微服务的容灾单元是 set,解决的主要是物理级别的故障,那么 set 条带化粒度的选型有哪些考量,下面给个表格参考:

条带化粒度业务考量必要的条件备注
城市
  • 除非因为投入产出成效低等不考量容灾,一般都至少要求城市级别

  • 服务发现支持城市级别

一般能满足风火水电隔离,还也可能存在就近城市群有基础设施共用,所以一般选择距离较远的两地,比如深圳,上海
IDC(AZ可用区)
  • 业务是否有多IDC的成本,是否有可以物理隔离

  • 的IDC预算IDC故障时,进行跨城切换对业务耗时,可用性影响比较大

  • 服务发现支持IDC级别

  • 有物理隔离的IDC,风火水电隔离

推荐
机架(机柜)
  • 业务是否有多机架的成本,是否有可以物理隔离

  • 的机架预算机架故障时,进行IDC切换对业务耗时,可用性影响比较大

  • 服务发现支持机架级别

  • 有物理隔离的机架,最好是风火水电都是隔离的

一般一个IDC的机架很多设施都是共用的。如量化交易,进行主机托管和交易所就近的话,如果出现机架的故障,就切IDC,会让交易变慢,从而业务受损,所以能切换机架是更好的。
机器(OMP)
  • 业务是否属于耗时敏感,有要求强一致性,跨机器访问也不太能忍

  • 受业务是否自研了一些配套部署措施来匹配,比如极致条带化

  • 服务发现支持严格机器级别(或者是只允许本机互调)

一般不建议,因为上云之后就更难保证一台机器有所有微服务功能,能完整构成一套服

务但是类似微信支付这种高并发又需要强一致的业务,可以考虑

05

服务发现

微业务服务的互相调用,主要是业务网关发现 set,set 内微服务的互相发现,这两个都可以通过服务发现来做。

为了保证条带化(物理隔离,流量隔离),以及 set 内的完整性,服务发现时,应该尽量在条带化粒度内服务可以互相发现,条带化粒度外服务不能互相发现(容灾降级应该由 set 间的容灾策略决定),我们选择的服务发现组件一定要支持的一个能力。

在云原生的场景,一般存在两种服务发现实现方案,集中式服务发现,以及服务网格。

1edba787e7b377ee3e6f9a9cef136218.png

集中式服务发现与服务网格的主要区别在于它们解决的问题范围和实现方式。‌

集中式服务发现是一种服务注册和发现机制,通过一个中心化的服务注册表来管理所有服务的IP地址和相关信息。每当服务上线或下线时,它会向注册表注册或注销自己,其他服务在需要时查询注册表以获取其他服务的地址。这种方式简化了服务之间的通信,但需要维护一个中心化的服务注册表,可能成为单点故障,并且需要处理网络延迟和单点故障问题‌。

服务网格则是一种专用的基础设施层,用于管理分布式应用程序中各个微服务之间的通信。它通过部署在应用服务旁边的代理(称为 sidecar)来处理服务之间的通信,提供服务发现、负载均衡、流量路由、身份验证和可观测性等功能。服务网格将网络通信的复杂性抽象化,使开发人员能够专注于应用程序逻辑,而不必处理底层的网络代码。它通过分布式的方式提供服务,避免了单点故障,并且提供了更高的灵活性和可扩展性‌。

总结来说,集中式服务发现通过中心化的方式简化服务之间的通信,但可能面临单点故障和网络延迟的问题;而服务网格通过分布式代理网络提供更高级的通信管理功能,具有更高的灵活性和可扩展性。

虽然有可能因为集中式服务发现故障不可用,但可以通过本地 SDK 接入提供本地缓存和异步更新的功能,也能一定程度上缓解单点依赖。相对来说如果服务网格的控制面故障了,其实也在短时间内没办法更新容器的网络策略。

06

扩容

如上所说微服务的部署是一个难题,微服务化后,服务数量都会比原来单服务数量多了十几倍,那么自动化部署,自动化扩容就成为微服务化一个必要项。所幸的是伴随着云原生的发展,容器编排系统也在飞速发展,其中 kubernetes 是代表性的容器化部署编排系统。

那么在支持条带化上,kubernetes 应该需要支持set 内机器横向扩容,set 间也能横向扩容。

要达到这个目的,一般需要几方面的支持:

  • 部署平台的支持:基于 kubernetes 就可以进行容器的扩缩容调度,在实操上可以按照母机提前规划资源集群,每个 set 用隔离的资源集群,所以每个 set 内可以根据资源扩缩容,也能扩容 set 数,可扩容的 set 数也是部门支持的资源集群。

  • 网关动态路由支持:set 间的扩容,会需要网关支持,可以让网关的路由识别到有set进行上下线,调整动态路由策略。

  • 容灾支持:容灾识别处理器(可通过接口错误码来做容灾识别)也需要识别到 set 进行上下线,才能识别 set 是不是有故障。

  • 权限支持:原则上,容器是无状态的,可以简单进行扩缩容,原则上不要依赖比如 ip 授权,set 授权。就算需要授权,也应该是变成扩缩容的中的一个自动步骤。

07

数据存储

微服务还有一个需要解决的问题,就是数据服务隔离的问题,数据存储是系统有状态的来源,可以分为以下两种情况讨论:

  1. 如果是数据存储是全局类的(写点只有一个),那么对于写,上层任何set都得接入,必然存在跨城,容灾时只能依赖数据存储自己的主从切换。

  2. 如果数据存储是分片的,一般都希望上层 set 和底层写点尽量靠近,上文也提供,如果把数据分片和 set 绑定,是能最大程度靠近,但缺点是数据分片本身会限制 set 的扩容,也需要上层需要知道底层数据分片情况。

考虑数据分片的因素主要是包括以下考虑之一:

  1. 不能允许跨城的写耗时。

  2. 单机存储或者写 io 不能满足要求。

  3. 希望通过数据隔离,减少故障容灾的影响,满足合规要求等。

这里提供一种指导:

  1. 数据分片和 set 不绑定,通过一层数据 proxy 解耦和 set 的关系。

  2. 数据存储采用分布式存储系统,逻辑服务访问数据层通过就近访问(一般数据 proxy 这一层,分布式存储系统都会提供)。

  3. 如果有严格地域就近要求,底层存储系统可以联动接入的路由来做尽可能的就近。把数据分片和部署关系通过路由数据来解耦,而非分散在逻辑服务中,让逻辑服务知道底层存储部署。

08

总结

经过上面讨论,一种有状态的分布式系统设计的整体架构图可以如下:

5847cae12067aa22f0248ab2afd8503d.png

   8.1 各层的容灾分析

以下都是基于机器足够的情况,性能机器预留就按照每个业务进行评估。

区域网络化接入层

  1. 单机故障:直接剔除出 CDN。

  2. 机房故障:直接把机房的机器都剔除出 CDN。

  3. 城市故障:把 CDN 暂时指向另一个城市

业务网关

  1. 网关单机故障:区域网络接入层剔除这些机器,可以通过监控错误自动剔除

  2. 网关机房故障:区域网络接入层剔除故障机房,可以通过监控错误自动剔除

  3. 网关城市故障:区域网络接入层把流量导到正常的城市,剔除掉故障城市的流量,这种情况下故障期间,会存在二分之一流量增加一次跨城耗时,理论上也可以实现自动剔除,但这个操作比较重,也需要进行慎重评估,建议是手动切。

逻辑层

  • 网关单机故障:业务网关路由剔除掉这些机器,可以通过服务发现组件剔除这些机器,可以通过监控错误自动剔除。

  • 网关机房故障:业务网关路由把故障 set 的流量均衡切到其他正常的 set,可以通过监控错误自动剔除。

  • 网关城市故障:业务网关路由把故障城市的 set 均衡切到正常城市的 set,理论上也可以实现自动剔除,但这个操作比较重,也需要进行慎重评估,建议是手动切。

数据层的容灾切换,一方面可以依赖逻辑层访问 db 故障后,返回给业务网关的错误码来实现从逻辑层开始切换,一方面可以依赖分布式存储系统自己的切换能力。

降级策略

业务网关也有一些其他应对故障的降级方案,如果在整体系统故障的情况下,可以这么处理降级:

  • 降级时保证高优请求:允许网关优先把资源提供给 P0 重要的命令字,其他接口做拒绝处理

  • 防止雪崩:允许网关在极端情况下,进行随机请求丢弃,以避免整体服务的雪崩。

-End-

原创作者|黄楠驹

感谢你读到这里,不如关注一下?👇

2b9b44fd6ea278dc588f386594328177.png

微服务架构和分布式架构有哪些区别?欢迎评论分享。我们将选取点赞本文并且留言评论的一位读者,送出腾讯云开发者定制发财按键1个(见下图)。10月29日中午12点开奖。

a613df74b4a2aa05f452751e26cbfda7.png

📢📢欢迎加入腾讯云开发者社群,享前沿资讯、大咖干货,找兴趣搭子,交同城好友,更有鹅厂招聘机会、限量周边好礼等你来~

22e67d9b9d3e102d9a4c1f391f6428b3.jpeg

(长按图片立即扫码)

4816a13294263e4a611ee3a1d22f6ead.png

ec5cbbcc36396c88525f8f369bf72919.png

540f875a56044cb2285a8d110f757d95.png

68cf03c363b6f2a2d2e64994fb8e430f.png

10d7bf2327f13c6367fdedd313babb9b.png

相关推荐

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

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

QcloudCommunity的博客 405

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

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

QcloudCommunity的博客 1163

平平无奇的源码,竟藏着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的博客 711

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

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

QcloudCommunity的博客 709

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

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

QcloudCommunity的博客 906

AI Infra 其实没有多少新东西

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

QcloudCommunity的博客 821

程序员越早想通这些越好

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

QcloudCommunity的博客 465

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的博客 1165

全方位对比: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的博客 608

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的博客 874

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的博客 892

一文讲透如何构建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的博客 419

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

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

QcloudCommunity的博客 711

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

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

QcloudCommunity的博客 673
上一篇: 一文搞懂第三方支付系统架构设计
下一篇: 程序员的核心竞争力都藏在这个书单里了丨1024书单
腾讯云开发者
腾讯云开发者 企业官方账号 企业官方账号
博客等级 码龄10年 6291粉丝 1962原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值