@umacloud/knowledge 1.0.15 → 1.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/00-governance/governance-capabilities.md +1 -1
- package/00-governance/knowledge-map.md +4 -6
- package/agentic-delivery/01-standards/context-engineering-for-delivery.md +94 -0
- package/agentic-delivery/01-standards/eval-driven-delivery.md +90 -0
- package/agentic-delivery/01-standards/generated-code-failure-modes.md +91 -0
- package/agentic-delivery/01-standards/production-readiness-scorecard.md +79 -0
- package/agentic-delivery/01-standards/self-improving-memory-and-regression-sets.md +80 -0
- package/agentic-delivery/01-standards/spec-as-contract.md +88 -0
- package/agentic-delivery/01-standards/test-discipline-for-generated-code.md +94 -0
- package/agentic-delivery/01-standards/test-integrity-and-anti-gaming.md +92 -0
- package/agentic-delivery/01-standards/verifier-critic-pattern.md +89 -0
- package/ai/01-standards/app-runtime-model-configurable.md +76 -0
- package/ai/agent-evaluation-benchmark.md +4 -6
- package/ai/ai-agent-memory-context-management.md +4 -6
- package/ai/ai-cost-capacity-optimization-playbook.md +4 -6
- package/ai/ai-data-security-and-compliance-playbook.md +4 -6
- package/ai/ai-domain-index-and-checklist.md +4 -6
- package/ai/ai-governance-maturity-model.md +4 -6
- package/ai/ai-model-selection-and-routing-strategy.md +4 -6
- package/ai/ai-observability-and-oncall-runbook.md +4 -6
- package/ai/ai-rag-engineering-playbook.md +4 -6
- package/ai/ai-red-team-and-safety-evaluation.md +4 -6
- package/ai/ai-release-readiness-and-rollback-gate.md +4 -6
- package/ai/llm-agent-engineering-deep-dive.md +4 -6
- package/ai/prompt-and-tool-guardrails.md +4 -6
- package/api/01-standards/api-versioning-and-deprecation-policy.md +100 -0
- package/architecture/01-standards/configuration-and-environment-management.md +104 -0
- package/architecture/01-standards/domain-driven-design-complete.md +105 -0
- package/architecture/02-playbooks/migration-playbook.md +1 -5
- package/architecture/02-playbooks/system-design-playbook.md +1 -5
- package/architecture/adr-template-and-examples.md +4 -6
- package/architecture/api-gateway-deep-dive.md +1 -1
- package/architecture/configuration-management.md +95 -1158
- package/architecture/distributed-transactions.md +1 -1
- package/architecture/microservices-complete.md +1 -1
- package/architecture/resilience-and-disaster-patterns.md +87 -27
- package/architecture/service-governance.md +1 -1
- package/architecture/system-architecture-deep-dive.md +4 -6
- package/backend/01-standards/cjk-in-exports-and-documents.md +107 -0
- package/backend/01-standards/dependency-and-supply-chain-hygiene.md +90 -0
- package/backend/01-standards/django-complete.md +2 -2
- package/backend/01-standards/error-handling-taxonomy.md +88 -0
- package/backend/01-standards/idempotency-and-safe-retries.md +101 -0
- package/backend/01-standards/message-queue-patterns.md +96 -374
- package/backend/01-standards/nestjs-complete.md +23 -23
- package/backend/01-standards/queue-and-consumer-reliability.md +98 -0
- package/backend/01-standards/resilience-and-fault-tolerance.md +101 -0
- package/backend/01-standards/transactions-and-concurrency-control.md +92 -0
- package/cicd/cicd-blueprint-deep-dive.md +4 -6
- package/cicd/release-readiness-gate.md +78 -27
- package/cloud-native/01-standards/container-security.md +1 -5
- package/cloud-native/01-standards/kubernetes-complete.md +1 -5
- package/cloud-native/02-playbooks/gitops-with-argocd.md +1 -5
- package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +3 -7
- package/cloud-native/02-playbooks/multicloud-governance.md +1 -5
- package/cloud-native/02-playbooks/serverless-patterns.md +1 -5
- package/cloud-native/02-playbooks/service-mesh-playbook.md +1 -5
- package/cloud-native/03-checklists/container-security-checklist.md +1 -5
- package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +1 -5
- package/cloud-native/04-antipatterns/container-antipatterns.md +1 -5
- package/cloud-native/04-antipatterns/k8s-antipatterns.md +1 -5
- package/cloud-native/05-cases/case-k8s-migration.md +1 -5
- package/cloud-native/05-cases/case-k8s-scaling.md +1 -5
- package/cloud-native/05-cases/case-k8s-security-incident.md +1 -5
- package/cloud-native/06-glossary/cloud-native-glossary.md +1 -5
- package/compliance/01-standards/audit-logging-and-evidence.md +111 -0
- package/compliance/01-standards/privacy-and-compliance-readiness.md +119 -0
- package/data/01-standards/elasticsearch-complete.md +2 -2
- package/data/01-standards/postgresql-complete.md +8 -8
- package/data/01-standards/redis-complete.md +11 -11
- package/data/data-governance-and-modeling-deep-dive.md +4 -6
- package/data-engineering/01-standards/kafka-complete.md +22 -22
- package/design/ui-full-lifecycle-cross-platform-playbook.md +1 -1
- package/design/ux-system-deep-dive.md +4 -6
- package/design-systems/00-craft-rules.md +1 -1
- package/design-systems/bold-geometric.md +1 -1
- package/design-systems/brutalist-bold.md +1 -1
- package/design-systems/editorial-clean.md +1 -1
- package/design-systems/glass-aurora.md +1 -1
- package/design-systems/modern-minimal.md +1 -1
- package/design-systems/premium-luxury.md +1 -1
- package/design-systems/soft-warm.md +1 -1
- package/design-systems/tech-utility.md +1 -1
- package/development/00-governance/document-template.md +3 -3
- package/development/01-standards/code-review-and-pr-hygiene.md +85 -0
- package/development/01-standards/golang-complete.md +2 -2
- package/development/01-standards/python-design-patterns.md +2 -2
- package/development/01-standards/typescript-advanced-types.md +2 -2
- package/development/03-checklists/production-readiness-checklist.md +6 -6
- package/development/09-maturity/quarterly-audit-template.md +3 -5
- package/development/11-ui-excellence/ui-aesthetic-system.md +3 -5
- package/development/13-implementation-assets/knowledge-gates-execution.md +3 -5
- package/development/api-contract-and-versioning-guide.md +4 -6
- package/development/api-governance-complete.md +4 -6
- package/development/backend-engineering-complete.md +4 -6
- package/development/code-review-quality-complete.md +11 -34
- package/development/concurrency-reliability-complete.md +4 -6
- package/development/database-engineering-complete.md +4 -6
- package/development/engineering-effectiveness-complete.md +4 -6
- package/development/engineering-standards-deep-dive.md +4 -6
- package/development/frontend-engineering-complete.md +4 -6
- package/development/performance-capacity-complete.md +4 -6
- package/development/refactor-migration-complete.md +4 -6
- package/development/refactoring-and-techdebt-playbook.md +4 -6
- package/development/security-in-development-complete.md +4 -6
- package/devops/01-standards/docker-complete.md +2 -2
- package/devops/01-standards/terraform-complete.md +3 -3
- package/experts/architect/contract-first-api-design.md +140 -0
- package/experts/product-manager/prd-template-and-structure.md +144 -0
- package/experts/product-manager/requirements-engineering-ears.md +133 -0
- package/experts/qa-lead/test-plan-template.md +127 -0
- package/frontend/01-standards/accessibility-acceptance-gate.md +91 -0
- package/frontend/01-standards/accessibility-complete.md +3 -3
- package/frontend/01-standards/i18n-and-localization.md +1 -1
- package/frontend/01-standards/react-hooks-complete.md +33 -33
- package/frontend/01-standards/ui-states-and-resilient-data-fetching.md +97 -0
- package/frontend/01-standards/vue3-complete.md +2 -2
- package/high-quality-engineering-playbook.md +4 -6
- package/incident/02-playbooks/chaos-engineering-playbook.md +1 -5
- package/incident/postmortem-and-response-deep-dive.md +4 -6
- package/mobile/01-standards/flutter-complete.md +3 -8
- package/mobile/01-standards/react-native-complete.md +3 -8
- package/mobile/02-playbooks/mobile-performance.md +3 -9
- package/mobile/03-checklists/mobile-release-checklist.md +3 -5
- package/mobile/04-antipatterns/mobile-antipatterns.md +3 -5
- package/observability/01-standards/observability-and-slo-operations.md +88 -0
- package/observability/01-standards/observability-standards.md +2 -0
- package/operations/01-standards/cost-and-finops-engineering.md +84 -0
- package/operations/01-standards/production-readiness-review.md +103 -0
- package/operations/01-standards/prometheus-monitoring-complete.md +2 -2
- package/operations/aiops-anomaly-detection.md +4 -8
- package/operations/capacity-planning.md +4 -8
- package/operations/chaos-engineering.md +4 -8
- package/operations/incident-command-system.md +4 -6
- package/operations/observability-complete.md +4 -8
- package/operations/slo-sli-playbook.md +4 -8
- package/operations/sre-operations-deep-dive.md +4 -6
- package/package.json +1 -1
- package/performance/01-standards/performance-budgets-and-load-testing.md +91 -0
- package/product/feature-prioritization-framework.md +97 -35
- package/product/kpi-and-metric-tree.md +69 -26
- package/product/product-discovery-and-prd-deep-dive.md +4 -6
- package/release-engineering/01-standards/feature-flag-lifecycle.md +92 -0
- package/release-engineering/01-standards/progressive-delivery-and-release.md +92 -0
- package/release-engineering/02-playbooks/release-rollback-and-recovery-playbook.md +99 -0
- package/release-engineering/03-checklists/release-rollback-readiness-checklist.md +61 -0
- package/release-engineering/04-antipatterns/release-antipatterns.md +63 -0
- package/security/01-standards/authorization-and-access-control.md +94 -0
- package/security/01-standards/owasp-top10-complete.md +2 -2
- package/security/02-playbooks/incident-response-security-playbook.md +1 -5
- package/security/02-playbooks/penetration-testing-playbook.md +1 -5
- package/security/compliance-automation.md +1 -1
- package/security/container-security.md +1 -1
- package/security/devsecops-complete.md +1 -1
- package/security/sast-dast-sca.md +1 -1
- package/security/secrets-management.md +1 -1
- package/security/security-architecture-deep-dive.md +4 -6
- package/security/threat-modeling-stride-playbook.md +4 -6
- package/seed-templates/auth-system.md +1 -1
- package/seed-templates/blog-content.md +1 -1
- package/seed-templates/dashboard.md +1 -1
- package/seed-templates/docs-site.md +1 -1
- package/seed-templates/e-commerce.md +1 -1
- package/seed-templates/saas-landing.md +1 -1
- package/seed-templates/settings-page.md +1 -1
- package/testing/01-standards/ci-test-gates-and-coverage.md +93 -0
- package/testing/01-standards/contract-testing-and-api-contracts.md +102 -0
- package/testing/01-standards/test-data-and-ephemeral-environments.md +105 -0
- package/testing/02-playbooks/e2e-testing-playbook.md +1 -5
- package/testing/risk-based-test-matrix.md +75 -25
- package/testing/testing-strategy-deep-dive.md +4 -6
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: queue-and-consumer-reliability
|
|
3
|
+
title: 队列与消费者可靠性规范(投递语义/幂等有效一次/顺序/可见性超时/毒消息,商业级必读)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: advanced
|
|
7
|
+
tags: [queue, consumer, reliability, idempotent-consumer, effectively-once, at-least-once, dead-letter-queue, poison-message, visibility-timeout, redelivery, ordering, backpressure, consumer-lag, outbox, inbox, 队列, 消费者, 幂等, 有效一次, 死信, 毒消息, 可见性超时, 顺序, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-29
|
|
10
|
+
---
|
|
11
|
+
# 队列与消费者可靠性规范(商业级必读)
|
|
12
|
+
|
|
13
|
+
> 异步队列把"耗时/可削峰"的工作从请求路径里挪走,但也引入一组分布式难题:消息会**重复投递**、会**乱序**、会**卡住**、会**毒死消费者**。把这些当"偶发"忽略,结果就是重复扣款、订单错乱、队列雪崩、一条坏消息阻塞整条队列。
|
|
14
|
+
> 这份规范讲的不是选哪个队列产品(选型与各产品用法见 `backend/01-standards/message-queue-patterns`),也不只是"任务该不该异步"(任务编排见 `backend/01-standards/background-jobs-and-async`),而是**消费侧怎么写才可靠**:投递语义、幂等与有效一次、顺序、可见性超时与重投、毒消息与死信、背压与堆积。
|
|
15
|
+
|
|
16
|
+
## 1. 先认清投递语义(一切的前提)
|
|
17
|
+
|
|
18
|
+
| 语义 | 含义 | 现实可得性 |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| 至多一次 at-most-once | 不重复,但可能丢 | 简单,但丢消息通常不可接受 |
|
|
21
|
+
| 至少一次 at-least-once | 不丢,但可能重复 | **主流默认**——必须假设会重复 |
|
|
22
|
+
| 恰好一次 exactly-once | 不丢不重 | 端到端几乎不存在;分布式下是营销词 |
|
|
23
|
+
|
|
24
|
+
**结论:按"至少一次 + 可能乱序 + 可能重投"来设计。** 真正能做到的不是传输层的"恰好一次",而是**业务上的"有效一次"(effectively-once)**——传输可以重复投递,但靠**消费幂等**保证副作用只发生一次。任何依赖"队列保证不重复"的设计都是错的。
|
|
25
|
+
|
|
26
|
+
## 2. 幂等消费与有效一次(核心中的核心)
|
|
27
|
+
|
|
28
|
+
同一条消息可能被投递 2 次、5 次(重投、重平衡、消费者崩溃后重启都会导致)。涉钱/发货/发邮件/外部副作用的消费**必须幂等**:
|
|
29
|
+
|
|
30
|
+
- **去重键**:用稳定的业务键或消息 ID 作为去重依据(生产者要保证同一逻辑事件用同一 ID)。
|
|
31
|
+
- **去重落地**:处理前检查"这个 ID 处理过吗",处理后记录;去重表/标记要和业务副作用在**同一事务**里提交,否则"业务做了但没记上去重"仍会重复。
|
|
32
|
+
- **首选天然幂等写**:`UPSERT`、`SET 状态=已支付`、条件更新(`WHERE 状态=待支付`)这类操作天然幂等,优于"先查再插"的竞态写法。
|
|
33
|
+
- **去重窗口**:去重记录保留足够覆盖最大可能重投间隔(含 DLQ 重放),并有清理策略防无限增长。
|
|
34
|
+
- **副作用收口**:把外部副作用(扣款/发消息)做成可幂等或带幂等键调用(见 `backend/01-standards/idempotency-and-safe-retries`)。
|
|
35
|
+
|
|
36
|
+
## 3. 可见性超时与重投机制
|
|
37
|
+
|
|
38
|
+
至少一次队列普遍用"取出即隐藏一段时间(可见性超时 / ack 截止),处理完确认(ack),否则到期重新可见被别人取"的机制。用错会**自伤**:
|
|
39
|
+
|
|
40
|
+
- **处理完才确认**:先处理成功、再 ack/提交位点;**绝不**取出就自动确认(自动提交 = 崩溃即丢消息)。
|
|
41
|
+
- **可见性超时 > 处理耗时**:超时必须覆盖正常处理时间 + 余量。设太短 → 还没处理完消息就被重新投递给另一个消费者,造成**并发重复处理**;设太长 → 真崩溃了消息长时间不重投,延迟恢复。
|
|
42
|
+
- **长任务续租**:处理时间不确定的任务要在处理中**续租/心跳延长**可见性,而不是一开始设一个超大超时。
|
|
43
|
+
- **确认要可靠**:ack/提交本身失败要能感知;位点提交粒度与"处理成功"对齐,避免提交了未处理或处理了未提交。
|
|
44
|
+
|
|
45
|
+
## 4. 顺序:只在必要处保证,别全局强序
|
|
46
|
+
|
|
47
|
+
全局严格有序和高吞吐/可扩展天然冲突。
|
|
48
|
+
|
|
49
|
+
- **按需分区有序**:只对**同一实体**(同一订单/同一账户)要求有序——用实体键路由到同一分区/队列,保证**分区内**有序即可,不同实体并行处理。
|
|
50
|
+
- **别假设跨分区有序**:多分区/多消费者天然乱序;业务逻辑不能依赖"先发的先到"。
|
|
51
|
+
- **乱序容忍设计**:用版本号/时间戳/状态机让消费对乱序与重复**收敛到正确终态**(如旧版本更新被丢弃、状态只能单向前进),比强行保序更健壮。
|
|
52
|
+
- **有序与重试的张力**:严格有序队列里,一条卡住的消息会阻塞其后全部——更需要快速隔离毒消息(见 §5)。
|
|
53
|
+
|
|
54
|
+
## 5. 毒消息与死信队列(DLQ)
|
|
55
|
+
|
|
56
|
+
"毒消息"(poison message)= 无论重试多少次都必然失败的消息(数据损坏、不可解析、触发确定性 bug)。不隔离它,它会反复重试**阻塞队列、刷爆日志、耗尽资源**。
|
|
57
|
+
|
|
58
|
+
- **限次重试 + 退避抖动**:瞬时失败重试有限次,指数退避 + 抖动(避免重试风暴);区分**可重试**(网络/限流/5xx)与**不可重试**(解析失败/校验不过/业务拒绝)——不可重试的别浪费重试,直接进 DLQ。
|
|
59
|
+
- **超限进 DLQ**:超过重试上限的消息移入死信队列,**带上下文**(原消息 + 失败原因 + 重试次数 + 时间),不静默丢弃。
|
|
60
|
+
- **DLQ 必须被监控与处置**:DLQ 不是垃圾桶——堆积要告警,要有人看、能诊断、能修复后**重放**。DLQ 无人管 = 消息悄悄全丢。
|
|
61
|
+
- **隔离优先于阻塞**:宁可让一条坏消息进 DLQ,也不要让它卡住整条队列拖垮正常消息。
|
|
62
|
+
|
|
63
|
+
## 6. 背压、堆积与消费者健康
|
|
64
|
+
|
|
65
|
+
- **监控消费滞后(lag)**:盯消费者落后量(待处理积压)。lag 持续增长 = 消费跟不上生产,要么扩消费者、要么限生产、要么优化处理。
|
|
66
|
+
- **有界并发与预取**:消费者设合理预取/并发上限,别一次抓太多撑爆内存或长时间占住不 ack。
|
|
67
|
+
- **背压而非无限缓冲**:下游处理不过来时传递背压(放慢拉取/拒绝),不要把消息全拉进内存无界堆积到 OOM。
|
|
68
|
+
- **慢消费者隔离**:不同类型任务用不同队列/消费者池,一类慢任务别拖垮另一类(呼应 `backend/01-standards/resilience-and-fault-tolerance` 的舱壁)。
|
|
69
|
+
- **优雅停机**:消费者收到停止信号要处理完在途消息(或安全释放回队列)再退出,不硬切。
|
|
70
|
+
|
|
71
|
+
## 7. 生产侧可靠性:别在源头就丢/错
|
|
72
|
+
|
|
73
|
+
- **入队与事务一致(outbox)**:"写库 + 发消息"要么都成要么都不成。用 **outbox 模式**——业务与"待发消息"同事务写库,再由投递器异步发出——避免"事务回滚了消息却发了"或"事务提交了消息没发"。
|
|
74
|
+
- **消费幂等也要 inbox 思路**:接收侧记录已处理消息 ID(inbox),配合 outbox 构成端到端有效一次。
|
|
75
|
+
- **载荷小而稳**:消息传 ID/引用而非大对象;Schema 带版本,演进保持兼容,消费者能容忍新增字段。
|
|
76
|
+
|
|
77
|
+
## 8. 反模式(出现即不合格)
|
|
78
|
+
|
|
79
|
+
1. **假设恰好一次**:依赖队列"不会重复",消费不幂等 → 重复扣款/重复发货。
|
|
80
|
+
2. **取出即自动确认**:auto-ack/自动提交位点,消费者一崩消息就丢。
|
|
81
|
+
3. **可见性超时短于处理**:消息处理中就被重投,并发重复处理。
|
|
82
|
+
4. **毒消息无限重试**:一条坏消息反复失败阻塞队列、刷爆日志、烧资源。
|
|
83
|
+
5. **有 DLQ 没人看**:死信堆积无告警无重放,消息悄悄全丢。
|
|
84
|
+
6. **全局强序**:为顺序牺牲扩展性,一条卡住阻塞全部。
|
|
85
|
+
7. **无界拉取/缓冲**:消费者一次抓太多或无限缓冲,OOM。
|
|
86
|
+
8. **不监控 lag**:消费早已跟不上,积压到爆才发现。
|
|
87
|
+
9. **入队与事务不一致**:无 outbox,消息与数据状态错位。
|
|
88
|
+
|
|
89
|
+
## 9. 最低交付 checklist
|
|
90
|
+
|
|
91
|
+
- [ ] 按"至少一次 + 可能乱序"设计;靠消费幂等实现业务"有效一次"。
|
|
92
|
+
- [ ] 用稳定去重键,去重记录与业务副作用同事务提交;优先天然幂等写。
|
|
93
|
+
- [ ] 处理成功后才 ack/提交位点;可见性超时 > 处理耗时,长任务续租。
|
|
94
|
+
- [ ] 仅对同一实体按分区保证有序,业务对乱序/重复能收敛到正确终态。
|
|
95
|
+
- [ ] 限次重试 + 退避抖动,区分可重试/不可重试;超限进带上下文的 DLQ。
|
|
96
|
+
- [ ] DLQ 有监控告警、可诊断、可重放;坏消息隔离而非阻塞整队。
|
|
97
|
+
- [ ] 监控消费 lag;有界并发/预取 + 背压;慢消费者隔离;消费者优雅停机。
|
|
98
|
+
- [ ] 生产侧用 outbox 保证入队与事务一致;载荷小、Schema 带版本兼容演进。
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: resilience-and-fault-tolerance
|
|
3
|
+
title: 实现级韧性与容错规范(超时/重试预算/熔断/舱壁/背压,商业级必读)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: advanced
|
|
7
|
+
tags: [resilience, timeout, retry-budget, backoff, jitter, circuit-breaker, bulkhead, backpressure, load-shedding, fallback, deadline, 韧性, 容错, 超时, 重试, 熔断, 舱壁, 背压, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-29
|
|
10
|
+
---
|
|
11
|
+
# 实现级韧性与容错规范(商业级必读)
|
|
12
|
+
|
|
13
|
+
> 架构级讲"同城/异地容灾、RPO/RTO"(见 `architecture/resilience-and-disaster-patterns`);本规范讲**代码里每一次外部调用怎么写才不会被拖垮**。
|
|
14
|
+
> 分布式系统里依赖**一定会**变慢、超时、抖动、半死不活。商业级服务把超时、重试预算、熔断、舱壁、背压写进每一次出站调用,让一个依赖的故障**不会**级联拖垮整个服务。默认值(无超时、无脑重试、共享线程池)正是雪崩的配方。
|
|
15
|
+
|
|
16
|
+
## 1. 核心原则
|
|
17
|
+
|
|
18
|
+
- **每一次出站调用都有超时**:没有无限等待这回事。没设超时 = 把自己的命交给对方。
|
|
19
|
+
- **失败要快、要可控**:宁可快速失败 + 降级,也不要慢慢挂死拖垮上游。
|
|
20
|
+
- **重试是有预算的**:重试能救瞬时抖动,也能在故障时制造**重试风暴**压垮已经半死的依赖——必须限额。
|
|
21
|
+
- **隔离故障域**:一个依赖的故障不能耗尽全服务的资源(线程/连接/内存)。
|
|
22
|
+
- **降级有契约**:依赖不可用时返回什么、是否可缓存兜底,要事先设计,不是临时拍。
|
|
23
|
+
|
|
24
|
+
## 2. 超时与截止时间(deadline)
|
|
25
|
+
|
|
26
|
+
- **每个出站调用设超时**:连接超时 + 读超时分开设;按依赖的 p99 + 余量定,不要一律 30s。
|
|
27
|
+
- **超时预算自上而下分配**:入站请求带总预算(如 800ms),调 A 花掉的时间从预算里扣,传给 B 的是**剩余预算**——避免"上游已超时放弃、下游还在傻等"。
|
|
28
|
+
- **传播截止时间**:把 deadline 随调用链传递(header/context),下游据此决定还值不值得开工。
|
|
29
|
+
- **超时要小于上游超时**:下游超时必须短于上游,否则上游先放弃,下游白做功还占资源。
|
|
30
|
+
|
|
31
|
+
| 反例 | 正解 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| 全局一个 30s 超时 | 按依赖分别设(DB 200ms、内网 RPC 300ms、外部 API 2s)|
|
|
34
|
+
| 上游 1s 超时,下游 5s | 下游超时 < 上游,并扣除已耗时 |
|
|
35
|
+
| 无截止时间传播 | deadline 随 context 下传,下游过期即放弃 |
|
|
36
|
+
|
|
37
|
+
## 3. 重试与重试预算
|
|
38
|
+
|
|
39
|
+
- **只重试可重试错误**:超时、连接失败、5xx/服务不可用、明确的"瞬时"错误可重试;4xx 参数错、鉴权失败、业务拒绝**不重试**(重试也白搭,还放大压力)。
|
|
40
|
+
- **指数退避 + 抖动(jitter)**:退避间隔指数增长并加随机抖动,避免所有客户端**同步**在同一刻重试形成尖峰。
|
|
41
|
+
- **重试预算(retry budget)**:限制"重试请求占总请求的比例"(如 ≤10%)。一旦依赖整体故障,重试占比飙升即**自动停止重试**——这是防重试风暴的关键,比单纯"最多重试 3 次"更有效。
|
|
42
|
+
- **幂等前提**:只对幂等操作重试;非幂等写(扣款、下单)重试必须配幂等键(见 `backend/01-standards/idempotency-and-safe-retries`)。
|
|
43
|
+
- **不在每一层都重试**:多层各自重试会**指数级放大**请求(3 层各重试 3 次 = 27 倍)。在**一处**重试,其余层只透传错误。
|
|
44
|
+
|
|
45
|
+
## 4. 熔断器(circuit breaker)
|
|
46
|
+
|
|
47
|
+
防止对一个已经故障的依赖持续打无效请求,给它恢复时间,并让调用方快速失败。
|
|
48
|
+
|
|
49
|
+
| 状态 | 行为 | 转移条件 |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| 关闭(closed)| 正常放行,统计失败率 | 失败率/慢调用率超阈值 → 打开 |
|
|
52
|
+
| 打开(open)| 直接快速失败,不打依赖,走降级 | 冷却时间到 → 半开 |
|
|
53
|
+
| 半开(half-open)| 放少量探测请求 | 探测成功 → 关闭;失败 → 重新打开 |
|
|
54
|
+
|
|
55
|
+
要点:按**失败率 + 慢调用率**触发(不只是异常数);冷却期给依赖喘息;半开只放少量探测,别一下子全量灌回去。**熔断打开时必须有降级路径**,否则熔断只是把"慢失败"变成"快失败",用户还是没结果。
|
|
56
|
+
|
|
57
|
+
## 5. 舱壁隔离(bulkhead)
|
|
58
|
+
|
|
59
|
+
把资源按依赖**分池**,一个依赖打满它自己的池,不波及其他。
|
|
60
|
+
|
|
61
|
+
- **线程/并发隔离**:每个慢依赖用独立的线程池/信号量限并发;它卡住只耗尽自己那一格,主线程池不受影响。
|
|
62
|
+
- **连接池隔离**:不同依赖、不同优先级用独立连接池;别让一个慢查询占满整个 DB 连接池饿死其他请求。
|
|
63
|
+
- **限制在途请求数**:对每个依赖设最大在途(in-flight)上限,满了立即拒绝/降级,而不是无限排队耗内存。
|
|
64
|
+
- **核心与非核心隔离**:关键链路(下单/支付)与非关键(推荐/埋点)用不同资源池,非核心拖垮不了核心。
|
|
65
|
+
|
|
66
|
+
## 6. 背压与负载保护(backpressure / load shedding)
|
|
67
|
+
|
|
68
|
+
- **背压**:下游处理不过来时,向上游传递"慢一点"信号(有界队列满即拒绝、流控窗口),而不是无限缓冲到 OOM。
|
|
69
|
+
- **有界队列**:所有队列/缓冲必须有上限;满了走拒绝或降级,**绝不**无界堆积。
|
|
70
|
+
- **主动卸载(load shedding)**:过载时**主动丢弃**低优先级请求,保住核心请求的 SLO——半数请求成功远好于全部一起慢死。
|
|
71
|
+
- **限流前置**:入口按用户/IP/端点限流(见 `backend/01-standards/rate-limiting-complete`),把过载挡在门外。
|
|
72
|
+
- **并发上限**:服务自身设最大并发,超过即排队有界 / 拒绝,保护自己不被打挂。
|
|
73
|
+
|
|
74
|
+
## 7. 降级与兜底(fallback)
|
|
75
|
+
|
|
76
|
+
- **降级要有契约**:依赖挂了返回什么——缓存的旧值、默认值、空集合、还是明确的"暂不可用"——事先设计好。
|
|
77
|
+
- **缓存兜底**:读路径可在依赖不可用时返回最近一次缓存(标记为 stale),保证可用性。
|
|
78
|
+
- **优雅降级**:非核心功能(推荐、个性化)失败时静默降级为通用内容,不让整页崩。
|
|
79
|
+
- **降级也要可观测**:降级触发要打点告警,别让"一直在降级"被无声忽略。
|
|
80
|
+
|
|
81
|
+
## 8. 反模式(出现即不合格)
|
|
82
|
+
|
|
83
|
+
1. **无超时调用**:任何 HTTP/RPC/DB 调用没设超时,一个慢依赖挂死全服务。
|
|
84
|
+
2. **无脑重试**:对所有错误重试、固定间隔无抖动、无预算 → 故障时制造重试风暴。
|
|
85
|
+
3. **多层叠加重试**:每一层都重试,请求被指数放大压垮下游。
|
|
86
|
+
4. **熔断无降级**:熔断打开但没兜底,用户照样拿不到结果。
|
|
87
|
+
5. **共享资源池**:所有依赖共用一个线程池/连接池,一个慢依赖拖垮全部。
|
|
88
|
+
6. **无界队列/缓冲**:积压无上限,过载直接 OOM。
|
|
89
|
+
7. **超时倒挂**:下游超时比上游还长,上游先放弃、下游白干。
|
|
90
|
+
8. **对非幂等写重试**:重复扣款/重复下单。
|
|
91
|
+
|
|
92
|
+
## 9. 最低交付 checklist
|
|
93
|
+
|
|
94
|
+
- [ ] 每个出站调用(HTTP/RPC/DB/缓存)都有连接 + 读超时,按依赖分别设定。
|
|
95
|
+
- [ ] 超时预算自上而下分配,截止时间随调用链传播,下游超时 < 上游。
|
|
96
|
+
- [ ] 只重试可重试错误,指数退避 + 抖动,且有重试预算上限。
|
|
97
|
+
- [ ] 重试只在一层做,非幂等写重试配幂等键。
|
|
98
|
+
- [ ] 关键依赖有熔断器(失败率/慢调用触发)且熔断时有降级路径。
|
|
99
|
+
- [ ] 慢依赖用舱壁隔离(独立线程池/信号量/连接池 + 在途上限)。
|
|
100
|
+
- [ ] 所有队列有界,过载时主动卸载低优先级请求保核心 SLO。
|
|
101
|
+
- [ ] 降级有明确契约,降级触发可观测、有告警。
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: transactions-and-concurrency-control
|
|
3
|
+
title: 事务与并发控制规范(商业级后端必读)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [transaction, isolation, locking, concurrency, acid, deadlock, consistency, 事务, 隔离级别, 锁, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-29
|
|
10
|
+
---
|
|
11
|
+
# 事务与并发控制规范(商业级后端必读)
|
|
12
|
+
|
|
13
|
+
> 多个请求同时改同一份数据时,"看起来能跑"的代码会丢更新、读脏数、超卖。
|
|
14
|
+
> 商业级后端必须显式定义**事务边界**、选对**隔离级别**、用对**锁策略**。
|
|
15
|
+
> 本规范聚焦单库内的本地事务与并发;跨服务/跨库一致性见 `architecture/distributed-transactions`。
|
|
16
|
+
|
|
17
|
+
## 1. 事务边界 = 用例边界
|
|
18
|
+
|
|
19
|
+
- **一个用例(业务操作)= 一个事务**。在**应用层/服务层**开启与提交事务,而不是在 repository 里各开各的(否则一个用例里多次提交,失败时一半已落库)。
|
|
20
|
+
- 事务要**短小**:只把"必须原子"的读写包进去。**绝不**在事务里发 HTTP 调用、发消息、等外部 IO——会长时间持锁、放大死锁与连接耗尽。需要对外副作用时,用发件箱(outbox)在事务内只写消息,事务外再投递。
|
|
21
|
+
- 事务里**先做校验/计算,再做写**,把写集中在末尾,缩短持锁时间。
|
|
22
|
+
- 失败必须**整体回滚**;不要 catch 异常后继续提交"半截"数据。
|
|
23
|
+
|
|
24
|
+
## 2. ACID 与一致性底线
|
|
25
|
+
|
|
26
|
+
- **原子性**:要么全成功要么全回滚,没有"半完成"。
|
|
27
|
+
- **一致性**:事务结束后所有约束(唯一/外键/check/余额非负)都成立——把不变量尽量交给 **DB 约束**,不要只在应用层校验。
|
|
28
|
+
- **隔离性**:并发事务互不干扰的程度,由隔离级别决定(见 §3)。
|
|
29
|
+
- **持久性**:提交即落盘,宕机不丢。
|
|
30
|
+
- 金额用**定点/整数(分)**,绝不用浮点;时间带时区;并发计数器避免"读-改-写"丢更新。
|
|
31
|
+
|
|
32
|
+
## 3. 隔离级别与并发异常
|
|
33
|
+
|
|
34
|
+
选错隔离级别会出现这些异常,按场景选最低够用的级别:
|
|
35
|
+
|
|
36
|
+
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 写偏斜(write skew) | 典型用途 |
|
|
37
|
+
|---|---|---|---|---|---|
|
|
38
|
+
| Read Uncommitted | 可能 | 可能 | 可能 | 可能 | 几乎不用 |
|
|
39
|
+
| Read Committed | 否 | 可能 | 可能 | 可能 | OLTP 常见默认 |
|
|
40
|
+
| Repeatable Read | 否 | 否 | 可能/否* | 可能 | 需要稳定快照的读 |
|
|
41
|
+
| Serializable | 否 | 否 | 否 | 否 | 强一致关键写(账务/库存判定) |
|
|
42
|
+
|
|
43
|
+
\* 不同数据库在 Repeatable Read 下对幻读的处理不同;需要严格不变量时用 Serializable 或显式加锁。
|
|
44
|
+
|
|
45
|
+
- 异常含义:**脏读**=读到未提交数据;**不可重复读**=同一行两次读值不同;**幻读**=同一查询条件两次返回行数不同;**写偏斜**=两个事务各自读一致快照后分别写,合起来违反不变量(如"至少留一个值班医生"被两人同时请假打破)。
|
|
46
|
+
- 经验:默认 **Read Committed**;对"读后据此决定写"的关键判定(余额、库存、配额),升到 **Serializable** 或用显式锁,否则会有写偏斜/超卖。
|
|
47
|
+
|
|
48
|
+
## 4. 乐观锁 vs 悲观锁
|
|
49
|
+
|
|
50
|
+
| 维度 | 乐观锁 | 悲观锁 |
|
|
51
|
+
|---|---|---|
|
|
52
|
+
| 机制 | 版本号/时间戳,提交时 CAS 校验 | `SELECT ... FOR UPDATE` 先锁后改 |
|
|
53
|
+
| 适用 | 冲突少、读多写少 | 冲突多、临界区短、必须串行 |
|
|
54
|
+
| 失败处理 | 影响行数=0 → 重读重试(带上限) | 等待锁/超时 |
|
|
55
|
+
| 风险 | 高冲突下大量重试 | 持锁久 → 死锁、吞吐下降 |
|
|
56
|
+
|
|
57
|
+
- **乐观锁**:`UPDATE t SET val=?, version=version+1 WHERE id=? AND version=?`;影响行数为 0 表示已被他人修改,重读后按业务决定重试或放弃。**先查后写**前必须有这层校验,否则丢更新。
|
|
58
|
+
- **悲观锁**:`SELECT ... FOR UPDATE` 锁定将要修改的行,确保串行。务必:① 加锁范围最小;② 设锁等待超时;③ **所有事务以相同顺序加锁**以避免死锁。
|
|
59
|
+
- **原子写优先**:能用一条原子语句就别先查后写——如 `UPDATE stock SET qty=qty-1 WHERE id=? AND qty>=1`(影响行数=0 即库存不足),既无竞态又免去显式锁。
|
|
60
|
+
|
|
61
|
+
## 5. 死锁与锁竞争
|
|
62
|
+
|
|
63
|
+
- **死锁成因**:两个事务以**相反顺序**持有/请求锁。根治:固定全局加锁顺序(如总是按主键升序锁多行)。
|
|
64
|
+
- 数据库会检测死锁并回滚其中一个事务——业务侧要**捕获死锁错误并重试**(幂等前提下,带退避)。
|
|
65
|
+
- 减少锁竞争:缩短事务、降低隔离级别到够用、给热点行设计分桶/分片、把"读多"路径走快照读不加锁。
|
|
66
|
+
- **连接池**:事务持有连接,长事务会拖垮连接池;设置语句/事务超时,杜绝"忘了提交"的悬挂事务。
|
|
67
|
+
|
|
68
|
+
## 6. 读一致性
|
|
69
|
+
|
|
70
|
+
- **读己之写(read-your-writes)**:用户写完立刻读应看到自己的写;主从架构下要把"刚写完的读"路由到主库或加版本校验,避免读到滞后的从库。
|
|
71
|
+
- 报表/聚合类长读用**快照读**或专门的只读副本,别和 OLTP 写抢锁。
|
|
72
|
+
- 需要"一批读相互一致"时,把它们放进同一个(Repeatable Read/Serializable)事务的同一快照里。
|
|
73
|
+
|
|
74
|
+
## 7. 反模式(出现即不合格)
|
|
75
|
+
|
|
76
|
+
1. **事务里做外部 IO**:在事务内发 HTTP/MQ,长持锁、易死锁。
|
|
77
|
+
2. **repository 各自提交**:一个用例多个事务,失败留下半截数据。
|
|
78
|
+
3. **先查后写无并发保护**:丢更新、超卖(缺乏唯一约束/乐观锁/原子写)。
|
|
79
|
+
4. **隔离级别不假思索**:关键判定用 Read Committed 出现写偏斜。
|
|
80
|
+
5. **金额用浮点 / 计数器读改写**:精度丢失、并发丢更新。
|
|
81
|
+
6. **长事务 + 大锁范围**:吞吐塌方、死锁频发、连接耗尽。
|
|
82
|
+
7. **不处理死锁/锁超时**:偶发死锁直接变成用户报错。
|
|
83
|
+
|
|
84
|
+
## 8. 最低交付 checklist
|
|
85
|
+
|
|
86
|
+
- [ ] 事务边界在服务层、对齐用例;事务短小、无内部外部 IO。
|
|
87
|
+
- [ ] 隔离级别按场景显式选择;关键"读后写"判定有写偏斜防护。
|
|
88
|
+
- [ ] 并发写有保护:原子写 / 乐观锁(版本号)/ 悲观锁,三选一且最小化。
|
|
89
|
+
- [ ] 多行加锁顺序固定;捕获死锁与锁超时并安全重试。
|
|
90
|
+
- [ ] 不变量尽量落 DB 约束(唯一/外键/check),不只应用层校验。
|
|
91
|
+
- [ ] 金额用整数/定点;计数器用原子更新而非读-改-写。
|
|
92
|
+
- [ ] 有并发场景的自动化测试(并发下单/扣减/转账不出错)。
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: cicd-blueprint-deep-dive
|
|
3
|
-
title:
|
|
3
|
+
title: CI/CD 环节深度知识库
|
|
4
4
|
domain: cicd
|
|
5
|
-
category:
|
|
5
|
+
category: 01-standards
|
|
6
6
|
difficulty: intermediate
|
|
7
|
-
tags: [
|
|
7
|
+
tags: [cicd, 流水线, pipeline, 持续集成, 持续交付, 发布, devops]
|
|
8
8
|
quality_score: 70
|
|
9
9
|
last_updated: 2026-06-15
|
|
10
10
|
---
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
## CI/CD 环节深度知识库
|
|
11
|
+
# CI/CD 环节深度知识库
|
|
14
12
|
|
|
15
13
|
### 目标
|
|
16
14
|
- 让每次发布都具备可重复、可审计、可回滚能力。
|
|
@@ -1,37 +1,88 @@
|
|
|
1
1
|
---
|
|
2
2
|
id: release-readiness-gate
|
|
3
|
-
title:
|
|
3
|
+
title: 发布就绪门禁规范(每次发布的 pass/fail 闸门:阻断高风险变更,商业级必读)
|
|
4
4
|
domain: cicd
|
|
5
|
-
category:
|
|
6
|
-
difficulty:
|
|
7
|
-
tags: [
|
|
8
|
-
quality_score:
|
|
9
|
-
last_updated: 2026-06-
|
|
5
|
+
category: cicd
|
|
6
|
+
difficulty: advanced
|
|
7
|
+
tags: [release-gate, readiness-gate, ci-cd, quality-gate, go-no-go, blocking-criteria, change-management, rollback, canary, post-deploy-verification, build-provenance, 发布门禁, 就绪门, 阻断, 灰度, 回滚, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-29
|
|
10
10
|
---
|
|
11
|
-
#
|
|
11
|
+
# 发布就绪门禁规范(商业级必读)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
> "构建绿了"不等于"能发"。CI 通过只证明代码编得过、测试跑得过;它不证明这次变更**可控、可观测、可回滚**。把"绿色流水线"直接当成放行信号,是大量线上事故的起点。
|
|
14
|
+
> 发布就绪门禁是发布管线里一道**确定性的 pass/fail 闸门**——**每一次**进入生产的变更都必须穿过它,任一必过项不满足就**自动阻断**,不靠人情、不靠"这次先放一下"。它和一次性的服务级生产就绪审查不同(服务能否被运维见 `operations/01-standards/production-readiness-review`,逐条自检见 `development/03-checklists/release-readiness-checklist`):本规范定义的是**每次发布都重复执行**的机器可判定闸门。
|
|
14
15
|
|
|
15
|
-
|
|
16
|
-
- 用统一发布门禁阻断高风险变更,保证发布可控。
|
|
16
|
+
## 1. 门禁的三条铁律
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
- 运维质量:发布与回滚脚本可执行。
|
|
18
|
+
| 铁律 | 含义 | 违反的后果 |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| 确定性可判定 | 每个必过项是机器可判定的 pass/fail,不是"看着差不多" | 门禁形同虚设,靠主观放行 |
|
|
21
|
+
| 强制不可绕过 | 门禁是合并/发布的硬阻断,绕过需留痕审批且属例外 | "临时跳过一下"成为常态,门禁名存实亡 |
|
|
22
|
+
| 既看构建也看运行 | 不止"构建成功",还要发布后验证"运行健康" | 部署成功但服务已坏,靠用户投诉才发现 |
|
|
24
23
|
|
|
25
|
-
|
|
26
|
-
- 是否完成变更影响评估与回滚预案。
|
|
27
|
-
- 是否完成灰度策略与阈值配置。
|
|
28
|
-
- 是否完成关键指标基线确认。
|
|
24
|
+
核心判据:**门禁的价值在于敢说 fail。** 一个从不阻断任何发布的门禁等于没有门禁。
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
- 错误率、时延、成功率是否在阈值内。
|
|
32
|
-
- 告警是否异常增加。
|
|
33
|
-
- 关键业务链路是否连续成功。
|
|
26
|
+
## 2. 必过门禁(任一不过即阻断)
|
|
34
27
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
每一类给出**机器可判定**的通过条件,全部满足才进入发布阶段。
|
|
29
|
+
|
|
30
|
+
| 门禁类别 | 通过条件(pass) | 失败即阻断(fail) |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| 代码质量 | 格式化/lint/类型检查/静态分析全过,无新增告警 | 存在 error 级问题或新增告警 |
|
|
33
|
+
| 测试质量 | 关键路径回归全绿,覆盖率不低于基线,无阻断缺陷开放 | 测试红、覆盖率回退、存在未关阻断缺陷 |
|
|
34
|
+
| 安全质量 | 依赖/镜像无未处理的 Critical/High 漏洞,密钥扫描无泄露 | 高危漏洞未分诊、检出明文密钥 |
|
|
35
|
+
| 构建可信 | 制品可追溯(版本↔commit SHA 一一对应)、已签名验签、来源可证 | 制品来源不明、版本与代码对不上、未签名 |
|
|
36
|
+
| 配置就绪 | 目标环境配置键齐全、启动校验通过、与制品版本绑定记录 | 缺配置、配置漂移、来源含糊(见 `architecture/01-standards/configuration-and-environment-management`) |
|
|
37
|
+
| 可回滚 | 回滚方案存在且**已验证可执行**(应用/配置/数据) | 无回滚路径或从未验证 |
|
|
38
|
+
| 可观测 | 本次变更涉及路径有监控指标与告警,发布后看得见 | 关键路径无遥测,出事不可见 |
|
|
39
|
+
|
|
40
|
+
## 3. 发布前检查(pre-deploy)
|
|
41
|
+
|
|
42
|
+
进入放量前必须确认,缺一不可:
|
|
43
|
+
|
|
44
|
+
- **变更影响评估**:本次改了什么、影响哪些上下游、风险等级是多少,已记录。
|
|
45
|
+
- **回滚预案就位**:回滚步骤明确且演练过;高风险变更预先准备好"一键回退"。
|
|
46
|
+
- **灰度策略与阈值**:放量批次、观察窗口、自动回退触发阈值(错误率/延迟/成功率)已配置,不全量瞬时生效。
|
|
47
|
+
- **指标基线确认**:发布前抓取关键指标基线(错误率、P95/P99 延迟、关键交易成功率),作为发布后对比的锚点。
|
|
48
|
+
- **数据库变更安全**:Schema 变更前向兼容、可回滚,先迁移后发布、扩展式变更(见 `development/01-standards/database-migration-strategies`)。
|
|
49
|
+
- **发布窗口与值班**:避开高风险时段,值班与升级路径在线、可响应。
|
|
50
|
+
|
|
51
|
+
## 4. 发布后验证(post-deploy gate)
|
|
52
|
+
|
|
53
|
+
部署完成**不是**发布成功——必须用运行信号确认。这是门禁的"后半扇":
|
|
54
|
+
|
|
55
|
+
- **黄金指标在阈值内**:错误率、延迟、饱和度、关键交易成功率在发布前基线的容忍带内。
|
|
56
|
+
- **告警无异常抬升**:发布后未触发新的 P0/P1,告警量无异常飙升。
|
|
57
|
+
- **关键链路连续成功**:核心业务链路(登录/下单/支付等)端到端连续成功,而非仅健康检查返回 200。
|
|
58
|
+
- **观察窗口达标后才扩量**:每批灰度都要过观察窗口再放下一批;指标越界**自动回退**,不等人决策。
|
|
59
|
+
- **失败即回滚并复盘**:触发回退条件就执行已验证的回滚,事后归档"为什么发坏了"。
|
|
60
|
+
|
|
61
|
+
## 5. 例外与放行口径
|
|
62
|
+
|
|
63
|
+
- **门禁是默认拒绝**:必过项有一项 fail,默认结果就是 no-go。
|
|
64
|
+
- **例外必须留痕**:极少数业务紧急情况下的带条件放行,需要明确审批人、原因、补救项与期限,并归档可审计——而不是悄悄跳过。
|
|
65
|
+
- **绝不降低红线**:可回滚、可观测、无高危漏洞、无明文密钥属硬红线,任何"紧急"都不豁免。
|
|
66
|
+
- **门禁结果可追溯**:每次发布留下门禁判定记录(哪些过、哪些放行、谁批的),出事能反查。
|
|
67
|
+
|
|
68
|
+
## 6. 反模式(出现即不合格)
|
|
69
|
+
|
|
70
|
+
1. **绿即放行**:把 CI 通过直接当成可发布信号,不查可回滚/可观测/运行健康。
|
|
71
|
+
2. **只看构建不看运行**:部署成功就宣布完成,没有发布后验证步骤。
|
|
72
|
+
3. **门禁可随意绕过**:"这次先跳过一下"成为习惯,硬阻断变软建议。
|
|
73
|
+
4. **主观判定**:通过条件不是机器可判定的 pass/fail,靠人眼"差不多"。
|
|
74
|
+
5. **无回滚就发**:没有已验证的回退路径,出事只能向前硬修。
|
|
75
|
+
6. **全量瞬时生效**:不灰度、不设自动回退阈值,一发就是全量。
|
|
76
|
+
7. **无基线对比**:发布后没有基线可比,指标好坏全靠感觉。
|
|
77
|
+
8. **门禁无留痕**:放行与例外没有审计记录,事后无法追责复盘。
|
|
78
|
+
9. **为赶进度降红线**:"紧急发布"时豁免高危漏洞/明文密钥/无监控。
|
|
79
|
+
|
|
80
|
+
## 7. 最低交付 checklist
|
|
81
|
+
|
|
82
|
+
- [ ] 门禁是发布管线里**强制、确定性、不可随意绕过**的 pass/fail 闸门。
|
|
83
|
+
- [ ] 必过门禁齐备:代码/测试/安全/构建可信/配置/可回滚/可观测,任一 fail 即阻断。
|
|
84
|
+
- [ ] 发布前完成影响评估、回滚预案、灰度阈值、指标基线、DB 变更安全、值班就位。
|
|
85
|
+
- [ ] 发布后用黄金指标+告警+关键链路验证,过观察窗口再扩量,越界自动回退。
|
|
86
|
+
- [ ] 可回滚、可观测、无高危漏洞、无明文密钥为硬红线,紧急也不豁免。
|
|
87
|
+
- [ ] 例外放行有审批人/原因/补救/期限并归档;每次门禁判定可追溯。
|
|
88
|
+
- [ ] 服务级一次性就绪见 `operations/01-standards/production-readiness-review`;逐条自检见 `development/03-checklists/release-readiness-checklist`。
|
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Kubernetes 故障排查作战手册
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
last_updated: 2026-
|
|
4
|
+
last_updated: 2026-06-29
|
|
5
5
|
owner: platform-team
|
|
6
6
|
tags: [kubernetes, troubleshooting, diagnostics, pod, network, storage, node]
|
|
7
7
|
status: production
|
|
8
8
|
domain: cloud-native
|
|
9
9
|
difficulty: intermediate
|
|
10
|
-
quality_score:
|
|
10
|
+
quality_score: 91
|
|
11
11
|
---
|
|
12
12
|
|
|
13
|
-
#
|
|
14
|
-
# 功能:Kubernetes 全场景故障排查作战手册
|
|
15
|
-
# 作用:指导 K8s 集群各类故障的诊断、根因分析与修复
|
|
16
|
-
# 创建时间:2026-03-28
|
|
17
|
-
# 最后修改:2026-03-28
|
|
13
|
+
# Kubernetes 故障排查作战手册
|
|
18
14
|
|
|
19
15
|
## 目标
|
|
20
16
|
|