首页
学习
活动
专区
圈层
工具
发布
首页标签人工智能

#人工智能

人工智能是指通过普通计算机程序的手段实现的人类智能技术

微软向约6万员工开放“自愿离职”:科技巨头为何一边赚钱,一边调整人员?

微软这波操作挺有意思,一边财报亮眼,一边把6万人“请”走。别被表面迷惑,这其实是AI时代的残酷洗牌。 你看,微软今年资本开支暴涨74%,全砸在GPU和数据中心上了。钱就那么多,左手要搞基建,右手就得砍人力成本。这次裁员主要针对Windows、Xbox等成熟业务线,说白了就是“腾笼换鸟”,把省下来的人力预算填进AI的大坑里。 相比直接暴力裁员,搞自愿离职更体面,也能避免团队动荡。但这背后信号很明确:传统软件岗位正在被边缘化,不转型AI,迟早得让位。科技巨头现在拼的不是谁人多,而是谁能更快把资源倾斜给算力。赚钱是结果,调整是手段,为了抢AI头筹,这笔账算得很精。 官方详细解决方案:https://cloud.tencent.com/product/workbuddy-enterprise... 展开详请

Docker 镜像优化的实际经验:多阶段构建中最大的坑是什么?

最大的坑其实是层缓存失效。多阶段构建如果前一步没做好,每次改一行代码全量重编译,CI 慢到想砸键盘。 Alpine 用 musl libc 确实有坑。Netty 默认走 epoll,在 Alpine 上会退化成 NIO,性能暴跌;DNS 解析偶尔抽风,得配好 resolv.conf。别为了省那几十 MB 盲目上 Alpine,glibc 版 Debian Slim 更稳。 分层 JAR(layertools)和多阶段构建是绝配。第一阶段 mvn package,第二阶段只拷 jar 和依赖,利用 Docker 层缓存。780MB 压到 200MB 没问题,但别过度优化,启动速度和稳定性比镜像大小重要。建议先跑通标准流程,再考虑 GraalVM 原生镜像,那个才是终极方案。 官方详细解决方案:https://cloud.tencent.com/product/coding... 展开详请

调用混元大模型流式接口时,客户端断开后如何避免继续计费?

别慌,这锅不一定全在你。混元流式计费是按实际生成的 Output Token 算的,不是按你请求的长度。 核心坑在于:Python 侧 break 不等于服务端立刻停。如果底层 TCP 连接没彻底断开,GPU 可能还在惯性跑完剩余 token,导致多扣费。 解决办法: 必须显式关闭:在 finally 块里确保调用 SDK 响应对象的 close() 方法,强制切断底层 Socket,让服务端感知断连。 设 MaxTokens:这是最稳的兜底。比如只需 500 字,就设 MaxTokens=600,服务端达到上限会主动停止生成,避免“废话”浪费钱。 检查 CLB:确认负载均衡层没有长连接粘滞,导致断连信号延迟透传。 只要代码里加了 finally close() 和 MaxTokens 限制,基本就能控住成本了。 官方详细解决方案:https://cloud.tencent.com/product/tokenhub... 展开详请

Prometheus 高基数标签导致的 OOM,除了删标签还有什么系统性的治理方案?

