@umacloud/knowledge 1.0.14 → 1.0.16
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/knowledge-map.md +1 -1
- 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/agent-evaluation-benchmark.md +1 -1
- package/ai/ai-agent-memory-context-management.md +1 -1
- package/ai/ai-cost-capacity-optimization-playbook.md +1 -1
- package/ai/ai-data-security-and-compliance-playbook.md +1 -1
- package/ai/ai-domain-index-and-checklist.md +1 -1
- package/ai/ai-governance-maturity-model.md +1 -1
- package/ai/ai-model-selection-and-routing-strategy.md +1 -1
- package/ai/ai-observability-and-oncall-runbook.md +1 -1
- package/ai/ai-rag-engineering-playbook.md +1 -1
- package/ai/ai-red-team-and-safety-evaluation.md +1 -1
- package/ai/ai-release-readiness-and-rollback-gate.md +1 -1
- package/ai/llm-agent-engineering-deep-dive.md +1 -1
- package/ai/prompt-and-tool-guardrails.md +1 -1
- 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 -1
- package/architecture/02-playbooks/system-design-playbook.md +1 -1
- package/architecture/adr-template-and-examples.md +1 -1
- package/architecture/configuration-management.md +95 -1158
- package/architecture/resilience-and-disaster-patterns.md +87 -27
- package/architecture/system-architecture-deep-dive.md +1 -1
- package/backend/01-standards/dependency-and-supply-chain-hygiene.md +90 -0
- 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/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 +1 -1
- package/cicd/release-readiness-gate.md +78 -27
- package/cloud-native/01-standards/container-security.md +1 -1
- package/cloud-native/01-standards/kubernetes-complete.md +1 -1
- package/cloud-native/02-playbooks/gitops-with-argocd.md +1 -1
- package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1 -1
- package/cloud-native/02-playbooks/multicloud-governance.md +1 -1
- package/cloud-native/02-playbooks/serverless-patterns.md +1 -1
- package/cloud-native/02-playbooks/service-mesh-playbook.md +1 -1
- package/cloud-native/03-checklists/container-security-checklist.md +1 -1
- package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +1 -1
- package/cloud-native/04-antipatterns/container-antipatterns.md +1 -1
- package/cloud-native/04-antipatterns/k8s-antipatterns.md +1 -1
- package/cloud-native/05-cases/case-k8s-migration.md +1 -1
- package/cloud-native/05-cases/case-k8s-scaling.md +1 -1
- package/cloud-native/05-cases/case-k8s-security-incident.md +1 -1
- package/cloud-native/06-glossary/cloud-native-glossary.md +1 -1
- package/compliance/01-standards/audit-logging-and-evidence.md +111 -0
- package/compliance/01-standards/privacy-and-compliance-readiness.md +119 -0
- package/data/data-governance-and-modeling-deep-dive.md +1 -1
- package/design/ux-system-deep-dive.md +1 -1
- package/development/00-governance/document-template.md +1 -1
- package/development/01-standards/code-review-and-pr-hygiene.md +85 -0
- package/development/03-checklists/production-readiness-checklist.md +6 -6
- package/development/09-maturity/quarterly-audit-template.md +1 -1
- package/development/11-ui-excellence/ui-aesthetic-system.md +1 -1
- package/development/13-implementation-assets/knowledge-gates-execution.md +1 -1
- package/development/api-contract-and-versioning-guide.md +1 -1
- package/development/api-governance-complete.md +1 -1
- package/development/backend-engineering-complete.md +1 -1
- package/development/code-review-quality-complete.md +11 -34
- package/development/concurrency-reliability-complete.md +1 -1
- package/development/database-engineering-complete.md +1 -1
- package/development/engineering-effectiveness-complete.md +1 -1
- package/development/engineering-standards-deep-dive.md +1 -1
- package/development/frontend-engineering-complete.md +1 -1
- package/development/performance-capacity-complete.md +1 -1
- package/development/refactor-migration-complete.md +1 -1
- package/development/refactoring-and-techdebt-playbook.md +1 -1
- package/development/security-in-development-complete.md +1 -1
- 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/ui-states-and-resilient-data-fetching.md +97 -0
- package/high-quality-engineering-playbook.md +1 -1
- package/incident/02-playbooks/chaos-engineering-playbook.md +1 -1
- package/incident/postmortem-and-response-deep-dive.md +1 -1
- package/mobile/01-standards/flutter-complete.md +5 -5
- package/mobile/01-standards/react-native-complete.md +5 -5
- package/mobile/02-playbooks/mobile-performance.md +6 -6
- package/mobile/03-checklists/mobile-release-checklist.md +2 -2
- package/mobile/04-antipatterns/mobile-antipatterns.md +2 -2
- 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/aiops-anomaly-detection.md +1 -1
- package/operations/capacity-planning.md +1 -1
- package/operations/chaos-engineering.md +1 -1
- package/operations/incident-command-system.md +1 -1
- package/operations/observability-complete.md +1 -1
- package/operations/slo-sli-playbook.md +1 -1
- package/operations/sre-operations-deep-dive.md +1 -1
- package/package.json +1 -1
- package/performance/01-standards/performance-budgets-and-load-testing.md +91 -0
- package/product/feature-prioritization-framework.md +1 -1
- package/product/kpi-and-metric-tree.md +1 -1
- package/product/product-discovery-and-prd-deep-dive.md +1 -1
- 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/02-playbooks/incident-response-security-playbook.md +1 -1
- package/security/02-playbooks/penetration-testing-playbook.md +1 -1
- package/security/security-architecture-deep-dive.md +1 -1
- package/security/threat-modeling-stride-playbook.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 -1
- package/testing/risk-based-test-matrix.md +1 -1
- package/testing/testing-strategy-deep-dive.md +1 -1
|
@@ -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,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`。
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: audit-logging-and-evidence
|
|
3
|
+
title: 审计日志与合规证据规范(商业级必读)
|
|
4
|
+
domain: compliance
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [audit-log, audit-trail, evidence, tamper-evident, accountability, who-did-what, retention, compliance, 审计日志, 审计追踪, 合规证据, 防篡改, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-29
|
|
10
|
+
---
|
|
11
|
+
# 审计日志与合规证据规范(商业级必读)
|
|
12
|
+
|
|
13
|
+
> 普通日志回答"系统发生了什么",审计日志回答"**谁**在**何时**对**什么**做了**什么**、结果如何"。
|
|
14
|
+
> 当出现纠纷、越权、数据泄露、监管问询时,审计日志是你唯一能自证清白或定位责任的证据。
|
|
15
|
+
> 它和应用日志是两套东西:审计日志要**防篡改、可追溯、长期保留、独立于业务日志**。事后补不出来——必须从一开始就记。
|
|
16
|
+
|
|
17
|
+
## 1. 审计日志 ≠ 应用日志
|
|
18
|
+
|
|
19
|
+
| 维度 | 应用日志 | 审计日志 |
|
|
20
|
+
|---|---|---|
|
|
21
|
+
| 目的 | 排障、可观测 | 问责、合规、取证 |
|
|
22
|
+
| 内容 | 系统行为、调用链 | 主体对客体的安全相关操作 |
|
|
23
|
+
| 可改 | 可轮转、可删 | 防篡改、不可改、定期保留 |
|
|
24
|
+
| 读者 | 工程师 | 审计员、安全、监管、法务 |
|
|
25
|
+
| 保留 | 几天~几周 | 数月~数年(按合规要求)|
|
|
26
|
+
|
|
27
|
+
两者**分开存储**:审计事件可以同时进可观测体系,但合规证据要有独立、受控、防篡改的留存。
|
|
28
|
+
|
|
29
|
+
## 2. 必须记录的事件
|
|
30
|
+
|
|
31
|
+
凡是"安全相关、合规相关、影响他人数据/权限"的操作都要记:
|
|
32
|
+
|
|
33
|
+
- **认证**:登录成功/失败、登出、MFA 校验、会话创建/失效、密码/密钥变更。
|
|
34
|
+
- **授权**:权限/角色变更、提权、访问被拒、敏感资源访问。
|
|
35
|
+
- **数据**:对个人/敏感数据的访问、导出、修改、删除(尤其批量与跨用户操作)。
|
|
36
|
+
- **配置/管理**:安全配置变更、功能开关变更(尤其 kill-switch)、用户/账号增删、密钥轮换。
|
|
37
|
+
- **特权操作**:管理员/运维的高权限动作、以他人身份操作(impersonation)、数据库直连改数。
|
|
38
|
+
- **合规动作**:数据主体请求(导出/删除/更正)的受理与完成。
|
|
39
|
+
|
|
40
|
+
## 3. 每条审计记录的必备字段(5W)
|
|
41
|
+
|
|
42
|
+
| 字段 | 含义 |
|
|
43
|
+
|---|---|
|
|
44
|
+
| who(主体)| 操作者身份:用户/服务账号ID、角色;以他人身份操作时记**真实操作者 + 被代理者** |
|
|
45
|
+
| when(时间)| 高精度、可信时间源、统一时区(UTC),不可被客户端伪造 |
|
|
46
|
+
| what(动作 + 客体)| 做了什么操作、对哪个资源(资源类型 + ID),变更前后值(敏感值脱敏/只记引用)|
|
|
47
|
+
| where(来源)| 来源 IP、设备、会话ID、请求ID(贯穿应用日志便于关联)|
|
|
48
|
+
| result(结果)| 成功/失败/被拒;失败也要记(被拒的越权尝试本身就是关键信号)|
|
|
49
|
+
|
|
50
|
+
补充:记录**关联ID**(request_id / trace_id)把审计事件和应用链路打通;失败的敏感操作**和成功的一样重要**。
|
|
51
|
+
|
|
52
|
+
## 4. 防篡改与完整性
|
|
53
|
+
|
|
54
|
+
审计日志的价值全在"没被改过"。要做到:
|
|
55
|
+
|
|
56
|
+
- **只追加(append-only)**:审计日志只写不改不删;应用账号对审计存储**没有**修改/删除权限。
|
|
57
|
+
- **权限隔离**:写审计的身份 ≠ 能读全部审计的身份 ≠ 能管理留存的身份;管理员也不能悄悄删自己的痕迹。
|
|
58
|
+
- **完整性校验**:用哈希链/链式校验/独立签名等手段,使任何删改可被检出(tamper-evident)。
|
|
59
|
+
- **外移**:审计日志尽快写到独立、受控的存储(与被审计系统不同的信任域),防止入侵者就地销毁证据。
|
|
60
|
+
- **时间可信**:用可信时间源,防止时间戳被回拨伪造。
|
|
61
|
+
|
|
62
|
+
## 5. 审计日志本身要合规
|
|
63
|
+
|
|
64
|
+
- **脱敏**:审计记录里**不存**密码、token、卡号明文;记录"改了哪个字段"而非把敏感值原样落进审计。
|
|
65
|
+
- **最小必要**:记录足够定位责任,但不把敏感数据复制进审计造成二次暴露面。
|
|
66
|
+
- **访问受控**:谁能查审计日志本身要受控、要留痕(查审计的动作也是审计事件)。
|
|
67
|
+
- **保留期**:按合规要求定保留期限(常以年计),到期前不可删,到期后按策略处理。
|
|
68
|
+
|
|
69
|
+
## 6. 合规证据(不只是日志)
|
|
70
|
+
|
|
71
|
+
认证审计(SOC2 / ISO 27001 / 行业监管等)要的是"能证明你确实做了控制"的**证据**,审计日志是其中一类。还要留:
|
|
72
|
+
|
|
73
|
+
| 证据类型 | 内容 |
|
|
74
|
+
|---|---|
|
|
75
|
+
| 操作审计 | who-did-what 审计日志(本规范主体)|
|
|
76
|
+
| 同意记录 | 用户同意:谁、何时、对哪版条款、通过什么方式(见 `privacy-and-compliance-readiness`)|
|
|
77
|
+
| 数据主体请求 | 导出/删除/更正请求的受理与**完成**记录 |
|
|
78
|
+
| 访问评审 | 定期"谁有权访问敏感资源、是否仍需要"的评审记录 |
|
|
79
|
+
| 变更/发布 | 谁、何时、发了什么版本、对应 commit(见 `release-engineering/`)|
|
|
80
|
+
| 控制落实 | 安全扫描、权限配置、加密配置等控制项的执行证据 |
|
|
81
|
+
|
|
82
|
+
证据要**可检索、可导出、带时间线**——审计员问"给我看 X 时间 Y 操作的记录",你要能立刻调出。
|
|
83
|
+
|
|
84
|
+
## 7. 与其他规范的关系
|
|
85
|
+
|
|
86
|
+
- 隐私/数据主体权利的工程化见 `compliance/01-standards/privacy-and-compliance-readiness`。
|
|
87
|
+
- 谁能做什么(授权模型)见 `security/01-standards/authorization-and-access-control`。
|
|
88
|
+
- 应用侧可观测/结构化日志见 `observability/`(审计是其特殊子集,但留存与防篡改要求更高)。
|
|
89
|
+
- 数据泄露响应见 `incident/` 与 `security/02-playbooks/incident-response-security-playbook`。
|
|
90
|
+
|
|
91
|
+
## 8. 反模式(出现即不合格)
|
|
92
|
+
|
|
93
|
+
1. **不记或漏记**:敏感操作(删数据、提权、导出)没有审计,事后查无可查。
|
|
94
|
+
2. **审计可被改/可被删**:应用账号能改写审计日志,入侵者一进来就抹痕迹。
|
|
95
|
+
3. **只记成功不记失败**:被拒的越权尝试(最该警觉的信号)没留下。
|
|
96
|
+
4. **审计混进应用日志**:跟着业务日志几天就轮转没了,达不到保留要求。
|
|
97
|
+
5. **审计里存明文敏感值**:把密码/卡号/token 原样落进审计,制造新暴露面。
|
|
98
|
+
6. **没有"谁操作的"**:只记"某记录被删",记不出是谁删的。
|
|
99
|
+
7. **代理操作不记真实人**:以他人身份操作只记被代理者,查不到真正动手的人。
|
|
100
|
+
8. **合规当临上线补文档**:平时不留证据,审计前临时编造,经不起追溯。
|
|
101
|
+
|
|
102
|
+
## 9. 最低交付 checklist
|
|
103
|
+
|
|
104
|
+
- [ ] 审计日志与应用日志分离,独立、受控、长期保留。
|
|
105
|
+
- [ ] 认证/授权/数据/配置/特权/合规等安全相关操作全部记审计。
|
|
106
|
+
- [ ] 每条记录含 who/when/what/where/result,失败操作同样记录。
|
|
107
|
+
- [ ] 代理操作记录真实操作者 + 被代理者;带关联ID可与应用链路打通。
|
|
108
|
+
- [ ] 审计只追加、应用账号无删改权、有完整性校验、尽快外移到独立信任域。
|
|
109
|
+
- [ ] 审计记录脱敏,不存明文敏感值;查审计本身也受控并留痕。
|
|
110
|
+
- [ ] 审计保留期按合规要求设定,到期前不可删。
|
|
111
|
+
- [ ] 同意记录、数据主体请求、访问评审、变更发布等合规证据可检索可导出。
|