@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,652 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: performance-tuning-playbook
|
|
3
|
+
title: 性能调优作战手册 (Performance Tuning Playbook)
|
|
4
|
+
domain: development
|
|
5
|
+
category: 02-playbooks
|
|
6
|
+
difficulty: intermediate
|
|
7
|
+
tags: [agent, checklist, development, performance, playbook, tuning, 前置条件, 回滚方案]
|
|
8
|
+
quality_score: 70
|
|
9
|
+
last_updated: 2026-06-15
|
|
10
|
+
---
|
|
11
|
+
# 性能调优作战手册 (Performance Tuning Playbook)
|
|
12
|
+
|
|
13
|
+
## 概述
|
|
14
|
+
|
|
15
|
+
性能调优是针对已识别的具体性能瓶颈,通过系统化的 分析 -> 定位 -> 优化 -> 验证 工作流进行精确优化的过程。与性能优化手册侧重整体方法论不同,本手册聚焦于具体工具的使用方法、火焰图分析、profiling 技术和基准测试实践。
|
|
16
|
+
|
|
17
|
+
## 前置条件
|
|
18
|
+
|
|
19
|
+
### 必须满足
|
|
20
|
+
|
|
21
|
+
- [ ] 已有明确的性能问题描述(哪个接口、什么场景、多慢)
|
|
22
|
+
- [ ] 已有可复现的性能问题环境(生产镜像或压测环境)
|
|
23
|
+
- [ ] 已有性能基线数据(正常时的指标)
|
|
24
|
+
- [ ] profiling 工具已安装并可用
|
|
25
|
+
- [ ] 有足够的磁盘空间存储 profiling 数据(建议 > 10GB)
|
|
26
|
+
|
|
27
|
+
### 工具清单
|
|
28
|
+
|
|
29
|
+
| 维度 | 工具 | 语言/平台 |
|
|
30
|
+
|------|------|----------|
|
|
31
|
+
| CPU Profiling | py-spy, cProfile, perf, async-profiler | Python, 系统级, Java |
|
|
32
|
+
| Memory Profiling | tracemalloc, memory_profiler, objgraph, MAT | Python, Java |
|
|
33
|
+
| 火焰图 | FlameGraph, speedscope, py-spy | 通用 |
|
|
34
|
+
| 基准测试 | pytest-benchmark, wrk, k6, ab | Python, HTTP |
|
|
35
|
+
| 数据库 | EXPLAIN ANALYZE, pg_stat_statements, slow_query_log | PostgreSQL, MySQL |
|
|
36
|
+
| 网络 | tcpdump, wireshark, mtr | 系统级 |
|
|
37
|
+
| 综合 APM | Datadog, New Relic, SkyWalking, Jaeger | 通用 |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 步骤一:分析 — 收集性能数据
|
|
42
|
+
|
|
43
|
+
### 1.1 CPU Profiling
|
|
44
|
+
|
|
45
|
+
#### Python - py-spy(推荐,低开销,可附加到运行中的进程)
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# 安装
|
|
49
|
+
pip install py-spy
|
|
50
|
+
|
|
51
|
+
# 实时 top 视图 - 查看当前 CPU 热点
|
|
52
|
+
py-spy top --pid $(pgrep -f "uvicorn")
|
|
53
|
+
|
|
54
|
+
# 生成火焰图 SVG
|
|
55
|
+
py-spy record -o flame_cpu.svg --pid $(pgrep -f "uvicorn") --duration 30
|
|
56
|
+
|
|
57
|
+
# 生成 speedscope 格式(交互式分析)
|
|
58
|
+
py-spy record -o profile.speedscope --format speedscope --pid $(pgrep -f "uvicorn") --duration 30
|
|
59
|
+
# 然后在浏览器打开 https://www.speedscope.app/ 导入
|
|
60
|
+
|
|
61
|
+
# 采样子进程(适用于 multiprocessing)
|
|
62
|
+
py-spy record -o flame.svg --pid $(pgrep -f "uvicorn") --subprocesses --duration 60
|
|
63
|
+
|
|
64
|
+
# 只采集 GIL 持有者(找到真正占 CPU 的代码)
|
|
65
|
+
py-spy record -o flame_gil.svg --pid $(pgrep -f "uvicorn") --gil --duration 30
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### Python - cProfile(内置,适用于脚本级分析)
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
import cProfile
|
|
72
|
+
import pstats
|
|
73
|
+
from io import StringIO
|
|
74
|
+
|
|
75
|
+
def profile_function(func, *args, **kwargs):
|
|
76
|
+
"""Profile 一个函数并输出统计"""
|
|
77
|
+
profiler = cProfile.Profile()
|
|
78
|
+
profiler.enable()
|
|
79
|
+
result = func(*args, **kwargs)
|
|
80
|
+
profiler.disable()
|
|
81
|
+
|
|
82
|
+
# 输出统计
|
|
83
|
+
stream = StringIO()
|
|
84
|
+
stats = pstats.Stats(profiler, stream=stream)
|
|
85
|
+
stats.sort_stats('cumulative')
|
|
86
|
+
stats.print_stats(30) # Top 30
|
|
87
|
+
print(stream.getvalue())
|
|
88
|
+
|
|
89
|
+
# 保存为可分析文件
|
|
90
|
+
stats.dump_stats('profile_output.prof')
|
|
91
|
+
|
|
92
|
+
return result
|
|
93
|
+
|
|
94
|
+
# 使用 snakeviz 可视化
|
|
95
|
+
# pip install snakeviz
|
|
96
|
+
# snakeviz profile_output.prof
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### Python - line_profiler(逐行分析)
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
# pip install line_profiler
|
|
103
|
+
|
|
104
|
+
# 方式 1: 装饰器
|
|
105
|
+
from line_profiler import profile
|
|
106
|
+
|
|
107
|
+
@profile
|
|
108
|
+
def slow_function(data):
|
|
109
|
+
result = []
|
|
110
|
+
for item in data: # 看每行耗时
|
|
111
|
+
processed = transform(item) # 哪行最慢一目了然
|
|
112
|
+
result.append(processed)
|
|
113
|
+
return result
|
|
114
|
+
|
|
115
|
+
# 运行: kernprof -l -v script.py
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
#### 系统级 - Linux perf
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
# 采集 CPU 调用栈(30秒)
|
|
122
|
+
sudo perf record -g -p $(pgrep -f "your-app") -- sleep 30
|
|
123
|
+
|
|
124
|
+
# 生成报告
|
|
125
|
+
sudo perf report --stdio --sort=dso,sym | head -50
|
|
126
|
+
|
|
127
|
+
# 生成火焰图
|
|
128
|
+
sudo perf script > perf.unfold
|
|
129
|
+
stackcollapse-perf.pl perf.unfold | flamegraph.pl > perf_flame.svg
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 1.2 Memory Profiling
|
|
133
|
+
|
|
134
|
+
#### Python - tracemalloc(内置,推荐)
|
|
135
|
+
|
|
136
|
+
```python
|
|
137
|
+
import tracemalloc
|
|
138
|
+
import linecache
|
|
139
|
+
|
|
140
|
+
def memory_snapshot(label: str = ""):
|
|
141
|
+
"""拍摄内存快照并展示 Top 分配"""
|
|
142
|
+
snapshot = tracemalloc.take_snapshot()
|
|
143
|
+
top_stats = snapshot.statistics('lineno')
|
|
144
|
+
|
|
145
|
+
print(f"\n=== Memory Snapshot: {label} ===")
|
|
146
|
+
print(f"Top 15 memory allocations:")
|
|
147
|
+
for index, stat in enumerate(top_stats[:15], 1):
|
|
148
|
+
frame = stat.traceback[0]
|
|
149
|
+
print(f" #{index}: {frame.filename}:{frame.lineno} - {stat.size / 1024:.1f} KB")
|
|
150
|
+
line = linecache.getline(frame.filename, frame.lineno).strip()
|
|
151
|
+
if line:
|
|
152
|
+
print(f" {line}")
|
|
153
|
+
|
|
154
|
+
def compare_snapshots(snapshot1, snapshot2):
|
|
155
|
+
"""比较两个快照,找出内存增长点"""
|
|
156
|
+
stats = snapshot2.compare_to(snapshot1, 'lineno')
|
|
157
|
+
print("\n=== Memory Growth ===")
|
|
158
|
+
for stat in stats[:10]:
|
|
159
|
+
print(f" {stat}")
|
|
160
|
+
|
|
161
|
+
# 使用示例
|
|
162
|
+
tracemalloc.start()
|
|
163
|
+
snapshot1 = tracemalloc.take_snapshot()
|
|
164
|
+
|
|
165
|
+
# ... 运行目标代码 ...
|
|
166
|
+
|
|
167
|
+
snapshot2 = tracemalloc.take_snapshot()
|
|
168
|
+
compare_snapshots(snapshot1, snapshot2)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### Python - objgraph(对象引用分析,排查泄漏)
|
|
172
|
+
|
|
173
|
+
```python
|
|
174
|
+
import objgraph
|
|
175
|
+
|
|
176
|
+
# 查看对象数量变化(执行两次对比)
|
|
177
|
+
objgraph.show_growth(limit=10)
|
|
178
|
+
|
|
179
|
+
# 找到特定类型的引用链(排查为什么对象没被 GC)
|
|
180
|
+
objgraph.show_backrefs(
|
|
181
|
+
objgraph.by_type('MyClass')[:3],
|
|
182
|
+
max_depth=5,
|
|
183
|
+
filename='refs.png'
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
# 查看最多的对象类型
|
|
187
|
+
objgraph.show_most_common_types(limit=20)
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 1.3 IO 与网络 Profiling
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# 查看进程的系统调用耗时分布
|
|
194
|
+
strace -c -p $(pgrep -f "your-app") -e trace=network,file 2>&1 | head -30
|
|
195
|
+
|
|
196
|
+
# 查看 TCP 连接状态
|
|
197
|
+
ss -tnp | grep $(pgrep -f "your-app") | awk '{print $1}' | sort | uniq -c | sort -rn
|
|
198
|
+
|
|
199
|
+
# 抓包分析慢请求
|
|
200
|
+
tcpdump -i eth0 -w capture.pcap port 8080 -c 10000
|
|
201
|
+
# 用 wireshark 分析 capture.pcap
|
|
202
|
+
|
|
203
|
+
# DNS 解析延迟
|
|
204
|
+
dig @8.8.8.8 api.external-service.com +stats
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### 1.4 数据库 Profiling
|
|
208
|
+
|
|
209
|
+
```sql
|
|
210
|
+
-- PostgreSQL: 启用 pg_stat_statements
|
|
211
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
212
|
+
|
|
213
|
+
-- 查看最慢的查询
|
|
214
|
+
SELECT
|
|
215
|
+
LEFT(query, 100) AS short_query,
|
|
216
|
+
calls,
|
|
217
|
+
ROUND(mean_exec_time::numeric, 2) AS avg_ms,
|
|
218
|
+
ROUND(total_exec_time::numeric, 2) AS total_ms,
|
|
219
|
+
rows,
|
|
220
|
+
ROUND((shared_blks_hit::numeric / NULLIF(shared_blks_hit + shared_blks_read, 0) * 100), 2) AS cache_hit_pct
|
|
221
|
+
FROM pg_stat_statements
|
|
222
|
+
ORDER BY mean_exec_time DESC
|
|
223
|
+
LIMIT 20;
|
|
224
|
+
|
|
225
|
+
-- 详细执行计划
|
|
226
|
+
EXPLAIN (ANALYZE, BUFFERS, TIMING, VERBOSE, FORMAT JSON)
|
|
227
|
+
SELECT o.id, o.status, u.name
|
|
228
|
+
FROM orders o
|
|
229
|
+
JOIN users u ON u.id = o.user_id
|
|
230
|
+
WHERE o.created_at > NOW() - INTERVAL '7 days'
|
|
231
|
+
AND o.status = 'active'
|
|
232
|
+
ORDER BY o.created_at DESC
|
|
233
|
+
LIMIT 50;
|
|
234
|
+
|
|
235
|
+
-- MySQL: 启用慢查询日志
|
|
236
|
+
SET GLOBAL slow_query_log = 'ON';
|
|
237
|
+
SET GLOBAL long_query_time = 0.1; -- 100ms 以上记为慢查询
|
|
238
|
+
SET GLOBAL log_queries_not_using_indexes = 'ON';
|
|
239
|
+
|
|
240
|
+
-- 分析慢查询日志
|
|
241
|
+
-- mysqldumpslow -s t /var/log/mysql/slow.log | head -20
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## 步骤二:定位 — 火焰图分析
|
|
247
|
+
|
|
248
|
+
### 2.1 火焰图阅读方法
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
火焰图解读规则:
|
|
252
|
+
|
|
253
|
+
1. X 轴:函数调用栈的聚合宽度,代表 CPU 时间占比(越宽越耗 CPU)
|
|
254
|
+
2. Y 轴:调用栈深度,底部是入口函数,顶部是叶子函数
|
|
255
|
+
3. 颜色:无特殊含义(仅用于区分不同栈帧)
|
|
256
|
+
|
|
257
|
+
重点关注:
|
|
258
|
+
- "平顶山"(Plateau):顶部的宽方块 = CPU 热点函数
|
|
259
|
+
- "悬崖"(Cliff):调用栈突然变窄 = 该函数消耗了大量 CPU 而非子调用
|
|
260
|
+
|
|
261
|
+
操作步骤:
|
|
262
|
+
1. 先找最宽的顶部方块(最大的 CPU 消耗者)
|
|
263
|
+
2. 向下追溯调用路径(谁调用了它)
|
|
264
|
+
3. 判断是否合理(必要的计算 vs 可优化的逻辑)
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### 2.2 不同类型火焰图
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# CPU 火焰图 - 分析 CPU 密集操作
|
|
271
|
+
py-spy record -o cpu_flame.svg --pid $PID --duration 30
|
|
272
|
+
|
|
273
|
+
# Off-CPU 火焰图 - 分析等待/阻塞(IO、锁、sleep)
|
|
274
|
+
# 需要 BPF 工具
|
|
275
|
+
sudo offcputime-bpfcc -p $PID -f 30 > offcpu.stacks
|
|
276
|
+
flamegraph.pl --color=io < offcpu.stacks > offcpu_flame.svg
|
|
277
|
+
|
|
278
|
+
# 内存火焰图 - 分析内存分配热点
|
|
279
|
+
# 使用 tracemalloc 的结果生成
|
|
280
|
+
python3 << 'PYEOF'
|
|
281
|
+
import tracemalloc
|
|
282
|
+
import json
|
|
283
|
+
|
|
284
|
+
tracemalloc.start(25) # 保留 25 层调用栈
|
|
285
|
+
|
|
286
|
+
# ... 运行目标代码 ...
|
|
287
|
+
|
|
288
|
+
snapshot = tracemalloc.take_snapshot()
|
|
289
|
+
stats = snapshot.statistics('traceback')
|
|
290
|
+
|
|
291
|
+
# 输出 flamegraph 格式
|
|
292
|
+
with open('mem.stacks', 'w') as f:
|
|
293
|
+
for stat in stats[:200]:
|
|
294
|
+
frames = [f"{frame.filename}:{frame.lineno}" for frame in reversed(stat.traceback)]
|
|
295
|
+
f.write(f"{';'.join(frames)} {stat.size}\n")
|
|
296
|
+
PYEOF
|
|
297
|
+
flamegraph.pl --title="Memory Allocation" --countname="bytes" < mem.stacks > mem_flame.svg
|
|
298
|
+
|
|
299
|
+
# 差分火焰图 - 对比优化前后
|
|
300
|
+
difffolded.pl before.folded after.folded | flamegraph.pl > diff_flame.svg
|
|
301
|
+
# 红色 = 回退(变慢), 蓝色 = 改进(变快)
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### 2.3 speedscope 交互式分析
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# speedscope 提供三种视图:
|
|
308
|
+
# 1. Time Order - 按时间顺序查看(适合分析请求处理流程)
|
|
309
|
+
# 2. Left Heavy - 按耗时汇总排序(适合找热点函数)
|
|
310
|
+
# 3. Sandwich - 查看函数的调用者和被调用者(适合分析函数上下文)
|
|
311
|
+
|
|
312
|
+
# 生成 speedscope 兼容格式
|
|
313
|
+
py-spy record -o profile.speedscope --format speedscope --pid $PID --duration 30
|
|
314
|
+
|
|
315
|
+
# 在浏览器中打开 https://www.speedscope.app/ 加载 profile.speedscope
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## 步骤三:优化 — 常见瓶颈修复
|
|
321
|
+
|
|
322
|
+
### 3.1 CPU 密集型优化
|
|
323
|
+
|
|
324
|
+
```python
|
|
325
|
+
# 问题 1: 循环中的重复计算
|
|
326
|
+
# 优化前
|
|
327
|
+
def process_items(items):
|
|
328
|
+
for item in items:
|
|
329
|
+
config = load_config() # 每次循环都重新加载!
|
|
330
|
+
result = expensive_transform(item, config)
|
|
331
|
+
|
|
332
|
+
# 优化后
|
|
333
|
+
def process_items(items):
|
|
334
|
+
config = load_config() # 提到循环外
|
|
335
|
+
for item in items:
|
|
336
|
+
result = expensive_transform(item, config)
|
|
337
|
+
|
|
338
|
+
# 问题 2: 低效的数据结构
|
|
339
|
+
# 优化前 - O(n) 查找
|
|
340
|
+
def find_user(users_list, user_id):
|
|
341
|
+
for user in users_list:
|
|
342
|
+
if user['id'] == user_id:
|
|
343
|
+
return user
|
|
344
|
+
|
|
345
|
+
# 优化后 - O(1) 查找
|
|
346
|
+
users_dict = {u['id']: u for u in users_list}
|
|
347
|
+
def find_user(users_dict, user_id):
|
|
348
|
+
return users_dict.get(user_id)
|
|
349
|
+
|
|
350
|
+
# 问题 3: 字符串拼接
|
|
351
|
+
# 优化前 - O(n^2) 复杂度
|
|
352
|
+
result = ""
|
|
353
|
+
for line in lines:
|
|
354
|
+
result += line + "\n"
|
|
355
|
+
|
|
356
|
+
# 优化后 - O(n) 复杂度
|
|
357
|
+
result = "\n".join(lines)
|
|
358
|
+
|
|
359
|
+
# 问题 4: 使用 C 扩展替代纯 Python
|
|
360
|
+
import orjson # 比 json 快 3-10x
|
|
361
|
+
data = orjson.dumps({"key": "value"})
|
|
362
|
+
|
|
363
|
+
import numpy as np # 比纯 Python 循环快 100x+
|
|
364
|
+
result = np.sum(large_array)
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### 3.2 IO 密集型优化
|
|
368
|
+
|
|
369
|
+
```python
|
|
370
|
+
import asyncio
|
|
371
|
+
import aiohttp
|
|
372
|
+
|
|
373
|
+
# 问题: 串行 IO 请求
|
|
374
|
+
# 优化前
|
|
375
|
+
async def fetch_all_serial(urls):
|
|
376
|
+
results = []
|
|
377
|
+
async with aiohttp.ClientSession() as session:
|
|
378
|
+
for url in urls:
|
|
379
|
+
async with session.get(url) as resp:
|
|
380
|
+
results.append(await resp.json())
|
|
381
|
+
return results
|
|
382
|
+
|
|
383
|
+
# 优化后: 并发 IO
|
|
384
|
+
async def fetch_all_concurrent(urls, max_concurrency=10):
|
|
385
|
+
semaphore = asyncio.Semaphore(max_concurrency)
|
|
386
|
+
async with aiohttp.ClientSession() as session:
|
|
387
|
+
async def fetch(url):
|
|
388
|
+
async with semaphore:
|
|
389
|
+
async with session.get(url) as resp:
|
|
390
|
+
return await resp.json()
|
|
391
|
+
return await asyncio.gather(*[fetch(url) for url in urls])
|
|
392
|
+
|
|
393
|
+
# 问题: 频繁小 IO
|
|
394
|
+
# 优化前
|
|
395
|
+
for record in records:
|
|
396
|
+
db.insert(record) # 1000 次网络往返
|
|
397
|
+
|
|
398
|
+
# 优化后: 批量 IO
|
|
399
|
+
db.insert_many(records) # 1 次网络往返
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### 3.3 内存优化
|
|
403
|
+
|
|
404
|
+
```python
|
|
405
|
+
# 问题 1: 一次性加载大数据集
|
|
406
|
+
# 优化前
|
|
407
|
+
data = list(db.query("SELECT * FROM large_table")) # 全部加载到内存
|
|
408
|
+
|
|
409
|
+
# 优化后: 流式处理
|
|
410
|
+
def stream_query(query, batch_size=1000):
|
|
411
|
+
offset = 0
|
|
412
|
+
while True:
|
|
413
|
+
batch = db.query(f"{query} LIMIT {batch_size} OFFSET {offset}")
|
|
414
|
+
if not batch:
|
|
415
|
+
break
|
|
416
|
+
yield from batch
|
|
417
|
+
offset += batch_size
|
|
418
|
+
|
|
419
|
+
for record in stream_query("SELECT * FROM large_table"):
|
|
420
|
+
process(record)
|
|
421
|
+
|
|
422
|
+
# 问题 2: 对象开销大
|
|
423
|
+
# 优化前
|
|
424
|
+
class Point:
|
|
425
|
+
def __init__(self, x, y, z):
|
|
426
|
+
self.x = x # 每个实例有 __dict__,占用约 200+ bytes
|
|
427
|
+
self.y = y
|
|
428
|
+
self.z = z
|
|
429
|
+
|
|
430
|
+
# 优化后: 使用 __slots__
|
|
431
|
+
class Point:
|
|
432
|
+
__slots__ = ('x', 'y', 'z') # 减少到约 64 bytes
|
|
433
|
+
def __init__(self, x, y, z):
|
|
434
|
+
self.x = x
|
|
435
|
+
self.y = y
|
|
436
|
+
self.z = z
|
|
437
|
+
|
|
438
|
+
# 或使用 NamedTuple(不可变场景)
|
|
439
|
+
from typing import NamedTuple
|
|
440
|
+
class Point(NamedTuple):
|
|
441
|
+
x: float
|
|
442
|
+
y: float
|
|
443
|
+
z: float
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
### 3.4 数据库查询优化
|
|
447
|
+
|
|
448
|
+
```sql
|
|
449
|
+
-- 问题 1: 全表扫描
|
|
450
|
+
-- 优化前
|
|
451
|
+
SELECT * FROM orders WHERE DATE(created_at) = '2024-01-15';
|
|
452
|
+
-- 优化后(利用索引)
|
|
453
|
+
SELECT * FROM orders
|
|
454
|
+
WHERE created_at >= '2024-01-15 00:00:00'
|
|
455
|
+
AND created_at < '2024-01-16 00:00:00';
|
|
456
|
+
|
|
457
|
+
-- 问题 2: N+1 查询
|
|
458
|
+
-- 优化前(应用层 N+1)
|
|
459
|
+
-- for order in orders: order.items = query("SELECT * FROM items WHERE order_id = ?", order.id)
|
|
460
|
+
-- 优化后: JOIN 或 子查询
|
|
461
|
+
SELECT o.*, i.product_name, i.quantity
|
|
462
|
+
FROM orders o
|
|
463
|
+
LEFT JOIN order_items i ON i.order_id = o.id
|
|
464
|
+
WHERE o.user_id = 123;
|
|
465
|
+
|
|
466
|
+
-- 问题 3: 排序时没有索引支持
|
|
467
|
+
-- 添加覆盖查询的复合索引
|
|
468
|
+
CREATE INDEX CONCURRENTLY idx_orders_user_status_created
|
|
469
|
+
ON orders(user_id, status, created_at DESC)
|
|
470
|
+
INCLUDE (total_amount); -- 覆盖索引,避免回表
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
---
|
|
474
|
+
|
|
475
|
+
## 步骤四:验证 — 基准测试
|
|
476
|
+
|
|
477
|
+
### 4.1 微基准测试
|
|
478
|
+
|
|
479
|
+
```python
|
|
480
|
+
# pytest-benchmark
|
|
481
|
+
import pytest
|
|
482
|
+
|
|
483
|
+
def test_json_serialization(benchmark):
|
|
484
|
+
data = {"users": [{"id": i, "name": f"user_{i}"} for i in range(100)]}
|
|
485
|
+
|
|
486
|
+
import json
|
|
487
|
+
result = benchmark(json.dumps, data)
|
|
488
|
+
assert result
|
|
489
|
+
|
|
490
|
+
def test_orjson_serialization(benchmark):
|
|
491
|
+
data = {"users": [{"id": i, "name": f"user_{i}"} for i in range(100)]}
|
|
492
|
+
|
|
493
|
+
import orjson
|
|
494
|
+
result = benchmark(orjson.dumps, data)
|
|
495
|
+
assert result
|
|
496
|
+
|
|
497
|
+
# 运行: pytest tests/bench/ --benchmark-sort=mean --benchmark-compare
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
```python
|
|
501
|
+
# timeit - 快速对比
|
|
502
|
+
import timeit
|
|
503
|
+
|
|
504
|
+
# 对比两种实现
|
|
505
|
+
setup = "data = list(range(10000))"
|
|
506
|
+
|
|
507
|
+
time_list_comp = timeit.timeit("[x**2 for x in data]", setup=setup, number=1000)
|
|
508
|
+
time_map = timeit.timeit("list(map(lambda x: x**2, data))", setup=setup, number=1000)
|
|
509
|
+
|
|
510
|
+
print(f"List comprehension: {time_list_comp:.3f}s")
|
|
511
|
+
print(f"Map: {time_map:.3f}s")
|
|
512
|
+
print(f"Speedup: {time_map/time_list_comp:.2f}x")
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
### 4.2 负载测试
|
|
516
|
+
|
|
517
|
+
```bash
|
|
518
|
+
# k6 负载测试 - 阶梯式加压
|
|
519
|
+
cat > soak_test.js << 'EOF'
|
|
520
|
+
import http from 'k6/http';
|
|
521
|
+
import { check, sleep } from 'k6';
|
|
522
|
+
|
|
523
|
+
export const options = {
|
|
524
|
+
stages: [
|
|
525
|
+
{ duration: '5m', target: 100 }, // 预热到 100 并发
|
|
526
|
+
{ duration: '30m', target: 100 }, // 持续 100 并发 30 分钟
|
|
527
|
+
{ duration: '5m', target: 200 }, // 加压到 200
|
|
528
|
+
{ duration: '30m', target: 200 }, // 持续 200 并发 30 分钟
|
|
529
|
+
{ duration: '5m', target: 0 }, // 降载
|
|
530
|
+
],
|
|
531
|
+
thresholds: {
|
|
532
|
+
http_req_duration: ['p(95)<200', 'p(99)<500'],
|
|
533
|
+
http_req_failed: ['rate<0.01'],
|
|
534
|
+
},
|
|
535
|
+
};
|
|
536
|
+
|
|
537
|
+
export default function () {
|
|
538
|
+
const res = http.get(`${__ENV.BASE_URL}/api/v1/orders?page=1&per_page=20`);
|
|
539
|
+
check(res, {
|
|
540
|
+
'status is 200': (r) => r.status === 200,
|
|
541
|
+
'response time < 200ms': (r) => r.timings.duration < 200,
|
|
542
|
+
});
|
|
543
|
+
sleep(Math.random() * 2); // 模拟用户思考时间
|
|
544
|
+
}
|
|
545
|
+
EOF
|
|
546
|
+
k6 run soak_test.js -e BASE_URL=http://localhost:8080
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
### 4.3 A/B 对比验证
|
|
550
|
+
|
|
551
|
+
```bash
|
|
552
|
+
# 使用 wrk 进行优化前后对比
|
|
553
|
+
|
|
554
|
+
echo "=== 优化前 ==="
|
|
555
|
+
wrk -t4 -c100 -d30s --latency http://localhost:8080/api/v1/orders > before.txt 2>&1
|
|
556
|
+
|
|
557
|
+
echo "=== 部署优化后的代码 ==="
|
|
558
|
+
# ... 部署 ...
|
|
559
|
+
|
|
560
|
+
echo "=== 优化后 ==="
|
|
561
|
+
wrk -t4 -c100 -d30s --latency http://localhost:8080/api/v1/orders > after.txt 2>&1
|
|
562
|
+
|
|
563
|
+
echo "=== 对比 ==="
|
|
564
|
+
diff before.txt after.txt
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
### 4.4 持续性能回归
|
|
568
|
+
|
|
569
|
+
```yaml
|
|
570
|
+
# GitHub Actions 中的性能回归检测
|
|
571
|
+
- name: Run performance benchmark
|
|
572
|
+
run: |
|
|
573
|
+
pytest tests/bench/ --benchmark-json=benchmark.json
|
|
574
|
+
|
|
575
|
+
- name: Compare with baseline
|
|
576
|
+
run: |
|
|
577
|
+
python3 << 'EOF'
|
|
578
|
+
import json
|
|
579
|
+
with open('benchmark.json') as f:
|
|
580
|
+
current = json.load(f)
|
|
581
|
+
with open('benchmark_baseline.json') as f:
|
|
582
|
+
baseline = json.load(f)
|
|
583
|
+
|
|
584
|
+
regressions = []
|
|
585
|
+
for bench in current['benchmarks']:
|
|
586
|
+
name = bench['name']
|
|
587
|
+
baseline_bench = next((b for b in baseline['benchmarks'] if b['name'] == name), None)
|
|
588
|
+
if baseline_bench:
|
|
589
|
+
ratio = bench['stats']['mean'] / baseline_bench['stats']['mean']
|
|
590
|
+
if ratio > 1.1: # 超过 10% 回退
|
|
591
|
+
regressions.append(f"{name}: {ratio:.2f}x slower")
|
|
592
|
+
|
|
593
|
+
if regressions:
|
|
594
|
+
print("Performance regressions detected:")
|
|
595
|
+
for r in regressions:
|
|
596
|
+
print(f" - {r}")
|
|
597
|
+
exit(1)
|
|
598
|
+
print("No regressions detected.")
|
|
599
|
+
EOF
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
---
|
|
603
|
+
|
|
604
|
+
## 回滚方案
|
|
605
|
+
|
|
606
|
+
### 优化代码回滚
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
# 如果优化引入了 Bug 或性能反而下降
|
|
610
|
+
git revert <optimization-commit-hash>
|
|
611
|
+
git push origin main
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
### 配置调优回滚
|
|
615
|
+
|
|
616
|
+
```bash
|
|
617
|
+
# 连接池/缓存/限流等配置回滚
|
|
618
|
+
kubectl rollout undo deployment/<service> -n production
|
|
619
|
+
|
|
620
|
+
# 或通过配置中心回滚
|
|
621
|
+
curl -X PUT http://config-center/api/config/<service> \
|
|
622
|
+
-d '{"pool_size": 10, "cache_ttl": 300}' # 旧配置
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
### 回滚触发条件
|
|
626
|
+
|
|
627
|
+
| 指标 | 触发条件 | 动作 |
|
|
628
|
+
|------|---------|------|
|
|
629
|
+
| 错误率 | 优化后上升 > 0.1% | 立即回滚 |
|
|
630
|
+
| P99 延迟 | 优化后上升 > 20% | 回滚并分析 |
|
|
631
|
+
| 内存使用 | 30 分钟持续增长 | 回滚并排查泄漏 |
|
|
632
|
+
| CPU 使用 | 优化后上升 > 30% | 回滚并分析 |
|
|
633
|
+
| 基准测试 | 回退 > 10% | 阻断合并 |
|
|
634
|
+
|
|
635
|
+
---
|
|
636
|
+
|
|
637
|
+
## Agent Checklist
|
|
638
|
+
|
|
639
|
+
AI 编码 Agent 在执行性能调优时必须逐项确认:
|
|
640
|
+
|
|
641
|
+
- [ ] **问题可复现**:有具体的复现步骤和量化的性能数据
|
|
642
|
+
- [ ] **基线已记录**:优化前有 profiling 数据和基准测试结果
|
|
643
|
+
- [ ] **瓶颈已确认**:通过火焰图/profiling 确认了 CPU/内存/IO 的具体热点
|
|
644
|
+
- [ ] **优化有针对性**:每次优化只针对一个瓶颈点
|
|
645
|
+
- [ ] **微基准测试**:优化的函数/方法有独立的基准测试
|
|
646
|
+
- [ ] **负载测试**:在接近生产的负载下验证优化效果
|
|
647
|
+
- [ ] **无功能回归**:所有功能测试通过
|
|
648
|
+
- [ ] **无内存泄漏**:长时间运行(> 30 分钟)内存稳定
|
|
649
|
+
- [ ] **效果可量化**:有优化前后的精确对比数据(延迟、吞吐量、资源使用)
|
|
650
|
+
- [ ] **差分火焰图**:生成了优化前后的差分火焰图确认改进
|
|
651
|
+
- [ ] **回归门禁**:性能基准测试已加入 CI
|
|
652
|
+
- [ ] **文档记录**:优化决策、工具使用、效果数据已记录
|