@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.
Files changed (418) hide show
  1. package/00-governance/governance-capabilities.md +557 -0
  2. package/00-governance/knowledge-map.md +39 -0
  3. package/00-governance/maintenance-policy.md +76 -0
  4. package/00-governance/review-checklist.md +81 -0
  5. package/README.md +13 -0
  6. package/ai/01-standards/agent-development-complete.md +691 -0
  7. package/ai/01-standards/llm-application-complete.md +488 -0
  8. package/ai/01-standards/mlops-complete.md +798 -0
  9. package/ai/01-standards/prompt-engineering-complete.md +646 -0
  10. package/ai/01-standards/rag-architecture-complete.md +649 -0
  11. package/ai/02-playbooks/llm-evaluation-playbook.md +847 -0
  12. package/ai/03-checklists/ai-project-checklist.md +215 -0
  13. package/ai/04-antipatterns/ai-antipatterns.md +661 -0
  14. package/ai/05-cases/case-rag-production.md +147 -0
  15. package/ai/06-glossary/ai-glossary.md +162 -0
  16. package/ai/agent-evaluation-benchmark.md +53 -0
  17. package/ai/ai-agent-memory-context-management.md +41 -0
  18. package/ai/ai-cost-capacity-optimization-playbook.md +42 -0
  19. package/ai/ai-data-security-and-compliance-playbook.md +37 -0
  20. package/ai/ai-domain-index-and-checklist.md +40 -0
  21. package/ai/ai-governance-maturity-model.md +50 -0
  22. package/ai/ai-model-selection-and-routing-strategy.md +47 -0
  23. package/ai/ai-observability-and-oncall-runbook.md +52 -0
  24. package/ai/ai-rag-engineering-playbook.md +42 -0
  25. package/ai/ai-red-team-and-safety-evaluation.md +42 -0
  26. package/ai/ai-release-readiness-and-rollback-gate.md +42 -0
  27. package/ai/llm-agent-engineering-deep-dive.md +57 -0
  28. package/ai/prompt-and-tool-guardrails.md +52 -0
  29. package/api/01-standards/enterprise-api-standards.md +198 -0
  30. package/api/01-standards/rest-api-design-guide.md +63 -0
  31. package/api/02-playbooks/api-pagination-playbook.md +93 -0
  32. package/api/02-playbooks/graphql-production-playbook.md +176 -0
  33. package/api/03-checklists/api-review-checklist.md +55 -0
  34. package/api/04-antipatterns/api-antipatterns.md +112 -0
  35. package/architecture/01-standards/api-gateway-patterns.md +496 -0
  36. package/architecture/01-standards/cloud-native-patterns.md +644 -0
  37. package/architecture/01-standards/distributed-systems-patterns.md +591 -0
  38. package/architecture/01-standards/event-driven-architecture.md +595 -0
  39. package/architecture/01-standards/microservices-patterns-complete.md +968 -0
  40. package/architecture/01-standards/microservices-patterns.md +495 -0
  41. package/architecture/01-standards/system-design-interview.md +664 -0
  42. package/architecture/02-playbooks/microservices-patterns-playbook.md +137 -0
  43. package/architecture/02-playbooks/migration-playbook.md +780 -0
  44. package/architecture/02-playbooks/system-design-playbook.md +779 -0
  45. package/architecture/03-checklists/architecture-decision-checklist.md +297 -0
  46. package/architecture/04-antipatterns/architecture-antipatterns.md +417 -0
  47. package/architecture/05-cases/case-netflix-microservices.md +413 -0
  48. package/architecture/06-glossary/architecture-glossary.md +164 -0
  49. package/architecture/adr-template-and-examples.md +38 -0
  50. package/architecture/api-gateway-deep-dive.md +1291 -0
  51. package/architecture/configuration-management.md +1162 -0
  52. package/architecture/distributed-transactions.md +1220 -0
  53. package/architecture/microservices-complete.md +735 -0
  54. package/architecture/resilience-and-disaster-patterns.md +37 -0
  55. package/architecture/service-governance.md +1198 -0
  56. package/architecture/system-architecture-deep-dive.md +37 -0
  57. package/backend/01-standards/analytics-and-growth.md +65 -0
  58. package/backend/01-standards/api-and-error-conventions.md +120 -0
  59. package/backend/01-standards/application-layering-and-packaging.md +160 -0
  60. package/backend/01-standards/auth-implementation.md +104 -0
  61. package/backend/01-standards/backend-framework-idioms.md +74 -0
  62. package/backend/01-standards/background-jobs-and-async.md +66 -0
  63. package/backend/01-standards/caching-strategies-complete.md +390 -0
  64. package/backend/01-standards/config-and-observability.md +77 -0
  65. package/backend/01-standards/data-modeling-and-persistence.md +94 -0
  66. package/backend/01-standards/django-complete.md +1765 -0
  67. package/backend/01-standards/email-and-notifications.md +64 -0
  68. package/backend/01-standards/fastapi-complete.md +925 -0
  69. package/backend/01-standards/file-upload-and-storage.md +66 -0
  70. package/backend/01-standards/graphql-api-complete.md +416 -0
  71. package/backend/01-standards/llm-application-standard.md +78 -0
  72. package/backend/01-standards/message-queue-patterns.md +379 -0
  73. package/backend/01-standards/microservices-and-distributed.md +78 -0
  74. package/backend/01-standards/nestjs-complete.md +2167 -0
  75. package/backend/01-standards/payment-integration.md +80 -0
  76. package/backend/01-standards/rate-limiting-complete.md +451 -0
  77. package/backend/01-standards/realtime-and-websocket.md +65 -0
  78. package/backend/01-standards/search-and-filtering.md +64 -0
  79. package/backend/01-standards/spring-boot-complete.md +445 -0
  80. package/backend/02-playbooks/api-design-playbook.md +718 -0
  81. package/backend/02-playbooks/email-send-playbook.md +130 -0
  82. package/backend/02-playbooks/file-upload-s3-playbook.md +153 -0
  83. package/backend/02-playbooks/typescript-enterprise-playbook.md +133 -0
  84. package/backend/02-playbooks/websocket-realtime-playbook.md +154 -0
  85. package/backend/03-checklists/api-launch-checklist.md +189 -0
  86. package/backend/04-antipatterns/backend-antipatterns.md +1051 -0
  87. package/blockchain/01-standards/blockchain-basics.md +557 -0
  88. package/blockchain/01-standards/smart-contract-development.md +1315 -0
  89. package/cicd/01-standards/deployment-and-delivery-standard.md +96 -0
  90. package/cicd/01-standards/github-actions-complete.md +473 -0
  91. package/cicd/01-standards/release-and-store-submission.md +75 -0
  92. package/cicd/02-playbooks/cicd-pipeline-playbook.md +144 -0
  93. package/cicd/02-playbooks/release-management-playbook.md +605 -0
  94. package/cicd/03-checklists/pipeline-security-checklist.md +168 -0
  95. package/cicd/04-antipatterns/cicd-antipatterns.md +589 -0
  96. package/cicd/05-cases/case-deployment-automation.md +221 -0
  97. package/cicd/05-cases/case-gitops-transformation.md +212 -0
  98. package/cicd/06-glossary/cicd-glossary.md +114 -0
  99. package/cicd/cicd-blueprint-deep-dive.md +38 -0
  100. package/cicd/release-readiness-gate.md +37 -0
  101. package/cloud-native/01-standards/container-security.md +741 -0
  102. package/cloud-native/01-standards/kubernetes-complete.md +812 -0
  103. package/cloud-native/02-playbooks/api-gateway-playbook.md +155 -0
  104. package/cloud-native/02-playbooks/gitops-with-argocd.md +760 -0
  105. package/cloud-native/02-playbooks/k8s-troubleshooting-playbook.md +1942 -0
  106. package/cloud-native/02-playbooks/message-queue-playbook.md +129 -0
  107. package/cloud-native/02-playbooks/multicloud-governance.md +726 -0
  108. package/cloud-native/02-playbooks/serverless-patterns.md +788 -0
  109. package/cloud-native/02-playbooks/service-mesh-playbook.md +612 -0
  110. package/cloud-native/02-playbooks/terraform-iac-playbook.md +143 -0
  111. package/cloud-native/03-checklists/container-security-checklist.md +431 -0
  112. package/cloud-native/03-checklists/k8s-production-readiness-checklist.md +460 -0
  113. package/cloud-native/04-antipatterns/container-antipatterns.md +660 -0
  114. package/cloud-native/04-antipatterns/k8s-antipatterns.md +743 -0
  115. package/cloud-native/05-cases/case-k8s-migration.md +478 -0
  116. package/cloud-native/05-cases/case-k8s-scaling.md +642 -0
  117. package/cloud-native/05-cases/case-k8s-security-incident.md +397 -0
  118. package/cloud-native/06-glossary/cloud-native-glossary.md +337 -0
  119. package/cross-platform/01-standards/cross-platform-frameworks.md +83 -0
  120. package/cross-platform/01-standards/platform-selection-and-architecture.md +77 -0
  121. package/data/01-standards/elasticsearch-complete.md +2098 -0
  122. package/data/01-standards/postgresql-complete.md +1613 -0
  123. package/data/01-standards/redis-complete.md +1527 -0
  124. package/data/02-playbooks/database-optimization-playbook.md +403 -0
  125. package/data/02-playbooks/elasticsearch-production-playbook.md +132 -0
  126. package/data/03-checklists/database-launch-checklist.md +187 -0
  127. package/data/04-antipatterns/database-antipatterns.md +873 -0
  128. package/data/05-cases/case-database-migration.md +310 -0
  129. package/data/06-glossary/database-glossary.md +440 -0
  130. package/data/data-governance-and-modeling-deep-dive.md +39 -0
  131. package/data-engineering/01-standards/airflow-complete.md +523 -0
  132. package/data-engineering/01-standards/kafka-complete.md +1521 -0
  133. package/data-engineering/02-playbooks/spark-etl-playbook.md +496 -0
  134. package/data-engineering/03-checklists/pipeline-launch-checklist.md +194 -0
  135. package/data-engineering/04-antipatterns/data-pipeline-antipatterns.md +684 -0
  136. package/data-engineering/05-cases/case-real-time-pipeline.md +355 -0
  137. package/data-engineering/06-glossary/data-engineering-glossary.md +429 -0
  138. package/database/01-standards/database-schema-standards.md +147 -0
  139. package/database/02-playbooks/postgresql-optimization-quick.md +52 -0
  140. package/database/02-playbooks/postgresql-performance-optimization.md +58 -0
  141. package/database/02-playbooks/postgresql-production-playbook.md +146 -0
  142. package/database/02-playbooks/redis-caching-playbook.md +117 -0
  143. package/database/03-checklists/database-review-checklist.md +50 -0
  144. package/database/04-antipatterns/database-antipatterns.md +112 -0
  145. package/design/01-standards/ui-design-system-complete.md +423 -0
  146. package/design/02-playbooks/design-handoff-playbook.md +254 -0
  147. package/design/02-playbooks/design-review-playbook.md +388 -0
  148. package/design/03-checklists/design-review-checklist.md +246 -0
  149. package/design/04-antipatterns/design-antipatterns.md +378 -0
  150. package/design/05-cases/case-design-system-adoption.md +328 -0
  151. package/design/06-glossary/design-glossary.md +329 -0
  152. package/design/ui-full-lifecycle-cross-platform-playbook.md +571 -0
  153. package/design/ux-system-deep-dive.md +38 -0
  154. package/design-systems/00-craft-rules.md +71 -0
  155. package/design-systems/aesthetic-families.md +43 -0
  156. package/design-systems/anti-ai-slop.md +162 -0
  157. package/design-systems/bold-geometric.md +120 -0
  158. package/design-systems/brutalist-bold.md +103 -0
  159. package/design-systems/editorial-clean.md +109 -0
  160. package/design-systems/glass-aurora.md +108 -0
  161. package/design-systems/modern-minimal.md +145 -0
  162. package/design-systems/premium-luxury.md +106 -0
  163. package/design-systems/product-type-design-map.md +48 -0
  164. package/design-systems/soft-warm.md +123 -0
  165. package/design-systems/tech-utility.md +113 -0
  166. package/desktop/01-standards/desktop-app-standard.md +72 -0
  167. package/desktop/01-standards/desktop-design.md +71 -0
  168. package/development/00-governance/document-template.md +41 -0
  169. package/development/01-standards/api-versioning-strategies.md +432 -0
  170. package/development/01-standards/authentication-patterns-complete.md +479 -0
  171. package/development/01-standards/css-architecture-complete.md +550 -0
  172. package/development/01-standards/database-migration-strategies.md +484 -0
  173. package/development/01-standards/elasticsearch-complete.md +347 -0
  174. package/development/01-standards/git-complete.md +371 -0
  175. package/development/01-standards/golang-complete.md +1565 -0
  176. package/development/01-standards/graphql-complete.md +298 -0
  177. package/development/01-standards/javascript-bundlers-complete.md +469 -0
  178. package/development/01-standards/javascript-typescript-complete.md +528 -0
  179. package/development/01-standards/jest-complete.md +275 -0
  180. package/development/01-standards/linux-complete.md +234 -0
  181. package/development/01-standards/logging-observability-complete.md +526 -0
  182. package/development/01-standards/microservices-communication.md +502 -0
  183. package/development/01-standards/mongodb-complete.md +406 -0
  184. package/development/01-standards/oauth2-complete.md +285 -0
  185. package/development/01-standards/performance-optimization-complete.md +289 -0
  186. package/development/01-standards/playwright-complete.md +247 -0
  187. package/development/01-standards/postgresql-complete.md +456 -0
  188. package/development/01-standards/pytest-complete.md +340 -0
  189. package/development/01-standards/python-async-programming.md +902 -0
  190. package/development/01-standards/python-complete.md +956 -0
  191. package/development/01-standards/python-decorators-complete.md +799 -0
  192. package/development/01-standards/python-design-patterns.md +2854 -0
  193. package/development/01-standards/python-packaging-distribution.md +420 -0
  194. package/development/01-standards/python-testing-strategies.md +607 -0
  195. package/development/01-standards/python-web-frameworks-comparison.md +471 -0
  196. package/development/01-standards/redis-complete.md +317 -0
  197. package/development/01-standards/rest-api-complete.md +316 -0
  198. package/development/01-standards/rust-complete.md +578 -0
  199. package/development/01-standards/typescript-advanced-types.md +1513 -0
  200. package/development/01-standards/web-security-complete.md +292 -0
  201. package/development/02-playbooks/api-design-playbook.md +810 -0
  202. package/development/02-playbooks/database-migration-playbook.md +580 -0
  203. package/development/02-playbooks/debugging-playbook.md +692 -0
  204. package/development/02-playbooks/feature-delivery-playbook.md +430 -0
  205. package/development/02-playbooks/incident-hotfix-playbook.md +387 -0
  206. package/development/02-playbooks/performance-optimization-playbook.md +531 -0
  207. package/development/02-playbooks/performance-tuning-playbook.md +652 -0
  208. package/development/02-playbooks/refactor-playbook.md +403 -0
  209. package/development/02-playbooks/release-playbook.md +469 -0
  210. package/development/03-checklists/architecture-review-checklist.md +168 -0
  211. package/development/03-checklists/data-migration-checklist.md +157 -0
  212. package/development/03-checklists/oncall-handover-checklist.md +173 -0
  213. package/development/03-checklists/pr-checklist.md +158 -0
  214. package/development/03-checklists/production-readiness-checklist.md +190 -0
  215. package/development/03-checklists/release-readiness-checklist.md +154 -0
  216. package/development/03-checklists/security-review-checklist.md +182 -0
  217. package/development/04-antipatterns/api-antipatterns.md +657 -0
  218. package/development/04-antipatterns/architecture-antipatterns.md +686 -0
  219. package/development/04-antipatterns/backend-antipatterns.md +648 -0
  220. package/development/04-antipatterns/cicd-antipatterns.md +540 -0
  221. package/development/04-antipatterns/code-smell-antipatterns.md +571 -0
  222. package/development/04-antipatterns/data-antipatterns.md +658 -0
  223. package/development/04-antipatterns/database-antipatterns.md +578 -0
  224. package/development/04-antipatterns/frontend-antipatterns.md +635 -0
  225. package/development/04-antipatterns/reliability-antipatterns.md +700 -0
  226. package/development/04-antipatterns/security-antipatterns.md +747 -0
  227. package/development/05-cases/case-api-version-migration.md +428 -0
  228. package/development/05-cases/case-authorization-hardening.md +383 -0
  229. package/development/05-cases/case-bluegreen-rollback.md +466 -0
  230. package/development/05-cases/case-cache-snowball-protection.md +485 -0
  231. package/development/05-cases/case-ci-cd-pipeline.md +544 -0
  232. package/development/05-cases/case-database-scaling.md +500 -0
  233. package/development/05-cases/case-db-hotspot-optimization.md +487 -0
  234. package/development/05-cases/case-incident-mttr-reduction.md +563 -0
  235. package/development/05-cases/case-microservice-migration.md +375 -0
  236. package/development/05-cases/case-performance-optimization.md +406 -0
  237. package/development/05-cases/case-security-incident-response.md +345 -0
  238. package/development/06-glossary/full-stack-glossary.md +166 -0
  239. package/development/09-maturity/quarterly-audit-template.md +35 -0
  240. package/development/11-ui-excellence/ui-aesthetic-system.md +41 -0
  241. package/development/11-ui-excellence/ui-engineering-excellence.md +435 -0
  242. package/development/12-scenarios/development-scenarios-guide.md +565 -0
  243. package/development/13-implementation-assets/implementation-toolkit.md +282 -0
  244. package/development/13-implementation-assets/knowledge-gates-execution.md +43 -0
  245. package/development/14-full-lifecycle/software-lifecycle-gates.md +511 -0
  246. package/development/15-lifecycle-templates/project-templates-collection.md +791 -0
  247. package/development/api-contract-and-versioning-guide.md +36 -0
  248. package/development/api-governance-complete.md +43 -0
  249. package/development/backend-engineering-complete.md +43 -0
  250. package/development/code-review-quality-complete.md +43 -0
  251. package/development/concurrency-reliability-complete.md +43 -0
  252. package/development/database-engineering-complete.md +43 -0
  253. package/development/engineering-effectiveness-complete.md +43 -0
  254. package/development/engineering-standards-deep-dive.md +38 -0
  255. package/development/frontend-engineering-complete.md +43 -0
  256. package/development/performance-capacity-complete.md +43 -0
  257. package/development/refactor-migration-complete.md +42 -0
  258. package/development/refactoring-and-techdebt-playbook.md +37 -0
  259. package/development/security-in-development-complete.md +43 -0
  260. package/devops/01-standards/cicd-pipeline-complete.md +262 -0
  261. package/devops/01-standards/docker-complete.md +1490 -0
  262. package/devops/01-standards/github-actions-complete.md +337 -0
  263. package/devops/01-standards/kubernetes-complete.md +638 -0
  264. package/devops/01-standards/terraform-complete.md +2117 -0
  265. package/devops/02-playbooks/docker-compose-playbook.md +233 -0
  266. package/devops/02-playbooks/docker-k8s-production-playbook.md +186 -0
  267. package/devops/02-playbooks/docker-production-playbook.md +952 -0
  268. package/edge-iot/01-standards/edge-iot-complete.md +473 -0
  269. package/experts/architect/api-design.md +178 -0
  270. package/experts/architect/methodology.md +124 -0
  271. package/experts/architect/security.md +75 -0
  272. package/experts/backend-lead/methodology.md +216 -0
  273. package/experts/devops/methodology.md +160 -0
  274. package/experts/frontend-lead/methodology.md +178 -0
  275. package/experts/product-manager/industry/ecommerce.md +43 -0
  276. package/experts/product-manager/industry/saas.md +40 -0
  277. package/experts/product-manager/methodology.md +97 -0
  278. package/experts/qa-lead/methodology.md +123 -0
  279. package/experts/qa-lead/test-strategy.md +128 -0
  280. package/experts/uiux-designer/methodology.md +125 -0
  281. package/frontend/01-standards/accessibility-complete.md +532 -0
  282. package/frontend/01-standards/accessibility-standard.md +74 -0
  283. package/frontend/01-standards/admin-dashboard-and-crud.md +72 -0
  284. package/frontend/01-standards/design-tokens-complete.md +444 -0
  285. package/frontend/01-standards/forms-and-validation.md +77 -0
  286. package/frontend/01-standards/frontend-architecture-and-layering.md +119 -0
  287. package/frontend/01-standards/i18n-and-localization.md +65 -0
  288. package/frontend/01-standards/nextjs-complete.md +451 -0
  289. package/frontend/01-standards/react-complete.md +713 -0
  290. package/frontend/01-standards/react-hooks-complete-guide.md +1100 -0
  291. package/frontend/01-standards/react-hooks-complete.md +1171 -0
  292. package/frontend/01-standards/seo-and-web-vitals.md +77 -0
  293. package/frontend/01-standards/state-management-complete.md +444 -0
  294. package/frontend/01-standards/vue-complete.md +499 -0
  295. package/frontend/01-standards/vue3-complete.md +2002 -0
  296. package/frontend/01-standards/web-framework-best-practices.md +64 -0
  297. package/frontend/01-standards/web-performance-complete.md +495 -0
  298. package/frontend/02-playbooks/accessibility-a11y-playbook.md +161 -0
  299. package/frontend/02-playbooks/frontend-performance-playbook.md +707 -0
  300. package/frontend/02-playbooks/i18n-internationalization-playbook.md +120 -0
  301. package/frontend/02-playbooks/performance-optimization-playbook.md +163 -0
  302. package/frontend/02-playbooks/react-nextjs-production-playbook.md +167 -0
  303. package/frontend/02-playbooks/react-state-management-playbook.md +173 -0
  304. package/frontend/03-checklists/component-quality-checklist.md +166 -0
  305. package/frontend/03-checklists/frontend-launch-checklist.md +299 -0
  306. package/frontend/04-antipatterns/frontend-antipatterns.md +886 -0
  307. package/frontend/05-cases/case-performance-optimization.md +274 -0
  308. package/harmony/01-standards/harmonyos-arkts-standard.md +75 -0
  309. package/harmony/01-standards/harmonyos-design.md +65 -0
  310. package/high-quality-engineering-playbook.md +54 -0
  311. package/incident/01-standards/incident-response-complete.md +303 -0
  312. package/incident/02-playbooks/chaos-engineering-playbook.md +883 -0
  313. package/incident/02-playbooks/postmortem-playbook.md +398 -0
  314. package/incident/03-checklists/incident-readiness-checklist.md +181 -0
  315. package/incident/04-antipatterns/incident-antipatterns.md +490 -0
  316. package/incident/05-cases/case-cascade-failure.md +176 -0
  317. package/incident/06-glossary/incident-glossary.md +114 -0
  318. package/incident/postmortem-and-response-deep-dive.md +39 -0
  319. package/industries/ecommerce/ecommerce-complete.md +631 -0
  320. package/industries/education/education-complete.md +555 -0
  321. package/industries/fintech/fintech-complete.md +501 -0
  322. package/industries/gaming/gaming-complete.md +587 -0
  323. package/industries/healthcare/healthcare-complete.md +452 -0
  324. package/low-code/01-standards/low-code-complete.md +944 -0
  325. package/miniprogram/01-standards/ai-common-mistakes.md +61 -0
  326. package/miniprogram/01-standards/miniprogram-custom-navbar-capsule.md +77 -0
  327. package/miniprogram/01-standards/miniprogram-design.md +61 -0
  328. package/miniprogram/01-standards/miniprogram-standard.md +81 -0
  329. package/mobile/01-standards/android-material-design.md +70 -0
  330. package/mobile/01-standards/flutter-complete.md +384 -0
  331. package/mobile/01-standards/ios-design-hig.md +78 -0
  332. package/mobile/01-standards/mobile-app-standard.md +85 -0
  333. package/mobile/01-standards/react-native-complete.md +352 -0
  334. package/mobile/02-playbooks/mobile-cross-platform-playbook.md +175 -0
  335. package/mobile/02-playbooks/mobile-performance.md +473 -0
  336. package/mobile/03-checklists/mobile-release-checklist.md +234 -0
  337. package/mobile/04-antipatterns/mobile-antipatterns.md +798 -0
  338. package/mobile/05-cases/case-app-performance.md +500 -0
  339. package/mobile/05-cases/case-app-startup-optimization.md +218 -0
  340. package/mobile/06-glossary/mobile-glossary.md +484 -0
  341. package/observability/01-standards/observability-standards.md +103 -0
  342. package/observability/02-playbooks/prometheus-grafana-playbook.md +135 -0
  343. package/observability/02-playbooks/structured-logging-playbook.md +73 -0
  344. package/observability/03-checklists/observability-checklist.md +54 -0
  345. package/observability/04-antipatterns/observability-antipatterns.md +106 -0
  346. package/operations/01-standards/prometheus-monitoring-complete.md +1578 -0
  347. package/operations/02-playbooks/capacity-planning-playbook.md +620 -0
  348. package/operations/03-checklists/production-launch-checklist.md +365 -0
  349. package/operations/04-antipatterns/operations-antipatterns.md +664 -0
  350. package/operations/05-cases/case-sre-practices.md +581 -0
  351. package/operations/06-glossary/operations-glossary.md +120 -0
  352. package/operations/aiops-anomaly-detection.md +758 -0
  353. package/operations/capacity-planning.md +1061 -0
  354. package/operations/chaos-engineering.md +659 -0
  355. package/operations/incident-command-system.md +38 -0
  356. package/operations/observability-complete.md +442 -0
  357. package/operations/slo-sli-playbook.md +517 -0
  358. package/operations/sre-operations-deep-dive.md +39 -0
  359. package/package.json +8 -0
  360. package/performance/01-standards/performance-and-scalability.md +80 -0
  361. package/performance/01-standards/performance-standards.md +156 -0
  362. package/performance/02-playbooks/query-optimization-playbook.md +103 -0
  363. package/performance/03-checklists/performance-checklist.md +56 -0
  364. package/performance/04-antipatterns/performance-antipatterns.md +146 -0
  365. package/product/01-standards/product-management-complete.md +285 -0
  366. package/product/02-playbooks/feature-launch-playbook.md +207 -0
  367. package/product/02-playbooks/user-research-playbook.md +532 -0
  368. package/product/03-checklists/feature-launch-checklist.md +275 -0
  369. package/product/04-antipatterns/product-antipatterns.md +355 -0
  370. package/product/05-cases/case-mvp-to-scale.md +384 -0
  371. package/product/06-glossary/product-glossary.md +462 -0
  372. package/product/feature-prioritization-framework.md +40 -0
  373. package/product/kpi-and-metric-tree.md +37 -0
  374. package/product/product-discovery-and-prd-deep-dive.md +41 -0
  375. package/quantum/01-standards/quantum-complete.md +1186 -0
  376. package/security/01-standards/api-security-complete.md +511 -0
  377. package/security/01-standards/container-runtime-security.md +574 -0
  378. package/security/01-standards/data-protection-gdpr.md +543 -0
  379. package/security/01-standards/owasp-top10-complete.md +1890 -0
  380. package/security/01-standards/secure-coding-baseline.md +90 -0
  381. package/security/01-standards/supply-chain-security.md +441 -0
  382. package/security/01-standards/web-security-checklist.md +108 -0
  383. package/security/01-standards/zero-trust-architecture.md +521 -0
  384. package/security/02-playbooks/auth-sso-playbook.md +166 -0
  385. package/security/02-playbooks/incident-response-security-playbook.md +588 -0
  386. package/security/02-playbooks/owasp-api-security-playbook.md +129 -0
  387. package/security/02-playbooks/payment-integration-playbook.md +119 -0
  388. package/security/02-playbooks/penetration-testing-playbook.md +517 -0
  389. package/security/03-checklists/security-audit-checklist.md +356 -0
  390. package/security/04-antipatterns/security-coding-antipatterns.md +580 -0
  391. package/security/05-cases/case-log4shell-incident.md +537 -0
  392. package/security/05-cases/case-major-breaches.md +468 -0
  393. package/security/06-glossary/security-glossary.md +212 -0
  394. package/security/compliance-automation.md +993 -0
  395. package/security/container-security.md +680 -0
  396. package/security/devsecops-complete.md +426 -0
  397. package/security/sast-dast-sca.md +775 -0
  398. package/security/secrets-management.md +594 -0
  399. package/security/security-architecture-deep-dive.md +37 -0
  400. package/security/threat-modeling-stride-playbook.md +40 -0
  401. package/seed-templates/auth-system.md +59 -0
  402. package/seed-templates/blog-content.md +94 -0
  403. package/seed-templates/dashboard.md +89 -0
  404. package/seed-templates/docs-site.md +73 -0
  405. package/seed-templates/e-commerce.md +50 -0
  406. package/seed-templates/saas-landing.md +92 -0
  407. package/seed-templates/settings-page.md +51 -0
  408. package/testing/01-standards/test-strategy-and-layering.md +83 -0
  409. package/testing/01-standards/testing-strategy-complete.md +422 -0
  410. package/testing/01-standards/unit-testing-best-practices.md +118 -0
  411. package/testing/02-playbooks/e2e-testing-playbook.md +988 -0
  412. package/testing/02-playbooks/testing-strategy-playbook.md +126 -0
  413. package/testing/03-checklists/test-strategy-checklist.md +208 -0
  414. package/testing/04-antipatterns/testing-antipatterns.md +718 -0
  415. package/testing/05-cases/case-testing-transformation.md +300 -0
  416. package/testing/06-glossary/testing-glossary.md +110 -0
  417. package/testing/risk-based-test-matrix.md +36 -0
  418. package/testing/testing-strategy-deep-dive.md +37 -0
