得物SRE视角下的蓝绿发布

一、前言

发布变更是影响稳定性的一个重大因素,为了发布异常时能快速回滚,增加发布期间的稳定性,也为了解决多服务部署时互相依赖而导致的发布时间增长等问题,得物在今年引入一种新的发布模式--蓝绿发布。这种发布模式带来了稳定性和效率的提升,这里我们以SRE的视角来解读下得物的蓝绿发布。

二、常见的发布形式有哪些?分别有什么优势?

全量发布

全量发布是早期企业进行系统升级的一种方式,因为早期的服务大多为大型机,单实例程序为主。并没有形成当下流行的微服务架构,因此当发布时往往需要停机发布。生产环境禁止使用这种方式进行部署!

滚动发布

滚动发布顾名思义,假如生产中16台机器,我们可以分成4批。每批4台机器,每批机器执行更新,从版本V1更新为V2,更新后重新将其投入使用,连续不断的更新其他机器,直到集群中所有的实例都更新为版本B后,结束发布。

这种方式的好处就是更新过程体验影响少,费用开销也少,发布期间无需额外新增机器。但是缺点也同样明显,一旦开始发布后,回滚时长很久,在多个有关联的服务部署时,需要上游服务完全发布后,才能发布下游服务,整体发布时间也很长。

滚动发布流程演示:

640.png

2.png

蓝绿发布

通常意义上的蓝绿发布一般是将服务分为两组,蓝组和绿组,正常运转的情况下每组承载50%的流量。当准备发布服务时, 将蓝组流量设置为0%,将绿组空闲出来,将服务部署到绿组的机器,然后利用SLB将流量切换到绿组的机器,让绿组来运行业务,没问题的话流量全部导向绿组,把蓝组也进行服务更新。

传统意义上的蓝绿发布优点在于发布策略简单,对于用户几乎无感知,可以实现平滑过度,在发布期间发现问题后也可以快速的回滚。而缺点则是通常需要准备正常业务使资源俩倍以上的服务器,需要投入较大的资源成本。

蓝绿发布流程演示:

切除绿集群流量:

12.png

当A组升级完毕,负载均衡重新接入A组,再把B组从负载列表中摘除,进行新版本的部署,A组重新提供服务。

13.png

最后,B组也升级完成,负载均衡重新接入B组,此时,AB组版本都已经升级完成,并且都对外提供服务。

灰度发布

灰度发布,也被叫作金丝雀发布。与蓝绿部署、红黑部署不同的是,灰度发布属于增量发布方法。也就是说,服务升级的过程中,新旧版本会同时为用户提供服务。

灰度发布的具体流程是这样的:在集群的一小部分机器上部署新版本,给一部分用户使用,以测试新版本的功能和性能;确认没有问题之后,再对整个集群进行升级。简单地说,灰度发布就是把部署好的服务分批次、逐步暴露给越来越多的用户,直到最终完全上线。

23.png

之所以叫作灰度发布,是因为它介于黑与白之间,并不是版本之间的直接切换,而是一个平滑过渡的过程。

AB Test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现并调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。

之所以又被叫作金丝雀发布,是因为金丝雀对瓦斯极其敏感,17 世纪时英国矿井工人会携带金丝雀下井,以便及时发现危险。这就与灰色发布过程中,先发布给一部分用户来测试相似,因而得名。

0.jpeg

对于灰度发布来说,它的优点在于 如果前期出问题影响范围很小,相对用户体验也少;可以做到及时发现、及时调整问题,影响范围可控。 但是采取这种模式对自动化以及运维监控能力的要求非常高。

三、得物的蓝绿布是如何实现的?

前面讲了“what”,我们现在来说下“how”。

在平时,我们也会保留蓝绿两个集群,在发布时,引入灰度的流量平滑过度,帮助我们完成整个发布过程,下面以SRE的视角大致讲一下蓝绿发布的架构与流程。

蓝绿发布的流程

在这种架构下,整体的发布流程如下:

  • 日常流量

在未发布时,我们接入蓝绿发布的服务是平均分成蓝绿俩个集群的。平时通过网关均匀切分流量,平均每个集群50%的流量。

9.png

  • 开始发布

当进行蓝绿发布时,我们将需要发布的应用创建在一个通道中(这里先说下只有一个通道部署的情况)。

09.png

  • 蓝集群(右侧)摘流

此时所有流量将只访问绿集群,如下图所示,当蓝集群摘流完成后, 此时集群没有任何流量,即可进行部署。

8.png

  • 蓝集群(右侧)引流