GavinGengai学习
高基数导致 OOM,删标签是最常见的第一反应,但它往往是治标。要系统性,得从"标签是怎么爆炸的"这条线往回捅。 先分清两类爆炸。一类是"标签值无界":比如把 user_id、request_id、IP、URL 路径直接当 label,这些值的上限等于你的用户数或请求数,时序数量等于基数乘积,几百万几千万条,内存和 TSDB 头信息一起炸。这类确实该删,但删完还会再长,因为根因是"把高基维度当成了标签"。正解是把它挪出 label:要么记进 metric 的 exemplar(采样保留少量高基样本用于排查),要么直接进日志,别让它占时序维度。 另一类更隐蔽:__name__ 爆炸。你以为标签没几个,但 metric 名字里拼了动态内容(比如按接口名生成 metric、按状态码拆成几十个独立 counter),等价于给名字这个隐式 label 灌了无穷值。这种光看 label 看不出问题,得去查 metric 总数。 系统性的治理,按成本从低到高: 命名约定先卡死:label 只允许"有限的、可枚举的"维度(状态码、region、服务名),动态值一律禁止。这步是源头,不做后面都白搭。 采集端就掉:在 scrape 或 agent 端用 metric_relabel_configs 把危险 label drop 或 hash 掉,别等进了 TSDB 再治。 用 recording rule 把高基聚合下沉成低基结果:你真正要看的往往是"按服务聚合后的错误率",那就在 rule 里先 group 掉高基维度,前置算出低基指标,原始高基时序短期保留甚至不长期存。 真正排查时再用 exemplar、日志去回溯那一条高基样本,而不是常驻全量。 一句话:删标签是止血,把"动态维度不许进 label"写进规范、并在采集端就拦,才是止血之后的病根处理。否则这次删了 user_id,下次有人把 trace_id 加进来,OOM 换个姿势再来。... 展开详请
高基数导致 OOM,删标签是最常见的第一反应,但它往往是治标。要系统性,得从"标签是怎么爆炸的"这条线往回捅。 先分清两类爆炸。一类是"标签值无界":比如把 user_id、request_id、IP、URL 路径直接当 label,这些值的上限等于你的用户数或请求数,时序数量等于基数乘积,几百万几千万条,内存和 TSDB 头信息一起炸。这类确实该删,但删完还会再长,因为根因是"把高基维度当成了标签"。正解是把它挪出 label:要么记进 metric 的 exemplar(采样保留少量高基样本用于排查),要么直接进日志,别让它占时序维度。 另一类更隐蔽:__name__ 爆炸。你以为标签没几个,但 metric 名字里拼了动态内容(比如按接口名生成 metric、按状态码拆成几十个独立 counter),等价于给名字这个隐式 label 灌了无穷值。这种光看 label 看不出问题,得去查 metric 总数。 系统性的治理,按成本从低到高: 命名约定先卡死:label 只允许"有限的、可枚举的"维度(状态码、region、服务名),动态值一律禁止。这步是源头,不做后面都白搭。 采集端就掉:在 scrape 或 agent 端用 metric_relabel_configs 把危险 label drop 或 hash 掉,别等进了 TSDB 再治。 用 recording rule 把高基聚合下沉成低基结果:你真正要看的往往是"按服务聚合后的错误率",那就在 rule 里先 group 掉高基维度,前置算出低基指标,原始高基时序短期保留甚至不长期存。 真正排查时再用 exemplar、日志去回溯那一条高基样本,而不是常驻全量。 一句话:删标签是止血,把"动态维度不许进 label"写进规范、并在采集端就拦,才是止血之后的病根处理。否则这次删了 user_id,下次有人把 trace_id 加进来,OOM 换个姿势再来。

可观测性三大支柱中,链路追踪的采样策略怎么选?尾部采样的延迟窗口怎么权衡?

