@umacloud/knowledge 1.0.1
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 +557 -0
- package/00-governance/knowledge-map.md +39 -0
- package/00-governance/maintenance-policy.md +76 -0
- package/00-governance/review-checklist.md +81 -0
- package/README.md +13 -0
- package/ai/01-standards/agent-development-complete.md +691 -0
- package/ai/01-standards/llm-application-complete.md +488 -0
- package/ai/01-standards/mlops-complete.md +798 -0
- package/ai/01-standards/prompt-engineering-complete.md +646 -0
- package/ai/01-standards/rag-architecture-complete.md +649 -0
- package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
- package/ai/03-checklists/ai-project-checklist.md +215 -0
- package/ai/04-antipatterns/ai-antipatterns.md +661 -0
- package/ai/05-cases/case-rag-production.md +147 -0
- package/ai/06-glossary/ai-glossary.md +162 -0
- package/ai/agent-evaluation-benchmark.md +53 -0
- package/ai/ai-agent-memory-context-management.md +41 -0
- package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
- package/ai/ai-data-security-and-compliance-playbook.md +37 -0
- package/ai/ai-domain-index-and-checklist.md +40 -0
- package/ai/ai-governance-maturity-model.md +50 -0
- package/ai/ai-model-selection-and-routing-strategy.md +47 -0
- package/ai/ai-observability-and-oncall-runbook.md +52 -0
- package/ai/ai-rag-engineering-playbook.md +42 -0
- package/ai/ai-red-team-and-safety-evaluation.md +42 -0
- package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
- package/ai/llm-agent-engineering-deep-dive.md +57 -0
- package/ai/prompt-and-tool-guardrails.md +52 -0
- package/api/01-standards/enterprise-api-standards.md +198 -0
- package/api/01-standards/rest-api-design-guide.md +63 -0
- package/api/02-playbooks/api-pagination-playbook.md +93 -0
- package/api/02-playbooks/graphql-production-playbook.md +176 -0
- package/api/03-checklists/api-review-checklist.md +55 -0
- package/api/04-antipatterns/api-antipatterns.md +112 -0
- package/architecture/01-standards/api-gateway-patterns.md +496 -0
- package/architecture/01-standards/cloud-native-patterns.md +644 -0
- package/architecture/01-standards/distributed-systems-patterns.md +591 -0
- package/architecture/01-standards/event-driven-architecture.md +595 -0
- package/architecture/01-standards/microservices-patterns-complete.md +968 -0
- package/architecture/01-standards/microservices-patterns.md +495 -0
- package/architecture/01-standards/system-design-interview.md +664 -0
- package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
- package/architecture/02-playbooks/migration-playbook.md +780 -0
- package/architecture/02-playbooks/system-design-playbook.md +779 -0
- package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
- package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
- package/architecture/05-cases/case-netflix-microservices.md +413 -0
- package/architecture/06-glossary/architecture-glossary.md +164 -0
- package/architecture/adr-template-and-examples.md +38 -0
- package/architecture/api-gateway-deep-dive.md +1291 -0
- package/architecture/configuration-management.md +1162 -0
- package/architecture/distributed-transactions.md +1220 -0
- package/architecture/microservices-complete.md +735 -0
- package/architecture/resilience-and-disaster-patterns.md +37 -0
- package/architecture/service-governance.md +1198 -0
- package/architecture/system-architecture-deep-dive.md +37 -0
- package/backend/01-standards/analytics-and-growth.md +65 -0
- package/backend/01-standards/api-and-error-conventions.md +120 -0
- package/backend/01-standards/application-layering-and-packaging.md +160 -0
- package/backend/01-standards/auth-implementation.md +104 -0
- package/backend/01-standards/backend-framework-idioms.md +74 -0
- package/backend/01-standards/background-jobs-and-async.md +66 -0
- package/backend/01-standards/caching-strategies-complete.md +390 -0
- package/backend/01-standards/config-and-observability.md +77 -0
- package/backend/01-standards/data-modeling-and-persistence.md +94 -0
- package/backend/01-standards/django-complete.md +1765 -0
- package/backend/01-standards/email-and-notifications.md +64 -0
- package/backend/01-standards/fastapi-complete.md +925 -0
- package/backend/01-standards/file-upload-and-storage.md +66 -0
- package/backend/01-standards/graphql-api-complete.md +416 -0
- package/backend/01-standards/llm-application-standard.md +78 -0
- package/backend/01-standards/message-queue-patterns.md +379 -0
- package/backend/01-standards/microservices-and-distributed.md +78 -0
- package/backend/01-standards/nestjs-complete.md +2167 -0
- package/backend/01-standards/payment-integration.md +80 -0
- package/backend/01-standards/rate-limiting-complete.md +451 -0
- package/backend/01-standards/realtime-and-websocket.md +65 -0
- package/backend/01-standards/search-and-filtering.md +64 -0
- package/backend/01-standards/spring-boot-complete.md +445 -0
- package/backend/02-playbooks/api-design-playbook.md +718 -0
- package/backend/02-playbooks/email-send-playbook.md +130 -0
- package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
- package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
- package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
- package/backend/03-checklists/api-launch-checklist.md +189 -0
- package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
- package/blockchain/01-standards/blockchain-basics.md +557 -0
- package/blockchain/01-standards/smart-contract-development.md +1315 -0
- package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
- package/cicd/01-standards/github-actions-complete.md +473 -0
- package/cicd/01-standards/release-and-store-submission.md +75 -0
- package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
- package/cicd/02-playbooks/release-management-playbook.md +605 -0
- package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
- package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
- package/cicd/05-cases/case-deployment-automation.md +221 -0
- package/cicd/05-cases/case-gitops-transformation.md +212 -0
- package/cicd/06-glossary/cicd-glossary.md +114 -0
- package/cicd/cicd-blueprint-deep-dive.md +38 -0
- package/cicd/release-readiness-gate.md +37 -0
- package/cloud-native/01-standards/container-security.md +741 -0
- package/cloud-native/01-standards/kubernetes-complete.md +812 -0
- package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
- package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
- package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
- package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
- package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
- package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
- package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
- package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
- package/cloud-native/03-checklists/container-security-checklist.md +431 -0
- package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
- package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
- package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
- package/cloud-native/05-cases/case-k8s-migration.md +478 -0
- package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
- package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
- package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
- package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
- package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
- package/data/01-standards/elasticsearch-complete.md +2098 -0
- package/data/01-standards/postgresql-complete.md +1613 -0
- package/data/01-standards/redis-complete.md +1527 -0
- package/data/02-playbooks/database-optimization-playbook.md +403 -0
- package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
- package/data/03-checklists/database-launch-checklist.md +187 -0
- package/data/04-antipatterns/database-antipatterns.md +873 -0
- package/data/05-cases/case-database-migration.md +310 -0
- package/data/06-glossary/database-glossary.md +440 -0
- package/data/data-governance-and-modeling-deep-dive.md +39 -0
- package/data-engineering/01-standards/airflow-complete.md +523 -0
- package/data-engineering/01-standards/kafka-complete.md +1521 -0
- package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
- package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
- package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
- package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
- package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
- package/database/01-standards/database-schema-standards.md +147 -0
- package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
- package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
- package/database/02-playbooks/postgresql-production-playbook.md +146 -0
- package/database/02-playbooks/redis-caching-playbook.md +117 -0
- package/database/03-checklists/database-review-checklist.md +50 -0
- package/database/04-antipatterns/database-antipatterns.md +112 -0
- package/design/01-standards/ui-design-system-complete.md +423 -0
- package/design/02-playbooks/design-handoff-playbook.md +254 -0
- package/design/02-playbooks/design-review-playbook.md +388 -0
- package/design/03-checklists/design-review-checklist.md +246 -0
- package/design/04-antipatterns/design-antipatterns.md +378 -0
- package/design/05-cases/case-design-system-adoption.md +328 -0
- package/design/06-glossary/design-glossary.md +329 -0
- package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
- package/design/ux-system-deep-dive.md +38 -0
- package/design-systems/00-craft-rules.md +71 -0
- package/design-systems/aesthetic-families.md +43 -0
- package/design-systems/anti-ai-slop.md +162 -0
- package/design-systems/bold-geometric.md +120 -0
- package/design-systems/brutalist-bold.md +103 -0
- package/design-systems/editorial-clean.md +109 -0
- package/design-systems/glass-aurora.md +108 -0
- package/design-systems/modern-minimal.md +145 -0
- package/design-systems/premium-luxury.md +106 -0
- package/design-systems/product-type-design-map.md +48 -0
- package/design-systems/soft-warm.md +123 -0
- package/design-systems/tech-utility.md +113 -0
- package/desktop/01-standards/desktop-app-standard.md +72 -0
- package/desktop/01-standards/desktop-design.md +71 -0
- package/development/00-governance/document-template.md +41 -0
- package/development/01-standards/api-versioning-strategies.md +432 -0
- package/development/01-standards/authentication-patterns-complete.md +479 -0
- package/development/01-standards/css-architecture-complete.md +550 -0
- package/development/01-standards/database-migration-strategies.md +484 -0
- package/development/01-standards/elasticsearch-complete.md +347 -0
- package/development/01-standards/git-complete.md +371 -0
- package/development/01-standards/golang-complete.md +1565 -0
- package/development/01-standards/graphql-complete.md +298 -0
- package/development/01-standards/javascript-bundlers-complete.md +469 -0
- package/development/01-standards/javascript-typescript-complete.md +528 -0
- package/development/01-standards/jest-complete.md +275 -0
- package/development/01-standards/linux-complete.md +234 -0
- package/development/01-standards/logging-observability-complete.md +526 -0
- package/development/01-standards/microservices-communication.md +502 -0
- package/development/01-standards/mongodb-complete.md +406 -0
- package/development/01-standards/oauth2-complete.md +285 -0
- package/development/01-standards/performance-optimization-complete.md +289 -0
- package/development/01-standards/playwright-complete.md +247 -0
- package/development/01-standards/postgresql-complete.md +456 -0
- package/development/01-standards/pytest-complete.md +340 -0
- package/development/01-standards/python-async-programming.md +902 -0
- package/development/01-standards/python-complete.md +956 -0
- package/development/01-standards/python-decorators-complete.md +799 -0
- package/development/01-standards/python-design-patterns.md +2854 -0
- package/development/01-standards/python-packaging-distribution.md +420 -0
- package/development/01-standards/python-testing-strategies.md +607 -0
- package/development/01-standards/python-web-frameworks-comparison.md +471 -0
- package/development/01-standards/redis-complete.md +317 -0
- package/development/01-standards/rest-api-complete.md +316 -0
- package/development/01-standards/rust-complete.md +578 -0
- package/development/01-standards/typescript-advanced-types.md +1513 -0
- package/development/01-standards/web-security-complete.md +292 -0
- package/development/02-playbooks/api-design-playbook.md +810 -0
- package/development/02-playbooks/database-migration-playbook.md +580 -0
- package/development/02-playbooks/debugging-playbook.md +692 -0
- package/development/02-playbooks/feature-delivery-playbook.md +430 -0
- package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
- package/development/02-playbooks/performance-optimization-playbook.md +531 -0
- package/development/02-playbooks/performance-tuning-playbook.md +652 -0
- package/development/02-playbooks/refactor-playbook.md +403 -0
- package/development/02-playbooks/release-playbook.md +469 -0
- package/development/03-checklists/architecture-review-checklist.md +168 -0
- package/development/03-checklists/data-migration-checklist.md +157 -0
- package/development/03-checklists/oncall-handover-checklist.md +173 -0
- package/development/03-checklists/pr-checklist.md +158 -0
- package/development/03-checklists/production-readiness-checklist.md +190 -0
- package/development/03-checklists/release-readiness-checklist.md +154 -0
- package/development/03-checklists/security-review-checklist.md +182 -0
- package/development/04-antipatterns/api-antipatterns.md +657 -0
- package/development/04-antipatterns/architecture-antipatterns.md +686 -0
- package/development/04-antipatterns/backend-antipatterns.md +648 -0
- package/development/04-antipatterns/cicd-antipatterns.md +540 -0
- package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
- package/development/04-antipatterns/data-antipatterns.md +658 -0
- package/development/04-antipatterns/database-antipatterns.md +578 -0
- package/development/04-antipatterns/frontend-antipatterns.md +635 -0
- package/development/04-antipatterns/reliability-antipatterns.md +700 -0
- package/development/04-antipatterns/security-antipatterns.md +747 -0
- package/development/05-cases/case-api-version-migration.md +428 -0
- package/development/05-cases/case-authorization-hardening.md +383 -0
- package/development/05-cases/case-bluegreen-rollback.md +466 -0
- package/development/05-cases/case-cache-snowball-protection.md +485 -0
- package/development/05-cases/case-ci-cd-pipeline.md +544 -0
- package/development/05-cases/case-database-scaling.md +500 -0
- package/development/05-cases/case-db-hotspot-optimization.md +487 -0
- package/development/05-cases/case-incident-mttr-reduction.md +563 -0
- package/development/05-cases/case-microservice-migration.md +375 -0
- package/development/05-cases/case-performance-optimization.md +406 -0
- package/development/05-cases/case-security-incident-response.md +345 -0
- package/development/06-glossary/full-stack-glossary.md +166 -0
- package/development/09-maturity/quarterly-audit-template.md +35 -0
- package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
- package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
- package/development/12-scenarios/development-scenarios-guide.md +565 -0
- package/development/13-implementation-assets/implementation-toolkit.md +282 -0
- package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
- package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
- package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
- package/development/api-contract-and-versioning-guide.md +36 -0
- package/development/api-governance-complete.md +43 -0
- package/development/backend-engineering-complete.md +43 -0
- package/development/code-review-quality-complete.md +43 -0
- package/development/concurrency-reliability-complete.md +43 -0
- package/development/database-engineering-complete.md +43 -0
- package/development/engineering-effectiveness-complete.md +43 -0
- package/development/engineering-standards-deep-dive.md +38 -0
- package/development/frontend-engineering-complete.md +43 -0
- package/development/performance-capacity-complete.md +43 -0
- package/development/refactor-migration-complete.md +42 -0
- package/development/refactoring-and-techdebt-playbook.md +37 -0
- package/development/security-in-development-complete.md +43 -0
- package/devops/01-standards/cicd-pipeline-complete.md +262 -0
- package/devops/01-standards/docker-complete.md +1490 -0
- package/devops/01-standards/github-actions-complete.md +337 -0
- package/devops/01-standards/kubernetes-complete.md +638 -0
- package/devops/01-standards/terraform-complete.md +2117 -0
- package/devops/02-playbooks/docker-compose-playbook.md +233 -0
- package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
- package/devops/02-playbooks/docker-production-playbook.md +952 -0
- package/edge-iot/01-standards/edge-iot-complete.md +473 -0
- package/experts/architect/api-design.md +178 -0
- package/experts/architect/methodology.md +124 -0
- package/experts/architect/security.md +75 -0
- package/experts/backend-lead/methodology.md +216 -0
- package/experts/devops/methodology.md +160 -0
- package/experts/frontend-lead/methodology.md +178 -0
- package/experts/product-manager/industry/ecommerce.md +43 -0
- package/experts/product-manager/industry/saas.md +40 -0
- package/experts/product-manager/methodology.md +97 -0
- package/experts/qa-lead/methodology.md +123 -0
- package/experts/qa-lead/test-strategy.md +128 -0
- package/experts/uiux-designer/methodology.md +125 -0
- package/frontend/01-standards/accessibility-complete.md +532 -0
- package/frontend/01-standards/accessibility-standard.md +74 -0
- package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
- package/frontend/01-standards/design-tokens-complete.md +444 -0
- package/frontend/01-standards/forms-and-validation.md +77 -0
- package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
- package/frontend/01-standards/i18n-and-localization.md +65 -0
- package/frontend/01-standards/nextjs-complete.md +451 -0
- package/frontend/01-standards/react-complete.md +713 -0
- package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
- package/frontend/01-standards/react-hooks-complete.md +1171 -0
- package/frontend/01-standards/seo-and-web-vitals.md +77 -0
- package/frontend/01-standards/state-management-complete.md +444 -0
- package/frontend/01-standards/vue-complete.md +499 -0
- package/frontend/01-standards/vue3-complete.md +2002 -0
- package/frontend/01-standards/web-framework-best-practices.md +64 -0
- package/frontend/01-standards/web-performance-complete.md +495 -0
- package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
- package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
- package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
- package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
- package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
- package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
- package/frontend/03-checklists/component-quality-checklist.md +166 -0
- package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
- package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
- package/frontend/05-cases/case-performance-optimization.md +274 -0
- package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
- package/harmony/01-standards/harmonyos-design.md +65 -0
- package/high-quality-engineering-playbook.md +54 -0
- package/incident/01-standards/incident-response-complete.md +303 -0
- package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
- package/incident/02-playbooks/postmortem-playbook.md +398 -0
- package/incident/03-checklists/incident-readiness-checklist.md +181 -0
- package/incident/04-antipatterns/incident-antipatterns.md +490 -0
- package/incident/05-cases/case-cascade-failure.md +176 -0
- package/incident/06-glossary/incident-glossary.md +114 -0
- package/incident/postmortem-and-response-deep-dive.md +39 -0
- package/industries/ecommerce/ecommerce-complete.md +631 -0
- package/industries/education/education-complete.md +555 -0
- package/industries/fintech/fintech-complete.md +501 -0
- package/industries/gaming/gaming-complete.md +587 -0
- package/industries/healthcare/healthcare-complete.md +452 -0
- package/low-code/01-standards/low-code-complete.md +944 -0
- package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
- package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
- package/miniprogram/01-standards/miniprogram-design.md +61 -0
- package/miniprogram/01-standards/miniprogram-standard.md +81 -0
- package/mobile/01-standards/android-material-design.md +70 -0
- package/mobile/01-standards/flutter-complete.md +384 -0
- package/mobile/01-standards/ios-design-hig.md +78 -0
- package/mobile/01-standards/mobile-app-standard.md +85 -0
- package/mobile/01-standards/react-native-complete.md +352 -0
- package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
- package/mobile/02-playbooks/mobile-performance.md +473 -0
- package/mobile/03-checklists/mobile-release-checklist.md +234 -0
- package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
- package/mobile/05-cases/case-app-performance.md +500 -0
- package/mobile/05-cases/case-app-startup-optimization.md +218 -0
- package/mobile/06-glossary/mobile-glossary.md +484 -0
- package/observability/01-standards/observability-standards.md +103 -0
- package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
- package/observability/02-playbooks/structured-logging-playbook.md +73 -0
- package/observability/03-checklists/observability-checklist.md +54 -0
- package/observability/04-antipatterns/observability-antipatterns.md +106 -0
- package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
- package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
- package/operations/03-checklists/production-launch-checklist.md +365 -0
- package/operations/04-antipatterns/operations-antipatterns.md +664 -0
- package/operations/05-cases/case-sre-practices.md +581 -0
- package/operations/06-glossary/operations-glossary.md +120 -0
- package/operations/aiops-anomaly-detection.md +758 -0
- package/operations/capacity-planning.md +1061 -0
- package/operations/chaos-engineering.md +659 -0
- package/operations/incident-command-system.md +38 -0
- package/operations/observability-complete.md +442 -0
- package/operations/slo-sli-playbook.md +517 -0
- package/operations/sre-operations-deep-dive.md +39 -0
- package/package.json +8 -0
- package/performance/01-standards/performance-and-scalability.md +80 -0
- package/performance/01-standards/performance-standards.md +156 -0
- package/performance/02-playbooks/query-optimization-playbook.md +103 -0
- package/performance/03-checklists/performance-checklist.md +56 -0
- package/performance/04-antipatterns/performance-antipatterns.md +146 -0
- package/product/01-standards/product-management-complete.md +285 -0
- package/product/02-playbooks/feature-launch-playbook.md +207 -0
- package/product/02-playbooks/user-research-playbook.md +532 -0
- package/product/03-checklists/feature-launch-checklist.md +275 -0
- package/product/04-antipatterns/product-antipatterns.md +355 -0
- package/product/05-cases/case-mvp-to-scale.md +384 -0
- package/product/06-glossary/product-glossary.md +462 -0
- package/product/feature-prioritization-framework.md +40 -0
- package/product/kpi-and-metric-tree.md +37 -0
- package/product/product-discovery-and-prd-deep-dive.md +41 -0
- package/quantum/01-standards/quantum-complete.md +1186 -0
- package/security/01-standards/api-security-complete.md +511 -0
- package/security/01-standards/container-runtime-security.md +574 -0
- package/security/01-standards/data-protection-gdpr.md +543 -0
- package/security/01-standards/owasp-top10-complete.md +1890 -0
- package/security/01-standards/secure-coding-baseline.md +90 -0
- package/security/01-standards/supply-chain-security.md +441 -0
- package/security/01-standards/web-security-checklist.md +108 -0
- package/security/01-standards/zero-trust-architecture.md +521 -0
- package/security/02-playbooks/auth-sso-playbook.md +166 -0
- package/security/02-playbooks/incident-response-security-playbook.md +588 -0
- package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
- package/security/02-playbooks/payment-integration-playbook.md +119 -0
- package/security/02-playbooks/penetration-testing-playbook.md +517 -0
- package/security/03-checklists/security-audit-checklist.md +356 -0
- package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
- package/security/05-cases/case-log4shell-incident.md +537 -0
- package/security/05-cases/case-major-breaches.md +468 -0
- package/security/06-glossary/security-glossary.md +212 -0
- package/security/compliance-automation.md +993 -0
- package/security/container-security.md +680 -0
- package/security/devsecops-complete.md +426 -0
- package/security/sast-dast-sca.md +775 -0
- package/security/secrets-management.md +594 -0
- package/security/security-architecture-deep-dive.md +37 -0
- package/security/threat-modeling-stride-playbook.md +40 -0
- package/seed-templates/auth-system.md +59 -0
- package/seed-templates/blog-content.md +94 -0
- package/seed-templates/dashboard.md +89 -0
- package/seed-templates/docs-site.md +73 -0
- package/seed-templates/e-commerce.md +50 -0
- package/seed-templates/saas-landing.md +92 -0
- package/seed-templates/settings-page.md +51 -0
- package/testing/01-standards/test-strategy-and-layering.md +83 -0
- package/testing/01-standards/testing-strategy-complete.md +422 -0
- package/testing/01-standards/unit-testing-best-practices.md +118 -0
- package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
- package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
- package/testing/03-checklists/test-strategy-checklist.md +208 -0
- package/testing/04-antipatterns/testing-antipatterns.md +718 -0
- package/testing/05-cases/case-testing-transformation.md +300 -0
- package/testing/06-glossary/testing-glossary.md +110 -0
- package/testing/risk-based-test-matrix.md +36 -0
- package/testing/testing-strategy-deep-dive.md +37 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: system-architecture-deep-dive
|
|
3
|
+
title: system-architecture-deep-dive
|
|
4
|
+
domain: architecture
|
|
5
|
+
category: system-architecture-deep-dive.md
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [architecture, deep, dive, system, 架构环节深度知识库]
|
|
8
|
+
quality_score: 70
|
|
9
|
+
last_updated: 2026-06-15
|
|
10
|
+
---
|
|
11
|
+
# 开发:Excellent(11964948@qq.com)
|
|
12
|
+
|
|
13
|
+
## 架构环节深度知识库
|
|
14
|
+
|
|
15
|
+
### 目标
|
|
16
|
+
- 在性能、稳定性、可维护性与演进成本之间建立可持续平衡。
|
|
17
|
+
|
|
18
|
+
### 架构基线
|
|
19
|
+
- 分层边界:接口层、应用层、领域层、基础设施层职责清晰。
|
|
20
|
+
- 依赖方向:高层依赖抽象,基础设施依赖不得反向污染业务层。
|
|
21
|
+
- 同步与异步:强一致链路优先同步,高耗时与低耦合能力采用异步事件。
|
|
22
|
+
- 数据一致性:明确强一致、最终一致与补偿策略。
|
|
23
|
+
|
|
24
|
+
### 非功能指标
|
|
25
|
+
- 性能:关键接口 P95、P99 时延阈值。
|
|
26
|
+
- 可用性:SLO、错误预算、降级策略。
|
|
27
|
+
- 安全性:鉴权、审计、敏感数据保护策略。
|
|
28
|
+
- 可观测性:日志、指标、追踪三件套。
|
|
29
|
+
|
|
30
|
+
### 决策机制
|
|
31
|
+
- 重大架构决策必须记录 ADR。
|
|
32
|
+
- 涉及跨模块影响的变更必须给出回滚方案。
|
|
33
|
+
- 每次架构升级必须配套容量评估与回归计划。
|
|
34
|
+
|
|
35
|
+
### 常见失败模式
|
|
36
|
+
- 过早微服务化导致交付复杂度飙升。
|
|
37
|
+
- 无统一异常与超时策略导致故障蔓延。
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: analytics-and-growth
|
|
3
|
+
title: 数据埋点、分析与增长标准(商业级必读)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [埋点, analytics, 数据分析, 事件追踪, event-tracking, 漏斗, ab测试, 留存, 增长, 隐私合规, 商业级]
|
|
8
|
+
quality_score: 92
|
|
9
|
+
last_updated: 2026-06-19
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 数据埋点、分析与增长标准(商业级必读)
|
|
13
|
+
|
|
14
|
+
> "不能度量就不能改进"。商业产品必须能看清用户行为、转化、留存——纯底座常只做功能、完全不埋点。本标准给出商业级数据体系要点。
|
|
15
|
+
|
|
16
|
+
## 1. 埋点设计(先有规范再埋)
|
|
17
|
+
|
|
18
|
+
- **统一事件模型**:`event_name`(动词+对象,如 `order_paid`)、`properties`(上下文)、`user_id`/`anonymous_id`、`timestamp`、`platform`。
|
|
19
|
+
- 维护**埋点字典(tracking plan)**:事件、属性、触发时机统一定义并评审,避免命名混乱、重复、漏埋。
|
|
20
|
+
- 命名一致(snake_case)、属性类型稳定;版本化管理。
|
|
21
|
+
- 关键转化路径(注册→激活→付费)必埋;核心业务动作必埋。
|
|
22
|
+
|
|
23
|
+
## 2. 采集与上报
|
|
24
|
+
|
|
25
|
+
- 用成熟分析平台(GA4 / 神策 / 友盟 / PostHog / Amplitude / Mixpanel)或自建,封装统一 SDK,别在业务里散落上报。
|
|
26
|
+
- **客户端 + 服务端双埋点**:关键转化(支付/下单)以**服务端**为准(防丢失/作弊),行为/UI 用客户端。
|
|
27
|
+
- 批量 + 异步上报,失败重试,弱网缓存补传;不阻塞主流程。
|
|
28
|
+
- 标识:登录前 anonymous_id,登录后与 user_id 关联打通。
|
|
29
|
+
|
|
30
|
+
## 3. 核心指标与分析
|
|
31
|
+
|
|
32
|
+
- 关注**北极星指标** + 关键指标:激活率、留存(次日/7日/30日)、转化漏斗、付费/ARPU、活跃(DAU/MAU)。
|
|
33
|
+
- 建漏斗分析(各步流失)、留存曲线、分群(cohort)、路径分析。
|
|
34
|
+
- 业务指标看板 + 异常告警(转化骤降、支付失败率)。
|
|
35
|
+
|
|
36
|
+
## 4. 实验与增长
|
|
37
|
+
|
|
38
|
+
- **A/B 测试**:科学分流(稳定分桶)、单一变量、足够样本与显著性、防偷看;记录实验与结论。
|
|
39
|
+
- Feature flag 灰度 + 实验解耦发布。
|
|
40
|
+
- 增长闭环:埋点→分析→假设→实验→上线→再分析。
|
|
41
|
+
|
|
42
|
+
## 5. 隐私与合规(必须)
|
|
43
|
+
|
|
44
|
+
- 采集**最小必要**;敏感数据/PII 脱敏或不采集。
|
|
45
|
+
- **用户同意**(GDPR/个保法 cookie/追踪同意);提供退出(opt-out)/Do Not Track;iOS 追踪需 ATT。
|
|
46
|
+
- 数据存储/传输加密;遵守留存期限;第三方 SDK 数据流向透明(隐私政策声明)。
|
|
47
|
+
|
|
48
|
+
## 6. 反模式(出现即不合格)
|
|
49
|
+
|
|
50
|
+
- 只做功能、零埋点,上线后看不清用户行为与转化。
|
|
51
|
+
- 埋点命名混乱/无字典/重复漏埋;事件属性类型不稳定。
|
|
52
|
+
- 关键转化只客户端埋(丢失/可作弊),不服务端兜底。
|
|
53
|
+
- A/B 偷看结果/分桶不稳定/无显著性就下结论。
|
|
54
|
+
- 采集 PII 不脱敏、无用户同意、不合规(无 ATT/无 opt-out)。
|
|
55
|
+
|
|
56
|
+
## 7. 最低交付 checklist
|
|
57
|
+
|
|
58
|
+
- [ ] 统一事件模型 + 埋点字典(评审/版本化);关键转化路径必埋。
|
|
59
|
+
- [ ] 用成熟平台/统一 SDK;客户端+服务端双埋(关键转化服务端为准);异步重试补传。
|
|
60
|
+
- [ ] anonymous→user 标识打通;核心指标看板(激活/留存/漏斗/付费)+异常告警。
|
|
61
|
+
- [ ] A/B 稳定分桶+单变量+显著性;feature flag 灰度。
|
|
62
|
+
- [ ] 最小采集+PII 脱敏+用户同意(GDPR/个保法/ATT)+opt-out+隐私声明。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
**参考**:GA4/PostHog/Amplitude 埋点最佳实践、Tracking Plan、AARRR/北极星指标、A/B 测试统计、GDPR/个保法、Apple ATT。
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: api-and-error-conventions
|
|
3
|
+
title: API 设计与错误处理规范(商业级后端必读)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [api设计, rest, 错误处理, error, 状态码, 分页, pagination, 版本, versioning, 幂等, idempotency, dto, 契约, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-19
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# API 设计与错误处理规范(商业级后端必读)
|
|
13
|
+
|
|
14
|
+
> 框架无关的 HTTP API 硬性规范。每个商业级接口都要遵守:一致的资源命名、统一的错误信封、正确的状态码、分页/过滤/排序、版本与幂等。前端按契约对接,混乱的 API 会让整个项目腐化。
|
|
15
|
+
|
|
16
|
+
## 1. 资源与 URL 命名
|
|
17
|
+
|
|
18
|
+
- 资源用**名词复数**:`/api/v1/orders`、`/api/v1/orders/{id}/items`。不要用动词 URL(`/getOrders` ❌)。
|
|
19
|
+
- 层级表达从属:`/users/{id}/orders`;超过两层从属考虑顶层资源 + 过滤。
|
|
20
|
+
- 用 HTTP 方法表达动作:`GET`(查) `POST`(建) `PUT`(整体替换) `PATCH`(局部更新) `DELETE`(删)。
|
|
21
|
+
- 非 CRUD 的动作用子资源或动作端点:`POST /orders/{id}/cancel`(而非 `POST /cancelOrder`)。
|
|
22
|
+
- 全小写、连字符或直接复数名词;查询参数用 `snake_case` 或 `camelCase` 全项目统一。
|
|
23
|
+
|
|
24
|
+
## 2. 状态码(用对,不要一律 200)
|
|
25
|
+
|
|
26
|
+
| 场景 | 码 |
|
|
27
|
+
|---|---|
|
|
28
|
+
| 查询成功 / 更新成功 | 200 |
|
|
29
|
+
| 创建成功(返回新资源,带 `Location`)| 201 |
|
|
30
|
+
| 成功但无返回体(删除)| 204 |
|
|
31
|
+
| 参数/格式校验失败 | 422(或 400)|
|
|
32
|
+
| 未认证(没登录/token 失效)| 401 |
|
|
33
|
+
| 已认证但无权限 | 403 |
|
|
34
|
+
| 资源不存在 | 404 |
|
|
35
|
+
| 冲突(重复、版本冲突、状态不允许)| 409 |
|
|
36
|
+
| 限流 | 429 |
|
|
37
|
+
| 服务端异常 | 500(不泄露细节)|
|
|
38
|
+
|
|
39
|
+
- 创建返回 201 + 新资源 + `Location` 头;删除返回 204。
|
|
40
|
+
- 不要"业务失败也回 200 再在 body 里塞 `success:false`"——用正确状态码。
|
|
41
|
+
|
|
42
|
+
## 3. 统一错误信封(全项目一致)
|
|
43
|
+
|
|
44
|
+
所有错误返回同一结构,便于前端统一处理:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"error": {
|
|
49
|
+
"code": "VALIDATION_ERROR",
|
|
50
|
+
"message": "Request validation failed",
|
|
51
|
+
"details": [
|
|
52
|
+
{ "field": "email", "message": "Must be a valid email address" }
|
|
53
|
+
],
|
|
54
|
+
"request_id": "req_01H..."
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
- `code`:机器可读的稳定错误码(`NOT_FOUND` / `FORBIDDEN` / `CONFLICT` / `VALIDATION_ERROR` / `RATE_LIMITED` / `INTERNAL`)。前端按 `code` 分支,不靠 message 文案。
|
|
60
|
+
- `message`:人类可读、安全(500 绝不暴露栈/SQL/内部路径)。
|
|
61
|
+
- `details`:字段级校验错误数组。
|
|
62
|
+
- `request_id`:贯穿日志,便于排查。
|
|
63
|
+
- 错误映射集中在接口层一个 error handler/filter,不在每个 controller 里重复 try/catch。
|
|
64
|
+
|
|
65
|
+
## 4. 请求与响应契约
|
|
66
|
+
|
|
67
|
+
- 入参:用 DTO + schema 校验(Zod/Joi/Pydantic/Bean Validation),失败 422 + 字段错误。
|
|
68
|
+
- 出参:只返回该接口需要的字段(Output DTO),**不要直接吐 ORM entity**(泄露内部字段、关系、敏感列)。
|
|
69
|
+
- 时间用 ISO-8601 UTC(`2026-06-19T08:00:00Z`);金额用最小单位整数(分)或带币种的 decimal,**不要用 float**。
|
|
70
|
+
- 布尔/枚举值稳定;新增字段向后兼容,删字段要走版本。
|
|
71
|
+
|
|
72
|
+
## 5. 列表:分页 + 过滤 + 排序(列表接口必做)
|
|
73
|
+
|
|
74
|
+
- 分页两种主流:
|
|
75
|
+
- **offset/limit**:`?limit=20&offset=40`,简单但深翻页慢。
|
|
76
|
+
- **cursor**:`?limit=20&cursor=xxx`,大数据/无限滚动首选,稳定不漏不重。
|
|
77
|
+
- 返回分页元信息:`{ data: [...], page: { limit, next_cursor | total } }`。
|
|
78
|
+
- 过滤用明确参数(`?status=paid&created_after=...`),排序 `?sort=-created_at`(`-` 表降序)。
|
|
79
|
+
- 列表默认有上限(如 max limit 100),防止一次拉全表。
|
|
80
|
+
|
|
81
|
+
## 6. 版本与演进
|
|
82
|
+
|
|
83
|
+
- URL 版本前缀 `/api/v1/`(或 header 版本)。破坏性变更升大版本。
|
|
84
|
+
- 非破坏(加字段、加可选参数)不升版;破坏(删字段、改语义、改必填)必须升版并保留旧版过渡。
|
|
85
|
+
- 弃用用 `Deprecation`/`Sunset` 头提示。
|
|
86
|
+
|
|
87
|
+
## 7. 幂等与并发
|
|
88
|
+
|
|
89
|
+
- `POST` 创建类提供 **幂等键**(`Idempotency-Key` 头)防重复提交/重复扣款。
|
|
90
|
+
- 更新用乐观锁(`version`/`updated_at` 比对),冲突回 409,别静默覆盖。
|
|
91
|
+
- 钱、库存等关键写操作必须在事务内 + 幂等。
|
|
92
|
+
|
|
93
|
+
## 8. 鉴权与安全基线
|
|
94
|
+
|
|
95
|
+
- 受保护端点声明鉴权(Bearer JWT / Session);状态变更端点(非公开的 POST/PUT/PATCH/DELETE)必须鉴权。
|
|
96
|
+
- 鉴权在中间件统一做;授权(这个用户能否操作这条资源)在服务层校验,别只靠路由。
|
|
97
|
+
- 永不在响应里回传密码哈希、token、内部 id 之外的敏感字段。
|
|
98
|
+
- 限流(按 IP/用户/端点)保护登录、发码、支付等。
|
|
99
|
+
|
|
100
|
+
## 9. 反模式(出现即不合格)
|
|
101
|
+
|
|
102
|
+
- 动词 URL、一律 200、错误结构每个接口不一样。
|
|
103
|
+
- 直接返回 ORM entity;500 把栈/SQL 暴露给客户端。
|
|
104
|
+
- 列表无分页/无上限、深翻页拉全表。
|
|
105
|
+
- 金额用 float;时间不带时区。
|
|
106
|
+
- 破坏性变更不升版本直接改线上契约。
|
|
107
|
+
- 创建/支付类接口无幂等,重复提交重复下单。
|
|
108
|
+
|
|
109
|
+
## 10. 最低交付 checklist
|
|
110
|
+
|
|
111
|
+
- [ ] 资源名词化 URL + 正确 HTTP 方法 + 正确状态码(201/204/401/403/404/409/422/429)。
|
|
112
|
+
- [ ] 全项目统一错误信封(code/message/details/request_id),错误映射集中处理。
|
|
113
|
+
- [ ] 入参 DTO+schema 校验;出参 DTO,不泄露 entity;时间 UTC、金额整数。
|
|
114
|
+
- [ ] 列表有分页+过滤+排序+默认上限。
|
|
115
|
+
- [ ] 版本前缀;破坏性变更升版。
|
|
116
|
+
- [ ] 关键写操作幂等 + 事务 + 乐观锁。
|
|
117
|
+
- [ ] 受保护端点鉴权 + 服务层授权 + 关键端点限流。
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
**参考**:REST 成熟度模型、RFC 7807 Problem Details、Stripe/GitHub API 设计惯例、12-Factor。
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: application-layering-and-packaging
|
|
3
|
+
title: 应用分层与分包标准(商业级后端必读)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [分层架构, 服务层, 分包, 依赖倒置, clean-architecture, layered, service-layer, repository, dto, domain, transaction, 事务边界, package-by-feature, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-19
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 应用分层与分包标准(商业级后端必读)
|
|
13
|
+
|
|
14
|
+
> 这是**框架无关**的硬性结构标准。任何商业级后端——无论用 NestJS / Spring Boot / FastAPI / Express / Go——都必须遵守分层、依赖方向与分包规则。写代码前先按本标准定下骨架,再填实现。把所有逻辑塞进 controller、或 service 里直接写 SQL、或 controller 直接调 repository,都是**不合格**的,质量审查会打回。
|
|
15
|
+
|
|
16
|
+
## 0. 一句话原则
|
|
17
|
+
|
|
18
|
+
**分层隔离关注点,依赖一律向内(朝业务核心)流。** 业务逻辑不依赖框架、数据库、传输协议;它们是可替换的外设。
|
|
19
|
+
|
|
20
|
+
## 1. 四层模型与各层职责(MUST / MUST NOT)
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
HTTP/gRPC/MQ ─▶ ① 接口层 Interface ─▶ ② 应用层 Application(Service) ─▶ ③ 领域层 Domain
|
|
24
|
+
│
|
|
25
|
+
└─▶ ④ 基础设施层 Infrastructure(Repository/Adapter) ─▶ DB/缓存/第三方
|
|
26
|
+
依赖方向:① → ② → ③(向内);④ 实现 ② / ③ 定义的接口(依赖倒置,箭头也朝内)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### ① 接口层 / Interface(controller、handler、route、resolver、consumer)
|
|
30
|
+
**只做传输相关的事**:解析请求、调用一个应用服务方法、把结果/异常映射成响应。
|
|
31
|
+
- MUST:参数/请求体反序列化 → DTO;鉴权与限流(中间件);把领域/应用异常映射为 HTTP 状态码;只依赖应用层。
|
|
32
|
+
- MUST NOT:写业务规则;直接调用 repository / ORM;直接拼 SQL;持有事务;返回 ORM entity 给客户端。
|
|
33
|
+
- 标准动作链:`parse → authorize → call service → map response`。
|
|
34
|
+
|
|
35
|
+
### ② 应用层 / Application(service、use-case、interactor)
|
|
36
|
+
**编排用例**:协调领域对象、仓储、基础设施服务,完成一个业务用例。**这是"服务层",见 §2 重点展开。**
|
|
37
|
+
- MUST:无状态;一个 public 方法 = 一个用例 = 一个事务边界(Unit of Work);输入/输出都是 DTO;编排顺序、调用领域方法、提交/回滚事务、处理应用级失败(如外部服务不可用的补偿)。
|
|
38
|
+
- MUST NOT:写 HTTP 细节(状态码、header);写持久化细节(SQL、ORM 查询构造);承载本应属于领域的不变量规则(那是贫血模型反模式)。
|
|
39
|
+
|
|
40
|
+
### ③ 领域层 / Domain(entity、value object、domain service、领域事件)
|
|
41
|
+
**业务的真相**:表达业务概念、规则与不变量,**有行为不只是数据**。
|
|
42
|
+
- MUST:把不变量(invariant)封装进实体方法(如 `order.cancel()` 内部校验状态机),而非散落在 service 的 if;用值对象(Value Object)表达 Money/Email/PhoneNumber 等带约束的概念;纯内存、零框架依赖、可独立单测。
|
|
43
|
+
- MUST NOT:依赖框架注解以外的运行时框架、依赖 DB、依赖 HTTP。
|
|
44
|
+
- 反模式:**贫血领域模型**(entity 只有 getter/setter,所有逻辑堆在 service)——禁止。
|
|
45
|
+
|
|
46
|
+
### ④ 基础设施层 / Infrastructure(repository 实现、ORM、HTTP 客户端、消息、缓存、文件存储)
|
|
47
|
+
**与外部世界对接**:实现内层定义的接口。
|
|
48
|
+
- MUST:repository 把领域对象 ↔ 持久化模型互转;封装一切 SQL/ORM/网络;实现领域/应用层声明的端口接口(依赖倒置)。
|
|
49
|
+
- MUST NOT:把业务规则写进 repository;让领域层 import 基础设施的具体类。
|
|
50
|
+
|
|
51
|
+
## 2. 服务层(Service Layer)怎么写——重点
|
|
52
|
+
|
|
53
|
+
服务层是商业项目最容易写烂的一层。规则:
|
|
54
|
+
|
|
55
|
+
1. **无状态 + 用例粒度**:每个 public 方法对应一个明确用例(`registerUser`、`placeOrder`、`cancelSubscription`),命名是动词+领域名词,不是 `UserService.handle()` 这种万能方法。
|
|
56
|
+
2. **方法即事务边界(Unit of Work)**:在服务方法的开始/结束界定事务;用例内要么全成功要么全回滚。事务**绝不**下沉到 repository(repository 不该 commit),也**绝不**上浮到 controller。
|
|
57
|
+
3. **收发 DTO,绝不泄露 entity**:服务方法接收 input DTO(已在边界校验),返回 output DTO;**永远不要把 ORM entity 直接返回给上层/客户端**(会泄露内部结构、产生懒加载陷阱、破坏契约)。
|
|
58
|
+
4. **编排,不堆砌领域逻辑**:服务负责"调用顺序/事务/跨聚合协调/调外部服务";单个聚合内部的规则放进领域实体方法。判断标准:如果一段 if 是"这个业务对象在什么状态下允许做什么",它属于领域层;如果是"先扣库存再创建订单再发消息",它属于服务层。
|
|
59
|
+
5. **依赖抽象**:服务依赖 `OrderRepository`(接口)、`PaymentGateway`(接口),不依赖 `TypeOrmOrderRepository`、`StripeClient` 具体类——便于替换与单测(依赖倒置 + 注入)。
|
|
60
|
+
6. **应用级失败处理**:外部支付超时、消息发送失败等,由服务层决定补偿/重试/标记,不让它冒泡成 500。
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
// 用例:下单(服务层方法的标准骨架)
|
|
64
|
+
placeOrder(input: PlaceOrderDTO): OrderDTO {
|
|
65
|
+
开启事务 { // ② 事务边界在服务层
|
|
66
|
+
cart = cartRepo.findOpen(input.userId) // ④ 取数据
|
|
67
|
+
order = Order.create(cart, input.address) // ③ 领域方法内部校验不变量
|
|
68
|
+
inventory.reserve(order.items) // ③/④ 领域+基础设施
|
|
69
|
+
orderRepo.save(order) // ④ 持久化
|
|
70
|
+
} 提交/回滚
|
|
71
|
+
paymentGateway.authorize(order) // ④ 外部服务(事务外,失败可补偿)
|
|
72
|
+
events.publish(OrderPlaced(order.id)) // 领域事件
|
|
73
|
+
return OrderDTO.from(order) // 收发 DTO,不返回 entity
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## 3. DTO / Entity / Domain Model / VO 的区分与映射
|
|
78
|
+
|
|
79
|
+
| 概念 | 作用 | 出现在哪层 |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| **Input DTO** | 入参契约 + 边界校验(Zod/Joi/Pydantic/Bean Validation) | 接口层接收,传入服务层 |
|
|
82
|
+
| **Output DTO / View Model** | 出参契约,只暴露该接口需要的字段 | 服务层产出,接口层返回 |
|
|
83
|
+
| **Domain Entity / Aggregate** | 带行为与不变量的业务对象 | 领域层(内存中)|
|
|
84
|
+
| **Value Object** | 不可变、带约束的小概念(Money、Email) | 领域层 |
|
|
85
|
+
| **Persistence Model / ORM Entity** | 数据库表映射 | 基础设施层 |
|
|
86
|
+
|
|
87
|
+
映射规则:
|
|
88
|
+
- **input DTO → 领域对象:手写映射**(显式构造,校验业务不变量),不要用自动映射工具一把梭。
|
|
89
|
+
- **领域对象 → output DTO:可用自动映射**(结构简单、方向安全)。
|
|
90
|
+
- **领域对象 ↔ persistence model:在 repository 内互转**,领域层对 ORM 无感知。
|
|
91
|
+
- 切忌"一个类贯穿所有层"(ORM entity 同时当 DTO 当领域模型)——这是商业项目腐化的头号原因。
|
|
92
|
+
|
|
93
|
+
## 4. 校验放哪
|
|
94
|
+
|
|
95
|
+
- **边界校验(格式/必填/范围)**:在接口层用 schema 校验 input DTO,失败返回 422 + 字段级错误。
|
|
96
|
+
- **业务不变量(状态机/跨字段规则/唯一性)**:在领域层实体方法内强制(如不能取消已发货订单),或在服务层做需要查库的规则(如邮箱唯一)。
|
|
97
|
+
- 永远不要只信前端校验。
|
|
98
|
+
|
|
99
|
+
## 5. 错误处理跨层策略
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
领域层:抛领域异常(OrderAlreadyShippedError 等,带业务语义,不带 HTTP)
|
|
103
|
+
应用层:不吞异常;需要补偿的应用级失败在此处理;其余向上抛
|
|
104
|
+
接口层:集中异常映射 → HTTP(NotFound→404, Forbidden→403, Conflict→409, Validation→422, 未知→500 且不泄露细节、记录 requestId+stack)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## 6. 依赖注入与依赖倒置
|
|
108
|
+
|
|
109
|
+
- 内层(领域/应用)**定义接口**(端口);外层(基础设施)**提供实现**(适配器)。
|
|
110
|
+
- 通过构造函数注入装配;禁止在领域/应用层 `new` 具体的基础设施类。
|
|
111
|
+
- 收益:可替换数据库/第三方、领域逻辑可纯单测(mock 端口)。
|
|
112
|
+
|
|
113
|
+
## 7. 分包(Package / 模块结构)——优先 package-by-feature
|
|
114
|
+
|
|
115
|
+
**默认按功能分包(package-by-feature),而不是按层分包(package-by-layer)。** 业界共识:按功能分包可扩展性、封装性、可定位性更好,新增功能不动其它结构,且天然支持"模块化单体 → 拆微服务"的演进路径。经验法则:**先按功能分包,复杂度上来再在功能内部按层细分**。
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
src/
|
|
119
|
+
├─ modules/ # 按功能(限界上下文)分包 ← 推荐
|
|
120
|
+
│ ├─ orders/
|
|
121
|
+
│ │ ├─ interface/ # controller / route / dto(in,out)
|
|
122
|
+
│ │ ├─ application/ # order.service.ts(用例、事务)
|
|
123
|
+
│ │ ├─ domain/ # order.entity.ts, order-status.vo.ts, ports(repo接口)
|
|
124
|
+
│ │ └─ infrastructure/ # order.repository.ts(实现), orm-models
|
|
125
|
+
│ ├─ payments/
|
|
126
|
+
│ └─ users/
|
|
127
|
+
├─ shared/ # 跨功能复用:errors, result, base-entity, value-objects
|
|
128
|
+
└─ platform/ # 框架装配:config, db, http server, di, middleware, logging
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
- 每个 feature 自带 interface/application/domain/infrastructure,内部遵守依赖方向。
|
|
132
|
+
- feature 之间**通过应用层接口/领域事件通信**,不要跨 feature 直接调对方 repository 或 entity。
|
|
133
|
+
- 尽量用 package-private/模块私有可见性,只导出该 feature 的公开 API(service 接口 + DTO)。
|
|
134
|
+
- 不要过早上微服务:"复杂度不够时不配拥有 Clean Architecture";先模块化单体,边界清晰后再按 feature 抽服务。
|
|
135
|
+
|
|
136
|
+
## 8. 常见反模式(出现即不合格)
|
|
137
|
+
|
|
138
|
+
- Fat Controller:业务逻辑写在 controller。
|
|
139
|
+
- Controller 直接调 repository / 直接写 SQL,跳过服务层。
|
|
140
|
+
- 服务层返回或接收 ORM entity(泄露持久化结构)。
|
|
141
|
+
- 贫血领域模型:entity 只有数据、规则全在 service。
|
|
142
|
+
- 一个 `God Service` 几千行,方法不是用例粒度。
|
|
143
|
+
- 事务写在 repository 或 controller 里。
|
|
144
|
+
- 领域层 import ORM/HTTP/框架具体类。
|
|
145
|
+
- 按层分包到极端(controllers/、services/、repositories/ 三个大目录),功能散落、改一个需求要翻三处。
|
|
146
|
+
- 一个类(ORM entity)同时充当 DTO + 领域模型 + 持久化模型。
|
|
147
|
+
|
|
148
|
+
## 9. 最低交付标准(写完后自检 checklist)
|
|
149
|
+
|
|
150
|
+
- [ ] controller 不含业务规则,只 parse→authorize→call service→map response。
|
|
151
|
+
- [ ] 每个 service 方法是一个用例,是事务边界,收发 DTO 而非 entity。
|
|
152
|
+
- [ ] 领域不变量封装在 entity/VO 方法里,不在 service 用裸 if 散落。
|
|
153
|
+
- [ ] repository 只做持久化,不含业务规则,不 commit 事务。
|
|
154
|
+
- [ ] 内层只依赖接口(端口),具体实现靠注入;领域层零框架/DB 依赖。
|
|
155
|
+
- [ ] 按 feature 分包,feature 内部按层;跨 feature 不互相调 repository/entity。
|
|
156
|
+
- [ ] 跨层错误处理:领域抛语义异常→接口层集中映射 HTTP,500 不泄露细节。
|
|
157
|
+
- [ ] input DTO 在边界校验;业务不变量在领域/服务校验。
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
**参考(commercial-grade 工程共识)**:Layered/Clean/Hexagonal Architecture(依赖向内)、Martin Fowler PoEAA(Service Layer、DTO)、DDD(聚合、值对象、避免贫血模型)、Package-by-Feature(模块化单体演进)。
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: auth-implementation
|
|
3
|
+
title: 认证与授权实现标准(商业级必读 · 全流程)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [认证, 授权, auth, jwt, session, refresh-token, oauth, rbac, 密码重置, 邮箱验证, 登录, 注册, 权限, 商业级]
|
|
8
|
+
quality_score: 96
|
|
9
|
+
last_updated: 2026-06-19
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 认证与授权实现标准(商业级必读 · 全流程)
|
|
13
|
+
|
|
14
|
+
> 认证是每个商业 app 的刚需,也是 AI 最容易写出**安全漏洞**的地方。本标准给出完整流程 + 安全要点。认证 = 你是谁(authentication),授权 = 你能做什么(authorization),两者都要做对。
|
|
15
|
+
|
|
16
|
+
## 1. 选型:Session vs Token(先定再写)
|
|
17
|
+
|
|
18
|
+
| | Session(服务端会话)| JWT/Token |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| 适合 | 传统 Web、需要随时吊销 | SPA/移动/多服务、无状态扩展 |
|
|
21
|
+
| 存储 | 服务端(Redis) + cookie | 客户端持有 |
|
|
22
|
+
| 吊销 | 天然可吊销 | 需黑名单/短过期 |
|
|
23
|
+
|
|
24
|
+
- 单体 Web 优先 **session + HttpOnly cookie**(简单、可吊销、防 XSS 窃取)。
|
|
25
|
+
- SPA/多服务用 **access token(短,15min) + refresh token(长,旋转)**;access 放内存,refresh 放 HttpOnly cookie。
|
|
26
|
+
- **不要**把 JWT 放 localStorage(XSS 可窃取)。
|
|
27
|
+
|
|
28
|
+
## 2. 注册(Registration)
|
|
29
|
+
|
|
30
|
+
1. 校验 input(email 格式、密码强度:长度≥8 + 复杂度)。
|
|
31
|
+
2. 检查 email 唯一(DB 唯一约束兜底,防并发重复)。
|
|
32
|
+
3. **密码用 bcrypt/argon2 加盐哈希**存储(cost 合理),绝不明文/弱哈希。
|
|
33
|
+
4. 创建用户(默认未验证状态)。
|
|
34
|
+
5. 发**邮箱验证**链接(带签名 token,有过期)。
|
|
35
|
+
6. 返回不泄露"该 email 是否已注册"(防枚举)。
|
|
36
|
+
|
|
37
|
+
## 3. 登录(Login)
|
|
38
|
+
|
|
39
|
+
1. 按 email 取用户;用户不存在也走一遍哈希比对(防时序枚举)。
|
|
40
|
+
2. `bcrypt.compare` 校验密码;失败信息模糊("账号或密码错误")。
|
|
41
|
+
3. **登录限流 + 失败锁定**(防爆破:N 次失败锁定/加验证码)。
|
|
42
|
+
4. 成功 → 建 session 或签发 access+refresh token。
|
|
43
|
+
5. 记录登录审计(时间、IP、UA)。
|
|
44
|
+
|
|
45
|
+
## 4. Token 刷新与登出
|
|
46
|
+
|
|
47
|
+
- **refresh token 旋转**:每次刷新签发新 refresh 并作废旧的(被盗用可检测:旧 refresh 被复用即全部吊销)。
|
|
48
|
+
- access 过期 → 用 refresh 换新 access;refresh 过期 → 重新登录。
|
|
49
|
+
- 登出:服务端使 session/refresh 失效(删除/加黑名单),清 cookie。
|
|
50
|
+
- 维护 token 版本/会话表,支持"登出所有设备"。
|
|
51
|
+
|
|
52
|
+
## 5. 密码重置(忘记密码)
|
|
53
|
+
|
|
54
|
+
1. 提交 email → **无论是否存在都回相同响应**(防枚举)。
|
|
55
|
+
2. 存在则发**一次性、短过期、签名**的重置 token(存哈希,用后即焚)。
|
|
56
|
+
3. 用 token 设新密码 → 校验 token 有效未用未过期 → 更新哈希 → **作废该用户所有 session/refresh**(强制重登)。
|
|
57
|
+
4. 重置链接走 HTTPS,token 不进日志。
|
|
58
|
+
|
|
59
|
+
## 6. 邮箱验证
|
|
60
|
+
|
|
61
|
+
- 注册后发签名验证 token(有过期);点击验证后置 `email_verified`。
|
|
62
|
+
- 未验证用户限制敏感操作;可重发验证(限流)。
|
|
63
|
+
|
|
64
|
+
## 7. 授权(Authorization)—— 比认证更易漏
|
|
65
|
+
|
|
66
|
+
- **每个受保护操作在服务层校验权限**,不能只靠"登录了"或前端隐藏。
|
|
67
|
+
- **对象级授权(防 IDOR/BOLA)**:`GET /orders/{id}` 必须校验该 order 属于当前用户;不能凭 id 直取他人资源。
|
|
68
|
+
- **RBAC**:用户-角色-权限模型;后台/管理端额外校验角色。复杂场景用策略/ABAC。
|
|
69
|
+
- 默认拒绝,显式放行;最小权限。
|
|
70
|
+
- 中间件做认证(解析 token/session → 当前用户),授权在业务层(能否操作这条资源)。
|
|
71
|
+
|
|
72
|
+
## 8. OAuth / 第三方登录(如需)
|
|
73
|
+
|
|
74
|
+
- 用成熟库/标准流程(Authorization Code + PKCE),不要自己手搓。
|
|
75
|
+
- 校验 `state`(防 CSRF)、`nonce`;只信后端换 token,不在前端暴露 client secret。
|
|
76
|
+
- 首次第三方登录映射/创建本地用户;处理 email 冲突。
|
|
77
|
+
|
|
78
|
+
## 9. Cookie 与传输安全
|
|
79
|
+
|
|
80
|
+
- 认证 cookie:`HttpOnly` + `Secure` + `SameSite=Lax/Strict`。
|
|
81
|
+
- 全程 HTTPS;敏感端点防 CSRF(SameSite + token,或纯 Bearer)。
|
|
82
|
+
- 不在响应/日志回传密码哈希、完整 token。
|
|
83
|
+
|
|
84
|
+
## 10. 反模式(出现即不合格)
|
|
85
|
+
|
|
86
|
+
- 明文/MD5/SHA1 存密码;JWT 放 localStorage;JWT 永不过期或 `alg:none`。
|
|
87
|
+
- 登录无限流、错误信息暴露账号是否存在。
|
|
88
|
+
- 只校验登录、不做对象级授权(可越权访问他人数据)。
|
|
89
|
+
- 密码重置 token 长期有效/可复用/明文存/进日志;重置后不作废旧会话。
|
|
90
|
+
- 自己手搓 OAuth;前端持有 client secret。
|
|
91
|
+
- refresh token 不旋转、被盗无法检测。
|
|
92
|
+
|
|
93
|
+
## 11. 最低交付 checklist
|
|
94
|
+
|
|
95
|
+
- [ ] 先定 session vs token;JWT 不进 localStorage;cookie HttpOnly/Secure/SameSite。
|
|
96
|
+
- [ ] 密码 bcrypt/argon2 哈希 + 强度校验 + email 唯一约束。
|
|
97
|
+
- [ ] 登录限流/锁定 + 模糊错误 + 审计;access 短过期 + refresh 旋转。
|
|
98
|
+
- [ ] 密码重置:防枚举 + 一次性短期签名 token + 重置后作废旧会话。
|
|
99
|
+
- [ ] 邮箱验证流程。
|
|
100
|
+
- [ ] 每个受保护操作做对象级授权(防 IDOR)+ RBAC + 默认拒绝最小权限。
|
|
101
|
+
- [ ] OAuth 用标准库 + PKCE + state;全程 HTTPS + CSRF 防护。
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
**参考**:OWASP ASVS(认证/会话/访问控制)、OWASP Auth Cheat Sheet、OAuth 2.0/OIDC、RFC 6749/7636(PKCE)。
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: backend-framework-idioms
|
|
3
|
+
title: 后端框架地道写法(Spring/NestJS/FastAPI/Express/Go · 官方惯例)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [后端框架, spring-boot, nestjs, fastapi, express, gin, go, 分层, 依赖注入, dto, 事务, 中间件, 官方惯例, 商业级]
|
|
8
|
+
quality_score: 94
|
|
9
|
+
last_updated: 2026-06-19
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 后端框架地道写法(Spring/NestJS/FastAPI/Express/Go · 官方惯例)
|
|
13
|
+
|
|
14
|
+
> 通用分层(controller→service→domain→repository)要落到**各框架的地道写法**。纯底座常写出"能跑但不地道"的代码。本标准把分层映射到主流框架的官方惯例。先按所选框架对号入座。
|
|
15
|
+
|
|
16
|
+
## 通用(所有框架都遵守)
|
|
17
|
+
|
|
18
|
+
- 四层 + 依赖向内(见《应用分层与分包》):controller 仅传输 / service 用例+事务+收发 DTO / domain 业务规则 / repository 持久化。
|
|
19
|
+
- **按 feature 分包**(不按技术层堆大目录);shared 放公共件。
|
|
20
|
+
- 入参 DTO + 校验;统一错误处理;DI 注入接口而非具体类。
|
|
21
|
+
|
|
22
|
+
## Spring Boot(Java)
|
|
23
|
+
|
|
24
|
+
- 分层注解:`@RestController`(传输) → `@Service`(业务+`@Transactional` 事务边界) → `@Repository`(Spring Data JPA)。
|
|
25
|
+
- DTO + `@Valid` + Bean Validation 注解校验;**实体(@Entity) 不直接当响应**,转 DTO。
|
|
26
|
+
- 全局异常用 `@RestControllerAdvice` + `@ExceptionHandler` 集中映射 HTTP。
|
|
27
|
+
- 构造器注入(不用字段 @Autowired);`application.yml` + profiles 分环境;配置类型安全(@ConfigurationProperties)。
|
|
28
|
+
- 分包按 feature(`com.app.orders.{web,service,domain,repo}`)优于按层大目录。
|
|
29
|
+
|
|
30
|
+
## NestJS(TypeScript)
|
|
31
|
+
|
|
32
|
+
- **模块化按 feature**:每个 feature 一个 `@Module`,含 controller/service/dto/entity(**超过 ~20 controller 的纯分层会后悔**——按 feature)。
|
|
33
|
+
- `@Controller`(传输) → `@Injectable() Service`(用例) → Repository(TypeORM/Prisma);DI 注入。
|
|
34
|
+
- DTO + **class-validator + ValidationPipe**(全局)校验;不返回 ORM entity,转 DTO/序列化。
|
|
35
|
+
- 横切用 **Guards**(鉴权/授权)、**Interceptors**(日志/转换)、**Pipes**(校验/转换)、**ExceptionFilter**(统一错误);放 SharedModule。
|
|
36
|
+
- 事务在 service 层(QueryRunner / Prisma `$transaction`)。
|
|
37
|
+
|
|
38
|
+
## FastAPI(Python)
|
|
39
|
+
|
|
40
|
+
- 分层:`routers`(端点) → `services`(业务工作流) → `repositories`(DB 查询) → `schemas`(Pydantic 请求/响应校验);core/db/shared 放基础设施;**business 按 feature 文件夹**。
|
|
41
|
+
- **Pydantic 模型**做入参/出参校验与序列化;响应模型用 `response_model`,**不直接吐 ORM 对象**。
|
|
42
|
+
- **依赖注入用 `Depends`**(DB session、当前用户、权限);I/O 用 `async`。
|
|
43
|
+
- SQLAlchemy 在 repository 封装;事务边界在 service;统一异常处理(exception_handler)。
|
|
44
|
+
- API 版本化(`/v1`)、自动 OpenAPI 文档。
|
|
45
|
+
|
|
46
|
+
## Express / NestJS-less Node(TypeScript)
|
|
47
|
+
|
|
48
|
+
- 不要 fat route:route → controller → service → repository 分层;逻辑不写在路由回调里。
|
|
49
|
+
- 校验用 zod/Joi 中间件;统一 **error-handling middleware**(最后挂载);async 错误用包装器/`express-async-errors` 传到错误中间件。
|
|
50
|
+
- 中间件做鉴权/日志/限流;配置/DI 显式装配;按 feature 组织。
|
|
51
|
+
|
|
52
|
+
## Go(Gin/Echo/标准库)
|
|
53
|
+
|
|
54
|
+
- Clean Architecture:handler(传输) → usecase/service(业务) → repository(接口+实现) → domain(实体);依赖倒置,依赖注入接口。
|
|
55
|
+
- 用 `context.Context` 传递取消/超时/请求范围值;**显式错误处理**(`if err != nil`),错误包装(`fmt.Errorf("%w")`)。
|
|
56
|
+
- 入参绑定+校验(validator);不返回 DB model 直接序列化;事务在 service。
|
|
57
|
+
- 不用全局可变状态;并发用 goroutine+channel 且注意同步。
|
|
58
|
+
|
|
59
|
+
## 反模式(出现即不合格)
|
|
60
|
+
|
|
61
|
+
- 把业务逻辑写在 controller/router/handler;controller 直连 DB/ORM。
|
|
62
|
+
- 返回 ORM entity/DB model 给客户端;不转 DTO。
|
|
63
|
+
- 不用框架的校验/DI/异常机制(各写各的);事务写在错误层级。
|
|
64
|
+
- 按技术层堆大目录(controllers/services/repos)而非 feature(NestJS/FastAPI 尤其)。
|
|
65
|
+
- Spring 字段注入;Go 忽略 err / 全局可变状态;Express fat route 无错误中间件。
|
|
66
|
+
|
|
67
|
+
## 最低交付 checklist
|
|
68
|
+
|
|
69
|
+
- [ ] 按所选框架地道分层:Spring(@RestController/@Service/@Transactional/@Repository+@RestControllerAdvice)、NestJS(Module/Controller/Service/DTO+ValidationPipe/Guards/Filters)、FastAPI(routers/services/repositories/Pydantic/Depends/async)、Express(分层+错误中间件)、Go(clean arch+context+显式 err)。
|
|
70
|
+
- [ ] 按 feature 分包;DTO 校验+不泄露 entity;DI 注入接口;事务在 service 层。
|
|
71
|
+
- [ ] 框架原生机制做横切(校验/鉴权/异常/中间件),不各写各的。
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
**参考(官方)**:Spring Boot 官方/分层、NestJS 官方(Modules/Providers/Pipes/Guards)、FastAPI 官方(Bigger Applications/Dependencies/SQL)、Express 错误处理、Go Clean Architecture。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: background-jobs-and-async
|
|
3
|
+
title: 后台任务与异步处理标准(商业级必读)
|
|
4
|
+
domain: backend
|
|
5
|
+
category: 01-standards
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [后台任务, 异步, async, 队列, queue, 定时任务, cron, worker, 幂等, 重试, 死信, dlq, 商业级]
|
|
8
|
+
quality_score: 95
|
|
9
|
+
last_updated: 2026-06-19
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 后台任务与异步处理标准(商业级必读)
|
|
13
|
+
|
|
14
|
+
> 发邮件、处理上传、生成报表、对账、推送——耗时/可延迟的工作绝不能放在请求线程里让用户干等。本标准给出商业级的异步任务做法。
|
|
15
|
+
|
|
16
|
+
## 1. 什么该异步
|
|
17
|
+
|
|
18
|
+
- **耗时操作**(发邮件/短信、图片处理、报表生成、第三方慢调用)→ 入队列异步,请求快速返回。
|
|
19
|
+
- **可延迟/批量**(清理、对账、统计聚合、过期处理)→ 定时任务。
|
|
20
|
+
- **削峰**(突发写入)→ 队列缓冲。
|
|
21
|
+
- 请求路径只做必须同步的事,其余抛给后台。
|
|
22
|
+
|
|
23
|
+
## 2. 队列与 Worker
|
|
24
|
+
|
|
25
|
+
- 用成熟队列(Redis+BullMQ / RabbitMQ / SQS / Celery / Sidekiq),不要自己用 DB 轮询硬撑(除非量小)。
|
|
26
|
+
- 生产者入队(带任务类型+载荷+幂等键),Worker 消费;生产消费解耦、可独立扩展 Worker。
|
|
27
|
+
- 任务载荷小(传 id 不传大对象);幂等消费(见 §3)。
|
|
28
|
+
|
|
29
|
+
## 3. 可靠性:幂等 + 重试 + 死信
|
|
30
|
+
|
|
31
|
+
- **消费幂等**:同一任务可能投递多次(at-least-once),用任务 id/业务键去重,处理一次即可——尤其涉钱/发货/发邮件。
|
|
32
|
+
- **重试 + 指数退避**:瞬时失败自动重试(限次数、退避),区分可重试(网络/限流)与不可重试(参数错)。
|
|
33
|
+
- **死信队列(DLQ)**:超过重试仍失败的任务进 DLQ,告警 + 人工介入,不静默丢弃。
|
|
34
|
+
- 任务可见性:记录状态(queued/processing/done/failed)、耗时、错误,可观测可重放。
|
|
35
|
+
|
|
36
|
+
## 4. 定时任务(Cron)
|
|
37
|
+
|
|
38
|
+
- 用调度器(cron / 平台 scheduler / k8s CronJob)触发,**幂等**(同一时刻可能多实例触发,要去重/加锁)。
|
|
39
|
+
- 多实例下用分布式锁/leader 选举,避免重复跑。
|
|
40
|
+
- 长任务有超时与监控;失败告警;不要让一个慢任务堆积。
|
|
41
|
+
|
|
42
|
+
## 5. 与请求/事务的边界
|
|
43
|
+
|
|
44
|
+
- 入队**在主事务提交之后**(或用 outbox 模式:业务与"待发消息"同事务写库,再由发送器投递),避免"事务回滚了但消息已发"或"消息发了但事务没提交"。
|
|
45
|
+
- Worker 里涉及 DB 的操作自带事务与幂等。
|
|
46
|
+
|
|
47
|
+
## 6. 反模式(出现即不合格)
|
|
48
|
+
|
|
49
|
+
- 在请求线程里同步发邮件/处理大文件/调慢第三方,让用户干等。
|
|
50
|
+
- 队列消费不幂等,重复投递导致重复扣款/重复发邮件。
|
|
51
|
+
- 失败不重试或无限重试;失败任务静默丢弃(无 DLQ/告警)。
|
|
52
|
+
- 定时任务多实例重复跑;长任务无超时堆积。
|
|
53
|
+
- 用 DB 轮询当队列扛高并发;任务载荷塞大对象。
|
|
54
|
+
- 事务未提交就入队(消息与数据不一致)。
|
|
55
|
+
|
|
56
|
+
## 7. 最低交付 checklist
|
|
57
|
+
|
|
58
|
+
- [ ] 耗时/可延迟工作入队列异步,请求快速返回。
|
|
59
|
+
- [ ] 用成熟队列;生产消费解耦;载荷小传 id。
|
|
60
|
+
- [ ] 消费幂等(去重) + 重试退避(区分可重试) + DLQ + 告警。
|
|
61
|
+
- [ ] 定时任务幂等 + 多实例去重(分布式锁) + 超时监控。
|
|
62
|
+
- [ ] 入队在事务提交后或用 outbox;Worker 内 DB 操作有事务+幂等。
|
|
63
|
+
- [ ] 任务状态/耗时/错误可观测,可重放。
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
**参考**:消息队列模式、at-least-once + 幂等消费、Outbox 模式、指数退避、死信队列、分布式定时任务。
|