@huicai/cli 2026.714.0 → 2026.804.0
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/README.md +13 -5
- package/bin/huicai.js +83 -0
- package/package.json +2 -2
- package/skills/ab-testing/SKILL.md +58 -0
- package/skills/ab-testing/scripts/__pycache__/ab_test.cpython-312.pyc +0 -0
- package/skills/ab-testing/scripts/ab_test.py +71 -0
- package/skills/academic-writing/SKILL.md +54 -0
- package/skills/accounting-ops/SKILL.md +68 -0
- package/skills/accounting-ops/scripts/__pycache__/acct_tools.cpython-312.pyc +0 -0
- package/skills/accounting-ops/scripts/acct_tools.py +89 -0
- package/skills/ai-agent/SKILL.md +85 -0
- package/skills/ai-agent/references/tool-design-checklist.md +51 -0
- package/skills/ai-aiops/SKILL.md +73 -0
- package/skills/ai-aiops/references/aiops-rollout-checklist.md +36 -0
- package/skills/ai-coding/SKILL.md +89 -0
- package/skills/ai-coding/references/task-brief-template.md +48 -0
- package/skills/ai-compliance/SKILL.md +74 -0
- package/skills/ai-compliance/references/genai-compliance-checklist.md +40 -0
- package/skills/ai-eval/SKILL.md +80 -0
- package/skills/ai-eval/scripts/eval-runner.py +150 -0
- package/skills/ai-llm-app/SKILL.md +90 -0
- package/skills/ai-llm-app/references/llm-integration-checklist.md +39 -0
- package/skills/ai-mlops/SKILL.md +72 -0
- package/skills/ai-mlops/scripts/token-cost-calc.py +108 -0
- package/skills/ai-multimodal/SKILL.md +86 -0
- package/skills/ai-multimodal/scripts/field-validate.py +182 -0
- package/skills/ai-prompt/SKILL.md +75 -0
- package/skills/ai-prompt/references/prompt-template.md +46 -0
- package/skills/ai-rag/SKILL.md +76 -0
- package/skills/ai-rag/scripts/chunk-inspect.py +129 -0
- package/skills/anomaly-detection/SKILL.md +54 -0
- package/skills/anomaly-detection/scripts/__pycache__/anomaly.cpython-312.pyc +0 -0
- package/skills/anomaly-detection/scripts/anomaly.py +99 -0
- package/skills/api-integration/SKILL.md +74 -0
- package/skills/api-integration/references/signing-recipes.md +141 -0
- package/skills/arch-design/SKILL.md +57 -0
- package/skills/arch-distributed/SKILL.md +81 -0
- package/skills/arch-distributed/references/idempotency-review.md +43 -0
- package/skills/arch-multitenant/SKILL.md +73 -0
- package/skills/arch-multitenant/references/tenant-isolation-checklist.md +34 -0
- package/skills/audit-assist/SKILL.md +63 -0
- package/skills/audit-assist/scripts/__pycache__/audit_sampling.cpython-312.pyc +0 -0
- package/skills/audit-assist/scripts/audit_sampling.py +93 -0
- package/skills/audit-chain/SKILL.md +60 -0
- package/skills/banking-credit/SKILL.md +59 -0
- package/skills/banking-credit/scripts/__pycache__/credit_metrics.cpython-312.pyc +0 -0
- package/skills/banking-credit/scripts/credit_metrics.py +53 -0
- package/skills/brand-design/SKILL.md +56 -0
- package/skills/business-plan/SKILL.md +56 -0
- package/skills/capital-ops/SKILL.md +52 -0
- package/skills/cicd-pipeline/SKILL.md +85 -0
- package/skills/cicd-pipeline/references/pipeline-review-checklist.md +39 -0
- package/skills/content-creation/SKILL.md +56 -0
- package/skills/corporate-governance/SKILL.md +56 -0
- package/skills/crawl-chain/SKILL.md +61 -0
- package/skills/customer-service/SKILL.md +51 -0
- package/skills/data-analysis/SKILL.md +46 -0
- package/skills/data-analysis/scripts/cjk_font.py +56 -0
- package/skills/data-chain/SKILL.md +54 -0
- package/skills/data-governance/SKILL.md +54 -0
- package/skills/data-report-pro/SKILL.md +65 -0
- package/skills/data-report-pro/scripts/__pycache__/bigdata.cpython-312.pyc +0 -0
- package/skills/data-report-pro/scripts/bigdata.py +79 -0
- package/skills/data-streaming/SKILL.md +87 -0
- package/skills/data-streaming/references/job-checklist.md +36 -0
- package/skills/data-wrangling/SKILL.md +52 -0
- package/skills/data-wrangling/scripts/__pycache__/join_tools.cpython-312.pyc +0 -0
- package/skills/data-wrangling/scripts/join_tools.py +99 -0
- package/skills/db-es/SKILL.md +68 -0
- package/skills/db-es/scripts/es-health.sh +72 -0
- package/skills/db-migration/SKILL.md +72 -0
- package/skills/db-migration/scripts/checksum-mysql.sql +46 -0
- package/skills/db-migration/scripts/checksum-postgres.sql +39 -0
- package/skills/db-migration/scripts/compare-reports.py +98 -0
- package/skills/db-mysql/SKILL.md +78 -0
- package/skills/db-mysql/scripts/mysql-health.sql +80 -0
- package/skills/db-postgres/SKILL.md +86 -0
- package/skills/db-postgres/scripts/pg-health.sql +67 -0
- package/skills/db-redis/SKILL.md +83 -0
- package/skills/db-redis/scripts/redis-health.sh +92 -0
- package/skills/dev-cpp/SKILL.md +94 -0
- package/skills/dev-cpp/references/cmake-sanitizer-snippets.md +56 -0
- package/skills/dev-cross-platform/SKILL.md +73 -0
- package/skills/dev-cross-platform/references/capability-matrix-template.md +39 -0
- package/skills/dev-csharp/SKILL.md +96 -0
- package/skills/dev-csharp/references/review-checklist.md +37 -0
- package/skills/dev-frontend/SKILL.md +91 -0
- package/skills/dev-frontend/scripts/bundle-budget.py +106 -0
- package/skills/dev-go/SKILL.md +88 -0
- package/skills/dev-go/scripts/go-triage.sh +54 -0
- package/skills/dev-harmony/SKILL.md +64 -0
- package/skills/dev-harmony/references/harmony-checklist.md +40 -0
- package/skills/dev-java/SKILL.md +77 -0
- package/skills/dev-java/scripts/jvm-triage.sh +84 -0
- package/skills/dev-mobile/SKILL.md +82 -0
- package/skills/dev-mobile/references/store-compliance-checklist.md +33 -0
- package/skills/dev-node/SKILL.md +82 -0
- package/skills/dev-node/scripts/node-triage.sh +78 -0
- package/skills/dev-php/SKILL.md +86 -0
- package/skills/dev-php/scripts/fpm-calc.py +48 -0
- package/skills/dev-python/SKILL.md +81 -0
- package/skills/dev-python/scripts/venv-doctor.sh +75 -0
- package/skills/dev-rust/SKILL.md +84 -0
- package/skills/dev-rust/references/cargo-ci-snippets.md +50 -0
- package/skills/dev-toolchain/SKILL.md +78 -0
- package/skills/dev-toolchain/scripts/secret-scan.sh +83 -0
- package/skills/doc-chain/SKILL.md +58 -0
- package/skills/doc-compare/SKILL.md +44 -0
- package/skills/doc-compare/scripts/compare.py +93 -0
- package/skills/docx-author/SKILL.md +39 -0
- package/skills/docx-author/scripts/docx_doc.py +161 -0
- package/skills/ecommerce-ops/SKILL.md +54 -0
- package/skills/ecommerce-ops/scripts/__pycache__/gmv_decompose.cpython-312.pyc +0 -0
- package/skills/ecommerce-ops/scripts/gmv_decompose.py +61 -0
- package/skills/education-training/SKILL.md +53 -0
- package/skills/ehs-safety/SKILL.md +63 -0
- package/skills/email-writing/SKILL.md +52 -0
- package/skills/eng-ai/SKILL.md +74 -0
- package/skills/eng-ai/references/ai-feature-checklist.md +36 -0
- package/skills/eng-architecture/SKILL.md +85 -0
- package/skills/eng-architecture/scripts/capacity-calc.py +100 -0
- package/skills/eng-automation/SKILL.md +84 -0
- package/skills/eng-automation/references/automation-inventory.md +38 -0
- package/skills/eng-automation/references/routine-presets.md +73 -0
- package/skills/eng-collaboration/SKILL.md +76 -0
- package/skills/eng-collaboration/references/collab-templates.md +43 -0
- package/skills/eng-complex-env/SKILL.md +84 -0
- package/skills/eng-complex-env/references/env-dossier-template.md +52 -0
- package/skills/eng-complex-env/scripts/env-recon.sh +152 -0
- package/skills/eng-data-platform/SKILL.md +81 -0
- package/skills/eng-data-platform/references/table-spec-template.md +39 -0
- package/skills/eng-database/SKILL.md +79 -0
- package/skills/eng-database/references/schema-review-checklist.md +37 -0
- package/skills/eng-develop/SKILL.md +76 -0
- package/skills/eng-develop/references/dod-checklist.md +43 -0
- package/skills/eng-docs/SKILL.md +71 -0
- package/skills/eng-docs/references/runbook-template.md +57 -0
- package/skills/eng-efficiency/SKILL.md +75 -0
- package/skills/eng-efficiency/scripts/dora-calc.py +104 -0
- package/skills/eng-infra/SKILL.md +81 -0
- package/skills/eng-infra/references/production-readiness.md +46 -0
- package/skills/eng-integration/SKILL.md +82 -0
- package/skills/eng-integration/references/integration-dossier-template.md +38 -0
- package/skills/eng-legacy/SKILL.md +81 -0
- package/skills/eng-legacy/references/modernization-workbook.md +46 -0
- package/skills/eng-observability/SKILL.md +78 -0
- package/skills/eng-observability/scripts/slo-calc.py +82 -0
- package/skills/eng-ops/SKILL.md +74 -0
- package/skills/eng-ops/references/postmortem-template.md +67 -0
- package/skills/eng-performance/SKILL.md +73 -0
- package/skills/eng-performance/scripts/perf-baseline.py +110 -0
- package/skills/eng-planning/SKILL.md +79 -0
- package/skills/eng-planning/scripts/schedule-calc.py +101 -0
- package/skills/eng-quality/SKILL.md +74 -0
- package/skills/eng-quality/references/test-plan-templates.md +46 -0
- package/skills/eng-release/SKILL.md +78 -0
- package/skills/eng-release/references/release-plan-template.md +36 -0
- package/skills/eng-reliability/SKILL.md +72 -0
- package/skills/eng-reliability/references/resilience-review.md +43 -0
- package/skills/eng-requirements/SKILL.md +86 -0
- package/skills/eng-requirements/references/story-templates.md +47 -0
- package/skills/eng-research/SKILL.md +73 -0
- package/skills/eng-research/references/research-templates.md +42 -0
- package/skills/eng-security/SKILL.md +73 -0
- package/skills/eng-security/references/security-review-checklist.md +33 -0
- package/skills/eng-ux/SKILL.md +85 -0
- package/skills/eng-ux/references/ux-review-checklist.md +36 -0
- package/skills/engineering-chain/SKILL.md +101 -0
- package/skills/engineering-chain/references/eng-health-review.md +37 -0
- package/skills/env-offline/SKILL.md +81 -0
- package/skills/env-offline/scripts/bundle-manifest.sh +94 -0
- package/skills/env-private-deploy/SKILL.md +72 -0
- package/skills/env-private-deploy/references/delivery-templates.md +35 -0
- package/skills/env-xinchuang/SKILL.md +73 -0
- package/skills/env-xinchuang/references/adaptation-matrix-template.md +41 -0
- package/skills/equipment-tpm/SKILL.md +56 -0
- package/skills/equipment-tpm/scripts/oee.py +58 -0
- package/skills/esg-report/SKILL.md +58 -0
- package/skills/esg-report/scripts/carbon_calc.py +61 -0
- package/skills/event-management/SKILL.md +51 -0
- package/skills/excel-analysis-chain/SKILL.md +73 -0
- package/skills/file-ingest/SKILL.md +51 -0
- package/skills/file-ingest/scripts/__pycache__/file_toolkit.cpython-312.pyc +0 -0
- package/skills/file-ingest/scripts/file_toolkit.py +404 -0
- package/skills/finance-analysis/SKILL.md +60 -0
- package/skills/finance-analysis/references/ratios.md +54 -0
- package/skills/finance-analysis/scripts/fin_ratios.py +132 -0
- package/skills/finance-chain/SKILL.md +59 -0
- package/skills/financial-modeling/SKILL.md +58 -0
- package/skills/financial-modeling/scripts/fin_model.py +123 -0
- package/skills/foreign-trade/SKILL.md +54 -0
- package/skills/funnel-cohort/SKILL.md +53 -0
- package/skills/funnel-cohort/scripts/__pycache__/funnel.cpython-312.pyc +0 -0
- package/skills/funnel-cohort/scripts/funnel.py +105 -0
- package/skills/gov-document/SKILL.md +57 -0
- package/skills/hr-chain/SKILL.md +51 -0
- package/skills/hr-operations/SKILL.md +53 -0
- package/skills/info-disclosure/SKILL.md +56 -0
- package/skills/infra-gateway/SKILL.md +85 -0
- package/skills/infra-gateway/references/golive-checklist.md +36 -0
- package/skills/infra-k8s/SKILL.md +78 -0
- package/skills/infra-k8s/scripts/k8s-triage.sh +84 -0
- package/skills/infra-mq/SKILL.md +87 -0
- package/skills/infra-mq/references/mq-review-checklist.md +36 -0
- package/skills/insurance-advisory/SKILL.md +57 -0
- package/skills/internal-audit/SKILL.md +66 -0
- package/skills/ip-management/SKILL.md +54 -0
- package/skills/ipo-listing/SKILL.md +60 -0
- package/skills/it-audit/SKILL.md +56 -0
- package/skills/itsm-ops/SKILL.md +55 -0
- package/skills/knowledge-sop/SKILL.md +51 -0
- package/skills/legal-chain/SKILL.md +55 -0
- package/skills/legal-contract/SKILL.md +58 -0
- package/skills/legal-contract/references/contract-checklists.md +59 -0
- package/skills/litigation-support/SKILL.md +53 -0
- package/skills/logistics-warehouse/SKILL.md +53 -0
- package/skills/logistics-warehouse/scripts/freight_check.py +71 -0
- package/skills/long-doc-analysis/SKILL.md +52 -0
- package/skills/management-accounting/SKILL.md +57 -0
- package/skills/management-accounting/scripts/__pycache__/costing.cpython-312.pyc +0 -0
- package/skills/management-accounting/scripts/costing.py +90 -0
- package/skills/manufacturing-chain/SKILL.md +57 -0
- package/skills/manufacturing-quality/SKILL.md +57 -0
- package/skills/manufacturing-quality/scripts/__pycache__/spc.cpython-312.pyc +0 -0
- package/skills/manufacturing-quality/scripts/spc.py +86 -0
- package/skills/marketing-analytics/SKILL.md +59 -0
- package/skills/marketing-analytics/scripts/__pycache__/rfm.cpython-312.pyc +0 -0
- package/skills/marketing-analytics/scripts/rfm.py +60 -0
- package/skills/marketing-chain/SKILL.md +57 -0
- package/skills/meeting-minutes/SKILL.md +55 -0
- package/skills/metrics-system/SKILL.md +55 -0
- package/skills/negotiation-prep/SKILL.md +56 -0
- package/skills/obs-prometheus/SKILL.md +74 -0
- package/skills/obs-prometheus/references/promql-cheatsheet.md +78 -0
- package/skills/office-automation/SKILL.md +54 -0
- package/skills/okr-review/SKILL.md +44 -0
- package/skills/ops-fleet/SKILL.md +69 -0
- package/skills/ops-fleet/scripts/batch-exec-guard.sh +119 -0
- package/skills/ops-linux/SKILL.md +69 -0
- package/skills/ops-linux/scripts/quick-triage.sh +138 -0
- package/skills/optimization-solver/SKILL.md +53 -0
- package/skills/optimization-solver/scripts/__pycache__/solver.cpython-312.pyc +0 -0
- package/skills/optimization-solver/scripts/solver.py +107 -0
- package/skills/pdf-toolkit/SKILL.md +43 -0
- package/skills/pdf-toolkit/scripts/pdf_ops.py +137 -0
- package/skills/pivot-crosstab/SKILL.md +44 -0
- package/skills/pivot-crosstab/scripts/__pycache__/pivot_tools.cpython-312.pyc +0 -0
- package/skills/pivot-crosstab/scripts/pivot_tools.py +90 -0
- package/skills/policy-analysis/SKILL.md +47 -0
- package/skills/portfolio-analysis/SKILL.md +56 -0
- package/skills/portfolio-analysis/scripts/__pycache__/portfolio.cpython-312.pyc +0 -0
- package/skills/portfolio-analysis/scripts/portfolio.py +78 -0
- package/skills/ppt-chain/SKILL.md +61 -0
- package/skills/pptx-author/SKILL.md +48 -0
- package/skills/pptx-author/scripts/pptx_deck.py +193 -0
- package/skills/pr-comms/SKILL.md +58 -0
- package/skills/pr-comms/references/pr-templates.md +54 -0
- package/skills/procurement-supply/SKILL.md +47 -0
- package/skills/procurement-supply/scripts/__pycache__/supply.cpython-312.pyc +0 -0
- package/skills/procurement-supply/scripts/supply.py +71 -0
- package/skills/product-design/SKILL.md +66 -0
- package/skills/product-design/references/prd-framework.md +60 -0
- package/skills/production-planning/SKILL.md +56 -0
- package/skills/production-planning/scripts/__pycache__/mrp_capacity.cpython-312.pyc +0 -0
- package/skills/production-planning/scripts/mrp_capacity.py +70 -0
- package/skills/project-management/SKILL.md +53 -0
- package/skills/project-management/scripts/__pycache__/cpm.cpython-312.pyc +0 -0
- package/skills/project-management/scripts/cpm.py +84 -0
- package/skills/project-proposal/SKILL.md +54 -0
- package/skills/project-proposal/scripts/budget_sheet.py +90 -0
- package/skills/qa-api-automation/SKILL.md +67 -0
- package/skills/qa-api-automation/references/three-layer-skeleton.md +61 -0
- package/skills/qa-mobile-automation/SKILL.md +70 -0
- package/skills/qa-mobile-automation/references/device-matrix-template.md +34 -0
- package/skills/qa-ui-automation/SKILL.md +80 -0
- package/skills/qa-ui-automation/references/stability-conventions.md +41 -0
- package/skills/quant-analysis/SKILL.md +60 -0
- package/skills/quant-analysis/scripts/__pycache__/quant.cpython-312.pyc +0 -0
- package/skills/quant-analysis/scripts/quant.py +102 -0
- package/skills/real-estate-property/SKILL.md +51 -0
- package/skills/real-estate-property/scripts/__pycache__/property_calc.cpython-312.pyc +0 -0
- package/skills/real-estate-property/scripts/property_calc.py +106 -0
- package/skills/regression-forecast/SKILL.md +52 -0
- package/skills/regression-forecast/scripts/__pycache__/regress.cpython-312.pyc +0 -0
- package/skills/regression-forecast/scripts/regress.py +106 -0
- package/skills/retail-store-ops/SKILL.md +57 -0
- package/skills/retail-store-ops/scripts/store_ops.py +57 -0
- package/skills/risk-compliance/SKILL.md +51 -0
- package/skills/sec-auth/SKILL.md +89 -0
- package/skills/sec-auth/references/auth-review-checklist.md +38 -0
- package/skills/sec-compliance/SKILL.md +74 -0
- package/skills/sec-compliance/references/dengbao-checklist.md +43 -0
- package/skills/securities-chain/SKILL.md +69 -0
- package/skills/securities-research/SKILL.md +58 -0
- package/skills/securities-research/scripts/__pycache__/valuation.cpython-312.pyc +0 -0
- package/skills/securities-research/scripts/valuation.py +93 -0
- package/skills/slides-html/SKILL.md +50 -0
- package/skills/slides-html/scripts/template.html +117 -0
- package/skills/statistical-testing/SKILL.md +51 -0
- package/skills/statistical-testing/scripts/__pycache__/stat_tests.cpython-312.pyc +0 -0
- package/skills/statistical-testing/scripts/stat_tests.py +131 -0
- package/skills/strategy-planning/SKILL.md +53 -0
- package/skills/supply-chain/SKILL.md +53 -0
- package/skills/tax-compliance/SKILL.md +57 -0
- package/skills/tax-compliance/scripts/tax_calc.py +90 -0
- package/skills/tech-research/SKILL.md +55 -0
- package/skills/tech-research/references/research-framework.md +50 -0
- package/skills/tender-bidding/SKILL.md +65 -0
- package/skills/tender-bidding/references/bid-checklist.md +44 -0
- package/skills/translation-pro/SKILL.md +44 -0
- package/skills/treasury-mgmt/SKILL.md +56 -0
- package/skills/treasury-mgmt/scripts/__pycache__/cashflow_forecast.cpython-312.pyc +0 -0
- package/skills/treasury-mgmt/scripts/cashflow_forecast.py +51 -0
- package/skills/web-scraping/SKILL.md +81 -0
- package/skills/web-search/SKILL.md +67 -0
- package/skills/xlsx-analysis/SKILL.md +96 -0
- package/skills/xlsx-analysis/scripts/__pycache__/xlsx_toolkit.cpython-312.pyc +0 -0
- package/skills/xlsx-analysis/scripts/xlsx_style.py +71 -0
- package/skills/xlsx-analysis/scripts/xlsx_toolkit.py +335 -0
- package/src/advisor.js +1 -1
- package/src/agent.js +1 -1
- package/src/api.js +1 -1
- package/src/assets-import.js +1 -0
- package/src/autofix.js +1 -1
- package/src/automation.js +1 -1
- package/src/codeindex.js +1 -1
- package/src/commands.js +1 -1
- package/src/compaction.js +1 -1
- package/src/config.js +1 -1
- package/src/context-report.js +1 -1
- package/src/context.js +1 -1
- package/src/decisions.js +1 -0
- package/src/doccache.js +1 -0
- package/src/doctor.js +1 -1
- package/src/executors.js +1 -1
- package/src/expert-catalog.js +1 -0
- package/src/experts-store.js +1 -0
- package/src/gitflow.js +1 -1
- package/src/input.js +1 -1
- package/src/mcp.js +1 -1
- package/src/permissions.js +1 -1
- package/src/pyruntime.js +1 -0
- package/src/repl.js +1 -1
- package/src/scan.js +1 -1
- package/src/schedule-freq.js +1 -0
- package/src/schedule.js +1 -1
- package/src/session.js +1 -1
- package/src/skills.js +1 -1
- package/src/squad.js +1 -1
- package/src/subagent.js +1 -1
- package/src/title.js +1 -0
- package/src/tools.js +1 -1
- package/src/transcript.js +1 -1
- package/src/tui/app.js +1 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-efficiency
|
|
3
|
+
description: 工程效能链(DORA 四键口径与采集→SPACE 多维补盲→价值流映射找瓶颈(等待 vs 处理)→效能改进循环→度量反模式(Goodhart/个人排名禁区)→效能数据打通(需求-PR-流水线-发布串 ID)→效能平台建设判据)。工程链效能深耕:效能度量立项、研发瓶颈诊断、"研发为什么慢"灵魂拷问、度量被玩坏时载入。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 工程效能链
|
|
8
|
+
|
|
9
|
+
engineering-chain 的效能子链。第一原则:**度量服务于改进,不服务于考核**——
|
|
10
|
+
用于考核的那一刻,数字就开始说谎(Goodhart 定律)。
|
|
11
|
+
|
|
12
|
+
## DORA 四键(组织效能基线,口径要钉死)
|
|
13
|
+
|
|
14
|
+
| 指标 | 口径(钉死再采集) | 精英参考带 |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| 部署频率 | 生产环境成功部署次数(按服务/按团队分开看) | 按需多次/日 |
|
|
17
|
+
| 变更前置时间 | 代码提交→生产运行(不是需求提出→上线,那是另一条) | <1 天 |
|
|
18
|
+
| 变更失败率 | 部署后需回滚/热修的比例(口径含紧急通道) | <15% |
|
|
19
|
+
| 恢复时长 MTTR | 生产事件发现→恢复(eng-ops 事件时间线取数) | <1 小时 |
|
|
20
|
+
|
|
21
|
+
用法纪律:四个一起看(只冲部署频率会牺牲失败率);看趋势与分布不看单点;
|
|
22
|
+
**团队间不排名**(上下文不同,排名=逼人改口径);参考带用于自我定位不用于压指标。
|
|
23
|
+
|
|
24
|
+
## SPACE 多维补盲(DORA 之外的另一半真相)
|
|
25
|
+
|
|
26
|
+
满意度(问卷:工具/流程/on-call 负担)/绩效(结果质量)/活动(产出量,**最易被玩坏,只做参考**)/
|
|
27
|
+
沟通协作(评审等待时长/跨团队依赖阻塞)/流动效率(专注时间占比,会议与打断侵蚀);
|
|
28
|
+
选型纪律:每季选 2–3 个维度深看,全量仪表盘=没人看的数字坟场;
|
|
29
|
+
**开发者满意度是领先指标**:满意度掉→半年后交付掉(招人留人成本更是数倍)。
|
|
30
|
+
|
|
31
|
+
## 价值流映射(瓶颈诊断的手术刀)
|
|
32
|
+
|
|
33
|
+
从"需求提出"到"用户可用"画全链时间线,每环节标两个数:**处理时间**(真在干活)与**等待时间**(排队/审批/等人/等环境);
|
|
34
|
+
常见真相:总时长里等待占 70%+——瓶颈通常不在"写代码慢",在等评审/等测试环境/等发布窗口/等另一个团队接口;
|
|
35
|
+
诊断三步:画图(全角色参与,各自贴自己环节的实际数据)→ 找最大等待段 → 问五个为什么(等评审=评审人过载?PR 太大?时区错开?);
|
|
36
|
+
**改善等待的 ROI 通常十倍于改善处理**(让写码快 10% 难,砍掉两天等待易)。
|
|
37
|
+
|
|
38
|
+
## 效能改进循环(季度节奏)
|
|
39
|
+
|
|
40
|
+
基线(先测三个月,别上来就改)→ 选一个瓶颈(**一次只治一个**,同时开五个专项=零个)→
|
|
41
|
+
设计实验(改什么/预期哪个指标动/多久复测)→ 执行(改进本身进迭代排期,eng-planning 占容量)→
|
|
42
|
+
复测归因(动了=固化推广;没动=复盘假设)→ 下一个瓶颈。
|
|
43
|
+
常见高 ROI 改进对照:前置时间长→PR 减肥(小 PR 纪律)+评审 SLA(24h 响应)+流水线提速(cicd-pipeline);
|
|
44
|
+
失败率高→门禁补强(eng-quality/eng-release);MTTR 长→可观测与预案(eng-observability/eng-ops);
|
|
45
|
+
等待环境→环境自助化(eng-infra/eng-automation)。
|
|
46
|
+
|
|
47
|
+
## 度量反模式黑名单
|
|
48
|
+
|
|
49
|
+
- **个人排名与代码行数/提交数 KPI**:立刻收获灌水提交与拆分刷单,数字失真且士气崩;
|
|
50
|
+
- 唯覆盖率(eng-quality 已批)/唯故事点吞吐(点数会通胀);
|
|
51
|
+
- 平均值掩盖分布(前置时间 P50 好看,P90 三周=一半需求体验差);
|
|
52
|
+
- 度量不改进:仪表盘建完没人看没人动=测量剧场;
|
|
53
|
+
- 用工具数据替代对话:数字发现异常,原因要去问人(数据说"评审慢",原因可能是"就一个人会这模块"——那是巴士系数问题,eng-research 风险表);
|
|
54
|
+
- 短期主义:效能改进(还债/自动化)本身占容量,砍掉它们冲当期交付=借高利贷。
|
|
55
|
+
|
|
56
|
+
## 效能数据打通(平台工程面)
|
|
57
|
+
|
|
58
|
+
串 ID 是前提:需求单-分支/PR-流水线-制品-发布单-事件单一路关联(提交信息带工单号,commit-and-pr 规范落地);
|
|
59
|
+
采集自动化:四键从系统取数(Git/CI/发布/事件平台),**手工填报的效能数据活不过三个月**;
|
|
60
|
+
数据口径文档化(与 data-governance 字典同构:每个指标一条口径+Owner);
|
|
61
|
+
效能平台建设判据:先用现成工具拼报表(例程周报,eng-automation),**指标被真用起来再谈自建平台**。
|
|
62
|
+
|
|
63
|
+
## 汇报与沟通
|
|
64
|
+
|
|
65
|
+
对管理层:趋势+瓶颈+改进 ROI(别甩四十个指标);对团队:自己环节的分布与同比(自己跟自己比);
|
|
66
|
+
效能异动先内部归因再对外解释(发布节奏变化/团队重组都会扰动指标,标注事件线,eng-observability 同法);
|
|
67
|
+
**把"效能报告"做成"瓶颈诊断书"**:每期回答"当前最慢在哪、上期改进兑现没"两问即可。
|
|
68
|
+
|
|
69
|
+
**作业包**:`scripts/dora-calc.py`(部署与事件 CSV→四键报告(频率/CFR/前置时间/MTTR),含参考带与瓶颈指引——趋势自比不排名)。
|
|
70
|
+
|
|
71
|
+
## 使用纪律
|
|
72
|
+
|
|
73
|
+
度量前先声明用途并公示(改进用,不进绩效);口径变更留版本(否则趋势失真);
|
|
74
|
+
每季改进循环闭环一次;数字异常先查采集再查人。
|
|
75
|
+
**效能工程的产出不是报表,是被砍掉的等待时间。**
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# DORA 四键计算器(eng-efficiency 口径钉死的可执行版)。python3 stdlib,零依赖。
|
|
3
|
+
# 输入两份 CSV(从发布系统/事件平台导出,手工填报的效能数据活不过三个月):
|
|
4
|
+
# deploys.csv: date,status[,lead_hours] # date=YYYY-MM-DD status=success|failed(需回滚/热修)
|
|
5
|
+
# # lead_hours=提交→生产小时数(可选列)
|
|
6
|
+
# incidents.csv: start,end # 生产事件起止 YYYY-MM-DD HH:MM
|
|
7
|
+
# 用法: python3 dora-calc.py --deploys deploys.csv [--incidents incidents.csv]
|
|
8
|
+
# python3 dora-calc.py --selftest
|
|
9
|
+
# 纪律: 团队间不排名,只看自己趋势;四个一起看(只冲部署频率会牺牲失败率)。
|
|
10
|
+
import argparse
|
|
11
|
+
import csv
|
|
12
|
+
import sys
|
|
13
|
+
from datetime import datetime
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def pct(vs, p):
|
|
17
|
+
if not vs:
|
|
18
|
+
return 0.0
|
|
19
|
+
vs = sorted(vs)
|
|
20
|
+
k = (len(vs) - 1) * p / 100
|
|
21
|
+
lo, hi = int(k), min(int(k) + 1, len(vs) - 1)
|
|
22
|
+
return vs[lo] + (vs[hi] - vs[lo]) * (k - lo)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def load_deploys(path):
|
|
26
|
+
deps = []
|
|
27
|
+
with open(path, encoding="utf-8") as f:
|
|
28
|
+
for ln in csv.reader(f):
|
|
29
|
+
if not ln or ln[0].startswith("#") or ln[0] in ("date",):
|
|
30
|
+
continue
|
|
31
|
+
d = datetime.strptime(ln[0].strip(), "%Y-%m-%d")
|
|
32
|
+
ok = ln[1].strip().lower() in ("success", "ok", "成功")
|
|
33
|
+
lead = float(ln[2]) if len(ln) > 2 and ln[2].strip() else None
|
|
34
|
+
deps.append((d, ok, lead))
|
|
35
|
+
return deps
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def load_incidents(path):
|
|
39
|
+
out = []
|
|
40
|
+
with open(path, encoding="utf-8") as f:
|
|
41
|
+
for ln in csv.reader(f):
|
|
42
|
+
if not ln or ln[0].startswith("#") or ln[0] in ("start",):
|
|
43
|
+
continue
|
|
44
|
+
s = datetime.strptime(ln[0].strip(), "%Y-%m-%d %H:%M")
|
|
45
|
+
e = datetime.strptime(ln[1].strip(), "%Y-%m-%d %H:%M")
|
|
46
|
+
out.append((e - s).total_seconds() / 60)
|
|
47
|
+
return out
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def report(deps, mttr_mins):
|
|
51
|
+
if not deps:
|
|
52
|
+
print("[错误] 无部署记录")
|
|
53
|
+
return 2
|
|
54
|
+
days = max((max(d for d, _, _ in deps) - min(d for d, _, _ in deps)).days, 1)
|
|
55
|
+
weeks = max(days / 7, 0.1)
|
|
56
|
+
n = len(deps)
|
|
57
|
+
fails = sum(1 for _, ok, _ in deps if not ok)
|
|
58
|
+
leads = [l for _, _, l in deps if l is not None]
|
|
59
|
+
print(f"== DORA 四键(区间 {days} 天,{n} 次部署) ==")
|
|
60
|
+
freq = n / weeks
|
|
61
|
+
band = "精英参考带内(按需/日级)" if freq >= 7 else ("周级" if freq >= 1 else "低于周级——查价值流哪段在等(评审?环境?窗口?)")
|
|
62
|
+
print(f"1. 部署频率: {freq:.1f} 次/周 [{band}]")
|
|
63
|
+
cfr = fails * 100 / n
|
|
64
|
+
print(f"2. 变更失败率: {cfr:.1f}% ({fails}/{n}){' <== >15%:门禁与发布模式复查(eng-quality/eng-release)' if cfr > 15 else ''}")
|
|
65
|
+
if leads:
|
|
66
|
+
print(f"3. 变更前置时间(提交→生产): P50={pct(leads, 50):.1f}h P90={pct(leads, 90):.1f}h"
|
|
67
|
+
f"{' <== P90 与 P50 悬殊:平均掩盖分布,查长尾需求卡在哪' if leads and pct(leads, 90) > 4 * max(pct(leads, 50), 0.1) else ''}")
|
|
68
|
+
else:
|
|
69
|
+
print("3. 变更前置时间: 无数据(deploys.csv 补 lead_hours 列;串 ID 采集见 eng-efficiency 数据打通)")
|
|
70
|
+
if mttr_mins:
|
|
71
|
+
print(f"4. MTTR: 中位 {pct(mttr_mins, 50):.0f} 分钟 P90={pct(mttr_mins, 90):.0f} 分钟 ({len(mttr_mins)} 起)"
|
|
72
|
+
f"{' <== 中位>60min:预案与可观测复查(eng-ops/eng-observability)' if pct(mttr_mins, 50) > 60 else ''}")
|
|
73
|
+
else:
|
|
74
|
+
print("4. MTTR: 无事件数据(0 事件或未导出 —— 区分清楚,别把没记当没有)")
|
|
75
|
+
print("用法纪律: 看趋势不看单点;改进一次只治一个瓶颈(eng-efficiency 改进循环)。")
|
|
76
|
+
return 0
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def selftest():
|
|
80
|
+
import tempfile, os
|
|
81
|
+
with tempfile.TemporaryDirectory() as d:
|
|
82
|
+
dp = os.path.join(d, "d.csv")
|
|
83
|
+
ic = os.path.join(d, "i.csv")
|
|
84
|
+
open(dp, "w").write("date,status,lead_hours\n" + "\n".join(
|
|
85
|
+
f"2026-06-{i:02d},{'success' if i % 5 else 'failed'},{6 + i % 40}" for i in range(1, 29)))
|
|
86
|
+
open(ic, "w").write("start,end\n2026-06-03 10:00,2026-06-03 10:45\n2026-06-15 22:10,2026-06-16 01:10\n")
|
|
87
|
+
rc = report(load_deploys(dp), load_incidents(ic))
|
|
88
|
+
assert rc == 0
|
|
89
|
+
print("\nselftest ok")
|
|
90
|
+
return 0
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def main():
|
|
94
|
+
if "--selftest" in sys.argv:
|
|
95
|
+
sys.exit(selftest())
|
|
96
|
+
p = argparse.ArgumentParser(description="DORA 四键(口径见文件头)")
|
|
97
|
+
p.add_argument("--deploys", required=True)
|
|
98
|
+
p.add_argument("--incidents")
|
|
99
|
+
a = p.parse_args()
|
|
100
|
+
sys.exit(report(load_deploys(a.deploys), load_incidents(a.incidents) if a.incidents else []))
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
if __name__ == "__main__":
|
|
104
|
+
main()
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-infra
|
|
3
|
+
description: 基础设施链(IaC 纪律与漂移检测→容器镜像优化→K8s 工作负载治理(探针/配额/HPA)→网络入口分层→密钥配置管理→多环境一致性→FinOps 成本治理→灾备等级表)。工程链基础设施深耕:上云建环境、容器化改造、K8s 资源治理、云成本失控、灾备定级时载入。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 基础设施链
|
|
8
|
+
|
|
9
|
+
engineering-chain 的基础设施子链。总则:**基础设施即代码,控制台点出来的资源=无主技术债**。
|
|
10
|
+
中间件孙链:消息队列(选型/重平衡/堆积治理)载 **infra-mq**;K8s 深度见下文指针;非 K8s 存量主机(批量执行纪律/基线/CMDB)载 **ops-fleet**。
|
|
11
|
+
|
|
12
|
+
## IaC 纪律
|
|
13
|
+
|
|
14
|
+
- 一切环境资源过代码(Terraform/Pulumi 思路):评审、版本、可重建三件套齐活;
|
|
15
|
+
- state 文件保护:远端存储+加锁+禁手改;模块化复用(网络/计算/存储分模块);
|
|
16
|
+
- **漂移检测周巡**:实际环境 vs 代码 diff,漂移=有人绕过流程,先补代码再查流程;
|
|
17
|
+
- 紧急手工操作允许,但 24h 内回补代码(与 eng-ops 紧急变更补票同拍)。
|
|
18
|
+
|
|
19
|
+
## 容器镜像
|
|
20
|
+
|
|
21
|
+
- 多阶段构建:构建期工具不进运行镜像;运行层用内部基线镜像(统一含时区/CA 证书/中文字体/常用诊断工具——**排障时没有 curl 的镜像是自我惩罚**,或配 debug sidecar 方案);
|
|
22
|
+
- 层缓存排序:少变的(依赖)在前、常变的(代码)在后,构建提速一个量级;
|
|
23
|
+
- 非 root 运行+只读根文件系统(能开就开);镜像扫描入 CI(eng-security),基线镜像月度更新;
|
|
24
|
+
- 国内环境:依赖源配镜像仓(npm/PyPI/Maven 私服统一代理,dev-toolchain),**构建不出网是目标态**;
|
|
25
|
+
- 标签纪律:禁 latest 上生产,镜像标签=不可变版本(digest 固定更佳)。
|
|
26
|
+
|
|
27
|
+
## K8s 工作负载治理
|
|
28
|
+
|
|
29
|
+
- **requests/limits 必填**:不填 requests=调度盲飞,不填 limits=吵闹邻居;内存 limits=requests(防 OOM 抽签),CPU limits 按需(节流观测后调);
|
|
30
|
+
- 探针三件套判据:liveness 只查自身进程活性、**禁查下游依赖**(下游抖动引发全体重启雪崩);readiness 查依赖(依赖不可用就摘流);startup 给慢启动应用兜底;
|
|
31
|
+
- 高可用配置:副本 ≥2 + PodDisruptionBudget + 同应用反亲和(跨节点/跨可用区);
|
|
32
|
+
- HPA:CPU 之外优先业务指标(队列长度/QPS);**扩得快缩得慢**(缩容冷静期防抖);与集群自动扩缩配合看(Pod 扩了节点没了=白扩);
|
|
33
|
+
- 命名空间按 团队×环境 切;ResourceQuota+LimitRange 兜底(没人能一把吃光集群);
|
|
34
|
+
- 深度治理(工作负载五型判据/调度/网络四层/存储/集群升级/排障决策树)载 **infra-k8s**。
|
|
35
|
+
|
|
36
|
+
## 网络与流量入口
|
|
37
|
+
|
|
38
|
+
入口分层:公网 LB → 网关/Ingress(TLS 终止、限流、WAF) → 服务;**内部服务默认不出公网**(零信任起步:服务间最小可达);
|
|
39
|
+
网关深耕(选型/灰度路由/证书集中管理/WAF/服务网格判据)载 **infra-gateway**;
|
|
40
|
+
DNS TTL 与故障切换预案匹配(TTL 3600 的域名做不了 5 分钟切换);
|
|
41
|
+
CDN 判据:静态资源默认上,缓存键设计防窜数据(vary 头/查询参数白名单),回源限流保护源站;
|
|
42
|
+
出口固定 IP 需求(对方白名单)提前规划 NAT。
|
|
43
|
+
|
|
44
|
+
## 密钥与配置管理
|
|
45
|
+
|
|
46
|
+
- **密钥四不**:不进代码、不进镜像、不进日志、不进明文环境变量文件——统一密钥服务(Vault/云 KMS 思路;K8s Secret 起步则必须开启静态加密+RBAC 收紧);
|
|
47
|
+
- 轮换机制:密钥有效期与轮换演练(能轮换的密钥才是受控密钥,eng-security 生命周期);
|
|
48
|
+
- 配置分层:默认值 < 环境级 < 实例级;配置变更=变更(走 eng-ops 流程,有审计有回滚);
|
|
49
|
+
- 配置中心判据:需要运行时热更才上,只是环境差异用环境变量足矣。
|
|
50
|
+
|
|
51
|
+
## 多环境一致性
|
|
52
|
+
|
|
53
|
+
- 环境矩阵:dev(随便折腾)/test(集成与自动化)/staging(**与生产同构:同镜像同编排同配置结构,只差规模与数据**)/prod;
|
|
54
|
+
- **同一制品跑所有环境**(eng-release 一次构建),禁止"staging 特供代码/生产特供补丁";
|
|
55
|
+
- 生产数据不下行:下行需求用脱敏样本集(eng-security 数据分级);
|
|
56
|
+
- 环境漂移检测纳入周巡(staging 与 prod 的配置 diff 报告)。
|
|
57
|
+
|
|
58
|
+
## FinOps 成本治理
|
|
59
|
+
|
|
60
|
+
- 标签强制:Owner/项目/环境三标签,**无标签资源不予创建**(策略拦截),无主资源=第一浪费源;
|
|
61
|
+
- 月度成本例会:TOP10 资源复核、环比>20% 异动归因、单位业务成本趋势(总成本会涨,单均成本要降);
|
|
62
|
+
- 优化三板斧:规格右调(利用率<20% 的降配)、弹性(夜间缩容/竞价实例跑无状态批任务)、存储生命周期(日志与备份 热 7 天/温 30/冷 365 分层);
|
|
63
|
+
- 预留与折扣:稳定基线负载买预留,弹性部分按量——先有用量画像再谈采购。
|
|
64
|
+
|
|
65
|
+
## 灾备等级表(按业务分级配,不一刀切)
|
|
66
|
+
|
|
67
|
+
| 等级 | 形态 | RTO/RPO 量级 | 代价 |
|
|
68
|
+
|---|---|---|---|
|
|
69
|
+
| 冷备 | 备份异地存放 | 天级/小时级 | 最低;恢复靠演练保真 |
|
|
70
|
+
| 温备 | 异地可快速拉起(IaC+数据异步复制) | 小时级/分钟级 | 中;IaC 成熟度是前提 |
|
|
71
|
+
| 热备双活 | 双站点同时服务 | 分钟级/≈0 | 高;数据一致性与流量调度复杂度陡增 |
|
|
72
|
+
|
|
73
|
+
演练纪律:**不演练的灾备=PPT 灾备**,季度按预案真切一次(哪怕只切只读流量),实测值回填(eng-ops 恢复演练同拍)。
|
|
74
|
+
|
|
75
|
+
**作业包**:`references/production-readiness.md`(生产就绪单:资源探针配置密钥发布可观测可靠性备份安全逐项勾——新服务上线准入)。
|
|
76
|
+
|
|
77
|
+
## 使用纪律
|
|
78
|
+
|
|
79
|
+
生产基础设施变更走 eng-release/eng-ops 流程(基础设施变更引发的事件占比最高);
|
|
80
|
+
基础设施自身也要可观测(节点/网络/证书到期/配额水位,eng-observability);
|
|
81
|
+
证书与域名到期自动盯(office-automation 例程);每次容量/成本/故障事件回写:配额基线与预案更新。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 生产就绪检查单(eng-infra 落笔件:新服务上生产前逐项勾,eng-release 准入引用)
|
|
2
|
+
|
|
3
|
+
## 资源与调度
|
|
4
|
+
|
|
5
|
+
- [ ] requests/limits 必填(内存 limits=requests;CPU limits 观测后调)
|
|
6
|
+
- [ ] 副本 ≥2 + PDB + 同应用反亲和(跨节点/可用区)
|
|
7
|
+
- [ ] HPA:指标 __(CPU 之外优先业务指标);扩快缩慢冷静期
|
|
8
|
+
- [ ] 命名空间配额内;成本三标签(Owner/项目/环境)已打
|
|
9
|
+
|
|
10
|
+
## 探针三件套(判据背一遍再配)
|
|
11
|
+
|
|
12
|
+
- [ ] liveness:只查自身进程,**禁查下游**(防雪崩重启)
|
|
13
|
+
- [ ] readiness:查依赖(依赖不可用即摘流)
|
|
14
|
+
- [ ] startup:慢启动兜底(替代放宽 liveness)
|
|
15
|
+
|
|
16
|
+
## 配置与密钥
|
|
17
|
+
|
|
18
|
+
- [ ] 密钥四不:不进代码/镜像/日志/明文 env(密钥服务或加密 Secret+RBAC)
|
|
19
|
+
- [ ] 配置分层(默认<环境<实例);**同一制品多环境**,无环境特供代码
|
|
20
|
+
- [ ] ConfigMap 变更的滚动触发(哈希注解)已配(改了不生效的经典,infra-k8s)
|
|
21
|
+
|
|
22
|
+
## 镜像与发布
|
|
23
|
+
|
|
24
|
+
- [ ] 多阶段构建;非 root;镜像扫描过;禁 latest(digest/不可变 tag)
|
|
25
|
+
- [ ] 优雅退出:SIGTERM→停接新请求→在途完成→退出;terminationGracePeriod 匹配
|
|
26
|
+
- [ ] 发布模式与回滚预案(release-plan-template)
|
|
27
|
+
|
|
28
|
+
## 可观测三件套(eng-observability 准入)
|
|
29
|
+
|
|
30
|
+
- [ ] RED 指标暴露;结构化日志+traceId;trace 接入
|
|
31
|
+
- [ ] 告警已配且过三问(runbook 链接挂告警上)
|
|
32
|
+
- [ ] 大盘:全局盘挂上;发布事件线打点
|
|
33
|
+
|
|
34
|
+
## 可靠性
|
|
35
|
+
|
|
36
|
+
- [ ] 每个外部调用过容错判据表(超时必配/重试幂等/熔断降级,resilience-review)
|
|
37
|
+
- [ ] 强弱依赖标注;故障演练日期 __
|
|
38
|
+
- [ ] 容量:压测拐点 __ QPS×0.7=水位 __;当前预估峰值 __
|
|
39
|
+
|
|
40
|
+
## 数据与安全
|
|
41
|
+
|
|
42
|
+
- [ ] 备份策略 3-2-1;恢复演练日期 __
|
|
43
|
+
- [ ] 安全基线:默认口令清零/调试接口关闭/SCA 无高危(eng-security)
|
|
44
|
+
- [ ] 网络:内部服务不出公网;NetworkPolicy(渐进);入口走网关(infra-gateway)
|
|
45
|
+
|
|
46
|
+
> 结论: □就绪 □带条件就绪(条件+Owner+期限:__) □打回。评审人:__ 日期:__
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-integration
|
|
3
|
+
description: 集成工程链(集成模式判据(同步 API/异步消息/文件批量)→第三方对接五阶段全流程→防腐层纪律→回调安全四件套→幂等与对账兜底→凭证配额管理→消息集成专项(重复/乱序/堆积)→第三方坑清单)。工程链集成深耕:对接支付/OA/ERP/银行/短信等第三方系统、内部系统间集成、回调丢单对不上账时载入。接口契约细则由 api-design、单接口调试由 api-integration 承接。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 集成工程链
|
|
8
|
+
|
|
9
|
+
engineering-chain 的集成子链。集成的本质是**与不受你控制的系统共舞**:对方会挂、会慢、会改、会不通知——
|
|
10
|
+
一切设计从这个假设出发。
|
|
11
|
+
|
|
12
|
+
## 集成模式判据表
|
|
13
|
+
|
|
14
|
+
| 模式 | 适用 | 代价 |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| 同步 API | 实时要结果(下单查库存) | 可用性耦合(对方挂你也挂),容错全家桶必配(eng-reliability) |
|
|
17
|
+
| 异步消息 | 通知/解耦/削峰(状态广播) | 最终一致;重复乱序要设计(见消息专项) |
|
|
18
|
+
| 文件批量 | 大批量对账单/银企直连遗留形态 | 时效差;断点续传与校验(条数+金额+md5)必做 |
|
|
19
|
+
| 共享数据库 | — | **反模式**:耦合 schema,禁新增;存量的往 API/消息迁 |
|
|
20
|
+
|
|
21
|
+
选型口诀:能异步不同步(少一分可用性耦合),必须同步就上全套容错。
|
|
22
|
+
|
|
23
|
+
## 第三方对接五阶段
|
|
24
|
+
|
|
25
|
+
1. **评估**(签约前技术尽调):文档质量/沙箱有无/限流配额与 SLA/**费用模型**(按次计费的重试要算钱)/资质合规(支付牌照/数据出境)——评估结论进 eng-research 评分卡,退出成本先看(换供应商半径);
|
|
26
|
+
2. **契约**:字段映射表(对方字段→我方领域模型,**防腐层收口**见下);状态机对齐(对方的"处理中"细分几种?终态是哪些?);错误码分类表(可重试/不可重试/要人工);
|
|
27
|
+
3. **联调**:沙箱账号与测试数据集;对方沙箱与生产的行为差异清单(**沙箱回调时序与生产常不同**,别拿沙箱时序做假设);mock 服务兜底(对方沙箱挂了联调不停摆);
|
|
28
|
+
4. **上线**:灰度切流(新旧通道并行,对账核对一致再全切);监控就位(成功率/时延/配额余量,eng-observability);
|
|
29
|
+
5. **运维**:对方变更公告盯梢(订阅+例程巡检,eng-automation);故障隔离预案(对方挂了降级/排队/换备用通道);年度回顾(费用/SLA 达成/替代方案市场扫描)。
|
|
30
|
+
|
|
31
|
+
## 防腐层纪律(第三方模型不进领域)
|
|
32
|
+
|
|
33
|
+
适配器统一收口:第三方 SDK/字段/枚举只存在于 adapter 模块,**领域代码零感知第三方**(对方改版只改 adapter);
|
|
34
|
+
双向转换显式:入参出参都过映射(隐式透传=对方加个字段你就裸奔);
|
|
35
|
+
多供应商同能力(短信/支付/OCR)抽统一接口+路由策略(主备切换/按成本路由)——**换供应商是常态,架构要让换得起**;
|
|
36
|
+
第三方枚举防御:收到未知枚举值走兜底分支+告警,不许 default 吞掉(对方偷偷加状态是常规操作)。
|
|
37
|
+
|
|
38
|
+
## 回调安全四件套(回调接口=对外攻击面)
|
|
39
|
+
|
|
40
|
+
验签(按对方算法验,**密钥配轮换**)/时间戳窗口防重放(±5 分钟)/来源约束(IP 白名单或域名校验,能配就配)/
|
|
41
|
+
**快速返回+异步处理**:回调处理只做验签+落库+返回成功,业务逻辑异步消费——同步做业务=对方超时重推=重复处理;
|
|
42
|
+
回调幂等:唯一业务键(对方单号)约束兜底(eng-database 幂等设计);
|
|
43
|
+
回调日志全量留存(原始报文落盘,对账与仲裁的证据)。
|
|
44
|
+
|
|
45
|
+
## 幂等与对账(不对账的资金集成=裸奔)
|
|
46
|
+
|
|
47
|
+
- **回调会丢,主动查询兜底**:未终态订单定时轮询对方查询接口(退避节奏),回调与查询双通道汇聚同一状态机;
|
|
48
|
+
- 状态机推进单向:只许沿合法迁移推进(晚到的"处理中"不许覆盖"已成功",eng-quality 状态迁移用例);
|
|
49
|
+
- **日终对账三层**:笔数对→金额对→逐笔对;差异分类处置(我有他无=掉单补查/他有我无=多收退款或漏单补录/状态不一致=以对方终态+人工复核);资金类 T+1 必对,差异清零才算闭环;
|
|
50
|
+
- 长款短款处置流程与挂账科目提前和财务约定(finance-chain 衔接)。
|
|
51
|
+
|
|
52
|
+
## 凭证与配额管理
|
|
53
|
+
|
|
54
|
+
第三方密钥入密钥服务(eng-infra 四不),轮换演练;证书到期巡检(eng-automation 例程);
|
|
55
|
+
**配额监控**:用量接近限额提前告警(短信/OCR 按量配额耗尽=业务静默失败);
|
|
56
|
+
多环境凭证隔离(测试凭证打生产=经典事故);对方 IP 白名单变更流程记档(扩容加节点要同步报备)。
|
|
57
|
+
|
|
58
|
+
## 消息集成专项(内部系统间异步)
|
|
59
|
+
|
|
60
|
+
重复消费:消费端幂等是铁律(broker 至少一次投递是常态);
|
|
61
|
+
乱序:业务上容忍或按 key 分区保序(全局有序=吞吐归零,别轻易要);
|
|
62
|
+
堆积:消费速率监控+堆积告警;堆积处置序(扩消费者→降级非核心消费逻辑→死信隔离毒消息);
|
|
63
|
+
死信队列必配+定期清理复盘(毒消息模式回写);
|
|
64
|
+
消息 schema 演进:只加不改不删(api-design 同则),消费者容忍未知字段;
|
|
65
|
+
事务性发件箱判据:业务落库与发消息要原子时(本地消息表/outbox 轮询),**先发消息后落库=经典丢单**;
|
|
66
|
+
引擎侧深耕(选型判据表/分区与重平衡/位移语义/堆积处置序)载 **infra-mq**。
|
|
67
|
+
|
|
68
|
+
## 第三方坑清单(评估与运维备查)
|
|
69
|
+
|
|
70
|
+
对方升级不通知(接口行为悄变→契约测试定期跑对方沙箱);文档与实际不符(以抓包为准,文档只当线索);
|
|
71
|
+
时区与编码(对方 GMT+8 无标注/GBK 报文);金额单位(分 vs 元,**上线前双方书面确认**);
|
|
72
|
+
限流突增被封(重试风暴触发对方风控→重试预算,eng-reliability);
|
|
73
|
+
对方维护窗口(月末维护撞你月结→维护日历互换);
|
|
74
|
+
证书链不全/自签证书(客户端信任配置单列)。
|
|
75
|
+
|
|
76
|
+
**作业包**:`references/integration-dossier-template.md`(集成档案:契约要点/回调安全四件/对账三层/变更事件追加——一条集成一档)。
|
|
77
|
+
|
|
78
|
+
## 使用纪律
|
|
79
|
+
|
|
80
|
+
每条集成建档:契约版本/凭证位置/对账方式/应急联系人/降级预案——**集成的知识别只活在一个人脑里**(eng-docs);
|
|
81
|
+
资金与订单类集成无对账不上线;第三方事故也走 eng-ops 复盘(推动对方整改要有书面记录);
|
|
82
|
+
每次集成事故回写坑清单。
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 集成档案模板(eng-integration 落笔件:一条集成一档,知识别只活在一个人脑里)
|
|
2
|
+
|
|
3
|
+
## 1. 档案头
|
|
4
|
+
|
|
5
|
+
| 项 | 内容 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 对接方/用途 | __(供应商/内部系统) |
|
|
8
|
+
| 模式 | □同步 API □异步消息 □文件批量(禁共享库) |
|
|
9
|
+
| 环境 | 沙箱:__ 生产:__;沙箱与生产行为差异清单:__ |
|
|
10
|
+
| 凭证 | 密钥位置(密钥服务路径):__;轮换周期:__;到期巡检: □ |
|
|
11
|
+
| 配额/计费 | 限流 __/s;配额 __/月(监控: □);按次计费?重试要算钱: □已评估 |
|
|
12
|
+
| 应急联系人 | 我方:__ 对方:__(升级路径:__) |
|
|
13
|
+
| SLA | 对方承诺 __;实测 __ |
|
|
14
|
+
|
|
15
|
+
## 2. 契约要点(防腐层收口确认)
|
|
16
|
+
|
|
17
|
+
- [ ] 字段映射表已建(对方字段→领域模型;**领域代码零感知第三方**)
|
|
18
|
+
- [ ] 状态机对齐:对方状态 __ 个,终态 __;我方映射 __
|
|
19
|
+
- [ ] 错误码分类表:可重试 __ / 不可重试 __ / 转人工 __
|
|
20
|
+
- [ ] 未知枚举防御:兜底分支+告警(不许 default 吞)
|
|
21
|
+
- [ ] 金额单位书面确认:□分 □元(双方邮件/文档链接:__)
|
|
22
|
+
|
|
23
|
+
## 3. 回调安全四件(有回调必填)
|
|
24
|
+
|
|
25
|
+
- [ ] 验签(算法 __;密钥可轮换) - [ ] 时间戳窗口 ±__ 分钟防重放
|
|
26
|
+
- [ ] 来源约束(IP 白名单/域名):__ - [ ] **快速返回+异步处理**;幂等键:__(唯一约束兜底)
|
|
27
|
+
- [ ] 原始报文全量留存 __ 天(对账与仲裁证据)
|
|
28
|
+
|
|
29
|
+
## 4. 对账与兜底(资金/订单类必填,无对账不上线)
|
|
30
|
+
|
|
31
|
+
- [ ] 主动查询兜底:未终态单轮询(退避节奏 __);回调+查询汇聚同一状态机(单向推进)
|
|
32
|
+
- [ ] 日终对账三层:笔数→金额→逐笔;时刻 __;差异处置:我有他无→__;他有我无→__;状态不一致→以对方终态+人工复核
|
|
33
|
+
- [ ] 长款短款挂账科目与财务约定:__
|
|
34
|
+
|
|
35
|
+
## 5. 变更与事件记录(追加式)
|
|
36
|
+
|
|
37
|
+
| 日期 | 事件(对方升级/故障/坑) | 处置 | 回写(坑清单/契约/预案) |
|
|
38
|
+
|---|---|---|---|
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-legacy
|
|
3
|
+
description: 遗留系统现代化链(现代化 vs 维持 vs 重写判据与重写坟场警告→摸底考古(隐性功能/运行时打点摸真实用量)→特征测试锁现状→绞杀者模式深化(接缝/防腐层/流量分成)→数据迁移与双跑对账→切换回退→业务不停车的组织节奏→隐性依赖风险清单)。工程链遗留现代化子链:老系统改造立项、"重写还是重构"决策、迁移切换方案评审、改造改死了复盘时载入。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 遗留系统现代化链
|
|
8
|
+
|
|
9
|
+
engineering-chain 的遗留现代化子链。遗留系统=**还在挣钱但没人敢动的系统**——
|
|
10
|
+
它的复杂不在代码,在"没人知道全部真相"。本链的任务:边飞边换引擎,还不能掉下来。
|
|
11
|
+
|
|
12
|
+
## 第一判据:现代化 vs 维持 vs 重写
|
|
13
|
+
|
|
14
|
+
| 选项 | 启用信号 | 警告 |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| 维持现状 | 变更频率低+风险可控+退役有日期 | 最被低估的正确选项:快退役的系统别投改造 |
|
|
17
|
+
| 渐进现代化(默认) | 还要长期演进+变更越来越痛 | 本链主线 |
|
|
18
|
+
| 推倒重写 | 极少成立 | **重写坟场警告**:老系统的"乱"里埋着十年业务规则,重写=用两年复刻你看不见的需求,期间业务停摆双系统并行——重写立项必须回答"凭什么这次不一样" |
|
|
19
|
+
|
|
20
|
+
动因量化(eng-architecture 技术债利息口径):变更前置时间趋势/缺陷率/招不到人维护的技术栈风险——**"代码很丑"不是立项理由,"每个需求多花三倍时间"才是**。
|
|
21
|
+
|
|
22
|
+
## 摸底考古(先侦察后动刀,eng-complex-env 侦察精神)
|
|
23
|
+
|
|
24
|
+
- 代码考古:explain-codebase 画调用链与数据流;版本史考古(高频改动文件=活跃区,十年没动的=化石区——**活跃区优先现代化,化石区评估圈禁**);
|
|
25
|
+
- **隐性功能清单**:没文档的行为=可能有人依赖(某个报表字段/某种容错/月底特殊逻辑)——访谈老人+工单考古+**运行时打点摸真实用量**(每个入口/功能加计数,跑一个业务周期:季度末年末的低频功能别漏),"砍掉没人用的功能"必须有数据背书;
|
|
26
|
+
- 依赖普查:谁调它(上游清单)/它调谁/**谁直连它的库**(报表工具/Excel/其他系统直连库=最隐蔽的耦合,改 schema 就炸)/定时任务与脚本(crontab 考古);
|
|
27
|
+
- 环境约束进档案(老运行时/老中间件,eng-complex-env 老旧约束)。
|
|
28
|
+
|
|
29
|
+
## 特征测试先行(锁现状,再动手)
|
|
30
|
+
|
|
31
|
+
改造前给现有行为拍照:**golden master**(灌一批真实输入,录当前输出为基准——对就是"和现在一样",不评判现在对不对)/录制回放(线上真实流量录制,改造后回放对比);
|
|
32
|
+
覆盖策略:考古出的活跃区+资金与对外接口全覆盖,化石区抽样;
|
|
33
|
+
**特征测试是改造的安全网**:没有它的重构叫赌博(refactor-safely 的遗留场景加强版);
|
|
34
|
+
测出"现状就是错的"→单独立缺陷走业务确认(顺手修=行为变更混进重构,出问题分不清锅)。
|
|
35
|
+
|
|
36
|
+
## 绞杀者模式深化
|
|
37
|
+
|
|
38
|
+
1. **接缝识别**:找系统天然的切分线(按业务域/按入口/按数据边界)——第一刀选"耦合最少+价值可见"的模块(证明模式可行,给组织信心);
|
|
39
|
+
2. **防腐层先行**(eng-integration):新模块与老系统之间立适配层,老系统的模型与怪癖不许渗入新代码——防腐层是临时的,随老模块退役而拆,**写清拆除日期**;
|
|
40
|
+
3. 流量分成:入口层(infra-gateway 灰度路由)按功能/用户切流到新实现,老路径保留可回切;
|
|
41
|
+
4. **旧路径下线有日期**:切流 100% 后旧代码限期删除(观察期 1-2 个业务周期)——"留着以防万一"的旧路径=永久双倍维护,下线要删代码删数据删监控,留档案;
|
|
42
|
+
5. 节奏:一次绞杀一个模块,上一个稳定运行再动下一个(并行绞杀=风险乘法)。
|
|
43
|
+
|
|
44
|
+
## 数据迁移与双跑对账
|
|
45
|
+
|
|
46
|
+
数据迁移细则载 **db-migration**(六步法/三层校验/回退窗口);本链管改造特有的:
|
|
47
|
+
**双跑对账**:新旧实现并行(影子流量:请求双发,老系统对外,新系统结果只记录)→逐日 diff(差异分类:新系统 bug/老系统本来就错/口径理解偏——**第三类最多,是隐性需求的最后捕网**)→差异清零或声明容忍→才许切真流量;
|
|
48
|
+
对账期长度=至少一个完整业务周期(月结系统跑完一个月结);
|
|
49
|
+
口径漂移防线:新老同源字典(data-governance),报表类改造必做数字级对账(finance 场景一分钱都要平)。
|
|
50
|
+
|
|
51
|
+
## 切换与回退
|
|
52
|
+
|
|
53
|
+
切换预演(等价环境全流程走一遍计时,eng-complex-env 等价验证);
|
|
54
|
+
灰度切(按用户/按单据类型,eng-release)+**回退窗口声明**(切换后 N 天内可回老系统,期间数据反向同步——过了窗口回不去要昭告);
|
|
55
|
+
只读过渡判据:切换瞬间老系统转只读(禁双写双主,arch-distributed);
|
|
56
|
+
观察清单:业务指标(单量/金额勾稽)+技术指标+**用户投诉通道盯紧**(隐性功能受害者会在这冒出来)。
|
|
57
|
+
|
|
58
|
+
## 组织与节奏(不停车改造的政治学)
|
|
59
|
+
|
|
60
|
+
- **价值分期交付**:每季度有业务可感知的产出(快了/新能力/少出错)——两年憋大招的改造会在第 14 个月被砍预算;
|
|
61
|
+
- 容量配比:改造与新需求并行(眼见的比例如 30/70,进 eng-planning 容量),**全员停止新需求搞改造=业务方反噬**;
|
|
62
|
+
- 新需求进新不进老:改造期间新功能一律建在新侧(老系统冻结增功能,只修 P1)——否则追着一个移动靶迁移;
|
|
63
|
+
- 团队配置:懂老系统的人+建新系统的人混编(纯新人团队改老系统=考古事故),知识传承走 eng-collaboration(结对/影子);
|
|
64
|
+
- 里程碑与士气:绞杀进度可视化(模块地图红转绿),改造是马拉松,可见进度是燃料。
|
|
65
|
+
|
|
66
|
+
## 隐性依赖风险清单(切换前逐项排查)
|
|
67
|
+
|
|
68
|
+
直连库的报表/BI/Excel(改 schema 前查 DB 账号清单——**谁在连这个库**);
|
|
69
|
+
定时任务与脚本(crontab/调度平台全量过一遍);
|
|
70
|
+
邮件/文件接口(老系统悄悄发的 FTP 文件,下游靠它对账);
|
|
71
|
+
硬编码 IP/域名的调用方(换地址要通知谁);
|
|
72
|
+
浏览器兼容与客户端(老系统的用户还在 IE 内核?eng-ux 兼容矩阵);
|
|
73
|
+
证书/密钥/白名单绑定(新系统出口 IP 变了,对方白名单要改,eng-integration)。
|
|
74
|
+
|
|
75
|
+
**作业包**:`references/modernization-workbook.md`(立项判据卡/考古与隐性依赖排查表/绞杀推进表/双跑对账记录/切换检查单)。
|
|
76
|
+
|
|
77
|
+
## 使用纪律
|
|
78
|
+
|
|
79
|
+
无特征测试不重构;无运行时用量数据不砍功能;无对账不切换;旧路径下线有日期;
|
|
80
|
+
每季度价值交付可展示;每次改造翻车回写隐性依赖清单——
|
|
81
|
+
**遗留现代化的成熟度=惊喜出现的频率:好的改造,无聊到没人注意它在发生**。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 遗留现代化工作簿(eng-legacy 落笔件:考古→绞杀→切换全程记录)
|
|
2
|
+
|
|
3
|
+
## 1. 立项判据卡(先算账再动刀)
|
|
4
|
+
|
|
5
|
+
- 动因量化:变更前置时间趋势 __;缺陷率 __;"每个需求多花 __ 倍时间"(代码丑不是理由)
|
|
6
|
+
- 三选一:□维持(退役日期 __) □渐进现代化 □重写(**回答:凭什么这次不一样?** __)
|
|
7
|
+
|
|
8
|
+
## 2. 考古清单(动刀前逐项)
|
|
9
|
+
|
|
10
|
+
- [ ] 版本史热区图:活跃区 __(优先改) / 化石区 __(评估圈禁)
|
|
11
|
+
- [ ] **运行时打点已跑一个完整业务周期**(含季末/年末低频功能);用量报告:__
|
|
12
|
+
- [ ] 隐性功能清单(访谈老人+工单考古):__
|
|
13
|
+
- [ ] 环境约束档案(老运行时/中间件,eng-complex-env):__
|
|
14
|
+
|
|
15
|
+
## 3. 隐性依赖排查表(切换前逐项打勾,漏一项=事故一枚)
|
|
16
|
+
|
|
17
|
+
- [ ] 直连库的报表/BI/Excel(DB 账号清单核过:__)
|
|
18
|
+
- [ ] 定时任务与脚本(crontab/调度平台全量:__)
|
|
19
|
+
- [ ] 邮件/FTP/文件接口(下游靠它对账的:__)
|
|
20
|
+
- [ ] 硬编码 IP/域名的调用方:__
|
|
21
|
+
- [ ] 证书/密钥/白名单绑定(新出口 IP 要报备给:__)
|
|
22
|
+
- [ ] 老客户端/浏览器兼容:__
|
|
23
|
+
|
|
24
|
+
## 4. 绞杀推进表(一次一个模块,上一个稳了再动下一个)
|
|
25
|
+
|
|
26
|
+
| 模块 | 接缝/防腐层(拆除日期!) | 特征测试(golden master 条数) | 切流比例与日期 | 旧路径下线日期 | 状态 |
|
|
27
|
+
|---|---|---|---|---|---|
|
|
28
|
+
|
|
29
|
+
## 5. 双跑对账记录(切真流量前差异清零或声明容忍)
|
|
30
|
+
|
|
31
|
+
| 日期 | 请求量 | 差异数 | 分类(新bug/老系统本来就错/口径理解偏) | 处置 |
|
|
32
|
+
|---|---|---|---|---|
|
|
33
|
+
|
|
34
|
+
> 第三类(口径偏)最多——它是隐性需求的最后捕网;对账期 ≥ 一个完整业务周期。
|
|
35
|
+
|
|
36
|
+
## 6. 切换检查单
|
|
37
|
+
|
|
38
|
+
- [ ] 切换预演计时:__ 分钟(等价环境全流程)
|
|
39
|
+
- [ ] 灰度方案:__;老系统转只读时刻:__(禁双写双主)
|
|
40
|
+
- [ ] 回退窗口 __ 天(反向同步维持);**放弃回退点 __ 已昭告**
|
|
41
|
+
- [ ] 观察清单:业务勾稽 __ /技术指标 __ /投诉通道盯守 __(隐性功能受害者从这冒头)
|
|
42
|
+
|
|
43
|
+
## 7. 节奏自检(季度)
|
|
44
|
+
|
|
45
|
+
- 本季度业务可感知产出:__(两年憋大招会在第 14 个月被砍预算)
|
|
46
|
+
- 改造/新需求容量比 __/__;新功能进新不进老: □守住 □破例(理由+还债票)
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eng-observability
|
|
3
|
+
description: 可观测性链(指标/链路/日志三支柱分工+变更事件第四支柱→结构化日志分级纪律→RED/USE/业务指标规范与基数控制→TraceID 贯穿与采样→埋点标准→SLI/SLO 与错误预算燃烧率→告警治理三问与降噪→仪表盘三层信息架构→观测成本分层)。工程链可观测深耕:建监控体系、告警风暴治理、定 SLO、排障没数据、观测账单失控时载入。
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 可观测性链
|
|
8
|
+
|
|
9
|
+
engineering-chain 的可观测子链。目标一句话:**任何线上问题,5 分钟内答出"哪坏了、坏多大、和什么变更有关"**。
|
|
10
|
+
监控栈工程落地(Prometheus 架构/PromQL 判据/告警规则单测/基数治理/watchdog)载 **obs-prometheus**。
|
|
11
|
+
|
|
12
|
+
## 三支柱+事件:分工与排障序
|
|
13
|
+
|
|
14
|
+
指标(聚合趋势,便宜,先看)→ 链路(单请求哪一跳慢,中等)→ 日志(具体错误细节,贵,最后翻);
|
|
15
|
+
**变更事件是第四支柱**:发布/配置/开关/扩缩容全部打事件流,排障第一问永远是"刚才改了什么"(eng-ops 同拍);
|
|
16
|
+
排障动线固化:大盘定位异常服务(指标)→ 抽 trace 看慢在哪跳 → 拿 traceId 捞日志看为什么——反着来(先 grep 日志)=大海捞针。
|
|
17
|
+
|
|
18
|
+
## 日志规范
|
|
19
|
+
|
|
20
|
+
- 结构化 JSON;必带字段:时间戳(UTC+毫秒)/级别/服务名/版本/traceId/请求路径/耗时;用户标识用匿名 ID;
|
|
21
|
+
- 分级纪律:**ERROR=需要人处理**(能自愈的不算)/WARN=自愈了但异常(重试成功/降级触发)/INFO=业务里程碑(下单成功/任务完成)/DEBUG=生产默认关;
|
|
22
|
+
- **ERROR 零容忍治理**:每条 ERROR 要么修复、要么降级为 WARN——"已知错误,忽略即可"刷屏之日,就是真错误被淹没之时;
|
|
23
|
+
- 敏感信息禁入日志:密码/证件/手机号/密钥(eng-security 红线,pre-commit 与评审双拦);
|
|
24
|
+
- 错误日志三要素:在做什么/输入是什么(可脱敏)/异常栈完整——只打 "error!" 的日志是嘲讽不是记录。
|
|
25
|
+
|
|
26
|
+
## 指标规范
|
|
27
|
+
|
|
28
|
+
- 每服务标配 **RED**:请求率/错误率/时延分布(P50/P95/P99 直方图);每资源标配 **USE**:利用率/饱和度/错误;
|
|
29
|
+
- 业务黄金指标单独一组:下单成功率/支付成功率/核心任务完成率——**技术全绿业务跌穿=只配了一半监控**;
|
|
30
|
+
- 命名规范:`域_对象_动作_单位`(如 http_request_duration_seconds),单位进名字;
|
|
31
|
+
- **基数控制红线**:label 禁放无界值(userId/orderId/URL 原文)——高基数=存储爆炸+查询卡死,url 收敛为路由模板。
|
|
32
|
+
|
|
33
|
+
## 链路追踪
|
|
34
|
+
|
|
35
|
+
TraceID 入口生成、跨服务透传(HTTP 头/MQ 消息属性)、**写进所有日志与对外错误响应**(用户报障带 traceId=定位时间除以十);
|
|
36
|
+
采样策略:头部采样 1–10% 基线 + 错误与慢请求全采(尾部采样能力具备时);
|
|
37
|
+
跨异步边界(MQ/定时任务)手动接续 trace 上下文——断链的 trace 只有半张地图。OpenTelemetry 统一 SDK,避免三家 agent 打架。
|
|
38
|
+
|
|
39
|
+
## 埋点标准(产品行为数据)
|
|
40
|
+
|
|
41
|
+
埋点需求进 DoR(eng-requirements):上线才想埋点=数据晚一个版本;
|
|
42
|
+
事件命名 `域.对象.动作`(order.detail.view);公共属性统一注入(版本/渠道/端);
|
|
43
|
+
埋点字典有 Owner 有登记(与 data-governance 字典同构);新埋点上线后 48h 内验数(埋错比不埋更毒——错数据带来错决策)。
|
|
44
|
+
|
|
45
|
+
## SLI/SLO 与错误预算
|
|
46
|
+
|
|
47
|
+
- SLI 选用户旅程关键点,少而准(可用性=成功请求/总请求;时延=P99 达标率;正确性=对账一致率);
|
|
48
|
+
- SLO 从历史数据定(先观测 1–3 个月再承诺),**别拍"四个九"再倒推**;对外 SLA=SLO 打一档折(eng-ops);
|
|
49
|
+
- 错误预算=1−SLO;燃烧率告警双窗口:1 小时烧掉月预算 2%=急(page),6 小时烧 5%=缓(工单);
|
|
50
|
+
- 预算烧尽→冻结特性发布,只发稳定性修复(eng-release 联动,业务提前签认)。
|
|
51
|
+
|
|
52
|
+
## 告警治理(治噪是治本)
|
|
53
|
+
|
|
54
|
+
- **告警三问**(三否则删):需要人动手吗?需要现在动手吗?收到的人知道怎么动手吗(runbook 链接挂告警上);
|
|
55
|
+
- 分级通道:P1 电话/短信叫醒、P2 IM 强提醒、P3 不打扰,日报聚合——**全都最高优先级=全都没有优先级**;
|
|
56
|
+
- 降噪四术:聚合(同类 N 条合一)/抑制(上游挂了,下游依赖类告警自动静默)/变更窗口静默(发布期预期抖动)/阈值配持续时长(瞬时毛刺不叫);
|
|
57
|
+
- 症状优先于原因:对"用户下单失败率"告警,而不是对每台机器 CPU 告警(CPU 高但业务无恙=不叫人);
|
|
58
|
+
- **疲劳度月检**:响应率<50% 的告警重构或删除;夜间叫醒复盘每一条(叫醒了但无需动作=告警 bug,当周修)。
|
|
59
|
+
|
|
60
|
+
## 仪表盘三层信息架构
|
|
61
|
+
|
|
62
|
+
L1 全局健康大盘(黄金指标+SLO 状态,一屏,电视墙级)→ L2 服务详情(RED+资源+依赖状态)→ L3 排障下钻(按 traceId/维度切片);
|
|
63
|
+
**每张盘回答一个明确问题**,回答不出问题的图撤掉;所有时序图叠加发布事件线(变更相关性一眼可见);
|
|
64
|
+
盘也有 Owner 与季度巡检(无人看的盘=数字装饰画)。
|
|
65
|
+
|
|
66
|
+
## 观测成本分层
|
|
67
|
+
|
|
68
|
+
日志:热 7 天(全文检索)/温 30 天(压缩可查)/冷 365 天(归档合规),按级采样(DEBUG 不出机器,INFO 可采样,ERROR 全量);
|
|
69
|
+
指标:基数月审,无人查询的指标降频或下线;链路:采样率按流量动态调;
|
|
70
|
+
**成本红线:观测支出异动>20% 当月归因**(通常是某次发布带进了高基数 label 或日志洪水)。
|
|
71
|
+
|
|
72
|
+
**作业包**:`scripts/slo-calc.py`(budget/burn/alert 三算:错误预算换算、燃烧率与烧尽预测、双窗口告警阈值建议)。
|
|
73
|
+
|
|
74
|
+
## 使用纪律
|
|
75
|
+
|
|
76
|
+
新服务上线准入=可观测三件套齐(RED 指标+结构化日志+trace 接入,eng-release 清单项);
|
|
77
|
+
每次事件复盘必答:"哪个信号本可以更早发现?"缺的补上(eng-ops 三回写之一);
|
|
78
|
+
观测配置(告警规则/仪表盘)进代码库版本化——**点出来的告警和点出来的资源一样,都是无主债**(eng-infra IaC 同则)。
|