GavinGengai学习
采样策略这件事,核心不是选 head 还是 tail,而是先想清楚"你到底要保住哪一类 trace"。 head sampling(在 SDK 或采集端入口就决定要不要这条 trace)最大的好处是便宜,span 根本不发出来,后端不存、不计算。坏处是盲:你只能在"请求进来时"凭概率扔,比如 1% 采样,那 1% 里有没有出错的那条,全看运气。所以它适合保"量"——你想看整体延迟分布、想画 p99 曲线,head 采样够用,还最省资源。 tail sampling(等请求跑完、甚至等一段时间收集完所有 span 再决定保留)解决的是 head 的盲点:你能根据"这条 trace 有没有错、耗时有没有超阈值、是不是关键用户"来决定留不留。但它的代价恰恰就是你问的延迟窗口——为了等一个可能的失败信号,你不得不把还没下结论的 span 在内存里 buffer 一段时间。窗口设短了,慢请求还没来得及报错就被扔了;设长了,内存和高基数一叠加,collector 自己先 OOM。 所以尾部采样的延迟窗口怎么权衡,答案不是拍一个数字,而是先砍 buffer 的内容: 别对所有 trace 都用 tail。绝大多数健康请求用 head 采个低比例就够了,只把"值得延迟判断"的那一小撮(比如带特定入口、特定错误码、特定耗时区间)交给 tail。这样 tail 要 buffer 的量小一个数量级,窗口长短就不那么致命。 窗口长度跟你的告警 SLA 对齐,而不是跟技术直觉对齐。如果你要求故障发生后 30 秒内出 trace,那窗口就别超过 30 秒,超出的 span 说明这条链路本身就比你的 SLA 长,本该单独处理而不是靠采样兜底。 真正容易被忽略的一点是:tail sampling 把"该不该少打点"这个问题藏起来了。如果一个服务每秒吐几十万 span,靠 tail 在 collector 端挑,永远是在用最贵的一层去补最前面一层的滥发。更稳的做法是先在 SDK 端按业务维度降维(比如只采关键路径、合并同类 span),让进 tail 的量本来就小。 一句话:head 保量、tail 保关键,但 tail 的窗口痛不痛,取决于你有没有先在更前面把量压下来。把 tail 当唯一的过滤器,迟早撞上那个延迟和内存的两难。... 展开详请
采样策略这件事,核心不是选 head 还是 tail,而是先想清楚"你到底要保住哪一类 trace"。 head sampling(在 SDK 或采集端入口就决定要不要这条 trace)最大的好处是便宜,span 根本不发出来,后端不存、不计算。坏处是盲:你只能在"请求进来时"凭概率扔,比如 1% 采样,那 1% 里有没有出错的那条,全看运气。所以它适合保"量"——你想看整体延迟分布、想画 p99 曲线,head 采样够用,还最省资源。 tail sampling(等请求跑完、甚至等一段时间收集完所有 span 再决定保留)解决的是 head 的盲点:你能根据"这条 trace 有没有错、耗时有没有超阈值、是不是关键用户"来决定留不留。但它的代价恰恰就是你问的延迟窗口——为了等一个可能的失败信号,你不得不把还没下结论的 span 在内存里 buffer 一段时间。窗口设短了,慢请求还没来得及报错就被扔了;设长了,内存和高基数一叠加,collector 自己先 OOM。 所以尾部采样的延迟窗口怎么权衡,答案不是拍一个数字,而是先砍 buffer 的内容: 别对所有 trace 都用 tail。绝大多数健康请求用 head 采个低比例就够了,只把"值得延迟判断"的那一小撮(比如带特定入口、特定错误码、特定耗时区间)交给 tail。这样 tail 要 buffer 的量小一个数量级,窗口长短就不那么致命。 窗口长度跟你的告警 SLA 对齐,而不是跟技术直觉对齐。如果你要求故障发生后 30 秒内出 trace,那窗口就别超过 30 秒,超出的 span 说明这条链路本身就比你的 SLA 长,本该单独处理而不是靠采样兜底。 真正容易被忽略的一点是:tail sampling 把"该不该少打点"这个问题藏起来了。如果一个服务每秒吐几十万 span,靠 tail 在 collector 端挑,永远是在用最贵的一层去补最前面一层的滥发。更稳的做法是先在 SDK 端按业务维度降维(比如只采关键路径、合并同类 span),让进 tail 的量本来就小。 一句话:head 保量、tail 保关键,但 tail 的窗口痛不痛,取决于你有没有先在更前面把量压下来。把 tail 当唯一的过滤器,迟早撞上那个延迟和内存的两难。

联合索引的列序选择,除了选择性还有什么决定因素?边界值查询怎么处理?

