标签频道
SRE
该标签下的文章、提问与讨论帖。
discussion
双链路冗余到底值不值:第二链路是「救命保险」还是「长期养着的成本中心」?
背景 做了 8 年网络工程,最近一年反复遇到同一个争论:核心出口要不要上双 ISP / 双机房 / 双上联。很多团队的答案是"要",理由很朴素——单链路就是单点,SRE 教科书里写得很明白。但真正落地时大家会撞上一组很现实的账:第二链路的带
«结论先行:JDK 在容器里会「看见」宿主机的核数并据此派生 GC 并行线程数,但 Linux cgroup 只限制 CPU 用量、不限制 线程数——两者组合起来,会造出一个反直觉的故障模式:你给容器配的 CPU limit 越小,JDK
背景 公司 K8s 1.28 节点从 cgroup v1 升到 cgroup v2,cAdvisor 0.49 + Prometheus 2.50 + kube-state-metrics 2.10。升级完一周后,业务侧 Pod(Java
discussion
第三方供应商故障导致我方 P1,SLA 该不该全背?聊聊 SRE 责任边界最模糊的一角
背景 做了 5 年 SRE,复盘会上最尴尬、也最容易吵翻的一类事故,不是代码 bug,而是「供应商锅」:对象存储 5xx 风暴、短信通道全量失败、第三方风控 API 超时、甚至 DNS/CDN 厂商区域性抖动。这类故障的共同点是——根因不在
一、现象:一次常规发布,2 个 Pod 卡 Terminating 90 秒,用户侧 3 个请求 502 上周三下午 15:40,我们给一个 Go 服务(Kubernetes 1.28.9,containerd 1.6.24,Deploym
discussion
线上操作到底该「手动敲命令」还是「写成自动化」?聊聊我们反复纠结的边界
先交代坐标:3 年运维,团队 12 个微服务,跑在 3 节点自建 K8s 1.28。今天想抛一个我每次都要跟研发吵、且吵不出标准答案的问题:一条线上操作,到底该让我手动敲命令,还是该写成脚本 / 平台按钮? 【背景 · 一个真实撕裂】 上个
«结论先行:MySQL 里最「安静」的杀手不是行锁,而是 MDL(Metadata Lock,元数据锁)——它不抢数据、不抢 CPU,但能让一张表的所有 DML 集体排队,连接池在 10 分钟内被打满,且 "SHOW PROCESSLIST
一、现象:批量下线 4 个命名空间,600 多个 PVC 集体僵死 先交代规模和现场。Kubernetes 1.28.9(containerd 1.7.4,120 台 worker,8C16G),业务侧用我们自研的存储 operator "
背景\n\n我们一个 Java 服务(JDK17,Spring Boot,启动要预热,正常冷启动大约 45–60s),跑在 K8s 1.28 上,4 副本,maxUnavailable=0、maxSurge=1,走滚动发布。发布走 CI 直
discussion
/health 端点该查多深?浅探活还是深探活,你们怎么划这条线
背景 做了 10 年嵌入式,早期写 MCU 固件时"健康"这件事是被看门狗强制定义的:主循环喂狗成功 = 活着,喂不上 = 复位。边界极其干净——只看"进程/主循环还在不在跑",不替它检查外设寄存器、DMA、总线有没有挂。 搬到容器化之后,
discussion
on-call 是不是「隐形的加班费」?聊聊值班的成本该不该被显性化定价
背景 做了 10 年 SRE,跨了 4 家公司,从 5 人的运维小组到 200+ 人的平台团队都待过。有一件事我每次接手新团队都会被问:"你们 on-call 怎么算钱?" 答案几乎都一样——不算。值班是「义务」,是「锻炼」,是「轮到的时候
背景 我维护一个 14 节点(16C64G,Kubernetes 1.28.9,containerd 1.7.13,cgroup v2,内核 5.15,100GB 系统盘,Calico 路由模式)的生产集群,跑 Java 17 + Go 的
背景 我在一个 12 节点(16C64G,K8s 1.28.9,containerd 1.7.13,cgroup v2,内核 5.15,Calico 路由模式)的生产集群里混跑 Java 17 微服务和一个 Flink 作业。节点上 kub
«结论先行:Linux 默认开启的透明大页(THP, Transparent Huge Pages)是 JVM 长尾停顿最"安静"的凶手之一。它本意是帮内存、却和 JVM 的页分配方式正面冲突,让 GC 停顿从"稳定的 30ms"变成"偶尔
discussion
双机房多活是大多数团队的过度设计吗——延迟预算、专线成本与故障恢复这笔账怎么算
背景 做了 5 年网络工程,最近一年反复遇到同一个争论:核心服务到底要不要上双机房/多活。我见过两种极端——一边是「核心链路必须两地三中心,否则一次机房断网就全崩」,一边是「就一个机房加个快照备份,省下的钱够发三个月工资」。两边的声音都有道
«结论先行:systemd 的 "CPUQuota" 不是「CPU 占用上限」,而是**「每 100ms 墙钟内最多给你多少 ms 的 CPU 时间」**。把 "CPUQuota=100%" 加给一个瞬时峰值要 2 个核的 Go 服务,平均
结论先行 K8s 里有一类事故,"kubectl rollout status" 一路绿灯、"kubectl get pods" 全 "Running"、监控指标也正常,但同一份 Deployment 在不同节点上跑的根本不是同一个二进制。
【背景】 我做了 5 年 SRE,主责一条 Java 微服务链路(JDK 17 + Spring Boot 3,跑在 K8s 1.28,Pod limit 内存 2Gi,JVM 配了 -Xmx1400m -XX:MaxMetaspaceSi
discussion
故障演练到底是"验证假设的实验室"还是"证明稳定的考试"?聊聊怎么做才不沦为走过场
先交代下背景,免得大家各说各话。 我在一个 20 人左右的后端团队做 SRE,服务跑在自建 K8s 1.28 上,核心链路是「网关 → 订单 → 库存 → 支付」。去年 Q4 开始,我们引入了故障演练:用 ChaosMesh 在 stagi
«结论先行:在 K8s 1.28 及以下的 Pod 里,容器在 spec 中的顺序不是装饰,而是运行时契约。第一个容器一旦 CrashLoopBackOff,kubelet 会按「Pod 重启」语义把其余容器一并 SIGTERM,主业务容器