当蓝集群发布完成后,我们需要对蓝集群发布后的服务进行确认。在确认部署成功后,则梯度的将流量引入更新后代码的蓝集群(右侧),最开始我们会切1%的流量,切流量后,我们可以在线上观察蓝服务的流量、错误率等。以此观测发布的版本是否有异常。之后,我们逐渐将流量切回50%。注意,需要确保相关缺陷都在该环节暴露出来,因为这个环节另一半老版本的、稳定的代码还在Standby,可以随时操作流量比例,进行流量迁移。

7.jpeg

发布过程中,蓝、绿节点间流量不会互窜(对比上图,蓝绿集群间斜向箭头没有了)。 此阶段需要注意MQ流量,因为MQ当前无法按比例进行切分,因此一旦开始切流,则MQ流量会恢复为50%/50%。

  • 绿集群(左侧)摘流

通过扩大流量比例,流量全部切到蓝集群,这个阶段流量已全部切到新代码,可以让测试同学介入进行新功能验证以及回归测试。

在这个阶段只要绿集群还没发布,发现问题,仍然可以全部切回老代码!

当测试验证完成后,即可进行绿集群发布。发布后则不可以回切了!就算要代码回滚,也得等本次发布结束后,再单独对服务进行回滚。

67.png

  • 绿集群(左侧)引流

在发布后则开始进入绿集群引流了,此时可以快速引流,因为已经没有可以回滚的、稳定版本的代码了。同样,还在发布阶段,及时流量均衡,也不会出现互相交叉的流量。

34.png

  • 发布完成

发布完成后,则去除通道,蓝绿集群可以继续进行交互。

32.png

如上图所示,使用以上发布流程具备以下好处:

  • 整个发布过程是以蓝、绿集群维度并行调度、实施的,通过发布平台统一操作,摘流,无需各业务域各自处理。
  • 通过请求蓝绿粘性,让下游应用的新老版本代码可以同时存在,无需阻塞等待下游应用全部升级到新代码,解除了批次依赖。
  • 发布过程中有灵活的流量控制能力,可以按1%、50%等阶梯流量验证应用。
  • 上述发布流程,可以同时并存若干个,摘流、引流动作互不影响 (多发布通道)。

蓝绿发布的架构

应用架构 [1]

45.png

1.1 流量规则SDK

在所有需要接入蓝绿发布的程序中,首先需要升级流量规则SDK,流量规则SDK是应用蓝绿发布能力的代码底座,向中间件组件如RPC、MQ、JOB提供了主动查询流量规则和被动接受流量规则变更事件的能力,各中间件组件响应流量规则进行合适的动作,实现各类型流量的动态摘流、动态引流。

1.2 核心能力

  • 依赖配置中心做持久化存储与事件推送。

  • 所有配置读取都是内存操作,只会在启动时读取一次配置中心的配置,后续配置变更都依赖于配置中心的事件推送。

  • 提供了如下的能力:

    • 当前应用所在的发布通道,是否在蓝绿发布中。

    • 指定应用所在的发布通道,是否在蓝绿发布中。

    • 蓝色流量百分比,范围[0, 100]。

  • 提供了如下的事件推送:

    • 发布开始事件onStart。

    • 发布结束事件onFinish。

    • 切流事件onFlowChange,切流事件又细分了以下几个事件。

    • 切流事件,蓝色流量标占比为100,绿色流量标占比为0,onEnterAllBlue。

    • 切流事件,蓝色流量标占比从100改为非100,绿色流量标占比从0改为非0,onExitAllBlue。

    • 切流事件,蓝色标流量占比为0,绿色流量标占比为100,onEnterAllGreen。

    • 切流事件,蓝色标流量占比从0改为非0,绿色流量标占比从100改为非100,onExitAllGreen。

    • 流量控制

得物目前的流量分为内部流量及外部流量,大部分流量情况如下:

  • 外部流量

    • 通过各类Gateway请求

    • 通过k8s Ingress请求(暂不支持蓝绿发布)

  • 内部流量

    • 通过Gateway互联

    • 通过Dubbo/Feign RPC协议互联

    • 通过MQ异步请求

    • 通过kafka异步请求(暂不支持)

    • JOB类任务发起的流量

    • 通过k8s SVC请求(暂不支持蓝绿发布)

其中Gateway也是通过Dubbo或者Feign请求下游服务,因此也可统一为RPC类型,所以得物目前的流量主要包含RPC、MQ、JOB三种。

2.1 RPC

我们RPC流量核心主要依赖注册中心,通过Dubbo的负载均衡策略进行调整。

02.png

  • 如何实现RPC流量比例控制

RPC场景下应用的流量比例控制,取决于它的上游应用按照流量规则比例向其发起调用。核心是上游应用感知到下游应用实例权重。