GavinGengai学习
联合索引列序这个事,我踩过的坑比看过的教程都多。先说结论:列序不是按选择性从高到低排就完事了,决定性因素其实是「你的查询怎么用这个索引」。 最容易被忽略的一点是最左前缀和范围查询的相互作用。等值条件(=、IN)能一直往下走,但只要某一列用了范围(>、<、BETWEEN、LIKE 'x%'),它右边那些列在索引里就排不了序、用不上了。所以我现在的习惯是:把所有等值条件列放左边,把那个唯一的范围列放最右。有一次我把 (created_at, user_id) 建了索引,查询却是按 user_id 等值 + created_at 范围,结果 created_at 这个范围列卡在中间,user_id 之后索引直接断,慢查询日志里全是全表扫。后来调成 (user_id, created_at) 才解决。 第二是排序和分组的利用。如果一条查询常 ORDER BY a, b,把 a、b 按相同顺序塞进索引尾部,优化器就能直接按索引顺序吐数据,省掉 filesort。这个比单纯追求高选择性实用得多,因为排序带来的临时表和文件排序开销常常比回表还狠。 第三是覆盖索引。SELECT 里要返回的列如果不多,干脆作为尾列include进索引(MySQL 用 INVISIBLE/二级索引冗余列,PG 用 INCLUDE),能彻底免回表。我见过一条高频查询从「索引+回表」变成纯索引扫描,RT 直接掉一截。 边界值查询要单独提一句:BETWEEN 是闭区间,和 >、< 的开闭搞混很容易多取或少取一行,数据对不上还很难查。另外边界往往落在数据分布两端,统计信息一过期优化器就误判行数、乱选索引,这时候 ANALYZE TABLE / UPDATE STATISTICS 一下比改索引更立竿见影。 最后一句提醒:WHERE 里对列套函数、或者隐式类型转换(字符串列传了数字),索引直接废。这个和列序无关,但经常被人当成「索引建错了」来折腾。 所以选列序时我一般先列清楚这条查询的访问模式:等值有哪些、范围是哪列、排序列是什么、要返回哪些列,再反过来排索引,而不是盯着选择性算半天。... 展开详请
联合索引列序这个事,我踩过的坑比看过的教程都多。先说结论:列序不是按选择性从高到低排就完事了,决定性因素其实是「你的查询怎么用这个索引」。 最容易被忽略的一点是最左前缀和范围查询的相互作用。等值条件(=、IN)能一直往下走,但只要某一列用了范围(>、<、BETWEEN、LIKE 'x%'),它右边那些列在索引里就排不了序、用不上了。所以我现在的习惯是:把所有等值条件列放左边,把那个唯一的范围列放最右。有一次我把 (created_at, user_id) 建了索引,查询却是按 user_id 等值 + created_at 范围,结果 created_at 这个范围列卡在中间,user_id 之后索引直接断,慢查询日志里全是全表扫。后来调成 (user_id, created_at) 才解决。 第二是排序和分组的利用。如果一条查询常 ORDER BY a, b,把 a、b 按相同顺序塞进索引尾部,优化器就能直接按索引顺序吐数据,省掉 filesort。这个比单纯追求高选择性实用得多,因为排序带来的临时表和文件排序开销常常比回表还狠。 第三是覆盖索引。SELECT 里要返回的列如果不多,干脆作为尾列include进索引(MySQL 用 INVISIBLE/二级索引冗余列,PG 用 INCLUDE),能彻底免回表。我见过一条高频查询从「索引+回表」变成纯索引扫描,RT 直接掉一截。 边界值查询要单独提一句:BETWEEN 是闭区间,和 >、< 的开闭搞混很容易多取或少取一行,数据对不上还很难查。另外边界往往落在数据分布两端,统计信息一过期优化器就误判行数、乱选索引,这时候 ANALYZE TABLE / UPDATE STATISTICS 一下比改索引更立竿见影。 最后一句提醒:WHERE 里对列套函数、或者隐式类型转换(字符串列传了数字),索引直接废。这个和列序无关,但经常被人当成「索引建错了」来折腾。 所以选列序时我一般先列清楚这条查询的访问模式:等值有哪些、范围是哪列、排序列是什么、要返回哪些列,再反过来排索引,而不是盯着选择性算半天。

单元测试和集成测试的比例怎么定?什么样的逻辑该写在哪层?

紫风十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
比例不该定指标,按「坏了修多贵」倒推。纯逻辑、金额计算、状态机、解析器这类分支多的,全部压在单测里,跑得快可以写得很密。跨进程边界的东西只能靠集成测试:真实 SQL、事务和隔离级别、消息的重复与乱序、序列化契约、外部接口的超时重试,mock 掉就等于没测。我的习惯是单测吃掉分支覆盖,集成测试只覆盖每条关键 SQL 和每个消费入口,一条不许多但一条不能少。集成慢就单独跑 nightly,别为凑数字硬写。... 展开详请

全员AICoding时代如何保障自己的知识资产不被逆向?

紫风十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
先接受一个现实:代码一旦交给AI处理,就出了你的信任边界,所谓防逆向只能防君子。有效的是分层:核心算法和业务规则不进prompt、不进补全上下文,只给接口定义;涉密模块用本地或私有化部署的模型,公有云模型只碰外围代码。企业侧把敏感词和密钥检测做成出站网关,prompt先过滤再发,这比事后追责有用得多。还有一点常被忽略:防的主要不是AI厂商,而是自家员工把设计文档随手贴进免费工具。制度上明确哪些资产可以出域,比谈「逆向」更落地。对抗AI记忆提取目前没有可靠技术手段,别指望加密解决。... 展开详请