@@ -0,0 +1,968 @@
1
+ ---
2
+ id: microservices-patterns-complete
3
+ title: 微服务架构模式完全指南
4
+ domain: architecture
5
+ category: 01-standards
6
+ difficulty: advanced
7
+ tags: [microservices, architecture, distributed-systems, patterns]
8
+ quality_score: 94
9
+ maintainer: architecture-team@umadev.com
10
+ last_updated: 2026-03-29
11
+ version: 3.0
12
+ related_knowledge:
13
+ - ddd-complete
14
+ - event-driven-architecture
15
+ - api-gateway-patterns
16
+ prerequisites:
17
+ - software-architecture-fundamentals
18
+ - distributed-systems-basics
19
+ ---
20
+
21
+ # 微服务架构模式完全指南
22
+
23
+ ## 概述
24
+
25
+ 微服务架构是一种将单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,并使用轻量级机制(通常是 HTTP Resource API)进行通信。每个服务都是围绕业务能力构建的,并可以由全自动部署机制独立部署。这些服务可以用不同的编程语言编写,使用不同的数据存储技术。
26
+
27
+ 本指南将全面讲解微服务架构的核心模式、设计原则、实施策略以及生产环境中的最佳实践。
28
+
29
+ ## 核心概念
30
+
31
+ ### 1. 微服务 vs 单体架构
32
+
33
+ ```mermaid
34
+ graph TB
35
+ subgraph "单体架构"
36
+ A1[单一应用] --> B1[单一数据库]
37
+ A1 --> C1[单一部署单元]
38
+ A1 --> D1[紧耦合]
39
+ end
40
+
41
+ subgraph "微服务架构"
42
+ A2[用户服务] --> B2[用户DB]
43
+ C2[订单服务] --> D2[订单DB]
44
+ E2[支付服务] --> F2[支付DB]
45
+ G2[通知服务] --> H2[通知DB]
46
+
47
+ A2 -.->|HTTP/gRPC| C2
48
+ C2 -.->|HTTP/gRPC| E2
49
+ E2 -.->|消息队列| G2
50
+ end
51
+ ```
52
+
53
+ #### 微服务的优势
54
+
55
+ | 优势 | 说明 |
56
+ |------|------|
57
+ | **独立部署** | 每个服务可以独立部署,不影响其他服务 |
58
+ | **技术多样性** | 不同服务可以使用最适合的技术栈 |
59
+ | **故障隔离** | 一个服务失败不会导致整个系统崩溃 |
60
+ | **可扩展性** | 可以单独扩展瓶颈服务 |
61
+ | **团队自治** | 不同团队可以独立开发和维护服务 |
62
+
63
+ #### 微服务的挑战
64
+
65
+ | 挑战 | 说明 |
66
+ |------|------|
67
+ | **分布式复杂性** | 网络延迟、部分失败、分布式事务 |
68
+ | **运维复杂性** | 需要自动化部署、监控、日志聚合 |
69
+ | **数据一致性** | 跨服务的数据一致性难以保证 |
70
+ | **测试复杂性** | 需要集成测试和端到端测试 |
71
+ | **服务发现** | 服务实例动态变化,需要服务发现机制 |
72
+
73
+ ### 2. 微服务设计原则
74
+
75
+ #### 单一职责原则 (SRP)
76
+
77
+ 每个微服务应该只负责一个业务能力:
78
+
79
+ ```python
80
+ # ❌ 错误: 服务职责过多
81
+ class UserOrderService:
82
+ def create_user(self): pass
83
+ def create_order(self): pass
84
+ def process_payment(self): pass
85
+ def send_notification(self): pass
86
+
87
+ # ✅ 正确: 职责单一
88
+ class UserService:
89
+ def create_user(self): pass
90
+ def update_user(self): pass
91
+ def get_user(self): pass
92
+
93
+ class OrderService:
94
+ def create_order(self): pass
95
+ def update_order(self): pass
96
+
97
+ class PaymentService:
98
+ def process_payment(self): pass
99
+
100
+ class NotificationService:
101
+ def send_notification(self): pass
102
+ ```
103
+
104
+ #### 围绕业务能力建模
105
+
106
+ 使用领域驱动设计 (DDD) 的限界上下文 (Bounded Context):
107
+
108
+ ```python
109
+ # 用户上下文
110
+ class User:
111
+ def __init__(self, user_id, email, name):
112
+ self.user_id = user_id
113
+ self.email = email
114
+ self.name = name
115
+
116
+ # 订单上下文
117
+ class Order:
118
+ def __init__(self, order_id, customer_id, items):
119
+ self.order_id = order_id
120
+ self.customer_id = customer_id # 只存储 ID,不存储完整用户信息
121
+ self.items = items
122
+ self.status = "pending"
123
+
124
+ # 支付上下文
125
+ class Payment:
126
+ def __init__(self, payment_id, order_id, amount):
127
+ self.payment_id = payment_id
128
+ self.order_id = order_id
129
+ self.amount = amount
130
+ ```
131
+
132
+ ## 核心模式
133
+
134
+ ### 1. API 网关模式 (API Gateway)
135
+
136
+ #### 问题
137
+ 客户端需要与多个服务通信,导致:
138
+ - 多次网络请求
139
+ - 跨域问题
140
+ - 协议转换复杂
141
+ - 认证逻辑重复
142
+
143
+ #### 解决方案
144
+
145
+ ```python
146
+ from fastapi import FastAPI, HTTPException, Depends
147
+ from pydantic import BaseModel
148
+ import httpx
149
+
150
+ app = FastAPI()
151
+
152
+ class Gateway:
153
+ def __init__(self):
154
+ self.services = {
155
+ "user": "http://user-service:8001",
156
+ "order": "http://order-service:8002",
157
+ "product": "http://product-service:8003"
158
+ }
159
+ self.client = httpx.AsyncClient()
160
+
161
+ async def call_service(self, service_name: str, path: str, method: str = "GET", data=None):
162
+ base_url = self.services.get(service_name)
163
+ if not base_url:
164
+ raise HTTPException(status_code=404, detail="Service not found")
165
+
166
+ url = f"{base_url}{path}"
167
+
168
+ try:
169
+ if method == "GET":
170
+ response = await self.client.get(url)
171
+ elif method == "POST":
172
+ response = await self.client.post(url, json=data)
173
+ elif method == "PUT":
174
+ response = await self.client.put(url, json=data)
175
+ elif method == "DELETE":
176
+ response = await self.client.delete(url)
177
+
178
+ return response.json()
179
+ except httpx.RequestError as e:
180
+ raise HTTPException(status_code=503, detail=f"Service unavailable: {str(e)}")
181
+
182
+ gateway = Gateway()
183
+
184
+ # API 网关路由
185
+ @app.get("/api/users/{user_id}")
186
+ async def get_user(user_id: int):
187
+ return await gateway.call_service("user", f"/users/{user_id}")
188
+
189
+ @app.post("/api/orders")
190
+ async def create_order(order_data: dict):
191
+ # 1. 验证用户
192
+ user = await gateway.call_service("user", f"/users/{order_data['user_id']}")
193
+ if not user:
194
+ raise HTTPException(status_code=404, detail="User not found")
195
+
196
+ # 2. 验证产品
197
+ products = await gateway.call_service("product", "/products/batch", "POST",
198
+ {"product_ids": order_data['product_ids']})
199
+
200
+ # 3. 创建订单
201
+ order = await gateway.call_service("order", "/orders", "POST", {
202
+ "user_id": order_data['user_id'],
203
+ "products": products,
204
+ "total": sum(p['price'] for p in products)
205
+ })
206
+
207
+ return order
208
+ ```
209
+
210
+ #### API 网关职责
211
+
212
+ ```mermaid
213
+ graph LR
214
+ A[客户端] --> B[API 网关]
215
+ B --> C[认证授权]
216
+ B --> D[限流熔断]
217
+ B --> E[日志监控]
218
+ B --> F[协议转换]
219
+ B --> G[请求路由]
220
+
221
+ G --> H[用户服务]
222
+ G --> I[订单服务]
223
+ G --> J[支付服务]
224
+ ```
225
+
226
+ ### 2. 服务发现模式 (Service Discovery)
227
+
228
+ #### 问题
229
+ 在动态环境中,服务实例的网络地址会动态变化,客户端如何知道服务地址?
230
+
231
+ #### 解决方案: 服务注册中心
232
+
233
+ ```python
234
+ # 服务注册中心
235
+ import asyncio
236
+ from datetime import datetime, timedelta
237
+ from typing import Dict, List
238
+ from dataclasses import dataclass
239
+
240
+ @dataclass
241
+ class ServiceInstance:
242
+ service_name: str
243
+ instance_id: str
244
+ host: str
245
+ port: int
246
+ last_heartbeat: datetime
247
+ metadata: dict
248
+
249
+ class ServiceRegistry:
250
+ def __init__(self, heartbeat_timeout: int = 30):
251
+ self.services: Dict[str, List[ServiceInstance]] = {}
252
+ self.heartbeat_timeout = heartbeat_timeout
253
+
254
+ def register(self, service_name: str, instance_id: str, host: str, port: int, metadata: dict = None):
255
+ """服务注册"""
256
+ if service_name not in self.services:
257
+ self.services[service_name] = []
258
+
259
+ instance = ServiceInstance(
260
+ service_name=service_name,
261
+ instance_id=instance_id,
262
+ host=host,
263
+ port=port,
264
+ last_heartbeat=datetime.now(),
265
+ metadata=metadata or {}
266
+ )
267
+
268
+ # 检查是否已存在
269
+ existing = next((i for i in self.services[service_name]
270
+ if i.instance_id == instance_id), None)
271
+ if existing:
272
+ self.services[service_name].remove(existing)
273
+
274
+ self.services[service_name].append(instance)
275
+ print(f"Registered: {service_name} at {host}:{port}")
276
+
277
+ def deregister(self, service_name: str, instance_id: str):
278
+ """服务注销"""
279
+ if service_name in self.services:
280
+ self.services[service_name] = [
281
+ i for i in self.services[service_name]
282
+ if i.instance_id != instance_id
283
+ ]
284
+ print(f"Deregistered: {service_name}/{instance_id}")
285
+
286
+ def heartbeat(self, service_name: str, instance_id: str):
287
+ """心跳更新"""
288
+ if service_name in self.services:
289
+ instance = next((i for i in self.services[service_name]
290
+ if i.instance_id == instance_id), None)
291
+ if instance:
292
+ instance.last_heartbeat = datetime.now()
293
+
294
+ def get_instances(self, service_name: str) -> List[ServiceInstance]:
295
+ """获取健康的服务实例"""
296
+ if service_name not in self.services:
297
+ return []
298
+
299
+ # 过滤掉超时的实例
300
+ now = datetime.now()
301
+ healthy = [
302
+ i for i in self.services[service_name]
303
+ if (now - i.last_heartbeat).total_seconds() < self.heartbeat_timeout
304
+ ]
305
+
306
+ return healthy
307
+
308
+ def cleanup_expired(self):
309
+ """清理过期实例"""
310
+ now = datetime.now()
311
+ for service_name in list(self.services.keys()):
312
+ before_count = len(self.services[service_name])
313
+ self.services[service_name] = [
314
+ i for i in self.services[service_name]
315
+ if (now - i.last_heartbeat).total_seconds() < self.heartbeat_timeout
316
+ ]
317
+ after_count = len(self.services[service_name])
318
+ if before_count != after_count:
319
+ print(f"Cleaned up {before_count - after_count} expired instances for {service_name}")
320
+
321
+ # 使用示例
322
+ registry = ServiceRegistry()
323
+
324
+ # 服务启动时注册
325
+ registry.register("user-service", "instance-1", "192.168.1.10", 8001, {"version": "1.0"})
326
+ registry.register("user-service", "instance-2", "192.168.1.11", 8001, {"version": "1.0"})
327
+
328
+ # 客户端发现服务
329
+ instances = registry.get_instances("user-service")
330
+ print(f"Available instances: {len(instances)}")
331
+ for instance in instances:
332
+ print(f" - {instance.host}:{instance.port}")
333
+ ```
334
+
335
+ #### 客户端负载均衡
336
+
337
+ ```python
338
+ import random
339
+ from typing import List
340
+
341
+ class LoadBalancer:
342
+ """负载均衡器"""
343
+
344
+ @staticmethod
345
+ def round_robin(instances: List[ServiceInstance], index: int) -> ServiceInstance:
346
+ """轮询策略"""
347
+ return instances[index % len(instances)]
348
+
349
+ @staticmethod
350
+ def random_choice(instances: List[ServiceInstance]) -> ServiceInstance:
351
+ """随机策略"""
352
+ return random.choice(instances)
353
+
354
+ @staticmethod
355
+ def weighted_random(instances: List[ServiceInstance]) -> ServiceInstance:
356
+ """加权随机"""
357
+ weights = [i.metadata.get('weight', 1) for i in instances]
358
+ return random.choices(instances, weights=weights)[0]
359
+
360
+ @staticmethod
361
+ def least_connections(instances: List[ServiceInstance]) -> ServiceInstance:
362
+ """最少连接数"""
363
+ return min(instances, key=lambda i: i.metadata.get('connections', 0))
364
+
365
+ # 使用示例
366
+ class ServiceClient:
367
+ def __init__(self, registry: ServiceRegistry, load_balancer=LoadBalancer.round_robin):
368
+ self.registry = registry
369
+ self.load_balancer = load_balancer
370
+ self.call_count = {}
371
+
372
+ async def call(self, service_name: str, path: str):
373
+ # 获取实例列表
374
+ instances = self.registry.get_instances(service_name)
375
+ if not instances:
376
+ raise Exception(f"No available instances for {service_name}")
377
+
378
+ # 负载均衡选择实例
379
+ if service_name not in self.call_count:
380
+ self.call_count[service_name] = 0
381
+
382
+ instance = self.load_balancer(instances, self.call_count[service_name])
383
+ self.call_count[service_name] += 1
384
+
385
+ # 发起调用
386
+ url = f"http://{instance.host}:{instance.port}{path}"
387
+ print(f"Calling {url}")
388
+ # 实际调用逻辑...
389
+ return {"status": "ok", "url": url}
390
+
391
+ client = ServiceClient(registry)
392
+ result = await client.call("user-service", "/users/123")
393
+ ```
394
+
395
+ ### 3. 熔断器模式 (Circuit Breaker)
396
+
397
+ #### 问题
398
+ 当服务不可用时,客户端持续调用会导致:
399
+ - 资源耗尽
400
+ - 级联失败
401
+ - 响应时间过长
402
+
403
+ #### 解决方案
404
+
405
+ ```python
406
+ import time
407
+ from enum import Enum
408
+ from typing import Callable
409
+ from functools import wraps
410
+
411
+ class CircuitState(Enum):
412
+ CLOSED = "closed" # 正常状态
413
+ OPEN = "open" # 熔断状态
414
+ HALF_OPEN = "half_open" # 半开状态
415
+
416
+ class CircuitBreaker:
417
+ """熔断器"""
418
+
419
+ def __init__(
420
+ self,
421
+ failure_threshold: int = 5,
422
+ timeout: int = 60,
423
+ success_threshold: int = 3
424
+ ):
425
+ self.failure_threshold = failure_threshold
426
+ self.timeout = timeout
427
+ self.success_threshold = success_threshold
428
+
429
+ self.failure_count = 0
430
+ self.success_count = 0
431
+ self.state = CircuitState.CLOSED
432
+ self.last_failure_time = None
433
+
434
+ def call(self, func: Callable, *args, **kwargs):
435
+ """执行函数调用"""
436
+ if self.state == CircuitState.OPEN:
437
+ # 检查是否可以进入半开状态
438
+ if self._should_attempt_reset():
439
+ self.state = CircuitState.HALF_OPEN
440
+ else:
441
+ raise Exception("Circuit breaker is OPEN")
442
+
443
+ try:
444
+ result = func(*args, **kwargs)
445
+ self._on_success()
446
+ return result
447
+ except Exception as e:
448
+ self._on_failure()
449
+ raise e
450
+
451
+ def _should_attempt_reset(self) -> bool:
452
+ """检查是否应该尝试重置"""
453
+ if self.last_failure_time is None:
454
+ return False
455
+
456
+ elapsed = time.time() - self.last_failure_time
457
+ return elapsed >= self.timeout
458
+
459
+ def _on_success(self):
460
+ """成功回调"""
461
+ self.failure_count = 0
462
+
463
+ if self.state == CircuitState.HALF_OPEN:
464
+ self.success_count += 1
465
+ if self.success_count >= self.success_threshold:
466
+ self.state = CircuitState.CLOSED
467
+ self.success_count = 0
468
+ print("Circuit breaker reset to CLOSED")
469
+
470
+ def _on_failure(self):
471
+ """失败回调"""
472
+ self.failure_count += 1
473
+ self.last_failure_time = time.time()
474
+ self.success_count = 0
475
+
476
+ if self.failure_count >= self.failure_threshold:
477
+ self.state = CircuitState.OPEN
478
+ print("Circuit breaker opened due to failures")
479
+
480
+ # 装饰器方式使用
481
+ def circuit_breaker(failure_threshold=5, timeout=60):
482
+ """熔断器装饰器"""
483
+ breaker = CircuitBreaker(failure_threshold, timeout)
484
+
485
+ def decorator(func):
486
+ @wraps(func)
487
+ def wrapper(*args, **kwargs):
488
+ return breaker.call(func, *args, **kwargs)
489
+
490
+ # 暴露熔断器状态
491
+ wrapper.breaker = breaker
492
+ return wrapper
493
+
494
+ return decorator
495
+
496
+ # 使用示例
497
+ @circuit_breaker(failure_threshold=3, timeout=10)
498
+ def call_external_service(url):
499
+ """调用外部服务"""
500
+ # 模拟随机失败
501
+ import random
502
+ if random.random() < 0.7:
503
+ raise Exception("Service unavailable")
504
+ return {"data": "success"}
505
+
506
+ # 测试
507
+ for i in range(10):
508
+ try:
509
+ result = call_external_service("http://example.com/api")
510
+ print(f"Call {i+1}: Success - {result}")
511
+ except Exception as e:
512
+ print(f"Call {i+1}: Failed - {e}")
513
+ if "Circuit breaker is OPEN" in str(e):
514
+ print(" ⚠️ Circuit breaker is open, stopping calls")
515
+ break
516
+ ```
517
+
518
+ ### 4. 服务间通信模式
519
+
520
+ #### 同步通信: REST/gRPC
521
+
522
+ ```python
523
+ # REST API 示例 (FastAPI)
524
+ from fastapi import FastAPI, HTTPException
525
+ from pydantic import BaseModel
526
+
527
+ app = FastAPI()
528
+
529
+ class User(BaseModel):
530
+ id: int
531
+ name: str
532
+ email: str
533
+
534
+ # 用户服务
535
+ users_db = {
536
+ 1: User(id=1, name="Alice", email="alice@example.com"),
537
+ 2: User(id=2, name="Bob", email="bob@example.com")
538
+ }
539
+
540
+ @app.get("/users/{user_id}", response_model=User)
541
+ async def get_user(user_id: int):
542
+ user = users_db.get(user_id)
543
+ if not user:
544
+ raise HTTPException(status_code=404, detail="User not found")
545
+ return user
546
+
547
+ # 订单服务调用用户服务
548
+ import httpx
549
+
550
+ async def get_user_from_user_service(user_id: int):
551
+ """从用户服务获取用户信息"""
552
+ async with httpx.AsyncClient() as client:
553
+ response = await client.get(f"http://user-service:8001/users/{user_id}")
554
+ if response.status_code == 200:
555
+ return response.json()
556
+ return None
557
+ ```
558
+
559
+ #### 异步通信: 消息队列
560
+
561
+ ```python
562
+ # 使用 RabbitMQ 的示例
563
+ import pika
564
+ import json
565
+ from typing import Callable
566
+
567
+ class MessageQueue:
568
+ """消息队列封装"""
569
+
570
+ def __init__(self, host='localhost'):
571
+ self.connection = pika.BlockingConnection(
572
+ pika.ConnectionParameters(host=host)
573
+ )
574
+ self.channel = self.connection.channel()
575
+
576
+ def publish(self, queue_name: str, message: dict):
577
+ """发布消息"""
578
+ self.channel.queue_declare(queue=queue_name)
579
+
580
+ self.channel.basic_publish(
581
+ exchange='',
582
+ routing_key=queue_name,
583
+ body=json.dumps(message),
584
+ properties=pika.BasicProperties(
585
+ delivery_mode=2, # 持久化
586
+ )
587
+ )
588
+ print(f"Published to {queue_name}: {message}")
589
+
590
+ def consume(self, queue_name: str, callback: Callable):
591
+ """消费消息"""
592
+ self.channel.queue_declare(queue=queue_name)
593
+
594
+ def on_message(ch, method, properties, body):
595
+ message = json.loads(body)
596
+ callback(message)
597
+ ch.basic_ack(delivery_tag=method.delivery_tag)
598
+
599
+ self.channel.basic_qos(prefetch_count=1)
600
+ self.channel.basic_consume(queue=queue_name, on_message_callback=on_message)
601
+
602
+ print(f"Consuming from {queue_name}...")
603
+ self.channel.start_consuming()
604
+
605
+ def close(self):
606
+ """关闭连接"""
607
+ self.connection.close()
608
+
609
+ # 使用示例
610
+ mq = MessageQueue()
611
+
612
+ # 订单服务发布订单创建事件
613
+ order_created = {
614
+ "event": "order_created",
615
+ "order_id": 123,
616
+ "user_id": 1,
617
+ "total": 99.99
618
+ }
619
+ mq.publish("order_events", order_created)
620
+
621
+ # 通知服务订阅订单事件
622
+ def handle_order_event(message):
623
+ if message["event"] == "order_created":
624
+ print(f"Sending notification for order {message['order_id']}")
625
+ # 发送邮件/短信通知...
626
+
627
+ # mq.consume("order_events", handle_order_event)
628
+ ```
629
+
630
+ ### 5. 事件溯源模式 (Event Sourcing)
631
+
632
+ #### 问题
633
+ 传统 CRUD 只保存当前状态,丢失了历史变更信息
634
+
635
+ #### 解决方案
636
+
637
+ ```python
638
+ from typing import List
639
+ from datetime import datetime
640
+ from dataclasses import dataclass
641
+ import json
642
+
643
+ @dataclass
644
+ class Event:
645
+ event_type: str
646
+ aggregate_id: str
647
+ timestamp: str
648
+ data: dict
649
+
650
+ class EventStore:
651
+ """事件存储"""
652
+
653
+ def __init__(self):
654
+ self.events: List[Event] = []
655
+
656
+ def append(self, event: Event):
657
+ self.events.append(event)
658
+ print(f"Event stored: {event.event_type} for {event.aggregate_id}")
659
+
660
+ def get_events(self, aggregate_id: str) -> List[Event]:
661
+ """获取聚合的所有事件"""
662
+ return [e for e in self.events if e.aggregate_id == aggregate_id]
663
+
664
+ # 订单聚合根
665
+ class Order:
666
+ """订单聚合根 (使用事件溯源)"""
667
+
668
+ def __init__(self, order_id: str):
669
+ self.order_id = order_id
670
+ self.status = None
671
+ self.items = []
672
+ self.total = 0
673
+ self.version = 0
674
+
675
+ def create(self, items: List[dict]):
676
+ """创建订单"""
677
+ if self.version > 0:
678
+ raise Exception("Order already created")
679
+
680
+ event = Event(
681
+ event_type="OrderCreated",
682
+ aggregate_id=self.order_id,
683
+ timestamp=datetime.now().isoformat(),
684
+ data={"items": items}
685
+ )
686
+ self._apply(event)
687
+ return event
688
+
689
+ def confirm(self):
690
+ """确认订单"""
691
+ if self.status != "pending":
692
+ raise Exception("Can only confirm pending orders")
693
+
694
+ event = Event(
695
+ event_type="OrderConfirmed",
696
+ aggregate_id=self.order_id,
697
+ timestamp=datetime.now().isoformat(),
698
+ data={}
699
+ )
700
+ self._apply(event)
701
+ return event
702
+
703
+ def cancel(self, reason: str):
704
+ """取消订单"""
705
+ if self.status == "shipped":
706
+ raise Exception("Cannot cancel shipped orders")
707
+
708
+ event = Event(
709
+ event_type="OrderCancelled",
710
+ aggregate_id=self.order_id,
711
+ timestamp=datetime.now().isoformat(),
712
+ data={"reason": reason}
713
+ )
714
+ self._apply(event)
715
+ return event
716
+
717
+ def _apply(self, event: Event):
718
+ """应用事件"""
719
+ if event.event_type == "OrderCreated":
720
+ self.status = "pending"
721
+ self.items = event.data["items"]
722
+ self.total = sum(item["price"] for item in self.items)
723
+
724
+ elif event.event_type == "OrderConfirmed":
725
+ self.status = "confirmed"
726
+
727
+ elif event.event_type == "OrderCancelled":
728
+ self.status = "cancelled"
729
+
730
+ self.version += 1
731
+
732
+ def load_from_history(self, events: List[Event]):
733
+ """从事件历史重建状态"""
734
+ for event in events:
735
+ self._apply(event)
736
+
737
+ # 使用示例
738
+ event_store = EventStore()
739
+
740
+ # 创建订单
741
+ order = Order("order-123")
742
+ event1 = order.create([
743
+ {"product_id": 1, "price": 50.0},
744
+ {"product_id": 2, "price": 30.0}
745
+ ])
746
+ event_store.append(event1)
747
+
748
+ # 确认订单
749
+ event2 = order.confirm()
750
+ event_store.append(event2)
751
+
752
+ # 重建订单状态
753
+ new_order = Order("order-123")
754
+ history = event_store.get_events("order-123")
755
+ new_order.load_from_history(history)
756
+
757
+ print(f"Order status: {new_order.status}")
758
+ print(f"Order total: {new_order.total}")
759
+ print(f"Order version: {new_order.version}")
760
+ ```
761
+
762
+ ## 数据管理模式
763
+
764
+ ### 1. 数据库每服务模式 (Database per Service)
765
+
766
+ ```python
767
+ # 用户服务数据库
768
+ class UserDatabase:
769
+ def __init__(self):
770
+ self.db = {} # 实际使用 PostgreSQL
771
+
772
+ def save(self, user_id, user_data):
773
+ self.db[user_id] = user_data
774
+
775
+ def get(self, user_id):
776
+ return self.db.get(user_id)
777
+
778
+ # 订单服务数据库 (独立)
779
+ class OrderDatabase:
780
+ def __init__(self):
781
+ self.db = {} # 实际使用 MongoDB
782
+
783
+ def save(self, order_id, order_data):
784
+ self.db[order_id] = order_data
785
+
786
+ def get(self, order_id):
787
+ return self.db.get(order_id)
788
+
789
+ # 服务只能访问自己的数据库
790
+ user_db = UserDatabase()
791
+ order_db = OrderDatabase()
792
+ ```
793
+
794
+ ### 2. Saga 模式 (分布式事务)
795
+
796
+ ```python
797
+ from enum import Enum
798
+ from typing import List, Callable
799
+
800
+ class SagaStep:
801
+ """Saga 步骤"""
802
+ def __init__(self, action: Callable, compensation: Callable):
803
+ self.action = action
804
+ self.compensation = compensation
805
+
806
+ class Saga:
807
+ """Saga 编排器"""
808
+
809
+ def __init__(self):
810
+ self.steps: List[SagaStep] = []
811
+ self.completed_steps: List[SagaStep] = []
812
+
813
+ def add_step(self, action: Callable, compensation: Callable):
814
+ """添加步骤"""
815
+ self.steps.append(SagaStep(action, compensation))
816
+ return self
817
+
818
+ async def execute(self):
819
+ """执行 Saga"""
820
+ try:
821
+ # 正向执行所有步骤
822
+ for step in self.steps:
823
+ await step.action()
824
+ self.completed_steps.append(step)
825
+
826
+ print("Saga completed successfully")
827
+
828
+ except Exception as e:
829
+ print(f"Saga failed: {e}, starting compensation...")
830
+
831
+ # 反向补偿已完成的步骤
832
+ for step in reversed(self.completed_steps):
833
+ try:
834
+ await step.compensation()
835
+ except Exception as comp_error:
836
+ print(f"Compensation failed: {comp_error}")
837
+
838
+ raise e
839
+
840
+ # 使用示例: 创建订单 Saga
841
+ async def create_order_saga(user_id, product_id, amount):
842
+ """创建订单的 Saga"""
843
+
844
+ saga = Saga()
845
+
846
+ # 步骤1: 创建订单
847
+ async def create_order():
848
+ print(f"Creating order for user {user_id}")
849
+ # 实际创建订单...
850
+
851
+ async def cancel_order():
852
+ print(f"Cancelling order for user {user_id}")
853
+ # 实际取消订单...
854
+
855
+ saga.add_step(create_order, cancel_order)
856
+
857
+ # 步骤2: 扣减库存
858
+ async def deduct_inventory():
859
+ print(f"Deducting inventory for product {product_id}")
860
+ # 实际扣减库存...
861
+
862
+ async def restore_inventory():
863
+ print(f"Restoring inventory for product {product_id}")
864
+ # 实际恢复库存...
865
+
866
+ saga.add_step(deduct_inventory, restore_inventory)
867
+
868
+ # 步骤3: 扣款
869
+ async def charge_payment():
870
+ print(f"Charging {amount} from user {user_id}")
871
+ # 实际扣款...
872
+
873
+ async def refund_payment():
874
+ print(f"Refunding {amount} to user {user_id}")
875
+ # 实际退款...
876
+
877
+ saga.add_step(charge_payment, refund_payment)
878
+
879
+ # 执行 Saga
880
+ await saga.execute()
881
+
882
+ # 测试
883
+ import asyncio
884
+ asyncio.run(create_order_saga(user_id=1, product_id=100, amount=99.99))
885
+ ```
886
+
887
+ ## 最佳实践
888
+
889
+ ### 1. 服务拆分原则
890
+
891
+ - ✅ 单一业务能力
892
+ - ✅ 高内聚低耦合
893
+ - ✅ 独立数据存储
894
+ - ✅ 独立部署能力
895
+ - ✅ 故障隔离
896
+
897
+ ### 2. 服务间通信最佳实践
898
+
899
+ ```python
900
+ # ✅ 使用异步通信减少耦合
901
+ async def process_order(order_id):
902
+ # 发布事件,而不是直接调用其他服务
903
+ await event_bus.publish("OrderCreated", {"order_id": order_id})
904
+
905
+ # ✅ 使用 API 版本管理
906
+ @app.get("/api/v1/users/{user_id}")
907
+ async def get_user_v1(user_id: int):
908
+ pass
909
+
910
+ @app.get("/api/v2/users/{user_id}")
911
+ async def get_user_v2(user_id: int):
912
+ pass
913
+
914
+ # ✅ 实现幂等性
915
+ processed_orders = set()
916
+
917
+ async def process_payment(order_id):
918
+ if order_id in processed_orders:
919
+ return {"status": "already_processed"}
920
+
921
+ # 处理支付...
922
+ processed_orders.add(order_id)
923
+ return {"status": "success"}
924
+ ```
925
+
926
+ ### 3. 监控和可观测性
927
+
928
+ ```python
929
+ from prometheus_client import Counter, Histogram
930
+ import logging
931
+
932
+ # 指标收集
933
+ request_count = Counter('http_requests_total', 'Total HTTP requests')
934
+ request_latency = Histogram('http_request_duration_seconds', 'HTTP request latency')
935
+
936
+ @app.middleware("http")
937
+ async def monitor_requests(request, call_next):
938
+ request_count.inc()
939
+
940
+ with request_latency.time():
941
+ response = await call_next(request)
942
+
943
+ # 日志记录
944
+ logging.info(f"{request.method} {request.url} - {response.status_code}")
945
+
946
+ return response
947
+ ```
948
+
949
+ ## 参考资料
950
+
951
+ ### 书籍
952
+ - *Building Microservices* by Sam Newman
953
+ - *Microservices Patterns* by Chris Richardson
954
+ - *Production-Ready Microservices* by Susan J. Fowler
955
+
956
+ ### 文章
957
+ - [Microservices Guide by Martin Fowler](https://martinfowler.com/microservices/)
958
+ - [Pattern: Microservice Architecture](https://microservices.io/patterns/microservices.html)
959
+
960
+ ---
961
+
962
+ **知识ID**: `microservices-patterns-complete`
963
+ **领域**: architecture
964
+ **类型**: standards
965
+ **难度**: advanced
966
+ **质量分**: 94
967
+ **维护者**: architecture-team@umadev.com
968
+ **最后更新**: 2026-03-29