当前应用通过流量规则SDK监听到所在通道的流量规则变更时,修改注册中心上的实例权重。

上游应用通过注册中心透明的感知下游应用的实例权重,通过加权负载均衡策略实现流量比例控制。

Dubbo原生的各类负载均衡策略都支持加权,也就是即便上游没有升级蓝绿依赖,下游应用依然可以通过蓝绿实例权重控制自己蓝绿集群被调用的比例。

Feign原生是不支持的,Fusion框架重写了负载均衡策略。

  • 如何控制流量比例

蓝色流量比例Rate,蓝色集群实例权重WB,绿色集群实例权重WG。

假设Rate从1调整到99,一共有4个节点。

调整前WB=1,WG=99,调整后WB=99,WG=1,可能出现以下情况:

03.png

-流量规则变更时,只让蓝或绿某一个集群修改自己的权重。

权重值是相对的,只需要保证蓝、绿集群节点权重相对值服从流量比例即可,无需同时修改蓝绿集群所有节点的权重。实例权重初始值设为100,修改权重时,尽可能保证一半集群实例权重保持100不变,只修改另一侧被调整的集群实例的权重。

规则如下:

蓝色流量比例Rate,公式:W/(100+W) = Rate/100。

  • Rate = 50,蓝色集群实例权重=100,绿色集群实例权重=100。

  • Rate < 50,蓝色集群实例权重=100 * Rate / (100-Rate),绿色集群实例权重=100。

  • Rate > 50,蓝色集群实例权重=100,绿色集群实例权重=100 * Rate1 / (100-Rate1),其中Rate1=100 - Rate。

            只有一个颜色的集群时,忽略权重。
  • 如何实现完全摘流

Dubbo框架内置的所有负载均衡策略都会识别下游实例的权重进行加权筛选节点,无需上游升级依赖,下游应用实例权重置0后即可实现摘流。

Feign框架默认不识别实例权重,不进行加权负载均衡,为了避免蓝绿发布项目落地时推动发布链路上下游应用升级的困难,应用摘流时,会将自身注册的所有Feign服务反注册,以保证Feign流量能被彻底摘流。

  • 如何实现请求链路蓝绿粘性(一蓝到底或一绿到底)

蓝绿子集群的代码是不一样的,按我们制定的发布流程,蓝集群是新代码,绿集群是老代码,如果不能固定请求链路的颜色,实现请求过程一蓝到底或者一绿到底,那么可能会出现上游新代码调用到下游老代码,出现代码不兼容的异常。

将RPC请求第一次进入每个通道时的蓝绿决策结果以KV形式Append到分布式Trace的baggage中,全链路透传、隔离、复用。

如果Trace中有蓝绿决策结果,则按照蓝绿决策结果筛选节点;

否则按照流量比例筛选节点,并将决策结果(节点集群颜色)Append到Trace。

baggage-key: x-deploy-channel-type。 baggage-value:key=通道标识,value=蓝集群或绿集群标识,多个通道以&分割。

55.png

2.2 MQ(RocketMQ)

核心是通过多消费组实现MQ流量隔离和控制。业务上创建的一个业务消费组,会在MQ SDK层面透明的创建2个衍生的颜色消费组。

发送消息时,会在消息头上携带当前节点蓝绿标。3个消费组收到消息时,根据消息颜色和消费组颜色做颜色请和判断,互斥的消费同一个TOPIC上的所有消息。

  • 非摘流状态

    00.png

  • 摘流状态

应用感知到通道内蓝集群摘流时,蓝集群节点关闭消费组、绿集群节点启动三种颜色消费组。此时,MQ流量完全由绿集群接管。

24.png

通道内绿集群摘流时同理。

  • 过程详解

    • 原本一个消费组,拆分成三个消费组。

    • 原始消费组origin-consumer用于消费无(蓝绿)标识的流量。

    • 蓝色消费组blue-consumer用于消费「蓝色」标识流量。

    • 绿色消费组green-consumer用于消费「绿色」标识流量。

98.png

2.3 JOB(elasticjob)

76.png

elasticjob在运行时会在业务应用集群内利用ZK协调产生一个Master节点,由Master节点来按负载均衡策略将任务分配到各个执行器节点上。这个任务分配关系一经分配就会固定并在后续复用,除非是有应用进程上下线、JOB分片数有变更。

改造elasticjob客户端适配流量规则SDK,正在蓝绿发布的应用,在感知到有集群已经摘流时,会修改ZK上的状态标识,将上述记录的分配关系失效。