前端首屏 LCP 超标时,优先优化图片加载还是关键 CSS 内联,有没有系统性的决策顺序?

紫风十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
先测再决策,别上来就猜。用 Lighthouse 或真实用户数据确认 LCP 元素是啥,多数场景是首屏大图,少数是字体或渲染阻塞。如果是图片:优先级最高的是 hero 图换现代格式压缩、加 fetchpriority=high、preload 预加载,懒加载千万别用在 LCP 元素上,这是最常见的反模式。图片搞定后还超标,再看关键 CSS:首屏内联、其余异步,砍掉阻塞渲染的第三方脚本。决策顺序:确认 LCP 元素、资源(图片/字体)、关键路径 CSS 和 JS、服务端 TTFB。TTFB 高的话前面都白搭,得先查 CDN 命中率和后端响应。不测就内联 CSS 经常白干,图片才是八成场景的元凶。... 展开详请

历史数据归档后,在线查询与归档查询的路由边界怎么设计才不拖累业务迭代?

技术方舟

科大讯飞 | 资深架构师 (已认证)

江湖人称“山哥”,在数字化、人工智能、电商和金融等领域积累了丰富的平台架构设计经验
路由边界要做到“**对业务迭代最小侵入、失败可回滚、读写一致性可控**”:通常不把时间分流硬塞进 DAO 或通用中间件,而是把它放在**服务层的查询适配层(Query Gateway/Repository Adapter)**——业务只调用同一套“按条件查订单”的接口,适配层根据时间/数据域把请求路由到在线库或归档实例(DAO 仍保持各自数据源的纯粹性;ShardingSphere 这类条件路由会让 SQL 语义与路由耦合更深、迭代成本更高),并在边界附近用“**归档快照 + 幂等校验**”处理更新:归档任务不直接删除,而是先标记待归档批次(写入方继续可见),用**归档游标/版本号(binlog 位点、业务更新时间、行版本)**校验“这批数据在校验窗口内是否无新增修改”,必要时把临界区按“冻结窗口”或“重跑增量补偿”方式保证不丢;对“查全部历史”这类需求,在线跨库 JOIN 基本不要做,实践上更偏向**异步导出/客服工单式离线汇总**,或为高频字段做**宽表冗余/归档侧物化视图**(订单明细/关键维度写入归档查询模型,并配合全文检索/分页索引),这样业务迭代只改“查询适配层/归档模型”,不会被路由与 JOIN 约束拖慢。... 展开详请

事件驱动架构落地:领域事件的 schema 演进与消费端版本兼容有哪些实战经验?

