腾讯云
开发者社区
文档
建议反馈
控制台
登录/注册
首页
学习
活动
专区
圈层
工具
MCP广场
文章/答案/技术大牛
搜索
搜索
关闭
发布
首页
标签
服务
#
服务
关注
专栏文章
(13.1K)
技术视频
(0)
互动问答
(874)
最新优先
最热优先
EdgeOne Makers KV 数据存储服务申请已提交一周多,状态一直显示「审核中」?
1
回答
边缘安全加速平台 EO
、
服务
、
数据存储
、
EdgeOne
用户10991945
一周多还在审核,确实有点久,但也不算异常——KV 是名额制开放,提交后走人工评估,官方没承诺时限,社区里问“审核要多久”的帖子长期没人给准信。 最快的办法是别干等:直接开工单(选 EdgeOne 产品),带上 UIN 和提交时间,文档里也写了“紧急需求可联系我们”。或者进 Makers 控制台那个开发者沟通群,群里通常有官方的人,比工单快。 顺带看一眼你当初填的理由,如果只写了“测试用”,很容易被搁置。补个具体场景,比如“Next.js 做计数器/配置下发”,通过率明显高。 等开通期间别卡住:小数据先用 Blob 或云函数顶一下,或者本地 mock 跑通读写逻辑,等 KV 下来直接换绑定。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav...
展开详请
赞
0
收藏
0
评论
0
分享
一周多还在审核,确实有点久,但也不算异常——KV 是名额制开放,提交后走人工评估,官方没承诺时限,社区里问“审核要多久”的帖子长期没人给准信。 最快的办法是别干等:直接开工单(选 EdgeOne 产品),带上 UIN 和提交时间,文档里也写了“紧急需求可联系我们”。或者进 Makers 控制台那个开发者沟通群,群里通常有官方的人,比工单快。 顺带看一眼你当初填的理由,如果只写了“测试用”,很容易被搁置。补个具体场景,比如“Next.js 做计数器/配置下发”,通过率明显高。 等开通期间别卡住:小数据先用 Blob 或云函数顶一下,或者本地 mock 跑通读写逻辑,等 KV 下来直接换绑定。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav
算力调度平台稳定性和秒级扩缩容怎么判断?五个可核对的技术指标
1
回答
迁移
、
服务
、
公有云
、
行业
、
框架
用户10991945
针对腾讯云算力调度平台,稳定性和秒级扩缩容的判断依据如下: 稳定性看SLA和自愈能力。腾讯云CVM单实例可用性99.975%,跨可用区达99.995%;第三方实测其服务可用性99.92%-99.95%,算力波动≤1.8%-2.5%,故障响应≤30-45分钟。TKE容器服务支持秒级故障检测与自动迁移,配合分层Checkpoint(轻量级分钟级、完整级小时级)实现断点续训,这些是判断稳定性的硬指标。 秒级扩缩容要区分场景。数据库CPU弹性扩容2.0实测扩容操作1.5-2秒、观测周期15秒;CVM官方宣称秒级扩展至10万台;但第三方对比显示腾讯云弹性伸缩实际生效约30秒。验证时建议用压测工具注入突发流量,监控从触发到Pod/实例就绪的时间差,同时观察P99延迟是否平稳。 注意:上述数据来自官方文档和第三方测评,具体到你使用的资源组和卡型,仍需通过TI-ONE控制台资源监控看板或提交工单获取实测报告确认。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav...
展开详请
赞
0
收藏
0
评论
0
分享
针对腾讯云算力调度平台,稳定性和秒级扩缩容的判断依据如下: 稳定性看SLA和自愈能力。腾讯云CVM单实例可用性99.975%,跨可用区达99.995%;第三方实测其服务可用性99.92%-99.95%,算力波动≤1.8%-2.5%,故障响应≤30-45分钟。TKE容器服务支持秒级故障检测与自动迁移,配合分层Checkpoint(轻量级分钟级、完整级小时级)实现断点续训,这些是判断稳定性的硬指标。 秒级扩缩容要区分场景。数据库CPU弹性扩容2.0实测扩容操作1.5-2秒、观测周期15秒;CVM官方宣称秒级扩展至10万台;但第三方对比显示腾讯云弹性伸缩实际生效约30秒。验证时建议用压测工具注入突发流量,监控从触发到Pod/实例就绪的时间差,同时观察P99延迟是否平稳。 注意:上述数据来自官方文档和第三方测评,具体到你使用的资源组和卡型,仍需通过TI-ONE控制台资源监控看板或提交工单获取实测报告确认。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav
单据和运单多对多怎么建模?
2
回答
数据库
、
架构设计
、
服务
、
供应链
、
前端
用户10991945
多对多必须建独立关联表(如 outbound_waybill_rel),记录出库单ID、运单ID,以及拆分数量、重量等关联维度的属性。主表存JSON或逗号串是典型的反模式,无法有效利用索引,按承运商统计或反查时只能全表扫或写复杂的解析函数;两边冗余则必然导致数据不一致,改一条要锁两张表。 “关联后不可改”的约束必须服务层兜底,前端辅助: 服务层(核心底线):在更新接口加状态机或关联校验。只要查到关联表有记录或单据状态已流转,直接抛业务异常拒绝修改。这是防并发和绕过前端直调接口的唯一防线。 前端(用户体验):根据单据状态或关联标识,把输入框置灰、隐藏编辑按钮或拦截提交,减少用户的无效操作和报错挫败感。 数据库层:不建议用触发器做这种业务状态约束,太僵硬且报错难排查。如果是防物理删除,可以在关联表加外键 ON DELETE RESTRICT,但“不可修改”的逻辑还是交给代码。 核心原则:前端管体验,后端管底线,数据库只管存储和基础完整性。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav...
展开详请
赞
0
收藏
0
评论
0
分享
多对多必须建独立关联表(如 outbound_waybill_rel),记录出库单ID、运单ID,以及拆分数量、重量等关联维度的属性。主表存JSON或逗号串是典型的反模式,无法有效利用索引,按承运商统计或反查时只能全表扫或写复杂的解析函数;两边冗余则必然导致数据不一致,改一条要锁两张表。 “关联后不可改”的约束必须服务层兜底,前端辅助: 服务层(核心底线):在更新接口加状态机或关联校验。只要查到关联表有记录或单据状态已流转,直接抛业务异常拒绝修改。这是防并发和绕过前端直调接口的唯一防线。 前端(用户体验):根据单据状态或关联标识,把输入框置灰、隐藏编辑按钮或拦截提交,减少用户的无效操作和报错挫败感。 数据库层:不建议用触发器做这种业务状态约束,太僵硬且报错难排查。如果是防物理删除,可以在关联表加外键 ON DELETE RESTRICT,但“不可修改”的逻辑还是交给代码。 核心原则:前端管体验,后端管底线,数据库只管存储和基础完整性。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav
MySQL 主备切换后部分线程卡住十几分钟,连接池该如何配置?
2
回答
mysql
、
服务
、
高可用
、
连接
、
腾讯云架构师技术同盟
技术方舟
科大讯飞 | 资深架构师 (已认证)
江湖人称“山哥”,在数字化、人工智能、电商和金融等领域积累了丰富的平台架构设计经验
约15分钟与Linux默认tcp_retries2=15的重传上限(约924秒)吻合,根源在内核,不在数据库。在Pod内调小该参数需要节点级sysctl白名单,且网络抖动时会误断连接,不宜作为主方案。更稳妥的分工是:OLTP连接池设置5至10秒的socketTimeout;报表拆出独立连接池,设较长的socketTimeout;数据库侧用max_execution_time(仅作用于SELECT)兜底长查询。若要精准剔除死连接,可通过自定义SocketFactory设置TCP_USER_TIMEOUT。HikariCP的keepaliveTime只能清理空闲连接,对卡在读取中的线程无效。...
展开详请
赞
1
收藏
0
评论
0
分享
约15分钟与Linux默认tcp_retries2=15的重传上限(约924秒)吻合,根源在内核,不在数据库。在Pod内调小该参数需要节点级sysctl白名单,且网络抖动时会误断连接,不宜作为主方案。更稳妥的分工是:OLTP连接池设置5至10秒的socketTimeout;报表拆出独立连接池,设较长的socketTimeout;数据库侧用max_execution_time(仅作用于SELECT)兜底长查询。若要精准剔除死连接,可通过自定义SocketFactory设置TCP_USER_TIMEOUT。HikariCP的keepaliveTime只能清理空闲连接,对卡在读取中的线程无效。
服务雪崩是什么,如何做熔断降级?
1
回答
服务
、
前端
用户10991945
服务雪崩不是某个服务挂了,而是故障没被隔离,下游一慢,上游线程全被占满,整条链路跟着瘫。本质是资源耗尽的级联传导。 熔断降级得配合着用。熔断是保险丝,下游失败率或慢调用超阈值就跳闸进Open状态,快速失败不再真调;过段时间进Half-Open放少量请求探测,成功才恢复。别只盯错误率,慢调用不报错也会拖死系统,Sentinel支持按慢调用比例触发,比Hystrix实用。 降级是兜底结果,熔断触发后返回缓存、默认值或友好提示,保住核心体验。但阈值别设太敏感,正常波动误熔断反而扩大故障;降级逻辑本身也得测,别等真出事才发现fallback也挂了。工程上推荐Sentinel,支持接口级、实例级细粒度熔断,配合线程池隔离,边缘依赖快熔快放,核心链路严防死守。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav...
展开详请
赞
0
收藏
0
评论
0
分享
服务雪崩不是某个服务挂了,而是故障没被隔离,下游一慢,上游线程全被占满,整条链路跟着瘫。本质是资源耗尽的级联传导。 熔断降级得配合着用。熔断是保险丝,下游失败率或慢调用超阈值就跳闸进Open状态,快速失败不再真调;过段时间进Half-Open放少量请求探测,成功才恢复。别只盯错误率,慢调用不报错也会拖死系统,Sentinel支持按慢调用比例触发,比Hystrix实用。 降级是兜底结果,熔断触发后返回缓存、默认值或友好提示,保住核心体验。但阈值别设太敏感,正常波动误熔断反而扩大故障;降级逻辑本身也得测,别等真出事才发现fallback也挂了。工程上推荐Sentinel,支持接口级、实例级细粒度熔断,配合线程池隔离,边缘依赖快熔快放,核心链路严防死守。 官方详细解决方案:https://cloud.tencent.com/product/lighthouse?Is=sdk-topnav
EdgeOne Makers KV 数据存储服务申请已提交数天,状态一直显示「审核中」?
1
回答
服务
、
数据存储
、
EdgeOne
用户10991945
EdgeOne Makers KV 存储目前仍处于内测或白名单开放阶段,并非所有用户提交申请后都能自动通过。正常审核周期一般为24小时至7个工作日,超过这个时间仍显示“审核中”,通常不是系统故障,而是人工审核卡住了。 常见原因包括:申请表中业务场景描述过于简单(如只写“测试”)、关联域名未完成ICP备案、账号历史存在风控记录,或申请用途与KV存储的适用场景不匹配(例如试图存大文件或关系型数据)。此外,若遇平台高峰期或合规审查升级,排队时间也会延长。 建议先检查并补充申请备注中的业务说明、预估QPS和数据类型;确认域名备案状态正常;若已超一周无进展,直接通过腾讯云工单系统联系技术支持,提供账号ID和申请时间请求人工跟进。急用可先用临时方案过渡。 官方详细解决方案:https://cloud.tencent.com/product/teo...
展开详请
赞
0
收藏
0
评论
0
分享
EdgeOne Makers KV 存储目前仍处于内测或白名单开放阶段,并非所有用户提交申请后都能自动通过。正常审核周期一般为24小时至7个工作日,超过这个时间仍显示“审核中”,通常不是系统故障,而是人工审核卡住了。 常见原因包括:申请表中业务场景描述过于简单(如只写“测试”)、关联域名未完成ICP备案、账号历史存在风控记录,或申请用途与KV存储的适用场景不匹配(例如试图存大文件或关系型数据)。此外,若遇平台高峰期或合规审查升级,排队时间也会延长。 建议先检查并补充申请备注中的业务说明、预估QPS和数据类型;确认域名备案状态正常;若已超一周无进展,直接通过腾讯云工单系统联系技术支持,提供账号ID和申请时间请求人工跟进。急用可先用临时方案过渡。 官方详细解决方案:https://cloud.tencent.com/product/teo
大促容量:全弹性还是预留+弹性混合?缩容策略怎么定?
1
回答
容器
、
缓存
、
db
、
服务
、
流量
PikeTalk
结论:大促场景用「预留基线 + 预热式弹性」混合,且按层区别对待;缩容策略比扩容更容易出事,要单独设计。 1. 为什么大促不全弹性 大促流量是「时间已知、斜率陡峭」的强脉冲,反应式弹性(HPA 基于指标)天生追不上:扩容要过镜像拉取、应用启动、就绪探针、节点池扩容(CA 又是分钟级),等指标触发再扩,脉冲已经把入口打挂了。而且全弹性带来数据库连接数、下游依赖的剧烈抖动。全弹性适合平时的日常波动,不适合「确定性事件」。 2. 混合策略按层分 ① 有状态与中间件(MySQL/Redis/MQ):纯预留,大促前按容量规划扩到预估峰值水位(压测验证过的水位,不是拍脑袋),结束后保留观察再缩——有状态缩容风险最高;② 无状态应用层:预留基线覆盖日常峰值的 P90,弹性部分承接增量(约占峰值 30%~50%),且用定时预热扩容为主(活动开始时间已知,提前 15~30 分钟扩到位)+ HPA 指标触发兜底超预期流量;③ 核心交易链路比旁路链路预留比例更高,弹性只给非核心。 3. 缩容策略(防抖四原则) ① 拉长稳定窗口:HPA scaleDown stabilizationWindow 300~600 秒,避免流量毛刺触发缩了又扩;② 扩缩阈值错开(滞后带):扩容 70%、缩容 40%,中间留 30% 的死区;③ 分批分层缩:先缩旁路无状态,核心服务最保守,有状态最后;④ 大促结束先观察 24 小时再梯度缩(分 2~3 天),避免「活动刚结束尾部流量还在」时缩过头,配合 PDB + 优雅终止做连接排空。 4. 成本闭环 预留部分用包年包月锁定单价,弹性部分全按量;大促后必做一次容量复盘:记录实际峰值、各层水位命中率、预留浪费比和弹性触发次数,作为下次大促基线的输入。预留命中率长期低于 60% 说明基线虚高,弹性频繁打满说明基线虚低——用数据收敛,而不是每次拍脑袋。...
展开详请
赞
0
收藏
0
评论
0
分享
结论:大促场景用「预留基线 + 预热式弹性」混合,且按层区别对待;缩容策略比扩容更容易出事,要单独设计。 1. 为什么大促不全弹性 大促流量是「时间已知、斜率陡峭」的强脉冲,反应式弹性(HPA 基于指标)天生追不上:扩容要过镜像拉取、应用启动、就绪探针、节点池扩容(CA 又是分钟级),等指标触发再扩,脉冲已经把入口打挂了。而且全弹性带来数据库连接数、下游依赖的剧烈抖动。全弹性适合平时的日常波动,不适合「确定性事件」。 2. 混合策略按层分 ① 有状态与中间件(MySQL/Redis/MQ):纯预留,大促前按容量规划扩到预估峰值水位(压测验证过的水位,不是拍脑袋),结束后保留观察再缩——有状态缩容风险最高;② 无状态应用层:预留基线覆盖日常峰值的 P90,弹性部分承接增量(约占峰值 30%~50%),且用定时预热扩容为主(活动开始时间已知,提前 15~30 分钟扩到位)+ HPA 指标触发兜底超预期流量;③ 核心交易链路比旁路链路预留比例更高,弹性只给非核心。 3. 缩容策略(防抖四原则) ① 拉长稳定窗口:HPA scaleDown stabilizationWindow 300~600 秒,避免流量毛刺触发缩了又扩;② 扩缩阈值错开(滞后带):扩容 70%、缩容 40%,中间留 30% 的死区;③ 分批分层缩:先缩旁路无状态,核心服务最保守,有状态最后;④ 大促结束先观察 24 小时再梯度缩(分 2~3 天),避免「活动刚结束尾部流量还在」时缩过头,配合 PDB + 优雅终止做连接排空。 4. 成本闭环 预留部分用包年包月锁定单价,弹性部分全按量;大促后必做一次容量复盘:记录实际峰值、各层水位命中率、预留浪费比和弹性触发次数,作为下次大促基线的输入。预留命中率长期低于 60% 说明基线虚高,弹性频繁打满说明基线虚低——用数据收敛,而不是每次拍脑袋。
K8s 的 requests/limits 你们怎么定的?CPU limit 设不设?
1
回答
容器
、
cpu
、
limit
、
服务
、
实践
紫风
十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
requests定准点让调度器真实排布,limits分资源讨论。CPU limit我建议多数服务不设:CPU是可压缩资源,被限只变慢不会崩,设了反而在流量高峰被throttle,p99延迟莫名飙高还难查。不设的代价是可能抢占别的Pod,用节点池隔离或按优先级调度兜底。内存必须设limit,超了会被OOMKill,数值要基于压测峰值再加两到三成余量,不是拍一个数。内存的requests建议等于limit,拿到Guaranteed QoS,避免节点内存紧张时第一个被驱逐。定完不是结束,定期看容器被throttle和OOM的记录,反复触发就调,参数跟着流量形态变,一年前的配置大概率不适用现在。...
展开详请
赞
0
收藏
0
评论
0
分享
requests定准点让调度器真实排布,limits分资源讨论。CPU limit我建议多数服务不设:CPU是可压缩资源,被限只变慢不会崩,设了反而在流量高峰被throttle,p99延迟莫名飙高还难查。不设的代价是可能抢占别的Pod,用节点池隔离或按优先级调度兜底。内存必须设limit,超了会被OOMKill,数值要基于压测峰值再加两到三成余量,不是拍一个数。内存的requests建议等于limit,拿到Guaranteed QoS,避免节点内存紧张时第一个被驱逐。定完不是结束,定期看容器被throttle和OOM的记录,反复触发就调,参数跟着流量形态变,一年前的配置大概率不适用现在。
服务降级的业务分级你们是怎么定的?降级开关如何防止腐化?
1
回答
服务
、
高可用
、
工程师
、
实践
、
用户体验
PikeTalk
业务分级:不按服务名分,按「用户旅程 + 后果」分。每个功能回答三个问题:① 关掉它,用户还能不能走完主流程(浏览→下单→支付)?② 关掉会不会造成资金/数据错误(而不只是体验差)?③ 关掉多久可容忍?据此落三档:S0 核心交易(不降级,只做扩容和限流保护);S1 重要体验(评论、推荐、库存展示——可分钟级降级,降级要有替代输出如缓存快照/默认文案,不能白屏);S2 旁路能力(积分、消息推送、行为日志——随时可降,甚至平时就按需开关)。两个容易被忽略的规则:分级沿调用链向上继承——下游服务被 S0 业务依赖时自动按 S0 对待,按「依赖它的业务的最高级别」定级而不是它自己觉得自己不重要;分级清单由业务方与技术方联合评审并写入配置中心,跟版本变更同步更新,否则半年后分级表和现实就对不上了。 开关防腐化:核心是「第一次按下不能发生在故障时」。腐化的根因是开关加了没人验、代码演化后降级路径悄悄失效、没人敢动。四条对策: ① 定期真演练:月度/季度降级演练,真按下开关、真观察降级路径是否可用、真恢复。演练不过的开关视为「坏开关」,修复或删除; ② 新增开关三要素:PR 里新增降级开关必须附「验证方法、预期效果、恢复步骤」,缺一不合入——从源头保证每个开关都是可验证的; ③ 开关生命周期管理:配置中心集中管理 + 变更审计(谁改的、diff 可查、关键开关变更走审批),每半年清理一次「长期未触发且演练未覆盖」的开关——长尾坏开关是事故放大器; ④ 状态可见:开关状态打点上报,降级生效期间在核心监控大盘显式展示(横幅级),防止「降级了没人记得恢复」这种最尴尬的二次事故。 一句话:分级决定「谁可以被降」,演练决定「降级真的可用」——后者比前者更容易被忽略,也更容易出事。...
展开详请
赞
0
收藏
0
评论
0
分享
业务分级:不按服务名分,按「用户旅程 + 后果」分。每个功能回答三个问题:① 关掉它,用户还能不能走完主流程(浏览→下单→支付)?② 关掉会不会造成资金/数据错误(而不只是体验差)?③ 关掉多久可容忍?据此落三档:S0 核心交易(不降级,只做扩容和限流保护);S1 重要体验(评论、推荐、库存展示——可分钟级降级,降级要有替代输出如缓存快照/默认文案,不能白屏);S2 旁路能力(积分、消息推送、行为日志——随时可降,甚至平时就按需开关)。两个容易被忽略的规则:分级沿调用链向上继承——下游服务被 S0 业务依赖时自动按 S0 对待,按「依赖它的业务的最高级别」定级而不是它自己觉得自己不重要;分级清单由业务方与技术方联合评审并写入配置中心,跟版本变更同步更新,否则半年后分级表和现实就对不上了。 开关防腐化:核心是「第一次按下不能发生在故障时」。腐化的根因是开关加了没人验、代码演化后降级路径悄悄失效、没人敢动。四条对策: ① 定期真演练:月度/季度降级演练,真按下开关、真观察降级路径是否可用、真恢复。演练不过的开关视为「坏开关」,修复或删除; ② 新增开关三要素:PR 里新增降级开关必须附「验证方法、预期效果、恢复步骤」,缺一不合入——从源头保证每个开关都是可验证的; ③ 开关生命周期管理:配置中心集中管理 + 变更审计(谁改的、diff 可查、关键开关变更走审批),每半年清理一次「长期未触发且演练未覆盖」的开关——长尾坏开关是事故放大器; ④ 状态可见:开关状态打点上报,降级生效期间在核心监控大盘显式展示(横幅级),防止「降级了没人记得恢复」这种最尴尬的二次事故。 一句话:分级决定「谁可以被降」,演练决定「降级真的可用」——后者比前者更容易被忽略,也更容易出事。
CVM 实例时间与标准时间偏差,应如何用 chrony 校时并验证?
1
回答
云服务器
、
服务
、
服务器
、
接口
、
配置
用户10991945
先装 chrony:yum install -y chrony 或 apt install -y chrony。编辑 /etc/chrony.conf,注释掉默认 pool,加腾讯云内网 NTP:server ntp.tencentyun.com iburst,保存后重启服务 systemctl enable --now chronyd。 验证别只看 date,用 chronyc sources -v 看源状态,* 表示已同步;chronyc tracking 查偏移量,System time 应小于 10ms。若显示 ? 或偏移持续增大,检查安全组是否放行 UDP 123,或换 ntp.tencent.com 重试。 CVM 默认可能跑着 ntpd,务必先停掉避免冲突:systemctl stop ntpd && systemctl disable ntpd。校时生效后,建议加个 cron 每小时跑一次 chronyc tracking | grep 'System time' 写日志,方便事后排查时间跳变。 官方详细解决方案:https://cloud.tencent.com/product/cvm...
展开详请
赞
0
收藏
0
评论
0
分享
先装 chrony:yum install -y chrony 或 apt install -y chrony。编辑 /etc/chrony.conf,注释掉默认 pool,加腾讯云内网 NTP:server ntp.tencentyun.com iburst,保存后重启服务 systemctl enable --now chronyd。 验证别只看 date,用 chronyc sources -v 看源状态,* 表示已同步;chronyc tracking 查偏移量,System time 应小于 10ms。若显示 ? 或偏移持续增大,检查安全组是否放行 UDP 123,或换 ntp.tencent.com 重试。 CVM 默认可能跑着 ntpd,务必先停掉避免冲突:systemctl stop ntpd && systemctl disable ntpd。校时生效后,建议加个 cron 每小时跑一次 chronyc tracking | grep 'System time' 写日志,方便事后排查时间跳变。 官方详细解决方案:https://cloud.tencent.com/product/cvm
Prometheus 高基数标签导致的 OOM,除了删标签还有什么系统性的治理方案?
2
回答
人工智能
、
微服务
、
prometheus
、
服务
、
标签
GavinGeng
ai学习
高基数导致 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 换个姿势再来。...
展开详请
赞
0
收藏
0
评论
0
分享
高基数导致 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 换个姿势再来。
可观测性三大支柱中,链路追踪的采样策略怎么选?尾部采样的延迟窗口怎么权衡?
3
回答
人工智能
、
微服务
、
服务
、
架构
、
内存
紫风
十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
头部采样简单省资源但会丢故障现场,尾部采样能按结果挑出错和慢的链路,代价是要在内存里缓存整条trace等收齐再决策。多数团队的实际方案是混合:入口先按1%到10%做头部采样保证常规观测,同时错误、高延迟、超过P99的链路在尾部强制保留,平时省钱,出事能查到现场。尾部窗口一般30秒到2分钟,太短跨服务链路还没收齐就被判掉,太长内存撑不住,窗口要按系统里最长的一条跨服务调用链来算再加余量。还有个容易踩的坑:采样决策要随trace上下文传播,别每个服务各采各的,否则链路永远残缺。OpenTelemetry的tail sampling processor是现成方案,优先用它,别自己造轮子。...
展开详请
赞
0
收藏
0
评论
0
分享
头部采样简单省资源但会丢故障现场,尾部采样能按结果挑出错和慢的链路,代价是要在内存里缓存整条trace等收齐再决策。多数团队的实际方案是混合:入口先按1%到10%做头部采样保证常规观测,同时错误、高延迟、超过P99的链路在尾部强制保留,平时省钱,出事能查到现场。尾部窗口一般30秒到2分钟,太短跨服务链路还没收齐就被判掉,太长内存撑不住,窗口要按系统里最长的一条跨服务调用链来算再加余量。还有个容易踩的坑:采样决策要随trace上下文传播,别每个服务各采各的,否则链路永远残缺。OpenTelemetry的tail sampling processor是现成方案,优先用它,别自己造轮子。
服务拆得越细,独立发布为何失效?
4
回答
产品
、
服务
、
事务
、
腾讯云架构师技术同盟
、
深圳同盟
PikeTalk
独立发布失效的根源,通常不在服务数量,而在边界划错了维度。 技术上,先算清协调成本,再谈拆分。跨服务调用每多一跳,成本不是线性的:一次分布式事务涉及 N 个服务时,协调复杂度接近 O(N²),因为要处理的不再是单次调用,而是 N 个服务的部分失败组合。经验法则是:如果两个服务的发布节奏被迫长期对齐,一个发版另一个必须跟着改,它们就是一个逻辑服务,拆开了反而付出双份运维成本。建议引入“发布耦合度”度量:统计过去 90 天内任意两个服务同窗口发布的比例,超过 40% 的服务对,就是重新合并或重划边界的候选。 事务一致性也要按业务代价选方案,而不是一律上分布式事务。能最终一致的,用本地事务加可靠事件、幂等消费和对账任务;必须强一致的,尽量把一致性边界收回单库单服务;确实跨服务且不可异步的,再评估 Saga 或 TCC,同时把补偿超时、悬挂、空回滚和人工处置路径写进 Runbook。回滚协调成本可以拆成四笔账:协调通信、补偿逻辑、数据修复、跨团队排期,最后一项往往最贵。 产品上,边界应该跟着“业务变化频率”走,而不是跟着“领域名词”走。DDD 教我们看限界上下文,但实践中更可靠的信号是:观察过去半年需求变更的落点。如果 80% 的需求都同时改动同一组服务,说明边界没有吸收变化,只是把它摊薄了。端到端前置时间的真正杀手是跨团队排期,不是代码复杂度。拆分的收益要用“需求从提出到上线的日历天数”验证,而不是用服务数量验证。 商业上,给投资人看“独立发布率”比看服务数量诚实得多。服务数量是投入指标,独立发布率是产出指标。一个值得汇报的数字是:Top 20% 高价值需求中,不依赖跨服务协调即可发布的占比。它背后反映的是组织响应市场的真实速度。微服务不是资产,变化隔离能力才是。 一句话:拆分是手段,独立交付是目的。当拆分不再服务于目的时,合并也是一种架构能力。...
展开详请
赞
1
收藏
0
评论
0
分享
独立发布失效的根源,通常不在服务数量,而在边界划错了维度。 技术上,先算清协调成本,再谈拆分。跨服务调用每多一跳,成本不是线性的:一次分布式事务涉及 N 个服务时,协调复杂度接近 O(N²),因为要处理的不再是单次调用,而是 N 个服务的部分失败组合。经验法则是:如果两个服务的发布节奏被迫长期对齐,一个发版另一个必须跟着改,它们就是一个逻辑服务,拆开了反而付出双份运维成本。建议引入“发布耦合度”度量:统计过去 90 天内任意两个服务同窗口发布的比例,超过 40% 的服务对,就是重新合并或重划边界的候选。 事务一致性也要按业务代价选方案,而不是一律上分布式事务。能最终一致的,用本地事务加可靠事件、幂等消费和对账任务;必须强一致的,尽量把一致性边界收回单库单服务;确实跨服务且不可异步的,再评估 Saga 或 TCC,同时把补偿超时、悬挂、空回滚和人工处置路径写进 Runbook。回滚协调成本可以拆成四笔账:协调通信、补偿逻辑、数据修复、跨团队排期,最后一项往往最贵。 产品上,边界应该跟着“业务变化频率”走,而不是跟着“领域名词”走。DDD 教我们看限界上下文,但实践中更可靠的信号是:观察过去半年需求变更的落点。如果 80% 的需求都同时改动同一组服务,说明边界没有吸收变化,只是把它摊薄了。端到端前置时间的真正杀手是跨团队排期,不是代码复杂度。拆分的收益要用“需求从提出到上线的日历天数”验证,而不是用服务数量验证。 商业上,给投资人看“独立发布率”比看服务数量诚实得多。服务数量是投入指标,独立发布率是产出指标。一个值得汇报的数字是:Top 20% 高价值需求中,不依赖跨服务协调即可发布的占比。它背后反映的是组织响应市场的真实速度。微服务不是资产,变化隔离能力才是。 一句话:拆分是手段,独立交付是目的。当拆分不再服务于目的时,合并也是一种架构能力。
分布式事务正常跑得飞快,凌晨出错谁来还债?
5
回答
产品
、
分布式事务
、
服务
、
腾讯云架构师技术同盟
、
深圳同盟
紫风
十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
凌晨出错大概率不是事务本身的问题,而是和跑批撞车:凌晨是定时任务、批处理、对账窗口的高峰,长事务占着锁,另一边的任务拿锁超时直接报错。排查先看两点:出错事务的错误码和锁等待日志,确认是不是死锁或锁超时;再看调度表,确认出错时间和批处理窗口重叠。长期解法是跑批错峰、定时任务加退避重试、锁超时设置合理并打点告警。另外分布式事务能不用尽量不用,TCC 和 Saga 链路一长,凌晨排障成本远高于改成最终一致加对账补偿。谁还债不好说,但监控和预案缺位的团队一定先还。...
展开详请
赞
1
收藏
0
评论
0
分享
凌晨出错大概率不是事务本身的问题,而是和跑批撞车:凌晨是定时任务、批处理、对账窗口的高峰,长事务占着锁,另一边的任务拿锁超时直接报错。排查先看两点:出错事务的错误码和锁等待日志,确认是不是死锁或锁超时;再看调度表,确认出错时间和批处理窗口重叠。长期解法是跑批错峰、定时任务加退避重试、锁超时设置合理并打点告警。另外分布式事务能不用尽量不用,TCC 和 Saga 链路一长,凌晨排障成本远高于改成最终一致加对账补偿。谁还债不好说,但监控和预案缺位的团队一定先还。
TKE 滚动更新时,如何让 CLB 摘流与长请求结束可靠衔接?
3
回答
容器服务
、
服务
、
连接
、
配置
、
网络
紫风
十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
坑基本都在顺序上。正确顺序是先把 readiness 打失败,让 Endpoints 摘掉,等 CLB 健康检查连续失败加上配置下发传播,通常要留 15 到 30 秒,这期间不能停进程。然后再发 SIGTERM,服务里做优雅关闭,拒绝新请求、等 in-flight 跑完。terminationGracePeriodSeconds 一定要大于长请求的 P99,别用默认 30 秒。preStop 里 sleep 是常见做法,但它顶不了摘流传播,只适合兜住 kube-proxy 那点延迟。CLB 侧有慢连接就把连接优雅退出打开。...
展开详请
赞
0
收藏
0
评论
0
分享
坑基本都在顺序上。正确顺序是先把 readiness 打失败,让 Endpoints 摘掉,等 CLB 健康检查连续失败加上配置下发传播,通常要留 15 到 30 秒,这期间不能停进程。然后再发 SIGTERM,服务里做优雅关闭,拒绝新请求、等 in-flight 跑完。terminationGracePeriodSeconds 一定要大于长请求的 P99,别用默认 30 秒。preStop 里 sleep 是常见做法,但它顶不了摘流传播,只适合兜住 kube-proxy 那点延迟。CLB 侧有慢连接就把连接优雅退出打开。
我申请开通 KV 数据存储服务,已经20多天了,一直显示审批中,请帮忙通过审核?
2
回答
服务
、
数据存储
、
边缘安全加速平台EO免费套餐
一只特立独行的兔先生
腾讯云+社区TOP100优秀作者/华为云MVP专家/CSDN博客专家/深信服MVP专家/阿里云MVP专家
已采纳
结论:KV 审批 20 多天没有结果,靠继续等待大概率没用,建议主动走工单或销售渠道催办,同时先确认自己申请的是哪一种 KV、账号是否满足开通条件。 一、先确认申请的是哪种 KV 从标签看是 EdgeOne(边缘安全加速平台 EO)相关的 KV 存储,这里有两条产品线,开通条件不同: - EdgeOne 边缘函数 KV 存储:目前为内测阶段,面向企业版套餐用户开放,需要提交申请,由后台人工审核。 - EdgeOne Pages 的 KV 存储:在 Pages 控制台顶部导航进入 KV Storage,点击立即申请,填写申请理由,说明实际业务场景和用途,再提交审核。 二、审批久未通过的常见原因 1. 套餐不满足:边缘函数 KV 面向企业版用户,如果站点只是免费版或个人版套餐,申请可能一直停留在审批中。 2. 申请理由过于简单:只写“想用 KV”之类的一句话,审核人员无法判断场景,建议写清楚业务类型、预计读写量、数据规模和用途。 3. 账号层面:未完成实名认证、账号欠费或存在风控标记,也会影响内测功能的开通。 三、建议的处理步骤 1. 在控制台确认账号已完成实名认证,且没有欠费。 2. 确认当前站点所在套餐,需要企业版的话先评估是否升级。 3. 补充申请信息:重新阅读申请表单,把使用场景、预期 QPS、数据量、是否面向生产环境写具体。 4. 提交工单:控制台右上角进入工单,产品选择边缘安全加速平台 EO,问题描述里附上申请时间、账号 ID、站点或项目名称,并说明已审批超过 20 天。 5. 如果有对接的客户经理或销售,直接联系对方加急,内测功能通常由产品侧人工放量。 四、等待期间的替代方案 - 数据量小、读多写少的场景,可以先把配置写成边缘函数里的常量或打包进代码,由函数直接读取。 - 需要持久化存储的业务,可以先使用云数据库 Redis 或 COS,通过边缘函数回源访问,等 KV 开通后再迁移。 注意:KV 是最终一致模型,边缘节点缓存最长约 60 秒,写入后立刻读取可能读到旧值,规划业务时要考虑这一点。开通条件和名额以控制台及官方公告为准。...
展开详请
赞
1
收藏
0
评论
1
分享
结论:KV 审批 20 多天没有结果,靠继续等待大概率没用,建议主动走工单或销售渠道催办,同时先确认自己申请的是哪一种 KV、账号是否满足开通条件。 一、先确认申请的是哪种 KV 从标签看是 EdgeOne(边缘安全加速平台 EO)相关的 KV 存储,这里有两条产品线,开通条件不同: - EdgeOne 边缘函数 KV 存储:目前为内测阶段,面向企业版套餐用户开放,需要提交申请,由后台人工审核。 - EdgeOne Pages 的 KV 存储:在 Pages 控制台顶部导航进入 KV Storage,点击立即申请,填写申请理由,说明实际业务场景和用途,再提交审核。 二、审批久未通过的常见原因 1. 套餐不满足:边缘函数 KV 面向企业版用户,如果站点只是免费版或个人版套餐,申请可能一直停留在审批中。 2. 申请理由过于简单:只写“想用 KV”之类的一句话,审核人员无法判断场景,建议写清楚业务类型、预计读写量、数据规模和用途。 3. 账号层面:未完成实名认证、账号欠费或存在风控标记,也会影响内测功能的开通。 三、建议的处理步骤 1. 在控制台确认账号已完成实名认证,且没有欠费。 2. 确认当前站点所在套餐,需要企业版的话先评估是否升级。 3. 补充申请信息:重新阅读申请表单,把使用场景、预期 QPS、数据量、是否面向生产环境写具体。 4. 提交工单:控制台右上角进入工单,产品选择边缘安全加速平台 EO,问题描述里附上申请时间、账号 ID、站点或项目名称,并说明已审批超过 20 天。 5. 如果有对接的客户经理或销售,直接联系对方加急,内测功能通常由产品侧人工放量。 四、等待期间的替代方案 - 数据量小、读多写少的场景,可以先把配置写成边缘函数里的常量或打包进代码,由函数直接读取。 - 需要持久化存储的业务,可以先使用云数据库 Redis 或 COS,通过边缘函数回源访问,等 KV 开通后再迁移。 注意:KV 是最终一致模型,边缘节点缓存最长约 60 秒,写入后立刻读取可能读到旧值,规划业务时要考虑这一点。开通条件和名额以控制台及官方公告为准。
边缘安全加速平台E,KV储存申请审核?
1
回答
安全
、
服务
、
数据存储
、
EdgeOne
、
边缘安全加速平台EO免费套餐
用户10991945
兄弟,消消气。这“审核中”真不是针对你个人,是腾讯云那边的自动化风控+人工复核流程卡住了。 EdgeOne Makers 属于边缘计算资源,涉及数据合规和反垃圾策略,审核确实比开通普通 CDN 慢。通常情况如下: 正常时效:一般 1-3 个工作日。如果是周末或节假日,顺延到下一个工作日。 为什么慢: 实名校验:系统会比对你的账号实名信息与申请主体是否一致。 业务场景审查:如果你的域名近期有异常访问记录(如被黑产利用过、含敏感词),会触发人工介入,时间拉长到 5-7 天。 配额限制:部分新账号可能因历史欠费或违规记录被临时冻结申请权限。 你能做的: 别反复提交:重复提交只会重置排队顺序。 检查邮箱/短信:看是否有补交材料的通知(比如要求提供网站备案截图)。 催单技巧:去腾讯云控制台提工单,选【EdgeOne】->【产品咨询】,标题写“急!KV 服务审核超时”,附上订单号。人工客服有时候能帮你查具体卡在哪个环节。 如果超过 5 个工作日 还没动静,大概率是被风控拦截了,这时候只能靠客服协调解封或重新认证主体。耐心点,这玩意儿急不来。 官方详细解决方案:https://cloud.tencent.com/document/product/1552...
展开详请
赞
0
收藏
0
评论
0
分享
兄弟,消消气。这“审核中”真不是针对你个人,是腾讯云那边的自动化风控+人工复核流程卡住了。 EdgeOne Makers 属于边缘计算资源,涉及数据合规和反垃圾策略,审核确实比开通普通 CDN 慢。通常情况如下: 正常时效:一般 1-3 个工作日。如果是周末或节假日,顺延到下一个工作日。 为什么慢: 实名校验:系统会比对你的账号实名信息与申请主体是否一致。 业务场景审查:如果你的域名近期有异常访问记录(如被黑产利用过、含敏感词),会触发人工介入,时间拉长到 5-7 天。 配额限制:部分新账号可能因历史欠费或违规记录被临时冻结申请权限。 你能做的: 别反复提交:重复提交只会重置排队顺序。 检查邮箱/短信:看是否有补交材料的通知(比如要求提供网站备案截图)。 催单技巧:去腾讯云控制台提工单,选【EdgeOne】->【产品咨询】,标题写“急!KV 服务审核超时”,附上订单号。人工客服有时候能帮你查具体卡在哪个环节。 如果超过 5 个工作日 还没动静,大概率是被风控拦截了,这时候只能靠客服协调解封或重新认证主体。耐心点,这玩意儿急不来。 官方详细解决方案:https://cloud.tencent.com/document/product/1552
大模型退款链路,五道防线够用吗?
3
回答
服务
、
监控
、
模型
、
腾讯云架构师技术同盟
、
深圳同盟
紫风
十五年服务端架构专家,用高可用承载亿级流量,用高性能支撑毫秒级响应。为业务增长提供坚实的技术底座。
防线数量不重要,关键是每层职责清晰且互相独立。退款链路的核心风险是重复退款和超额退款,五道防线合理的切法:入口幂等(请求去重键)、额度校验(余额与订单可退金额)、规则引擎(风控拦截异常模式)、人工审批(大额或异常单)、事后对账(T+1 与支付渠道核对)。防线之间必须独立生效,不能共享同一条判断逻辑,否则一错全错。最容易被穿透的是对账层做成了事后报警而不是自动冻结,发现异常应该先停额度再人工介入。内部员工触发的退款属于高风险场景,建议再加操作留痕和双人复核,这比堆第八道防线有用。...
展开详请
赞
1
收藏
0
评论
0
分享
防线数量不重要,关键是每层职责清晰且互相独立。退款链路的核心风险是重复退款和超额退款,五道防线合理的切法:入口幂等(请求去重键)、额度校验(余额与订单可退金额)、规则引擎(风控拦截异常模式)、人工审批(大额或异常单)、事后对账(T+1 与支付渠道核对)。防线之间必须独立生效,不能共享同一条判断逻辑,否则一错全错。最容易被穿透的是对账层做成了事后报警而不是自动冻结,发现异常应该先停额度再人工介入。内部员工触发的退款属于高风险场景,建议再加操作留痕和双人复核,这比堆第八道防线有用。
云托管欠费补齐后服务消失,如何恢复?
1
回答
短信
、
小程序
、
部署
、
服务
、
云托管
PikeTalk
如果控制台上服务与数据都已不可见,尽快提交工单确认恢复窗口——销毁后的数据恢复有时效性,越快越好。
赞
0
收藏
0
评论
0
分享
如果控制台上服务与数据都已不可见,尽快提交工单确认恢复窗口——销毁后的数据恢复有时效性,越快越好。
并发写缓存该先删还是先写库?
5
回答
服务
、
后端
、
模型
、
腾讯云架构师技术同盟
、
深圳同盟
用户7561536
先给结论:**先写库,再删缓存**(Cache Aside 的标准写法)。这是并发场景下不一致窗口最小的顺序。 下面把两种顺序的并发安全性拆开讲。 ## 两种顺序的并发赛跑 **方案 A:先删缓存,再写库 —— 必现不一致窗口** ``` 写线程A: 删缓存 ──────── (慢)写DB(new) 读线程B: 缓存未命中→读DB(old)→写回缓存(old) 结果: 缓存=old, DB=new ❌ 持续不一致, 直到过期 ``` A 删完缓存、DB 还没写完这段时间里,任何读都会把**旧值**重新塞回缓存,之后 A 写完新值也救不回来。 **方案 B:先写库,再删缓存 —— 仅极小概率窗口** ``` 读线程B: 缓存未命中→读DB(old)→(慢)准备写回缓存(old) 写线程A: 写DB(new) → 删缓存 读线程B: 写回缓存(old) ← 恰好卡在删之后 结果: 缓存=old, DB=new ❌ 但窗口极窄, 近乎不可能 ``` B 必须「读 DB 在 A 写之前 + 写缓存在 A 删之后」跨两步完成,而读 DB 通常比「写 DB+删缓存」快,所以这条竞态链几乎凑不齐。即便凑齐,也只是短暂不一致,下次读即恢复。 ## 对比表 | 维度 | 先删缓存再写库 | 先写库再删缓存 | |---|---|---| | 不一致是否必现 | 是(并发读写必然触发) | 否(极小概率) | | 不一致持续时间 | 直到缓存 TTL 过期 | 瞬时,下次读自愈 | | 删缓存失败影响 | 读全走 DB,但会重新写回旧值 | 仅短暂脏读,TTL 兜底可恢复 | | 业界推荐度 | ✗ | ✓ | ## 工程化兜底(生产必加) 即便选方案 B,要彻底稳还得加一层: 1. **延迟双删**:写完库删一次缓存,休眠几百 ms 再删一次,兜住 B 那条极小竞态链。 ```java db.update(x); redis.del(key); // 延迟双删 scheduledExecutor.schedule(() -> redis.del(key), 500, TimeUnit.MILLISECONDS); ``` 2. **binlog 订阅(Canal)异步删**:写库后发 MQ / 监听 binlog,由独立消费者删缓存,保证「最终一定删」,彻底解耦。强一致要求的场景首选。 3. **缓存必须设 TTL**:任何删除失败、竞态残留都能靠过期兜底,是最后一道保险。 > 补充:有人会问「能不能写库后直接更新缓存(set new)而不是删?」可以,但更新缓存等于把「计算新值」的责任前移,且并发写时谁后写谁赢,仍可能脏;**删缓存比更新缓存更不容易出错**,所以 Cache Aside 一律推荐「删」而非「写」。 一句话:**写路径 = 先 DB 后删缓存 + TTL 兜底;高一致要求再上延迟双删或 Canal 订阅 binlog。**...
展开详请
赞
2
收藏
0
评论
0
分享
先给结论:**先写库,再删缓存**(Cache Aside 的标准写法)。这是并发场景下不一致窗口最小的顺序。 下面把两种顺序的并发安全性拆开讲。 ## 两种顺序的并发赛跑 **方案 A:先删缓存,再写库 —— 必现不一致窗口** ``` 写线程A: 删缓存 ──────── (慢)写DB(new) 读线程B: 缓存未命中→读DB(old)→写回缓存(old) 结果: 缓存=old, DB=new ❌ 持续不一致, 直到过期 ``` A 删完缓存、DB 还没写完这段时间里,任何读都会把**旧值**重新塞回缓存,之后 A 写完新值也救不回来。 **方案 B:先写库,再删缓存 —— 仅极小概率窗口** ``` 读线程B: 缓存未命中→读DB(old)→(慢)准备写回缓存(old) 写线程A: 写DB(new) → 删缓存 读线程B: 写回缓存(old) ← 恰好卡在删之后 结果: 缓存=old, DB=new ❌ 但窗口极窄, 近乎不可能 ``` B 必须「读 DB 在 A 写之前 + 写缓存在 A 删之后」跨两步完成,而读 DB 通常比「写 DB+删缓存」快,所以这条竞态链几乎凑不齐。即便凑齐,也只是短暂不一致,下次读即恢复。 ## 对比表 | 维度 | 先删缓存再写库 | 先写库再删缓存 | |---|---|---| | 不一致是否必现 | 是(并发读写必然触发) | 否(极小概率) | | 不一致持续时间 | 直到缓存 TTL 过期 | 瞬时,下次读自愈 | | 删缓存失败影响 | 读全走 DB,但会重新写回旧值 | 仅短暂脏读,TTL 兜底可恢复 | | 业界推荐度 | ✗ | ✓ | ## 工程化兜底(生产必加) 即便选方案 B,要彻底稳还得加一层: 1. **延迟双删**:写完库删一次缓存,休眠几百 ms 再删一次,兜住 B 那条极小竞态链。 ```java db.update(x); redis.del(key); // 延迟双删 scheduledExecutor.schedule(() -> redis.del(key), 500, TimeUnit.MILLISECONDS); ``` 2. **binlog 订阅(Canal)异步删**:写库后发 MQ / 监听 binlog,由独立消费者删缓存,保证「最终一定删」,彻底解耦。强一致要求的场景首选。 3. **缓存必须设 TTL**:任何删除失败、竞态残留都能靠过期兜底,是最后一道保险。 > 补充:有人会问「能不能写库后直接更新缓存(set new)而不是删?」可以,但更新缓存等于把「计算新值」的责任前移,且并发写时谁后写谁赢,仍可能脏;**删缓存比更新缓存更不容易出错**,所以 Cache Aside 一律推荐「删」而非「写」。 一句话:**写路径 = 先 DB 后删缓存 + TTL 兜底;高一致要求再上延迟双删或 Canal 订阅 binlog。**
热门
专栏
腾讯云中间件的专栏
326 文章
133 订阅
腾讯云 DNSPod 团队
777 文章
55 订阅
WeTest质量开放平台团队的专栏
735 文章
124 订阅
腾讯开源的专栏
511 文章
120 订阅
领券