失效后,后续JOB执行时,会根据流量规则重新进行任务分配,避让已经摘流的节点,以保证已经摘流的节点上不会有JOB执行。

  • 过程详解

65.png

蓝绿接入注意事项

因当前技术限制, 服务接入蓝绿需要注意以下事项:

  • 流量无法摘除的服务暂时无法接入

    • 未通过网关进入服务流量:例如,通过域名SLB进入服务、通过Ingress进入服务的流量无法摘除。

    • 消费Kafka的流量无法摘除:由于应用使用的原生kafka客户端并全面铺开、无法对切入提供支持。

    • 未使用统一框架/注册中心:未使用统一框架和注册中心的Java应用、以及非Java类应用当前不支持蓝绿发布。

  • 使用特别提醒

    • 消费消息需幂等:使用消息中间件必须做幂等,这是基本要求,在消费组启停管控中可能产生重复消息。

    • 消费组线程数量:由于会有三个消费组、消费线程也会增加两倍,有业务影响时需调低线程数。

    • 需要好流量评估:蓝绿发布需一半节点承接线上流量、在应用升级蓝绿集群时做好确认。

    • 升级到特定版本:使用蓝绿发布需要应用升级到框架指定版本,详见接入指南。

    • Feign/HTTP流量:针对使用框架Feign的HTTP流量,需上下游应用全部升级后方可使用。

    • 使用Dubbo流量:使用框架Dubbo的服务只需要自身服务升级版本即可、无需上下游升级。

四、得物SRE团队对蓝绿发布的相关支持

容器集群针对蓝绿的改造

我们容器的workload使用的OpenKruise来进行管理。在进行蓝绿发布之前,我们使用的单个clonesets进行控制。

以下图所示,为我们一个测试非蓝绿集群,这里就是使用单个cloneset进行控制的单实例。

41.png

在进行蓝绿改造后,我们将workload分为蓝绿两个clonesets,通过这样,我们可以实现蓝绿发布时候的单边实例发布。同时在我们管理平台界面,任是单个集群界面, 以此来实现单集群下 蓝绿集群的拆分。

80.png

蓝绿发布扩容资源优化

前面就说过,蓝绿发布的一大缺点是通常需要准备平常流量2倍的资源,以应对蓝绿发布期间的流量。我们在加入蓝绿发布集群时,也尽量会提醒需要增加资源以应对蓝绿发布。但如果毫无规划的进行扩容,则会带来以下几个问题,比如长期保留扩容资源,则会带来成本的答复增长,而临时的扩容,则代表着对人力的消耗增加,而且临时的扩容也增长了对资源池管理的难度。可能在用户扩容时,出现资源池不足的情况。

为了应对这个问题,我们针对蓝绿发布进行了优化。首先是在发布流程中加入了扩缩容的环节。让平台自动帮助进行服务的扩缩容。其次,在容器层面,我们利用云服务商的弹性实例功能,来弥补常规资源池不足的情况,通过基于Virtual Kubelet技术接入到k8s中,支持秒级启动,按量计费,可快速完成扩缩容,满足业务的实时响应需求。

注意: 在应用加入发布通道时,因蓝绿发布会导致流量减半,请务必对核心服务进行扩容 (SRE建议扩容30%以上)。

08.png

06.png

021.jpeg

发布监控

加入灰度的蓝绿发布,因为涉及流量切换过程,因此对监控要求非常高,需要及时观测整个通道中的服务状态,而历史中单应用的监控页面无法满足发布owner有效观测。因此,针对这个问题,我们专门设计了通道级的蓝绿发布大盘,有效的观测流量分布情况,服务的请求情况等。通过该大盘,发布owner能有效掌握本次发布情况,决定是否继续进行切流。

043.png

五、蓝绿发布期间可能出现的问题及应急响应策略

资源不足导致的服务异常

发布前扩容

根据蓝绿发布原理可知,我们在发布时,只有50%的实例来支撑原先100%的流量, 因此务必在蓝绿发布前勾选发布前临时扩容。扩容量需要评估以下几个数据:

  • 服务CPU 水位情况

根据历史经验,如日常水位99值在20%以内的服务,无需进行临时扩容,而99值在20%-30以内的服务,建议扩容20%左右。而99值在30-40%之间的服务,应当扩容30%以上。同时也要考虑发布当天的流量情况。

比如我们在七夕大促期间的发布,因大促流量过高,我们许多服务在蓝绿发布时扩容达到了50%以上的情况,通过此方式,保证在切流期间,服务也能正常。

因为我们的服务大多以JAVA为主,内存大多用固定方式分配给了JVM堆,因此内存不是一个核心的参考指标。

  • 服务线程使用情况