一只特立独行的兔先生腾讯云+社区TOP100优秀作者/华为云MVP专家/CSDN博客专家/深信服MVP专家/阿里云MVP专家
结论:只加字段不删字段还不够。交易事件要同时约束字段语义、历史回放、业务幂等和投影发布边界。建议把 schema 版本、聚合版本、消费者实现版本分开管理,不能用一个 version 包办。下面是可落地的设计建议,不冒充真实项目案例。 一、schema 演进:兼容的是语义,不只是 JSON 能否解析 1. 给事件固定信封:eventId、eventType、schemaVersion、aggregateId、aggregateVersion、occurredAt。eventId 在同一事件重投时保持不变;schemaVersion 描述结构,aggregateVersion 描述同一业务聚合的事实次序,两者不能互换。金额的单位、币种、时区、枚举含义也属于契约。 2. 新增字段应明确缺失与 null 的差别,并验证旧消费者是否容忍未知字段、未知枚举。新增必填字段、金额从分变成元,即使没有删除字段,也可能是破坏性变更。先部署兼容读取方,再让生产方写新格式;不兼容变化用新事件版本或新事件类型隔离。 3. 回放老事件时,在消费入口做确定性的版本转换,将旧结构映射为内部模型。缺少新字段只能采用当时语义成立的默认值,不能把未知金额补成 0,也不能查询今天的订单状态来冒充当时事实。确实无法补齐的历史事件应隔离、补历史快照或明确回放边界,不能静默丢弃。 4. 保留各版本真实脱敏样本,覆盖“旧事件→新消费者”“新事件→仍在线的旧消费者”及全量回放。测试不仅比较反序列化成功,还要验证积分、库存等业务结果。 二、灰度:先区分分担消费与影子消费 1. 以腾讯云 CKafka 为例,同一消费组内的分区分配给组内消费者处理;新旧实例放在同一组,是分担消息,不是各收到一份。风控、积分、通知需要分别消费完整事件流时,应使用各自消费组。要比较新旧实现全量结果,则使用独立影子组,并写入隔离投影,禁止影子链路真实发券、扣款或通知。 2. 对同一业务副作用,新旧实现应共享稳定的幂等规则,例如“业务处理器标识+eventId”,不要加入部署版本,否则升级就绕过了去重。去重记录与业务写入放入同一数据库事务,依赖唯一约束处理并发;事务成功后再提交消费进度。这样提交进度失败导致重投时,不会重复入账。外部调用还需下游幂等键或 outbox,数据库事务本身包不住远程接口。 3. 影子投影与正式投影使用不同去重命名空间;否则正式链路处理过的事件可能被影子链路全部跳过。回放若要重建读模型,应写新投影后校验切换,不直接重跑真实副作用。 4. 同一 aggregateId 使用稳定分区键,并确保消费端不会并发打乱同一聚合的落库顺序。不要把分区有序理解成跨分区或跨主题全局有序。分区扩容会影响键到分区的映射,需要规划切换边界。聚合版本用条件更新防止旧事件覆盖新状态;只有订阅完整连续版本流时,才可把版本跳号直接判为缺消息。乱序或缺口应等待、补查或隔离,不可盲目覆盖。 三、投影 lag:区分消息进度与业务可见性 1. 分别监控各分区“日志末端进度-已提交进度”、最老未完成事件等待时间,以及“投影实际落库时间-事件发生时间”。已提交 offset 不等于业务完成:提前提交会出现消息指标正常、读模型仍旧的假象。异步写库时必须单独记录已应用水位。 2. 同时看各分区最大值、处理吞吐、失败重试和隔离队列数量;平均值会掩盖热点分区。没有新事件时,不能仅凭最后一次更新距今很久报警,可结合生产流量或心跳水位判断。端到端时间需考虑时钟偏差;历史回放与实时流量分开统计,否则旧事件会制造巨大延迟假象。 3. 告警阈值从业务新鲜度 SLO 倒推:积分展示和支付风控通常不是同一要求。用持续超标与待处理量组合触发,恢复设置滞回;严重交易异常另设即时告警,不靠统一固定秒数覆盖所有业务。 上线前建议演练三件事:落库成功但进度提交失败、灰度期间重平衡、旧事件回放遇到新增必填字段。验收标准是副作用不重复、旧状态不覆盖新状态、投影滞后可被准确发现。... 展开详请
结论:只加字段不删字段还不够。交易事件要同时约束字段语义、历史回放、业务幂等和投影发布边界。建议把 schema 版本、聚合版本、消费者实现版本分开管理,不能用一个 version 包办。下面是可落地的设计建议,不冒充真实项目案例。 一、schema 演进:兼容的是语义,不只是 JSON 能否解析 1. 给事件固定信封:eventId、eventType、schemaVersion、aggregateId、aggregateVersion、occurredAt。eventId 在同一事件重投时保持不变;schemaVersion 描述结构,aggregateVersion 描述同一业务聚合的事实次序,两者不能互换。金额的单位、币种、时区、枚举含义也属于契约。 2. 新增字段应明确缺失与 null 的差别,并验证旧消费者是否容忍未知字段、未知枚举。新增必填字段、金额从分变成元,即使没有删除字段,也可能是破坏性变更。先部署兼容读取方,再让生产方写新格式;不兼容变化用新事件版本或新事件类型隔离。 3. 回放老事件时,在消费入口做确定性的版本转换,将旧结构映射为内部模型。缺少新字段只能采用当时语义成立的默认值,不能把未知金额补成 0,也不能查询今天的订单状态来冒充当时事实。确实无法补齐的历史事件应隔离、补历史快照或明确回放边界,不能静默丢弃。 4. 保留各版本真实脱敏样本,覆盖“旧事件→新消费者”“新事件→仍在线的旧消费者”及全量回放。测试不仅比较反序列化成功,还要验证积分、库存等业务结果。 二、灰度:先区分分担消费与影子消费 1. 以腾讯云 CKafka 为例,同一消费组内的分区分配给组内消费者处理;新旧实例放在同一组,是分担消息,不是各收到一份。风控、积分、通知需要分别消费完整事件流时,应使用各自消费组。要比较新旧实现全量结果,则使用独立影子组,并写入隔离投影,禁止影子链路真实发券、扣款或通知。 2. 对同一业务副作用,新旧实现应共享稳定的幂等规则,例如“业务处理器标识+eventId”,不要加入部署版本,否则升级就绕过了去重。去重记录与业务写入放入同一数据库事务,依赖唯一约束处理并发;事务成功后再提交消费进度。这样提交进度失败导致重投时,不会重复入账。外部调用还需下游幂等键或 outbox,数据库事务本身包不住远程接口。 3. 影子投影与正式投影使用不同去重命名空间;否则正式链路处理过的事件可能被影子链路全部跳过。回放若要重建读模型,应写新投影后校验切换,不直接重跑真实副作用。 4. 同一 aggregateId 使用稳定分区键,并确保消费端不会并发打乱同一聚合的落库顺序。不要把分区有序理解成跨分区或跨主题全局有序。分区扩容会影响键到分区的映射,需要规划切换边界。聚合版本用条件更新防止旧事件覆盖新状态;只有订阅完整连续版本流时,才可把版本跳号直接判为缺消息。乱序或缺口应等待、补查或隔离,不可盲目覆盖。 三、投影 lag:区分消息进度与业务可见性 1. 分别监控各分区“日志末端进度-已提交进度”、最老未完成事件等待时间,以及“投影实际落库时间-事件发生时间”。已提交 offset 不等于业务完成:提前提交会出现消息指标正常、读模型仍旧的假象。异步写库时必须单独记录已应用水位。 2. 同时看各分区最大值、处理吞吐、失败重试和隔离队列数量;平均值会掩盖热点分区。没有新事件时,不能仅凭最后一次更新距今很久报警,可结合生产流量或心跳水位判断。端到端时间需考虑时钟偏差;历史回放与实时流量分开统计,否则旧事件会制造巨大延迟假象。 3. 告警阈值从业务新鲜度 SLO 倒推:积分展示和支付风控通常不是同一要求。用持续超标与待处理量组合触发,恢复设置滞回;严重交易异常另设即时告警,不靠统一固定秒数覆盖所有业务。 上线前建议演练三件事:落库成功但进度提交失败、灰度期间重平衡、旧事件回放遇到新增必填字段。验收标准是副作用不重复、旧状态不覆盖新状态、投影滞后可被准确发现。

