@wazir-dev/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
# Horizontal vs Vertical Scaling — Architecture Expertise Module
|
|
2
|
+
|
|
3
|
+
> Vertical scaling (scale up) adds more power to existing machines. Horizontal scaling (scale out) adds more machines. Vertical is simpler and should be your first approach — modern servers handle enormous loads. Horizontal is necessary when vertical limits are reached or when redundancy/availability requires multiple instances.
|
|
4
|
+
|
|
5
|
+
> **Category:** Scaling
|
|
6
|
+
> **Complexity:** Moderate
|
|
7
|
+
> **Applies when:** Systems experiencing or anticipating growth in traffic, data volume, or compute requirements
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Table of Contents
|
|
12
|
+
|
|
13
|
+
1. [What This Is](#what-this-is)
|
|
14
|
+
2. [When to Use Vertical Scaling First](#when-to-use-vertical-scaling-first)
|
|
15
|
+
3. [When to Use Horizontal Scaling](#when-to-use-horizontal-scaling)
|
|
16
|
+
4. [When NOT to Scale Horizontally Prematurely](#when-not-to-scale-horizontally-prematurely)
|
|
17
|
+
5. [How It Works](#how-it-works)
|
|
18
|
+
6. [Trade-Offs Matrix](#trade-offs-matrix)
|
|
19
|
+
7. [Evolution Path](#evolution-path)
|
|
20
|
+
8. [Failure Modes](#failure-modes)
|
|
21
|
+
9. [Technology Landscape](#technology-landscape)
|
|
22
|
+
10. [Decision Tree](#decision-tree)
|
|
23
|
+
11. [Implementation Sketch](#implementation-sketch)
|
|
24
|
+
12. [Cross-References](#cross-references)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## What This Is
|
|
29
|
+
|
|
30
|
+
Scaling increases a system's capacity to handle growing demand. There are two fundamental approaches, plus an automation layer that orchestrates them dynamically.
|
|
31
|
+
|
|
32
|
+
### Vertical Scaling (Scale Up)
|
|
33
|
+
|
|
34
|
+
Make an existing machine more powerful. Upgrade CPU, add RAM, switch to faster NVMe storage, or move to a larger cloud instance type. Application code does not change.
|
|
35
|
+
|
|
36
|
+
**What you increase:** CPU cores/clock speed (4 to 64 cores), RAM (16 GB to 256+ GB), disk I/O (HDD to NVMe), network bandwidth (1 to 25 Gbps).
|
|
37
|
+
|
|
38
|
+
**What stays the same:** Application architecture, deployment topology (one server), operational complexity (one machine to monitor, back up, patch).
|
|
39
|
+
|
|
40
|
+
### Horizontal Scaling (Scale Out)
|
|
41
|
+
|
|
42
|
+
Add more machines and distribute work across them. Run N identical instances behind a load balancer, each handling a fraction of total traffic.
|
|
43
|
+
|
|
44
|
+
**What you increase:** Instance count (2, 5, 20, 200), geographic distribution (multi-region), fault tolerance (N-1 instances can fail).
|
|
45
|
+
|
|
46
|
+
**What changes:** Need a load balancer, application must be stateless, deployments become rolling/blue-green, monitoring spans multiple machines, data consistency becomes a distributed systems problem.
|
|
47
|
+
|
|
48
|
+
### Auto-Scaling (Dynamic Horizontal)
|
|
49
|
+
|
|
50
|
+
Automated horizontal scaling driven by real-time metrics. Adds instances when demand rises, removes them when demand falls.
|
|
51
|
+
|
|
52
|
+
**Common triggers:** CPU utilization (>70% for 3 min), request count per instance (>1000 req/min), queue depth (>500 pending messages), scheduled patterns (scale up at 8am).
|
|
53
|
+
|
|
54
|
+
**Scaling policies:**
|
|
55
|
+
- **Target tracking:** Maintain a metric at a specified value (e.g., keep average CPU at 60%)
|
|
56
|
+
- **Step scaling:** Add/remove fixed amounts at threshold breakpoints
|
|
57
|
+
- **Scheduled scaling:** Pre-configured capacity changes for predictable patterns
|
|
58
|
+
- **Event-driven:** KEDA-style scaling based on external event sources (queues, streams)
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## When to Use Vertical Scaling First
|
|
63
|
+
|
|
64
|
+
**Vertical scaling should be your default starting point.** It is simpler, cheaper to operate, and eliminates entire categories of distributed-systems problems.
|
|
65
|
+
|
|
66
|
+
### The Case for Vertical First
|
|
67
|
+
|
|
68
|
+
1. **No distributed state problems.** One server means no cache coherence issues, no split-brain scenarios, no distributed transactions. Application logic stays straightforward.
|
|
69
|
+
|
|
70
|
+
2. **No deployment complexity.** One deployment target. No rolling updates, no canary deployments, no connection draining.
|
|
71
|
+
|
|
72
|
+
3. **No network overhead.** Inter-service communication happens in-process (nanoseconds, not milliseconds).
|
|
73
|
+
|
|
74
|
+
4. **Modern servers are enormous.** Cloud instances with 256 GB RAM, 96+ vCPUs, and NVMe storage are available. AWS offers up to 24 TB of RAM (u-24tb1.metal). A single well-optimized server handles more traffic than most applications will ever see.
|
|
75
|
+
|
|
76
|
+
5. **Databases scale vertically surprisingly well.** PostgreSQL on a server with 256 GB RAM, NVMe storage, and 64 cores handles millions of rows, thousands of concurrent connections, and complex analytical queries. With proper indexing and query optimization, a single PostgreSQL instance serves most applications for years.
|
|
77
|
+
|
|
78
|
+
### Real-World Example: Stack Overflow
|
|
79
|
+
|
|
80
|
+
Stack Overflow is the canonical example of vertical scaling success. One of the highest-traffic sites on the internet deliberately chose a vertical scaling strategy:
|
|
81
|
+
|
|
82
|
+
- **Scale:** 1.3+ billion page views per month across the Stack Exchange network
|
|
83
|
+
- **Infrastructure:** 25 servers total (not per service -- 25 total), including just 9 web servers
|
|
84
|
+
- **Database:** SQL Server instances with 384 GB RAM and 2 TB SSD storage
|
|
85
|
+
- **Performance:** Sub-50ms response times on most pages
|
|
86
|
+
- **Team:** A remarkably small infrastructure team maintains the entire platform
|
|
87
|
+
- **Uptime:** 99.9% availability serving millions of developers daily
|
|
88
|
+
|
|
89
|
+
As Nick Craver (Stack Overflow's architecture lead) explained, their philosophy is "scale up, not out." They invest in powerful machines and obsess over performance optimization: query tuning, aggressive caching (Redis), and minimizing allocations in hot paths.
|
|
90
|
+
|
|
91
|
+
**The lesson:** Before reaching for horizontal scaling, ask whether better hardware, query optimization, caching, and code profiling would solve the problem more simply. Stack Overflow serves a substantial fraction of the world's developers from fewer servers than most startups deploy for their MVP.
|
|
92
|
+
|
|
93
|
+
### When Vertical Works Best
|
|
94
|
+
|
|
95
|
+
- **Relational databases** with complex joins and transactions
|
|
96
|
+
- **Monolithic applications** where all components share memory
|
|
97
|
+
- **Batch processing** that benefits from more cores and RAM
|
|
98
|
+
- **Development and staging environments** (always keep these simple)
|
|
99
|
+
- **Early-stage products** where engineering time is better spent on features
|
|
100
|
+
- **Stateful workloads** like in-memory caches, search indexes, ML model serving
|
|
101
|
+
- **Applications with predictable, bounded growth** (internal tools, B2B SaaS)
|
|
102
|
+
|
|
103
|
+
### Practical Vertical Scaling Limits
|
|
104
|
+
|
|
105
|
+
| Resource | Practical Cloud Limit | On-Premise Limit |
|
|
106
|
+
|-------------|------------------------------|---------------------------|
|
|
107
|
+
| RAM | 24 TB (AWS u-24tb1.metal) | 6-12 TB (8-socket server) |
|
|
108
|
+
| CPU Cores | 448 vCPUs (AWS u7i.metal) | 224+ cores (AMD EPYC) |
|
|
109
|
+
| Storage I/O | ~3 GB/s (NVMe instance SSD) | ~12 GB/s (NVMe RAID) |
|
|
110
|
+
| Network | 200 Gbps (AWS ENA Express) | 100-400 Gbps (InfiniBand) |
|
|
111
|
+
|
|
112
|
+
For most applications, you hit **operational constraints** (single point of failure, maintenance windows, cost-per-hour of massive instances) before hardware limits.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## When to Use Horizontal Scaling
|
|
117
|
+
|
|
118
|
+
Horizontal scaling becomes necessary -- not merely desirable -- under specific conditions. Do not adopt it preemptively.
|
|
119
|
+
|
|
120
|
+
### Condition 1: Redundancy and High Availability
|
|
121
|
+
|
|
122
|
+
A single server is a single point of failure. If your system must survive hardware failures without downtime, you need multiple instances.
|
|
123
|
+
|
|
124
|
+
- SLAs requiring 99.99%+ uptime (< 52 minutes downtime/year)
|
|
125
|
+
- Regulatory requirements for geographic redundancy (GDPR, financial services DR)
|
|
126
|
+
- Customer contracts that penalize downtime financially
|
|
127
|
+
|
|
128
|
+
### Condition 2: Vertical Limits Reached
|
|
129
|
+
|
|
130
|
+
When your largest available server cannot handle the load -- and you have already optimized queries, added caching, and profiled hot paths -- horizontal scaling is next.
|
|
131
|
+
|
|
132
|
+
**Signs:** CPU consistently >85% on largest instance, memory exceeds available RAM despite tuning, disk I/O bottlenecked on NVMe, network bandwidth fully utilized.
|
|
133
|
+
|
|
134
|
+
### Condition 3: Stateless, Embarrassingly Parallel Workloads
|
|
135
|
+
|
|
136
|
+
Some workloads naturally suit horizontal scaling because they require no shared state:
|
|
137
|
+
|
|
138
|
+
- **Stateless API servers** reading from a shared database
|
|
139
|
+
- **Static asset serving** (CDN, image serving)
|
|
140
|
+
- **Batch processing** with independent work items (map-reduce)
|
|
141
|
+
- **Stateless microservices** performing pure computation
|
|
142
|
+
|
|
143
|
+
### Real-World Examples of Justified Horizontal Scaling
|
|
144
|
+
|
|
145
|
+
**Web Tier:** Nearly every high-traffic site horizontally scales its web tier. Web servers are stateless by design. Adding more behind a load balancer is the simplest, least risky form of horizontal scaling.
|
|
146
|
+
|
|
147
|
+
**Airbnb's Evolution:** Started as a monolithic Rails app on a single server. Vertically scaled with larger EC2 instances. When vertical could no longer sustain peak loads (holidays, major events), horizontally scaled web and search tiers, eventually moving to SOA. They did not start with microservices -- they earned horizontal scaling incrementally.
|
|
148
|
+
|
|
149
|
+
**Criteo's Ad Platform:** Horizontally scales across thousands of servers globally for real-time ad bidding. Computing bid prices for millions of requests per second is embarrassingly parallel and naturally suited to horizontal distribution.
|
|
150
|
+
|
|
151
|
+
**CDN and Edge Computing:** Cloudflare, Akamai, and CloudFront operate thousands of edge nodes worldwide. Content delivery is inherently horizontal -- same content replicated close to users, each node operating independently.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## When NOT to Scale Horizontally Prematurely
|
|
156
|
+
|
|
157
|
+
**This section is intentionally as long as the "when to use horizontal" section because premature horizontal scaling is one of the most common and costly architectural mistakes.**
|
|
158
|
+
|
|
159
|
+
### The Cost of Premature Horizontal Scaling
|
|
160
|
+
|
|
161
|
+
Every additional instance introduces:
|
|
162
|
+
|
|
163
|
+
1. **Distributed State Management.** If your app stores state in memory (sessions, caches, WebSocket connections), horizontal scaling forces externalization to Redis, Memcached, or a database -- each with its own failure modes and operational overhead.
|
|
164
|
+
|
|
165
|
+
2. **Cache Consistency.** One server = always-consistent in-process cache. N servers forces a choice: no caching (high DB load), divergent local caches (stale data), or distributed cache (added latency, new failure mode, cache invalidation complexity).
|
|
166
|
+
|
|
167
|
+
3. **Deployment Complexity.** One server = `scp` or `git pull`. N servers requires orchestration: rolling updates, health checks, connection draining, rollback procedures, CI/CD pipelines, container registries.
|
|
168
|
+
|
|
169
|
+
4. **Debugging Difficulty.** Which of N servers handled the failing request? You need centralized logging (ELK, Datadog), distributed tracing (Jaeger, Zipkin), and correlation IDs. Trivial single-server bugs become intermittent, hard-to-trace cluster issues.
|
|
170
|
+
|
|
171
|
+
5. **Network Latency.** In-process calls take nanoseconds. Network calls between services take milliseconds. Ten network calls per user request adds 10-100ms of latency that did not exist in the monolith.
|
|
172
|
+
|
|
173
|
+
6. **Operational Overhead.** More servers = more patching, monitoring alerts, disk-full warnings, certificate renewals, security surface area. A team of 5 engineers easily spends more time maintaining infrastructure than building features.
|
|
174
|
+
|
|
175
|
+
### Real-World Premature Scaling Mistakes
|
|
176
|
+
|
|
177
|
+
**The Startup That Built for Scale It Never Reached:** A startup with 1,000 users deploys 15 microservices across Kubernetes with service mesh, distributed tracing, and event-driven architecture. Engineering velocity drops to a crawl -- 60% of time on infrastructure. The product never reaches scale to justify the architecture. The startup fails not because the architecture was wrong at scale, but because they never reached scale due to premature complexity.
|
|
178
|
+
|
|
179
|
+
**Microservices Before Product-Market Fit:** As Sam Newman (author of "Building Microservices") has stated, diving headfirst into microservices from day one is usually a mistake. Microservices shift complexity from code to infrastructure. Instead of one codebase, you have dozens -- each with its own deployments, monitoring, database migrations, authentication logic, and network failure modes.
|
|
180
|
+
|
|
181
|
+
**The Modular Monolith Alternative:** Start with a modular monolith with clear internal boundaries. When specific modules need independent scaling (because you have *measured* the bottleneck), extract those into services. This earns horizontal scaling incrementally, driven by evidence, not speculation.
|
|
182
|
+
|
|
183
|
+
### Questions to Ask Before Scaling Horizontally
|
|
184
|
+
|
|
185
|
+
- [ ] Profiled the application and found the actual bottleneck?
|
|
186
|
+
- [ ] Optimized database queries (missing indexes, N+1 queries, unnecessary joins)?
|
|
187
|
+
- [ ] Added caching at the right layer (application, CDN, database query cache)?
|
|
188
|
+
- [ ] Upgraded to a larger instance type (vertical scaling)?
|
|
189
|
+
- [ ] Considered read replicas for read-heavy workloads?
|
|
190
|
+
- [ ] Evaluated whether load is temporary (campaign, launch) and could use scheduled scaling?
|
|
191
|
+
- [ ] Confirmed the team has operational maturity to run distributed systems?
|
|
192
|
+
|
|
193
|
+
If the answer to any is "no," address those first. Horizontal scaling should be the last resort, not the first instinct.
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
## How It Works
|
|
198
|
+
|
|
199
|
+
### Load Balancing
|
|
200
|
+
|
|
201
|
+
| Algorithm | How It Works | Best For |
|
|
202
|
+
|----------------------|--------------------------------------------------|-----------------------------------|
|
|
203
|
+
| Round-Robin | Requests distributed sequentially across servers | Equal-capacity servers, stateless |
|
|
204
|
+
| Weighted Round-Robin | Higher-capacity servers get more requests | Mixed instance sizes |
|
|
205
|
+
| Least Connections | Route to server with fewest active connections | Long-lived connections, WebSocket |
|
|
206
|
+
| IP Hash | Client IP determines server (sticky by default) | Session affinity without cookies |
|
|
207
|
+
| Least Response Time | Route to fastest-responding server | Heterogeneous backends |
|
|
208
|
+
| Random | Random server selection | Simple, surprisingly effective |
|
|
209
|
+
|
|
210
|
+
**Layer 4 vs Layer 7:**
|
|
211
|
+
- **Layer 4 (TCP/UDP):** Fast, operates on IP/port. Cannot inspect HTTP headers or route by URL. Used for raw throughput (NLB, HAProxy TCP mode).
|
|
212
|
+
- **Layer 7 (HTTP/HTTPS):** Inspects request content. Routes by URL, header, cookie. SSL termination. Used for application-aware routing (ALB, nginx, Envoy).
|
|
213
|
+
|
|
214
|
+
### Auto-Scaling Mechanisms
|
|
215
|
+
|
|
216
|
+
**AWS Auto Scaling Groups (ASG):** Launch templates define config. Scaling policies respond to CloudWatch metrics. Supports target tracking, step, and scheduled scaling. Predictive scaling uses ML to anticipate demand.
|
|
217
|
+
|
|
218
|
+
**GCP Managed Instance Groups (MIG):** Instance templates define VM config. Autoscaler adjusts size based on CPU, HTTP load balancing, or custom metrics. Regional MIGs for HA. Rolling update policies.
|
|
219
|
+
|
|
220
|
+
**Kubernetes HPA:** Scales Deployment replicas based on CPU/memory/custom metrics. Algorithm: `desiredReplicas = ceil(currentReplicas * (currentMetric / desiredMetric))`. Works identically across clouds.
|
|
221
|
+
|
|
222
|
+
**KEDA:** Extends HPA to scale on external event sources (60+ scalers: Kafka, RabbitMQ, PostgreSQL, Cron). Can scale to zero. Ideal for queue-driven workloads.
|
|
223
|
+
|
|
224
|
+
### Stateless Requirement
|
|
225
|
+
|
|
226
|
+
Horizontal scaling requires that any instance can handle any request. Externalize:
|
|
227
|
+
- User sessions (Redis, database, or encrypted cookies)
|
|
228
|
+
- File uploads (object storage: S3, GCS, Azure Blob)
|
|
229
|
+
- Caches (Redis, Memcached, or accept local-cache inconsistency)
|
|
230
|
+
- WebSocket connections (Redis pub/sub for cross-instance messaging)
|
|
231
|
+
- Scheduled jobs (distributed scheduler: SQS, Cloud Tasks, Celery)
|
|
232
|
+
|
|
233
|
+
### Session Management Strategies
|
|
234
|
+
|
|
235
|
+
| Strategy | How It Works | Pros | Cons |
|
|
236
|
+
|------------------------|------------------------------------------|------------------------------|---------------------------------|
|
|
237
|
+
| Sticky Sessions | LB routes user to same instance via cookie| Simple, no code changes | Uneven load, failover loses session |
|
|
238
|
+
| External Session Store | Sessions in Redis/DB | Any instance serves any user| Added latency, new dependency |
|
|
239
|
+
| Encrypted Cookies | Session data in signed/encrypted cookies | Truly stateless, no store | Size limit (~4KB), bandwidth |
|
|
240
|
+
| JWT Tokens | Signed tokens carry claims | Stateless verification | Cannot revoke without blacklist |
|
|
241
|
+
|
|
242
|
+
**Recommendation:** Use encrypted cookies or JWTs for authentication, with external Redis for server-side session data exceeding cookie limits.
|
|
243
|
+
|
|
244
|
+
### Database Scaling Strategies
|
|
245
|
+
|
|
246
|
+
**Read Replicas (Horizontal Read Scaling):** Primary handles writes; replicas handle reads. Replication lag means eventual consistency. Works well for read-heavy workloads (>80% reads). PostgreSQL streaming replication, AWS RDS Read Replicas.
|
|
247
|
+
|
|
248
|
+
**Connection Pooling:** PgBouncer/pgpool-II (PostgreSQL), ProxySQL (MySQL). Reduces connection overhead. Often the first step before adding replicas.
|
|
249
|
+
|
|
250
|
+
**Sharding (Horizontal Write Scaling):** Partition data across multiple DB instances by shard key. Massive complexity: cross-shard queries, rebalancing, key selection. Use only when vertical + read replicas are insufficient. Consider Vitess (MySQL), Citus (PostgreSQL), CockroachDB.
|
|
251
|
+
|
|
252
|
+
**Caching Layer:** Redis/Memcached in front of DB. Cache-aside pattern. Reduces DB load 80-95% for read-heavy workloads. Cache invalidation is critical.
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Trade-Offs Matrix
|
|
257
|
+
|
|
258
|
+
| Dimension | Vertical Scaling | Horizontal Scaling |
|
|
259
|
+
|------------------------|----------------------------------------|-----------------------------------------|
|
|
260
|
+
| **Complexity** | Low -- single server, no distribution | High -- LBs, state mgmt, distributed debugging |
|
|
261
|
+
| **Cost Model** | Higher per-unit, simpler billing | Lower per-unit, higher operational cost |
|
|
262
|
+
| **Availability** | Single point of failure | Redundant -- survives instance failures |
|
|
263
|
+
| **Scaling Ceiling** | Hardware max of single machine | Theoretically unlimited |
|
|
264
|
+
| **Scaling Speed** | Minutes to hours (resize, reboot) | Seconds to minutes (add instances) |
|
|
265
|
+
| **Data Consistency** | Strong -- single source of truth | Eventual -- requires coordination |
|
|
266
|
+
| **Downtime on Scale** | Usually requires restart/migration | Zero-downtime scaling |
|
|
267
|
+
| **Debugging** | Simple -- one machine, one log | Complex -- distributed tracing needed |
|
|
268
|
+
| **Team Size** | Small (1-3 ops engineers) | Larger (dedicated SRE/DevOps) |
|
|
269
|
+
| **State Management** | Trivial -- everything in-process | Complex -- externalized state required |
|
|
270
|
+
| **Latency** | Lower -- no network hops | Higher -- network calls between instances |
|
|
271
|
+
| **Geographic Reach** | Single location | Multi-region possible |
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Evolution Path
|
|
276
|
+
|
|
277
|
+
Most successful systems follow a predictable evolution. Each step responds to measured need, not speculative planning.
|
|
278
|
+
|
|
279
|
+
### Stage 1: Single Server
|
|
280
|
+
```
|
|
281
|
+
[Client] --> [Web + App + DB on one server]
|
|
282
|
+
```
|
|
283
|
+
One machine runs everything. Appropriate for prototypes, internal tools, early-stage products. Cost: $50-500/month.
|
|
284
|
+
|
|
285
|
+
### Stage 2: Vertical Upgrade
|
|
286
|
+
Same architecture, more powerful hardware. Add caching. Appropriate for growing products up to millions of page views/month. Cost: $500-5,000/month.
|
|
287
|
+
|
|
288
|
+
### Stage 3: Separate Database
|
|
289
|
+
```
|
|
290
|
+
[Client] --> [Web + App Server] --> [Database Server]
|
|
291
|
+
```
|
|
292
|
+
Database gets its own server (or managed service). Independent vertical scaling of app and DB tiers. Cost: $1,000-10,000/month.
|
|
293
|
+
|
|
294
|
+
### Stage 4: Horizontal Web Tier
|
|
295
|
+
```
|
|
296
|
+
+--> [App Server 1] --+
|
|
297
|
+
[Client] --> [Load Bal.] +--> [App Server 2] --+--> [Database Server]
|
|
298
|
+
+--> [App Server 3] --+
|
|
299
|
+
```
|
|
300
|
+
Multiple app instances behind a load balancer. App must be stateless. DB remains single vertical instance. Cost: $5,000-30,000/month.
|
|
301
|
+
|
|
302
|
+
### Stage 5: Database Read Replicas
|
|
303
|
+
```
|
|
304
|
+
[Client] --> [LB] --> [App Servers] --> [Primary DB (writes)]
|
|
305
|
+
--> [Read Replicas (reads)]
|
|
306
|
+
```
|
|
307
|
+
Primary handles writes; replicas handle reads. Eventual consistency for reads. Cost: $15,000-80,000/month.
|
|
308
|
+
|
|
309
|
+
### Stage 6: Caching and CDN
|
|
310
|
+
```
|
|
311
|
+
[Client] --> [CDN] --> [LB] --> [App Servers] --> [Cache (Redis)]
|
|
312
|
+
--> [DB Primary + Replicas]
|
|
313
|
+
```
|
|
314
|
+
CDN serves static assets at edge. Redis reduces DB load 80-95%. Cost: $30,000-150,000/month.
|
|
315
|
+
|
|
316
|
+
### Stage 7: Service Decomposition (If Needed)
|
|
317
|
+
```
|
|
318
|
+
[Client] --> [CDN] --> [API Gateway] --> [Service A] --> [DB A]
|
|
319
|
+
--> [Service B] --> [DB B]
|
|
320
|
+
--> [Service C] --> [DB C + Cache]
|
|
321
|
+
```
|
|
322
|
+
Extract services only when specific components need independent scaling. Cost: $100,000+/month (infra + team).
|
|
323
|
+
|
|
324
|
+
**Key principle:** Move to the next stage only when you have evidence the current stage is insufficient.
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Failure Modes
|
|
329
|
+
|
|
330
|
+
### Vertical Scaling Failures
|
|
331
|
+
|
|
332
|
+
| Failure Mode | Cause | Mitigation |
|
|
333
|
+
|---------------------------|----------------------------------------|-----------------------------------------|
|
|
334
|
+
| Single point of failure | Hardware failure, OS crash | Regular backups, standby instance |
|
|
335
|
+
| Scaling requires downtime | Instance resize needs reboot | Maintenance windows, managed services |
|
|
336
|
+
| Cost cliff | Largest instances priced non-linearly | Monitor cost/perf ratio; switch to horizontal |
|
|
337
|
+
| Resource contention | Workloads compete for CPU/RAM | Separate DB from app; isolate batch jobs|
|
|
338
|
+
| Vendor lock-in | Reliance on provider's largest types | Design for portability |
|
|
339
|
+
|
|
340
|
+
### Horizontal Scaling Failures
|
|
341
|
+
|
|
342
|
+
| Failure Mode | Cause | Mitigation |
|
|
343
|
+
|---------------------------|----------------------------------------|-----------------------------------------|
|
|
344
|
+
| Thundering herd | New instances overwhelm backend | Warm-up periods, gradual traffic shift |
|
|
345
|
+
| Flapping (rapid up/down) | Aggressive policies oscillate count | Cooldown periods, predictive scaling |
|
|
346
|
+
| Cold start latency | Instances need init time | Pre-warm runtime, image optimization |
|
|
347
|
+
| Split brain | Network partition causes divergence | Consensus protocols, quorum decisions |
|
|
348
|
+
| Cascading failure | Failed instance overloads others | Circuit breakers, bulkheads, backpressure|
|
|
349
|
+
| Session loss | Sticky session server fails | External session store, JWT auth |
|
|
350
|
+
| Data inconsistency | Caches/replicas serve stale data | Cache invalidation strategy, versioning |
|
|
351
|
+
| Deployment inconsistency | Rolling deploy = mixed versions | Feature flags, backward-compatible APIs |
|
|
352
|
+
| Monitoring blind spots | Errors spread across N instances | Centralized logging, distributed tracing|
|
|
353
|
+
| Load balancer as SPOF | LB itself fails | Redundant LBs, managed LB services |
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## Technology Landscape
|
|
358
|
+
|
|
359
|
+
### Load Balancers
|
|
360
|
+
|
|
361
|
+
| Technology | Type | Layer | Best For |
|
|
362
|
+
|------------------|----------|-------|----------------------------------------|
|
|
363
|
+
| **nginx** | Software | 7 | Web server + reverse proxy, huge community |
|
|
364
|
+
| **HAProxy** | Software | 4/7 | High-throughput TCP/HTTP LB |
|
|
365
|
+
| **Envoy** | Software | 7 | Service mesh sidecar, gRPC, K8s ingress|
|
|
366
|
+
| **AWS ALB** | Managed | 7 | AWS HTTP/HTTPS + WAF |
|
|
367
|
+
| **AWS NLB** | Managed | 4 | Ultra-low latency TCP/UDP |
|
|
368
|
+
| **GCP Cloud LB** | Managed | 4/7 | Global anycast, multi-region |
|
|
369
|
+
| **Traefik** | Software | 7 | Auto-discovery, Let's Encrypt, K8s |
|
|
370
|
+
|
|
371
|
+
### Auto-Scaling Platforms
|
|
372
|
+
|
|
373
|
+
| Technology | Platform | Scales | Key Feature |
|
|
374
|
+
|--------------------------|------------|--------------------|--------------------------------|
|
|
375
|
+
| **AWS ASG** | AWS | EC2 instances | Predictive scaling, lifecycle hooks |
|
|
376
|
+
| **GCP MIG Autoscaler** | GCP | Compute Engine VMs | Regional MIGs, custom metrics |
|
|
377
|
+
| **K8s HPA** | Kubernetes | Pod replicas | CPU/memory/custom metrics |
|
|
378
|
+
| **K8s VPA** | Kubernetes | Pod resources | Right-sizes pods automatically |
|
|
379
|
+
| **Karpenter** | AWS K8s | Nodes | Fast provisioning, bin-packing |
|
|
380
|
+
| **KEDA** | Kubernetes | Pods (event-driven)| 60+ scalers, scale-to-zero |
|
|
381
|
+
|
|
382
|
+
### Container Orchestration
|
|
383
|
+
|
|
384
|
+
| Technology | Complexity | Best For |
|
|
385
|
+
|-----------------------|------------|-----------------------------------------|
|
|
386
|
+
| **Docker Compose** | Low | Single-machine multi-container |
|
|
387
|
+
| **Docker Swarm** | Low-Medium | Simple multi-node scheduling |
|
|
388
|
+
| **Kubernetes** | High | Large-scale, multi-service production |
|
|
389
|
+
| **AWS ECS/Fargate** | Medium | AWS-native container orchestration |
|
|
390
|
+
| **Google Cloud Run** | Low | Stateless containers, scale-to-zero |
|
|
391
|
+
|
|
392
|
+
### Database Scaling Tools
|
|
393
|
+
|
|
394
|
+
| Technology | Database | What It Does |
|
|
395
|
+
|--------------------|------------|-----------------------------------------|
|
|
396
|
+
| **PgBouncer** | PostgreSQL | Connection pooling |
|
|
397
|
+
| **Citus** | PostgreSQL | Horizontal sharding as PG extension |
|
|
398
|
+
| **Vitess** | MySQL | Horizontal sharding, connection pooling |
|
|
399
|
+
| **CockroachDB** | -- | Distributed SQL (built-in sharding) |
|
|
400
|
+
| **Redis Cluster** | Redis | Distributed in-memory cache/store |
|
|
401
|
+
| **Amazon Aurora** | MySQL/PG | Auto-scaling storage, 15 read replicas |
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Decision Tree
|
|
406
|
+
|
|
407
|
+
```
|
|
408
|
+
START: Is your system under load pressure?
|
|
409
|
+
|
|
|
410
|
+
+-- No --> Do not scale. Optimize code, add monitoring, revisit later.
|
|
411
|
+
|
|
|
412
|
+
+-- Yes --> Have you profiled to find the actual bottleneck?
|
|
413
|
+
|
|
|
414
|
+
+-- No --> Profile first. Use APM tools (Datadog, New Relic,
|
|
415
|
+
| pg_stat_statements). Do not scale blind.
|
|
416
|
+
|
|
|
417
|
+
+-- Yes --> Is the bottleneck CPU/RAM/I/O on a single server?
|
|
418
|
+
|
|
|
419
|
+
+-- Yes --> Can you upgrade to a larger instance?
|
|
420
|
+
| |
|
|
421
|
+
| +-- Yes --> Upgrade (vertical). Cost acceptable?
|
|
422
|
+
| | +-- Yes --> Done. Monitor and revisit.
|
|
423
|
+
| | +-- No --> Consider horizontal scaling.
|
|
424
|
+
| +-- No --> Vertical limits reached. Go horizontal.
|
|
425
|
+
|
|
|
426
|
+
+-- No --> Is the bottleneck the database?
|
|
427
|
+
|
|
|
428
|
+
+-- Yes --> Optimized queries and indexes?
|
|
429
|
+
| +-- No --> Do that first.
|
|
430
|
+
| +-- Yes --> Read-heavy (>80% reads)?
|
|
431
|
+
| +-- Yes --> Add read replicas.
|
|
432
|
+
| +-- No --> Add caching (Redis).
|
|
433
|
+
| Still bottlenecked? Consider sharding.
|
|
434
|
+
|
|
|
435
|
+
+-- No --> Network/latency for global users?
|
|
436
|
+
+-- Yes --> CDN, edge caching, multi-region.
|
|
437
|
+
+-- No --> Re-profile. Check for memory leaks,
|
|
438
|
+
blocking I/O, unoptimized algorithms.
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
### Horizontal Scaling Checklist
|
|
442
|
+
|
|
443
|
+
Before going horizontal, ensure:
|
|
444
|
+
1. **Application is stateless.** Sessions, caches, file storage externalized.
|
|
445
|
+
2. **Health checks implemented.** Load balancer detects unhealthy instances.
|
|
446
|
+
3. **Graceful shutdown implemented.** Instances drain connections before stopping.
|
|
447
|
+
4. **Centralized logging in place.** All instances log to a single system.
|
|
448
|
+
5. **Deployment automation exists.** CI/CD handles multi-instance rollout.
|
|
449
|
+
6. **Database handles connection count.** Use connection pooling (PgBouncer).
|
|
450
|
+
7. **Monitoring covers all instances.** Dashboards aggregate metrics across fleet.
|
|
451
|
+
8. **Team has operational maturity.** Someone can debug distributed systems at 3 AM.
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## Implementation Sketch
|
|
456
|
+
|
|
457
|
+
### Vertical Scaling: PostgreSQL Optimization
|
|
458
|
+
|
|
459
|
+
Before adding hardware or instances, optimize what you have (10-100x improvement possible):
|
|
460
|
+
|
|
461
|
+
```sql
|
|
462
|
+
-- Find slow queries
|
|
463
|
+
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
|
|
464
|
+
SELECT calls, round(total_exec_time::numeric, 2) AS total_ms,
|
|
465
|
+
round(mean_exec_time::numeric, 2) AS mean_ms,
|
|
466
|
+
substring(query, 1, 100) AS query_preview
|
|
467
|
+
FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
|
|
468
|
+
|
|
469
|
+
-- Find missing indexes
|
|
470
|
+
SELECT schemaname || '.' || relname AS table, seq_scan, idx_scan, n_live_tup
|
|
471
|
+
FROM pg_stat_user_tables
|
|
472
|
+
WHERE seq_scan > 100 AND n_live_tup > 10000 AND idx_scan < seq_scan
|
|
473
|
+
ORDER BY seq_tup_read DESC LIMIT 20;
|
|
474
|
+
|
|
475
|
+
-- Tune for 64 GB server (postgresql.conf)
|
|
476
|
+
-- shared_buffers = 16GB (25% of RAM)
|
|
477
|
+
-- effective_cache_size = 48GB (75% of RAM)
|
|
478
|
+
-- work_mem = 256MB (per-operation sort/hash)
|
|
479
|
+
-- maintenance_work_mem = 2GB (VACUUM, CREATE INDEX)
|
|
480
|
+
-- random_page_cost = 1.1 (SSD; default 4.0 is for HDD)
|
|
481
|
+
-- effective_io_concurrency = 200 (SSD)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
### Horizontal Scaling: Stateless App with External Sessions
|
|
485
|
+
|
|
486
|
+
```python
|
|
487
|
+
# Flask: externalize sessions to Redis for horizontal scaling
|
|
488
|
+
from flask import Flask, session
|
|
489
|
+
from flask_session import Session
|
|
490
|
+
import redis
|
|
491
|
+
|
|
492
|
+
app = Flask(__name__)
|
|
493
|
+
app.config['SESSION_TYPE'] = 'redis'
|
|
494
|
+
app.config['SESSION_REDIS'] = redis.Redis(host='redis-cluster.internal', port=6379)
|
|
495
|
+
app.config['PERMANENT_SESSION_LIFETIME'] = 3600
|
|
496
|
+
Session(app)
|
|
497
|
+
|
|
498
|
+
@app.route('/api/data')
|
|
499
|
+
def get_data():
|
|
500
|
+
user_id = session.get('user_id') # Works on ANY instance
|
|
501
|
+
if not user_id:
|
|
502
|
+
return {'error': 'Not authenticated'}, 401
|
|
503
|
+
data = db.query("SELECT * FROM user_data WHERE user_id = %s", user_id)
|
|
504
|
+
return {'data': data}
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
### Auto-Scaling: Kubernetes HPA
|
|
508
|
+
|
|
509
|
+
```yaml
|
|
510
|
+
apiVersion: autoscaling/v2
|
|
511
|
+
kind: HorizontalPodAutoscaler
|
|
512
|
+
metadata:
|
|
513
|
+
name: web-app-hpa
|
|
514
|
+
spec:
|
|
515
|
+
scaleTargetRef:
|
|
516
|
+
apiVersion: apps/v1
|
|
517
|
+
kind: Deployment
|
|
518
|
+
name: web-app
|
|
519
|
+
minReplicas: 3
|
|
520
|
+
maxReplicas: 50
|
|
521
|
+
behavior:
|
|
522
|
+
scaleUp:
|
|
523
|
+
stabilizationWindowSeconds: 60
|
|
524
|
+
policies:
|
|
525
|
+
- type: Percent
|
|
526
|
+
value: 100
|
|
527
|
+
periodSeconds: 60
|
|
528
|
+
scaleDown:
|
|
529
|
+
stabilizationWindowSeconds: 300
|
|
530
|
+
policies:
|
|
531
|
+
- type: Percent
|
|
532
|
+
value: 25
|
|
533
|
+
periodSeconds: 60
|
|
534
|
+
metrics:
|
|
535
|
+
- type: Resource
|
|
536
|
+
resource:
|
|
537
|
+
name: cpu
|
|
538
|
+
target:
|
|
539
|
+
type: Utilization
|
|
540
|
+
averageUtilization: 70
|
|
541
|
+
- type: Pods
|
|
542
|
+
pods:
|
|
543
|
+
metric:
|
|
544
|
+
name: http_requests_per_second
|
|
545
|
+
target:
|
|
546
|
+
type: AverageValue
|
|
547
|
+
averageValue: "1000"
|
|
548
|
+
```
|
|
549
|
+
|
|
550
|
+
### Load Balancer: nginx
|
|
551
|
+
|
|
552
|
+
```nginx
|
|
553
|
+
upstream web_app {
|
|
554
|
+
least_conn;
|
|
555
|
+
server app1.internal:8080 max_fails=3 fail_timeout=30s;
|
|
556
|
+
server app2.internal:8080 max_fails=3 fail_timeout=30s;
|
|
557
|
+
server app3.internal:8080 max_fails=3 fail_timeout=30s;
|
|
558
|
+
keepalive 32;
|
|
559
|
+
}
|
|
560
|
+
server {
|
|
561
|
+
listen 443 ssl http2;
|
|
562
|
+
server_name app.example.com;
|
|
563
|
+
location / {
|
|
564
|
+
proxy_pass http://web_app;
|
|
565
|
+
proxy_set_header Host $host;
|
|
566
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
567
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
568
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
569
|
+
proxy_http_version 1.1;
|
|
570
|
+
proxy_set_header Connection "";
|
|
571
|
+
proxy_connect_timeout 5s;
|
|
572
|
+
proxy_next_upstream error timeout http_502 http_503;
|
|
573
|
+
proxy_next_upstream_tries 2;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
---
|
|
579
|
+
|
|
580
|
+
## Cross-References
|
|
581
|
+
|
|
582
|
+
- **stateless-design** -- The architectural pattern required for horizontal scaling; externalize all state from application instances.
|
|
583
|
+
- **database-scaling** -- Deep dive on read replicas, sharding, connection pooling, and distributed databases.
|
|
584
|
+
- **twelve-factor-app** -- Methodology codifying stateless processes, config via environment, and patterns that enable horizontal scaling.
|
|
585
|
+
- **serverless** -- The extreme end of horizontal scaling: cloud provider manages all scaling decisions, you provide only code.
|
|
586
|
+
- **microservices** -- Architectural style enabling independent horizontal scaling of components, but with significant distributed-systems complexity.
|
|
587
|
+
|
|
588
|
+
---
|
|
589
|
+
|
|
590
|
+
## Sources
|
|
591
|
+
|
|
592
|
+
- [Scaling Stack Overflow: Keeping it Vertical by Obsessing Over Performance (InfoQ)](https://www.infoq.com/presentations/stack-exchange/)
|
|
593
|
+
- [Stack Overflow Architecture (High Scalability)](https://highscalability.com/stack-overflow-architecture/)
|
|
594
|
+
- [StackOverflow Update: 560M Pageviews/Month, 25 Servers (High Scalability)](https://highscalability.com/stackoverflow-update-560m-pageviews-a-month-25-servers-and-i/)
|
|
595
|
+
- [Horizontal Scaling vs Vertical Scaling (DigitalOcean)](https://www.digitalocean.com/resources/articles/horizontal-scaling-vs-vertical-scaling)
|
|
596
|
+
- [Vertical Scaling vs Horizontal Scaling (CockroachDB)](https://www.cockroachlabs.com/blog/vertical-scaling-vs-horizontal-scaling/)
|
|
597
|
+
- [PostgreSQL Database Scaling Overview (mbobin)](https://mbobin.me/postgresql/2025/02/17/postgresql-database-scaling-a-short-overview.html)
|
|
598
|
+
- [Vertically Scaling PostgreSQL (pgDash)](https://pgdash.io/blog/scaling-postgres.html)
|
|
599
|
+
- [Kubernetes Autoscaling: HPA vs VPA vs Karpenter vs KEDA (DEV Community)](https://dev.to/mechcloud_academy/kubernetes-autoscaling-showdown-hpa-vs-vpa-vs-karpenter-vs-keda-9b1)
|
|
600
|
+
- [Auto-Scaling in the Cloud with AWS, Azure, and GCP (EaseCloud)](https://blog.easecloud.io/cloud-infrastructure/auto-scaling-with-aws-azure-and-gcp/)
|
|
601
|
+
- [The Hidden Cost of Microservices (DEV Community)](https://dev.to/gabrielle_eduarda_776996b/the-hidden-cost-of-microservices-when-complexity-kills-velocity-3mm3)
|
|
602
|
+
- [Scaling Challenges in Distributed Systems (Medium)](https://medium.com/@mukesh.ram/major-scaling-challenges-in-distributed-systems-how-to-avoid-them-a7d467c94351)
|
|
603
|
+
- [Scaling Stateful Systems (Medium)](https://medium.com/@vishipatil/scaling-stateful-systems-strategies-patterns-and-best-practices-bd0016435043)
|
|
604
|
+
- [Horizontal Pod Autoscaling (Kubernetes Docs)](https://kubernetes.io/docs/concepts/workloads/autoscaling/horizontal-pod-autoscale/)
|
|
605
|
+
- [Effective Kubernetes Scaling Strategy (nOps)](https://www.nops.io/blog/building-an-effective-kubernetes-scaling-strategy-hpa-vpa-and-beyond/)
|
|
606
|
+
- [Cloud Auto Scaling Techniques (DigitalOcean)](https://www.digitalocean.com/community/tutorials/auto-scaling-techniques-guide)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Directory Purpose
|
|
2
|
+
|
|
3
|
+
The `scaling` directory details strategies for increasing a system's capacity, availability, and organizational efficiency.
|
|
4
|
+
|
|
5
|
+
# Key Concepts
|
|
6
|
+
|
|
7
|
+
- Scaling databases and compute
|
|
8
|
+
- Designing for statelessness
|
|
9
|
+
- Safely rolling out features
|
|
10
|
+
- Multi-tenant architectures for SaaS
|
|
11
|
+
|
|
12
|
+
# File Map
|
|
13
|
+
|
|
14
|
+
- `database-scaling.md` — sharding, replication, partitioning, read replicas
|
|
15
|
+
- `feature-flags-and-rollouts.md` — dark launches, canary releases, A/B testing
|
|
16
|
+
- `horizontal-vs-vertical.md` — scaling out vs scaling up
|
|
17
|
+
- `multi-tenancy.md` — isolated vs shared databases, tenant routing
|
|
18
|
+
- `stateless-design.md` — sharing nothing, externalizing session state
|
|
19
|
+
|
|
20
|
+
# Reading Guide
|
|
21
|
+
|
|
22
|
+
If building a B2B SaaS → read `multi-tenancy.md`
|
|
23
|
+
If database is bottlenecking → read `database-scaling.md`
|
|
24
|
+
If deploying risky changes → read `feature-flags-and-rollouts.md`
|