除了服务CPU外,服务线程也是一个核心参考指标,特别是Dubbo线程池以及DB/Redis的线程池。比如原先Dubbo线程池,max为 200,10个实例的服务,当日常QPS大于1000的时候,在蓝绿发布时就需要扩容了,否则实例数少了一半,意味着可用线程也少了一半,这个时候就会出现线程拒绝异常了。

发布期间的资源不足

有些时候,我们评估不足会导致在开始发布后因为资源不足导致的错误率上升,此时需要我们紧急处理,但为了发布期间的稳定性,一旦我们开启了蓝绿通道,就不允许进行集群的扩容了。此时需要SRE接入在后台进行处理,处理逻辑如下:

  • 确认待扩容集群未处于发布状态。

  • 手动修改蓝/绿单边集群cloneset的replicas数据。

  • 待发布完毕后,手动还原该cloneset的replicas数据。

因该操作非标准操作,且存在风险,请尽量不要使用以上方式进行。

发布中出现流量不均衡的情况

之前的一次测试中,我们在引流后出现了服务流量不均衡的问题,当时因为Fusion框架升级了Dubbo异步的改造中存在逻辑缺陷,导致流量无法均衡分布。之后,通过回退Fusion框架版本后问题恢复。

77.png

这是个比较危险的情况,某些节点会在发布时承担日常400%的流量,很容易造成服务雪崩。因此,在蓝绿发布中,负责人和SRE要加强服务的监控和关注力度,及时发现流量不均衡的情况并介入。

发布中出现流量互窜的情况

流量互窜的问题会有许多种情况:有因为切流前的JOB持续运行,导致双边集群依旧有流量;有的因为链路中间节点没有升级蓝绿能力,导致流量错位;有的因为MQ请求下游导致的流量错位。这里不针对问题进行一一分析,问题的解决仅能依靠框架的升级,这里仅说下问题的影响和排查方法。

在蓝绿发布时,原先我们的预计是老代码连老代码,新代码连新代码,但出现异常请求时,可能出现新代码连老代码,或者老代码连下游新代码的情况,这个时候就会出现因为依赖不匹配,导致的服务异常。

243.png

要发现此类问题,我们首先要知道,在这种情况下,大多会出现单边集群错误率上升。通过我们的监控页面,我们能很好的发现单边错误率上升的情况。此时,我们就能根据这些错误的情况,在天眼的调用链分析中,查看错误的具体情况。此时需要我们判断链路里是否有出现流量异常的情况,查看节点的Host name,可以判断是蓝或者绿集群节点。

123.png

60.png

六、历史总结及展望未来

蓝绿发布的效果

自从交易域进行蓝绿发布以来,平均大版本的发布时效较之前得到了较大的提升,同时近期大版本已没有出现故障事件,在升级蓝绿发布后,我们可以提前在切流阶段发现问题,并快速回切进行修复,避免了故障带入生产。因此,现在蓝绿发布相比过去滚动部署,在效率和稳定性上均大有提升。

未来展望

目前我们核心服务都已切换至蓝绿集群,这种为我们的多活打下了优势,已经天然具备了多活的条件。因此,未来我们可以通过这种架构来部署我们的多活,这样,当任何单机房出现异常后,能够快速切换到另外一个机房,我们的抗风险能力也会有巨大的提升。

参考引用: [1] 特别鸣谢,本节蓝绿发布架构及原理部分引用了得物中间件平台 “羊羽”同学的文章。

文/latte

本文属得物技术原创,更多精彩文章请看:得物技术官网

未经得物技术许可严禁转载,否则依法追究法律责任!

相关推荐

压测AI Agent 治理与评测调优实践|得物技术

本文介绍智能分析Agent在压测调试中上线后的治理闭环建设:通过Langfuse记录完整执行链路,结合用户反馈与Trace还原问题根因;利用CLI Mock固化证据数据集,实现相同场景下的回测验证。基于固定案例与五档评分机制,持续评估方案质量、延迟与成本,确保修复有效且无新问题引入,推动Agent能力迭代优化。

SmartCodeTech的博客 309

从中心调度到自驱协作多 Agent 架构的三次反转|得物技术

本文探讨多Agent系统中的控制权分配问题,提出三大协作架构:Master Agent(中心调度)、任务看板(共享状态)与Advisor(轻量咨询)。通过划清上下文边界与模型边界,强调应以信息相关性而非职业标签划分Agent。三种模式分别将决策权集中于中心、下放至共享状态、再下沉至执行者,形成控制权逐步下沉的演进路径。案例显示,合理设计可提升复杂任务的并行性、弹性与可维护性。

SmartCodeTech的博客 420