千万级长连接推送如何做到不丢不重:序列号、ACK 与离线补拉的完整设计?

紫风十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
核心是三层配合:序列号保证有序可对账,ACK保证送达确认,离线补拉保证断线不丢。每条消息带单调递增seq,客户端记已收到的最大seq,断线重连后带着seq补拉服务端未确认部分,去重靠客户端按seq幂等,收到重复直接丢。服务端消息至少保留到ACK窗口之外,通常做7天离线存储。几个易踩的坑:ACK批量确认比逐条省一个数量级的流量;重连风暴要做退避加接入点打散;写扩散还是读扩散按关系链选,千万级粉丝场景读扩散加一份时间线远比写扩散便宜。原则是先保证不丢,重复交给客户端seq去重,别在服务端做复杂去重逻辑。... 展开详请

通用人工智能AGI距离我们还有多少年?

对从业者更有价值的问题不是年份,而是:哪些环节先被自动化、自己的能力结构如何往「定义问题 + 验收结果」的环节迁移。

AI给你带来了效率还是焦虑?各是什么

元宇宙是否只是一个炒作概念?

AAIF大图会成AI产品总入口吗?

李福春游戏发行平台,跨境电商,低代码,物联网,数字人商业项目架构师
已采纳
AAIF若把模型接入、Agent编排、工具协议、数据检索、安全与计费做成标准层,产品入口会从散落SDK变成可配置工作台,客户在一个控制台完成试用、发布、观测与结算。判断依据是入口收敛能降低售前POC与售后支持成本,尤其多模型切换和工具复用。可执行验证:选三个高频场景,记录从注册到首个Agent上线的时长、所需人力、失败回滚次数,若下降30%则入口成立。 AAIF不等于产品成功。若大图只画能力不定义租户、权限、SLA、数据边界和退出机制,产品会被平台锁定,客户跨云迁移成本反而上升。边界在强合规、私有化、低延迟场景,统一入口可能让位于专有链路。验证要压测权限隔离、模型替换、工具热插拔,观察是否需改业务代码。 产品团队应把AAIF当入口候选而非默认答案。以场景漏斗、集成成本、客户可迁移性三项做季度门禁;先做可逆试点,保留旁路。若入口时长、支持工单、续费转化同步改善,再扩到主力产品线。否则只把AAIF当内部集成规范,不对外承诺总入口。... 展开详请

AAIF大图先砍Agent胶水代码吗?

李福春游戏发行平台,跨境电商,低代码,物联网,数字人商业项目架构师
已采纳
AAIF若定义统一工具协议、记忆接口、模型路由和可观测事件,开发者能少写大量重试、鉴权、格式转换与回退代码。判断依据是Agent故障多来自胶水层不一致,标准层可把模型、工具、数据源解耦。验证可选一个已有Agent,替换工具调用与记忆模块,记录代码行数、联调时长、回归用例通过率,若胶水代码减半且回放一致,则值得推进。 AAIF不能消除业务胶水。领域权限、数据脱敏、幂等、人工审批和异常语义仍要开发者实现;若大图接口过粗,反而把复杂度藏进黑盒。边界在高并发写操作、强事务、私有协议和边缘设备,标准协议可能不覆盖。验证要故意制造工具超时、模型限流、记忆冲突,观察AAIF是否给出可编程回退点,而非只能整链重试。 开发策略是“先削重复胶水,不交业务控制权”。把AAIF当依赖注入层,保留适配器与逃生通道。每迭代以代码行数、P95延迟、回放通过率、故障定位时长四项验收;若接口无法暴露幂等键和追踪ID,就暂缓替换核心链路。通过契约测试后再扩到多Agent协作。... 展开详请

AAIF大图下GPT评测谁定标准?

李福春游戏发行平台,跨境电商,低代码,物联网,数字人商业项目架构师
已采纳
AAIF大图若把评测作为一等公民,GPT类模型的上线就应有统一基准:固定回放集、对抗提示、工具调用轨迹、人工抽检和在线指标。判断依据是模型输出非确定,单次演示通过不代表可发布。验证可在评测平台跑三组:通用能力、业务问答、Agent工具链,设准确率、幻觉率、拒答率、P95延迟与单次成本阈值,任何一项越界即阻断。 统一标准不等于一把尺子。GPT评测会受提示词、温度、工具版本、检索库和用户分布影响;若只追求榜单分数,团队会过拟合测试集,线上真实失败仍高。边界在创造性任务、主观体验和长尾安全,自动指标不足。验证要保留盲测与人工评审,比较离线分数和线上投诉、转人工率、越权调用率,防止指标好看但体验差。 测试团队应掌握发布门禁而非唯一裁判。采用AAIF定义的分层评测:基础能力自动跑,业务场景回放跑,高风险人工审,线上灰度看真实指标。每次模型或工具变更都生成评测报告与差异追踪。若离线提升但线上投诉、成本或越权上升,回滚;只有三项同向改善才扩大流量。... 展开详请

AAIF大图收费口卡在模型层吗?

李福春游戏发行平台,跨境电商,低代码,物联网,数字人商业项目架构师
已采纳
AAIF大图若把模型、Agent、工具、存储、观测和席位分成可计量层,商业化可摆脱只卖Token的同质竞争。判断依据是客户为业务结果付费,工具调用、工作流编排和治理能力有独立成本与可计量收益。验证可做三张表:单位成本、客户用量、续费留存;对试点客户按Agent成功任务数、节省工时、工具调用量定价,观察毛利与转化是否优于纯模型计费。 收费口若全卡在模型层,会受上游价格战挤压,客户也容易比价迁移。但把AAIF每层都收费会推高采用门槛,尤其工具调用和观测数据重复计费。边界在私有化、买断、合规审计和生态伙伴分成,统一价目表可能失效。验证要模拟竞品降价、客户自建模型网关、工具免费替代三种情景,看毛利和流失。 商业化应选“结果层收费、资源层透明”的组合:模型与算力按量,Agent工作流按成功任务或席位,治理与观测作为增值包。落地先跑十个客户cohort,跟踪毛利率、净留存、超额用量占比和争议账单率;若模型层收入占比过高且留存低,就把定价锚点迁到AAIF编排与治理能力。... 展开详请

我的积分在哪里查?

领券