Jev 实战:为AI工作流引入轻量决策层 x10倍提速|得物技术

完成这三个场景后,我对适用边界有了更明确的认识:它们都可以先定义答案范围,再根据判断结果驱动下一步操作。接入时,我会优先明确输入、选项、采纳条件和兜底路径,再评估Jev是否适合承担这一环节。结合这些实践,我更容易理解Jev(TypeSafe System One)作为专用结构化决策模型不生成自然语言,而是返回带概率的判断结果。后续接入时,我会继续从脚本中边界明确的判断任务开始,分别验证准确性、耗时和费用,再决定是否扩大使用范围。下面整理了相关能力、限制和接入要点,便于查阅。

SmartCodeTech的博客 345

国产算力·昇腾 910C 大模型推理优化(下):源码修改与算子优化,提速30%|得物技术

本文延续上篇,深入vllm-ascend源码优化:通过多流重叠实现MoE共享专家并行计算,消除冗余事件开销,并解除与FUSED_MC2的互斥限制,实现c=1下TPOT从8.2ms降至8.0ms;优化decode阶段host侧开销,引入状态跟踪跳过冗余拷贝;设计Block Table CPU快路径,规避小batch下NPU kernel启动延迟;针对GDN层融合L2Norm至recurrent kernel,减少算子调用与内存往返。综合优化后推理性能显著提升,形成可复用的昇腾910C大模型推理优化方法论。

SmartCodeTech的博客 245

国产算力·昇腾 910C 大模型推理优化(上):镜像更新与参数调优,提速 40%|得物技术

文中详细给出每一项优化的动机、实现(含具体源码改动路径与关键代码片段)、验证数据与踩坑记录(包括十余项实测无效或负向的尝试),希望为同样在国产算力上做推理优化的团队提供一份可直接复用的工程参考。

SmartCodeTech的博客 225

动态规则的 Agent 实践:用确定性工程驾驭 LLM 的资产智能验收

面对财务验收中规则多变、材料非结构化、核对复杂等痛点,传统规则引擎难以应对。系统采用“规则即配置”思路,由大语言模型(LLM)负责理解合同、扫描件等非结构化材料并执行语义比对,工程系统则保障流程编排与可追溯性。通过异步处理、幂等设计、三类流量隔离及双通道(文本/图像)处理,实现高效稳定运行。结合用户反馈构建自动标准答案,辅以试跑、回测与发布门禁机制,形成闭环质量体系。底层采用确定性工作流架构,确保行为可预期、可测试,真正实现灵活规则的快速迭代与安全上线。

SmartCodeTech的博客 344

发一张图,它居然“跃“出屏幕了?一文读懂得物 3D 空间图片技术实践

3D 空间图片功能的落地,涉及模型生成、内容分发、客户端渲染之间的一系列取舍。本文重点分享如何生产出高质量、小体积的模型,以及如何在手机上流畅运行。

SmartCodeTech的博客 555

别再只卷向量检索了,得物交易搜索如何用“生成式”实现召回范式跃迁?

你搜"af1",它得给你"空军一号"。这一年,得物交易搜索把召回从"做选择题"改成了"写答案"——不再从商品池里"找"最像的,而是让模型自己"生成"你真正想要的。从 LLM 语义索引到 HLLM、语义 ID,搜索是怎么从"检索"走向"生成"的?

SmartCodeTech的博客 594

指标平台:从语义底座到智能消费的实践路径|得物技术

这篇文章想做的,不是在本体化的宏大叙事上再叠加一层理论,而是把我们在真实落地中验证过的路径讲清楚:语义底座怎么从零建立起来、怎么保证质量不失控、怎么支撑 Text2SQL 和 AI Coding 两条消费主线,以及沿着这条路径往前走,下一步该往哪个方向发力。

SmartCodeTech的博客 316

企业级 MultiAgent 落地:Plan 模式与主子 Agent 协作|得物技术

基于 AgentScope Java 的企业级 MultiAgent 平台,为研发、数据分析和知识问答等场景提供统一的模型调用、工具接入、任务编排、流式输出与运行追踪能力。

SmartCodeTech的博客 302

得物小摊 AI Native 演进实录:用 Harness 构建可控 AI 交付

AI Coding 一个人用很顺手,进了团队就漏:指令没人审、经验难沉淀、过程看不见、链路不闭环。作者团队基于 Multica 做了 EP-Harness,把 Agent 当成员管,给它套一层可执行、可观察、可治理的 Harness,并让反馈闭环。成果:可追溯决策、多 Agent 协作,高频异常从每 4 小时 2400 多条降到个位数,对得物技术补上团队级 AI 协作关键一环。

SmartCodeTech的博客 542

企业级 MultiAgent 的记忆系统:短期上下文与四层记忆架构实现|得物技术

在 MultiAgent 平台中,Agent 的"记忆"能力是实现智能对话和个性化服务的核心资产。本文深入剖析 Agent 记忆系统的设计理念与实现细节,重点解析长期记忆架构的写入与加载流程,涵盖 LLM 智能判断、语义检索、Token 预算控制、冲突处理等关键技术,为开发者提供完整的技术实现参考。

SmartCodeTech的博客 502

EP-Harness:从个人 AI Coding 到团队级 Agent 工作流|得物技术

AI Coding 个人用得爽,一到团队就崩。EP-Harness 把 Agent 从聊天工具变成团队协作成员——可管理、可追溯、可闭环。落地后高频异常从 2400+/4h 收敛到个位数。

SmartCodeTech的博客 694

得物知识问答:复合检索 Agent 的系统设计实践

从"搜到什么用什么"到"搜→筛→挖→验"自主决策闭环——我们造了一个有判断力的 RAG Agent,不是套壳。

SmartCodeTech的博客 734

实战从零开始构建一个Coding Agent:Violin |得物技术

理解了 coding agent 的构建原理,也就掌握了理解其他 agent 的一把钥匙。笔者对每天都在使用的 agent 原理很感兴趣,于是决定自己写一个:violin。

SmartCodeTech的博客 927

AI Native 交易核心系统的研发范式|得物技术

如何改造旧研发流程适配 AI 编码?本文提出五道标准化关口治理思路,依托 Claude Code Spec-Driven 插件打通需求澄清、方案设计、TDD 落地、门禁管控与埋点监控,构建带人工确认门控的完整工作流,以五层自底向上架构实现 AI 编码规范化落地。

SmartCodeTech的博客 975

推荐系统体验的数字化突破:得物自动化评测平台的技术实践|AICon 文章整理

「得物推荐 AI Harness 工程化实践系列」的末篇内容,本系列共三篇连载。本篇(末篇)详解得物推荐评测平台的完整技术体系:从主观体验量化到大模型自动化评测流水线,涵盖多维度指标设计、人机协作提示词校验闭环、分布式任务调度与成本精控等核心工程实现,以及单周百万级审计需求下实现 91% 资源成本优化的工业级落地实战细节。

SmartCodeTech的博客 1494

RAG 核心概念与原理:Chunking、Embedding、相似度、HNSW 与多路召回|得物技术

决定 RAG 效果的关键不在大模型,而是文本切块、查询改写、多路召回与精排。合理切块存好知识库内容,向量匹配抓语义、BM25 匹配关键词互补。先优化用户提问,快速召回一批相关文档,再用精排模型精细筛选,整套检索流程配合到位,问答准确度才会明显提升。

SmartCodeTech的博客 1079

从“机械应答“到“服务伙伴“:得物高可控智能客服的 Agent 工程实践|AICon 演讲整理

本次分享围绕以下核心技术展开:客服 Agent 挑战与架构设计(Single-Agent→Multi-Agent→Harness);高可控性数据飞轮(PE 自动化 + DPO 训练);RL 策略训练和人工经验对齐;多轮半双工消息流控制。

SmartCodeTech的博客 750

得物推荐系统诊断 Agent:从 “调接口” 到 “会思考”|AICon 演讲整理

本文是得物技术专家在 AICon 上海演讲整理的技术实录。AICon上海2026_全球人工智能开发与应用大会暨大模型应用生态展_InfoQ技术大会「得物推荐 AI Harness 工程化实践系列」的中篇内容,本系列共三篇连载。本篇(中篇)进一步详解得物推荐复杂业务场景下,AI代码从生成、防护校验到安全上线的完整技术体系、自研AI Harness整体架构框架、全流程安全防护机制、混合智能体核心算法实现,以及工业级工程落地的实战细节。

SmartCodeTech的博客 1364

得物 OceanBase 落地实践

得物选型OceanBase多模数据库应对业务挑战,通过验证其高可用架构、存储压缩技术及混合负载处理能力。测试显示OceanBase在复杂查询场景性能较MySQL提升130-200倍,在高并发TP/AP混合场景表现优异,存储成本降低40%+。通过DBA内部报表业务试点验证其稳定性后,逐步推广至核心业务场景,优化数据库技术栈,实现性能与成本的双重收益。

SmartCodeTech的博客 1383

AI UITester:AI Native 的 UI 自动化测试新范式|得物技术

ai_uitester 代表了 AI Native 的 UI 自动化测试新范式:这不仅是工具的升级,而是测试范式的转变 ------ 从 "代码驱动" 转向 "视觉驱动",从 "人工调试" 转向 "AI 自愈",从 "三端分离" 转向 "统一抽象"。

SmartCodeTech的博客 779

从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理

本文是得物技术专家在 AICon 上海演讲整理的技术实录。「得物推荐 AI Harness 工程化实践系列」的开篇内容,本系列共三篇连载。将系统拆解得物推荐复杂业务场景下,AI 代码从生成、防护校验到安全上线的完整技术体系,逐一详解自研 AI Harness 整体架构框架、全流程安全防护机制、混合智能体核心算法实现,以及工业级工程落地的实战细节。本篇(上篇):将整体介绍团队自研的 AI Harness 体系,包括建设思路、全生命周期防护机制、混合智能体架构及落地效果。

SmartCodeTech的博客 1082

从表单到 Agent:得物社区活动搭建的 AI 实践之路

一场营销活动从策划到上线,运营要在三个系统间跳转 10 + 次、填写 40 + 个字段。我们用 AI 重新设计了这条链路 —— 从 “AI 帮你填表单” 到 “两阶段 Agent + 聚合工作台”。这篇文章记录的不是技术细节,而是这条路上的选择和反思。

SmartCodeTech的博客 744

从埋点需求到规则资产:Hermes Agent 重构得物数仓工作流

埋点和指标需求中,消耗数据承接方的不是生成答案,而是补齐证据链、对齐历史口径、识别下游影响,并在生产写入前留下可追溯的确认记录。本文数据承接方指承接业务需求的数据同学或业务合作伙伴;后文讨论内部研发、元数据、查询和门禁能力在流程中的角色。

SmartCodeTech的博客 656

让 Claude Code 拥有自我进化和记忆系统|得物技术

本文记录了为 Claude Code 构建的一套持久化记忆与自我学习系统的设计思路与实现细节。这套系统让 AI 助手能够跨越会话边界记住用户习惯,并在每次对话结束后自动提炼行为规律和系统信息,通过向量检索快速提取关键信息,下一次对话时主动应用,逐步进化为更懂你的编程伙伴。

SmartCodeTech的博客 994

用 LLM Agent 重构告警排查流程|得物技术

告警排查需频繁切换日志、APM、链路追踪等多个平台,耗时 10~30 分钟,且高度依赖个人经验。我们做了 Troubleshooter——用 LLM Agent 自动完成数据采集、根因分析和处置建议生成。上线后中位数排查耗时从 20 分钟降到 4.4 分钟,覆盖 11 个服务和 10+ 种告警类型。

SmartCodeTech的博客 1008

HorizonVault 技术深潜:如何在 HDD 上做出 100GB/s+ 级大吞吐分布式存储|得物技术

HorizonVault是一款面向Kafka远程存储的高吞吐分布式存储引擎,通过分布式并行写入和状态感知调度解决冷数据存储的三大核心问题:吞吐瓶颈、性能抖动和恢复能力。系统采用分层架构,Meta负责全局资源调度,Broker处理请求路由,Store实现本地磁盘管理,形成完整的写入治理链路。通过将HDD磁盘提升为一等资源,实现顺序追加写入、多盘并行和慢盘隔离,在保证高吞吐的同时控制延迟。存储结构采用DiskStore组织磁盘资源,LogSegment顺序写入数据,IndexSegment定位读取,Change

SmartCodeTech的博客 892

Claude Code Harness 工程:数仓侧落地方案|得物技术

Harness 工程通过职责分层实现研发流水线可靠性提升。Claude 负责需求理解与代码生成等语义层工作;hooks 负责规范检查等确定性执行;Subagents 隔离血缘查询、自测等高 token 操作;Memory 承载跨会话状态持久化。四层协同使数仓 AI 开发从"对话式辅助"转变为"规则驱动的自动化流程"。

SmartCodeTech的博客 1101

BP Claw 破解 AI 编码输入难题 ——FlinkSpec 需求智能化实践|得物技术

本文为 FlinkSpec 系列之开篇,亦是这场工程化变革的序章。BP Claw 所立之处,不过链路之源。FlinkSpec 所图,乃以 AI 之力,将实时数仓从需求落地至验收上线的全程工序,熔铸为一套精密自洽、生生不息的智能工程体系。宏图未竟,后续系列将逐章揭幕,敬请期待!

SmartCodeTech的博客 1039
上一篇: 前端monorepo大仓权限设计的思考与实现
下一篇: 得物云原生容器技术探索与落地实践
得物技术
得物技术 得物技术官方账号 得物技术官方账号
博客等级 码龄6年 2492粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值