blockmine 1.21.0 → 1.23.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/.claude/agents/README.md +469 -0
- package/.claude/agents/auth-route-debugger.md +118 -0
- package/.claude/agents/auth-route-tester.md +93 -0
- package/.claude/agents/auto-error-resolver.md +97 -0
- package/.claude/agents/build-optimizer.md +236 -0
- package/.claude/agents/code-architecture-reviewer.md +83 -0
- package/.claude/agents/code-refactor-master.md +94 -0
- package/.claude/agents/cost-optimizer.md +134 -0
- package/.claude/agents/deployment-orchestrator.md +113 -0
- package/.claude/agents/documentation-architect.md +82 -0
- package/.claude/agents/frontend-error-fixer.md +77 -0
- package/.claude/agents/iac-code-generator.md +71 -0
- package/.claude/agents/incident-responder.md +346 -0
- package/.claude/agents/infrastructure-architect.md +31 -0
- package/.claude/agents/kubernetes-specialist.md +56 -0
- package/.claude/agents/migration-planner.md +181 -0
- package/.claude/agents/network-architect.md +196 -0
- package/.claude/agents/plan-reviewer.md +52 -0
- package/.claude/agents/refactor-planner.md +63 -0
- package/.claude/agents/security-scanner.md +102 -0
- package/.claude/agents/web-research-specialist.md +78 -0
- package/.claude/commands/cost-analysis.md +315 -0
- package/.claude/commands/dev-docs-update.md +55 -0
- package/.claude/commands/dev-docs.md +51 -0
- package/.claude/commands/incident-debug.md +247 -0
- package/.claude/commands/infra-plan.md +81 -0
- package/.claude/commands/migration-plan.md +478 -0
- package/.claude/commands/route-research-for-testing.md +37 -0
- package/.claude/commands/security-review.md +66 -0
- package/.claude/hooks/CONFIG.md +448 -0
- package/.claude/hooks/README.md +163 -0
- package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
- package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
- package/.claude/hooks/add-skill-activation-banners.ts +132 -0
- package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
- package/.claude/hooks/error-handling-reminder.sh +12 -0
- package/.claude/hooks/error-handling-reminder.ts +222 -0
- package/.claude/hooks/k8s-manifest-validator.sh +56 -0
- package/.claude/hooks/package-lock.json +556 -0
- package/.claude/hooks/package.json +16 -0
- package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
- package/.claude/hooks/post-tool-use-tracker.sh +183 -0
- package/.claude/hooks/security-policy-check.sh +247 -0
- package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
- package/.claude/hooks/skill-activation-prompt.sh +10 -0
- package/.claude/hooks/skill-activation-prompt.ts +141 -0
- package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
- package/.claude/hooks/terraform-validator.sh +53 -0
- package/.claude/hooks/test-input.json +7 -0
- package/.claude/hooks/test-skill-activation.ts +427 -0
- package/.claude/hooks/trigger-build-resolver.sh +79 -0
- package/.claude/hooks/tsc-check.sh +173 -0
- package/.claude/hooks/tsconfig.json +19 -0
- package/.claude/settings.json +59 -0
- package/.claude/settings.local.json +36 -14
- package/.claude/skills/README.md +507 -0
- package/.claude/skills/api-engineering/SKILL.md +63 -0
- package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
- package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
- package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
- package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
- package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
- package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
- package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
- package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
- package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
- package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
- package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
- package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
- package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
- package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
- package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
- package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
- package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
- package/.claude/skills/build-engineering/SKILL.md +431 -0
- package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
- package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
- package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
- package/.claude/skills/build-engineering/resources/build-security.md +95 -0
- package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
- package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
- package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
- package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
- package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
- package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
- package/.claude/skills/cloud-engineering/SKILL.md +675 -0
- package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
- package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
- package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
- package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
- package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
- package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
- package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
- package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
- package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
- package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
- package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
- package/.claude/skills/cybersecurity/SKILL.md +409 -0
- package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
- package/.claude/skills/database-engineering/SKILL.md +61 -0
- package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
- package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
- package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
- package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
- package/.claude/skills/devsecops/SKILL.md +374 -0
- package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
- package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
- package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
- package/.claude/skills/devsecops/resources/container-security.md +915 -0
- package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
- package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
- package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
- package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
- package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
- package/.claude/skills/devsecops/resources/security-testing.md +203 -0
- package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
- package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
- package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
- package/.claude/skills/documentation-as-code/SKILL.md +323 -0
- package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
- package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
- package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
- package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
- package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
- package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
- package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
- package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
- package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
- package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
- package/.claude/skills/engineering-management/SKILL.md +356 -0
- package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
- package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
- package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
- package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
- package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
- package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
- package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
- package/.claude/skills/error-tracking/SKILL.md +379 -0
- package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
- package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
- package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
- package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
- package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
- package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
- package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
- package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
- package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
- package/.claude/skills/general-it-engineering/SKILL.md +393 -0
- package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
- package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
- package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
- package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
- package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
- package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
- package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
- package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
- package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
- package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
- package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
- package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
- package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
- package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
- package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
- package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
- package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
- package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
- package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
- package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
- package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
- package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
- package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
- package/.claude/skills/network-engineering/SKILL.md +385 -0
- package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
- package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
- package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
- package/.claude/skills/network-engineering/resources/network-security.md +921 -0
- package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
- package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
- package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
- package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
- package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
- package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
- package/.claude/skills/observability-engineering/SKILL.md +101 -0
- package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
- package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
- package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
- package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
- package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
- package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
- package/.claude/skills/platform-engineering/SKILL.md +555 -0
- package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
- package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
- package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
- package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
- package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
- package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
- package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
- package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
- package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
- package/.claude/skills/release-engineering/SKILL.md +393 -0
- package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
- package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
- package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
- package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
- package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
- package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
- package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
- package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
- package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
- package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
- package/.claude/skills/route-tester/SKILL.md +392 -0
- package/.claude/skills/skill-developer/ADVANCED.md +197 -0
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
- package/.claude/skills/skill-developer/SKILL.md +430 -0
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
- package/.claude/skills/skill-rules.json +2940 -0
- package/.claude/skills/sre/SKILL.md +464 -0
- package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
- package/.claude/skills/sre/resources/capacity-planning.md +226 -0
- package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
- package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
- package/.claude/skills/sre/resources/incident-management.md +436 -0
- package/.claude/skills/sre/resources/observability-stack.md +240 -0
- package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
- package/.claude/skills/sre/resources/performance-optimization.md +108 -0
- package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
- package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
- package/.claude/skills/sre/resources/toil-reduction.md +145 -0
- package/.claude/skills/systems-engineering/SKILL.md +648 -0
- package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
- package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
- package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
- package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
- package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
- package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
- package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
- package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
- package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
- package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
- package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
- package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
- package/.claude/skills/technical-leadership/SKILL.md +728 -0
- package/CHANGELOG.md +102 -42
- package/CLAUDE.md +284 -0
- package/README.md +315 -71
- package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
- package/backend/jest.config.js +59 -0
- package/backend/package-lock.json +6801 -0
- package/backend/package.json +24 -4
- package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
- package/backend/prisma/migrations/20251116111851_add_execution_trace/migration.sql +22 -0
- package/backend/prisma/migrations/20251120154914_add_panel_api_keys/migration.sql +21 -0
- package/backend/prisma/migrations/20251121110241_add_proxy_table/migration.sql +45 -0
- package/backend/prisma/migrations/migration_lock.toml +2 -2
- package/backend/prisma/schema.prisma +103 -1
- package/backend/src/__tests__/core/DependencyService.test.js +336 -0
- package/backend/src/__tests__/core/UserService.test.js +875 -0
- package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
- package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
- package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
- package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
- package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
- package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
- package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
- package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
- package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
- package/backend/src/__tests__/secretsFilter.test.js +425 -0
- package/backend/src/__tests__/services/BotLifecycleService.test.js +416 -0
- package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
- package/backend/src/__tests__/services/CacheManager.test.js +125 -0
- package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
- package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
- package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
- package/backend/src/__tests__/setup.js +25 -0
- package/backend/src/ai/plugin-assistant-system-prompt.md +788 -0
- package/backend/src/api/middleware/auth.js +27 -0
- package/backend/src/api/middleware/botAccess.js +7 -3
- package/backend/src/api/middleware/panelApiAuth.js +135 -0
- package/backend/src/api/routes/aiAssistant.js +995 -0
- package/backend/src/api/routes/apiKeys.js +181 -0
- package/backend/src/api/routes/auth.js +669 -633
- package/backend/src/api/routes/botCommands.js +107 -0
- package/backend/src/api/routes/botGroups.js +165 -0
- package/backend/src/api/routes/botHistory.js +108 -0
- package/backend/src/api/routes/botPermissions.js +99 -0
- package/backend/src/api/routes/botStatus.js +36 -0
- package/backend/src/api/routes/botUsers.js +162 -0
- package/backend/src/api/routes/bots.js +2451 -2360
- package/backend/src/api/routes/eventGraphs.js +4 -1
- package/backend/src/api/routes/logs.js +13 -3
- package/backend/src/api/routes/panel.js +66 -66
- package/backend/src/api/routes/panelApiKeys.js +179 -0
- package/backend/src/api/routes/pluginIde.js +1715 -135
- package/backend/src/api/routes/plugins.js +376 -218
- package/backend/src/api/routes/proxies.js +130 -0
- package/backend/src/api/routes/search.js +4 -0
- package/backend/src/api/routes/servers.js +20 -3
- package/backend/src/api/routes/settings.js +5 -0
- package/backend/src/api/routes/system.js +174 -0
- package/backend/src/api/routes/traces.js +131 -0
- package/backend/src/config/debug.config.js +36 -0
- package/backend/src/container.js +82 -0
- package/backend/src/core/BotHistoryStore.js +180 -0
- package/backend/src/core/BotManager.js +149 -868
- package/backend/src/core/BotManager.old.js +1093 -0
- package/backend/src/core/BotProcess.js +850 -191
- package/backend/src/core/EventGraphManager.js +194 -198
- package/backend/src/core/GraphExecutionEngine.js +709 -57
- package/backend/src/core/MessageQueue.js +39 -12
- package/backend/src/core/NodeRegistry.js +37 -1134
- package/backend/src/core/PluginLoader.js +99 -5
- package/backend/src/core/PluginManager.js +126 -15
- package/backend/src/core/PrismaService.js +32 -0
- package/backend/src/core/TaskScheduler.js +1 -1
- package/backend/src/core/UserService.js +3 -3
- package/backend/src/core/__tests__/PrismaService.test.js +24 -0
- package/backend/src/core/commands/README.md +305 -0
- package/backend/src/core/commands/dev.js +13 -7
- package/backend/src/core/commands/ping.js +10 -4
- package/backend/src/core/commands/whois.js +63 -0
- package/backend/src/core/config/validation.js +27 -0
- package/backend/src/core/constants/graphTypes.js +21 -0
- package/backend/src/core/node-registries/actions.js +202 -0
- package/backend/src/core/node-registries/arrays.js +155 -0
- package/backend/src/core/node-registries/bot.js +23 -0
- package/backend/src/core/node-registries/data.js +290 -0
- package/backend/src/core/node-registries/debug.js +26 -0
- package/backend/src/core/node-registries/events.js +201 -0
- package/backend/src/core/node-registries/flow.js +139 -0
- package/backend/src/core/node-registries/logic.js +62 -0
- package/backend/src/core/node-registries/math.js +42 -0
- package/backend/src/core/node-registries/objects.js +98 -0
- package/backend/src/core/node-registries/strings.js +187 -0
- package/backend/src/core/node-registries/time.js +113 -0
- package/backend/src/core/node-registries/type.js +25 -0
- package/backend/src/core/node-registries/users.js +79 -0
- package/backend/src/core/nodes/{action_bot_look_at.js → actions/bot_look_at.js} +36 -36
- package/backend/src/core/nodes/{action_bot_set_variable.js → actions/bot_set_variable.js} +32 -32
- package/backend/src/core/nodes/actions/create_command.js +189 -0
- package/backend/src/core/nodes/actions/delete_command.js +92 -0
- package/backend/src/core/nodes/{action_send_log.js → actions/send_log.js} +28 -23
- package/backend/src/core/nodes/{action_send_message.js → actions/send_message.js} +32 -32
- package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
- package/backend/src/core/nodes/actions/update_command.js +133 -0
- package/backend/src/core/nodes/arrays/get_next.js +35 -0
- package/backend/src/core/nodes/arrays/join.js +28 -0
- package/backend/src/core/nodes/{data_cast.js → data/cast.js} +10 -1
- package/backend/src/core/nodes/data/datetime_literal.js +27 -0
- package/backend/src/core/nodes/data/entity_info.js +69 -0
- package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
- package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
- package/backend/src/core/nodes/{data_get_user_field.js → data/get_user_field.js} +1 -1
- package/backend/src/core/nodes/data/type_check.js +53 -0
- package/backend/src/core/nodes/{debug_log.js → debug/log.js} +16 -16
- package/backend/src/core/nodes/{flow_branch.js → flow/branch.js} +15 -15
- package/backend/src/core/nodes/{flow_break.js → flow/break.js} +14 -14
- package/backend/src/core/nodes/flow/delay.js +43 -0
- package/backend/src/core/nodes/{flow_for_each.js → flow/for_each.js} +39 -39
- package/backend/src/core/nodes/{flow_sequence.js → flow/sequence.js} +16 -16
- package/backend/src/core/nodes/{flow_switch.js → flow/switch.js} +47 -47
- package/backend/src/core/nodes/{flow_while.js → flow/while.js} +1 -1
- package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
- package/backend/src/core/nodes/logic/not.js +22 -0
- package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
- package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
- package/backend/src/core/nodes/{string_starts_with.js → strings/starts_with.js} +1 -1
- package/backend/src/core/nodes/strings/to_lower.js +22 -0
- package/backend/src/core/nodes/strings/to_upper.js +22 -0
- package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
- package/backend/src/core/nodes/time/add.js +33 -0
- package/backend/src/core/nodes/time/compare.js +35 -0
- package/backend/src/core/nodes/time/diff.js +29 -0
- package/backend/src/core/nodes/time/format.js +32 -0
- package/backend/src/core/nodes/time/now.js +18 -0
- package/backend/src/core/nodes/type/to_string.js +32 -0
- package/backend/src/core/nodes/{user_check_blacklist.js → users/check_blacklist.js} +37 -37
- package/backend/src/core/nodes/{user_get_groups.js → users/get_groups.js} +36 -36
- package/backend/src/core/nodes/{user_get_permissions.js → users/get_permissions.js} +36 -36
- package/backend/src/core/nodes/{user_set_blacklist.js → users/set_blacklist.js} +37 -37
- package/backend/src/core/services/BotLifecycleService.js +835 -0
- package/backend/src/core/services/BotProcessManager.js +163 -0
- package/backend/src/core/services/CacheManager.js +111 -0
- package/backend/src/core/services/CommandExecutionService.js +430 -0
- package/backend/src/core/services/DebugSessionManager.js +347 -0
- package/backend/src/core/services/GraphCollaborationManager.js +501 -0
- package/backend/src/core/services/MinecraftBotManager.js +259 -0
- package/backend/src/core/services/MinecraftViewerService.js +216 -0
- package/backend/src/core/services/ResourceMonitorService.js +90 -0
- package/backend/src/core/services/TelemetryService.js +124 -0
- package/backend/src/core/services/TraceCollectorService.js +545 -0
- package/backend/src/core/services/ValidationService.js +132 -0
- package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
- package/backend/src/core/services.js +20 -5
- package/backend/src/core/system/CommandContext.js +84 -0
- package/backend/src/core/system/RuntimeCommandRegistry.js +116 -0
- package/backend/src/core/system/Transport.js +74 -0
- package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
- package/backend/src/core/utils/jsonParser.js +18 -0
- package/backend/src/core/utils/secretsFilter.js +262 -0
- package/backend/src/core/utils/variableParser.js +89 -0
- package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
- package/backend/src/core/validation/nodeSchemas.js +112 -0
- package/backend/src/lib/prisma.js +2 -4
- package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
- package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
- package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
- package/backend/src/real-time/botApi/handlers/index.js +43 -0
- package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
- package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
- package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
- package/backend/src/real-time/botApi/index.js +40 -0
- package/backend/src/real-time/botApi/middleware.js +79 -0
- package/backend/src/real-time/botApi/utils.js +65 -0
- package/backend/src/real-time/panelNamespace.js +387 -0
- package/backend/src/real-time/presence.js +7 -2
- package/backend/src/real-time/socketHandler.js +400 -5
- package/backend/src/repositories/BaseRepository.js +43 -0
- package/backend/src/repositories/BotRepository.js +42 -0
- package/backend/src/repositories/CommandRepository.js +53 -0
- package/backend/src/repositories/EventGraphRepository.js +40 -0
- package/backend/src/repositories/GroupRepository.js +69 -0
- package/backend/src/repositories/PermissionRepository.js +48 -0
- package/backend/src/repositories/PluginRepository.js +42 -0
- package/backend/src/repositories/ServerRepository.js +27 -0
- package/backend/src/repositories/UserRepository.js +48 -0
- package/backend/src/server.js +21 -0
- package/backend/src/test-refactor.js +85 -0
- package/frontend/dist/assets/index-B1serztM.js +11210 -0
- package/frontend/dist/assets/index-t6K1u4OV.css +32 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package-lock.json +9437 -0
- package/frontend/package.json +8 -5
- package/package.json +3 -2
- package/screen/console.png +0 -0
- package/screen/dashboard.png +0 -0
- package/screen/graph_collabe.png +0 -0
- package/screen/graph_live_debug.png +0 -0
- package/screen/management_command.png +0 -0
- package/screen/node_debug_trace.png +0 -0
- package/screen/plugin_/320/276/320/261/320/267/320/276/321/200.png +0 -0
- package/screen/websocket.png +0 -0
- package/screen//320/275/320/260/321/201/321/202/321/200/320/276/320/271/320/272/320/270_/320/276/321/202/320/264/320/265/320/273/321/214/320/275/321/213/321/205_/320/272/320/276/320/274/320/260/320/275/320/264_/320/272/320/260/320/266/320/264/321/203_/320/272/320/276/320/274/320/260/320/275/320/273/320/264/321/203_/320/274/320/276/320/266/320/275/320/276_/320/275/320/260/321/201/321/202/321/200/320/260/320/270/320/262/320/260/321/202/321/214.png +0 -0
- package/screen//320/277/320/273/320/260/320/275/320/270/321/200/320/276/320/262/321/211/320/270/320/272_/320/274/320/276/320/266/320/275/320/276_/320/267/320/260/320/264/320/260/320/262/320/260/321/202/321/214_/320/264/320/265/320/271/321/201/321/202/320/262/320/270/321/217_/320/277/320/276_/320/262/321/200/320/265/320/274/320/265/320/275/320/270.png +0 -0
- package/frontend/dist/assets/index-B9GedHEa.js +0 -8352
- package/frontend/dist/assets/index-zLiy9MDx.css +0 -1
- package/nul +0 -0
- /package/backend/src/core/nodes/{action_http_request.js → actions/http_request.js} +0 -0
- /package/backend/src/core/nodes/{array_add_element.js → arrays/add_element.js} +0 -0
- /package/backend/src/core/nodes/{array_contains.js → arrays/contains.js} +0 -0
- /package/backend/src/core/nodes/{array_find_index.js → arrays/find_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_by_index.js → arrays/get_by_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_random_element.js → arrays/get_random_element.js} +0 -0
- /package/backend/src/core/nodes/{array_remove_by_index.js → arrays/remove_by_index.js} +0 -0
- /package/backend/src/core/nodes/{bot_get_position.js → bot/get_position.js} +0 -0
- /package/backend/src/core/nodes/{data_array_literal.js → data/array_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_boolean_literal.js → data/boolean_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_get_argument.js → data/get_argument.js} +0 -0
- /package/backend/src/core/nodes/{data_get_bot_look.js → data/get_bot_look.js} +0 -0
- /package/backend/src/core/nodes/{data_get_entity_field.js → data/get_entity_field.js} +0 -0
- /package/backend/src/core/nodes/{data_get_server_players.js → data/get_server_players.js} +0 -0
- /package/backend/src/core/nodes/{data_get_variable.js → data/get_variable.js} +0 -0
- /package/backend/src/core/nodes/{data_length.js → data/length.js} +0 -0
- /package/backend/src/core/nodes/{data_make_object.js → data/make_object.js} +0 -0
- /package/backend/src/core/nodes/{data_number_literal.js → data/number_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_string_literal.js → data/string_literal.js} +0 -0
- /package/backend/src/core/nodes/{logic_compare.js → logic/compare.js} +0 -0
- /package/backend/src/core/nodes/{logic_operation.js → logic/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_operation.js → math/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_random_number.js → math/random_number.js} +0 -0
- /package/backend/src/core/nodes/{object_create.js → objects/create.js} +0 -0
- /package/backend/src/core/nodes/{object_delete.js → objects/delete.js} +0 -0
- /package/backend/src/core/nodes/{object_get.js → objects/get.js} +0 -0
- /package/backend/src/core/nodes/{object_has_key.js → objects/has_key.js} +0 -0
- /package/backend/src/core/nodes/{object_set.js → objects/set.js} +0 -0
- /package/backend/src/core/nodes/{string_concat.js → strings/concat.js} +0 -0
- /package/backend/src/core/nodes/{string_contains.js → strings/contains.js} +0 -0
- /package/backend/src/core/nodes/{string_ends_with.js → strings/ends_with.js} +0 -0
- /package/backend/src/core/nodes/{string_equals.js → strings/equals.js} +0 -0
- /package/backend/src/core/nodes/{string_length.js → strings/length.js} +0 -0
- /package/backend/src/core/nodes/{string_matches.js → strings/matches.js} +0 -0
- /package/backend/src/core/nodes/{string_split.js → strings/split.js} +0 -0
|
@@ -0,0 +1,820 @@
|
|
|
1
|
+
# Load Balancing
|
|
2
|
+
|
|
3
|
+
Comprehensive guide to load balancing covering algorithms, protocols, health checks, and implementation across different platforms including HAProxy, nginx, and cloud-native load balancers.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
- [Overview](#overview)
|
|
8
|
+
- [Load Balancer Types](#load-balancer-types)
|
|
9
|
+
- [Load Balancing Algorithms](#load-balancing-algorithms)
|
|
10
|
+
- [Health Checks](#health-checks)
|
|
11
|
+
- [SSL/TLS Termination](#ssltls-termination)
|
|
12
|
+
- [Session Persistence](#session-persistence)
|
|
13
|
+
- [Cloud Load Balancers](#cloud-load-balancers)
|
|
14
|
+
- [HAProxy Configuration](#haproxy-configuration)
|
|
15
|
+
- [Nginx Load Balancing](#nginx-load-balancing)
|
|
16
|
+
- [Kubernetes Ingress](#kubernetes-ingress)
|
|
17
|
+
- [Best Practices](#best-practices)
|
|
18
|
+
- [Anti-Patterns](#anti-patterns)
|
|
19
|
+
|
|
20
|
+
## Overview
|
|
21
|
+
|
|
22
|
+
Load balancing distributes network traffic across multiple servers to ensure high availability, optimal resource utilization, and improved application performance.
|
|
23
|
+
|
|
24
|
+
**Key Benefits:**
|
|
25
|
+
- High availability through redundancy
|
|
26
|
+
- Horizontal scalability
|
|
27
|
+
- Zero-downtime deployments
|
|
28
|
+
- Traffic distribution optimization
|
|
29
|
+
- SSL/TLS offloading
|
|
30
|
+
- Protection against DDoS attacks
|
|
31
|
+
|
|
32
|
+
## Load Balancer Types
|
|
33
|
+
|
|
34
|
+
### Layer 4 (Transport Layer)
|
|
35
|
+
|
|
36
|
+
**Characteristics:**
|
|
37
|
+
- Operates at TCP/UDP level
|
|
38
|
+
- Routes based on IP address and port
|
|
39
|
+
- Fast, low latency
|
|
40
|
+
- Protocol-agnostic
|
|
41
|
+
- Cannot inspect application data
|
|
42
|
+
|
|
43
|
+
**Use Cases:**
|
|
44
|
+
- High-throughput applications
|
|
45
|
+
- Non-HTTP protocols
|
|
46
|
+
- UDP load balancing
|
|
47
|
+
- Simple TCP pass-through
|
|
48
|
+
|
|
49
|
+
**Example: AWS Network Load Balancer (NLB)**
|
|
50
|
+
```yaml
|
|
51
|
+
# NLB via Terraform
|
|
52
|
+
resource "aws_lb" "network" {
|
|
53
|
+
name = "app-nlb"
|
|
54
|
+
internal = false
|
|
55
|
+
load_balancer_type = "network"
|
|
56
|
+
subnets = var.public_subnet_ids
|
|
57
|
+
|
|
58
|
+
enable_cross_zone_load_balancing = true
|
|
59
|
+
enable_deletion_protection = true
|
|
60
|
+
|
|
61
|
+
tags = {
|
|
62
|
+
Name = "app-nlb"
|
|
63
|
+
Environment = "production"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
resource "aws_lb_target_group" "tcp" {
|
|
68
|
+
name = "app-tcp-targets"
|
|
69
|
+
port = 8080
|
|
70
|
+
protocol = "TCP"
|
|
71
|
+
vpc_id = var.vpc_id
|
|
72
|
+
|
|
73
|
+
health_check {
|
|
74
|
+
enabled = true
|
|
75
|
+
interval = 30
|
|
76
|
+
port = "traffic-port"
|
|
77
|
+
protocol = "TCP"
|
|
78
|
+
healthy_threshold = 3
|
|
79
|
+
unhealthy_threshold = 3
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
deregistration_delay = 30
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
resource "aws_lb_listener" "tcp" {
|
|
86
|
+
load_balancer_arn = aws_lb.network.arn
|
|
87
|
+
port = 443
|
|
88
|
+
protocol = "TCP"
|
|
89
|
+
|
|
90
|
+
default_action {
|
|
91
|
+
type = "forward"
|
|
92
|
+
target_group_arn = aws_lb_target_group.tcp.arn
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Layer 7 (Application Layer)
|
|
98
|
+
|
|
99
|
+
**Characteristics:**
|
|
100
|
+
- Operates at HTTP/HTTPS level
|
|
101
|
+
- Content-based routing
|
|
102
|
+
- SSL termination
|
|
103
|
+
- Request inspection
|
|
104
|
+
- URL/header-based routing
|
|
105
|
+
- WebSocket support
|
|
106
|
+
|
|
107
|
+
**Use Cases:**
|
|
108
|
+
- HTTP/HTTPS applications
|
|
109
|
+
- Microservices routing
|
|
110
|
+
- A/B testing
|
|
111
|
+
- Canary deployments
|
|
112
|
+
- API gateways
|
|
113
|
+
|
|
114
|
+
**Example: AWS Application Load Balancer (ALB)**
|
|
115
|
+
```yaml
|
|
116
|
+
# ALB with path-based routing
|
|
117
|
+
resource "aws_lb" "application" {
|
|
118
|
+
name = "app-alb"
|
|
119
|
+
internal = false
|
|
120
|
+
load_balancer_type = "application"
|
|
121
|
+
security_groups = [aws_security_group.alb.id]
|
|
122
|
+
subnets = var.public_subnet_ids
|
|
123
|
+
|
|
124
|
+
enable_deletion_protection = true
|
|
125
|
+
enable_http2 = true
|
|
126
|
+
enable_waf = true
|
|
127
|
+
|
|
128
|
+
access_logs {
|
|
129
|
+
bucket = aws_s3_bucket.alb_logs.id
|
|
130
|
+
enabled = true
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
resource "aws_lb_target_group" "api" {
|
|
135
|
+
name = "api-targets"
|
|
136
|
+
port = 8080
|
|
137
|
+
protocol = "HTTP"
|
|
138
|
+
vpc_id = var.vpc_id
|
|
139
|
+
|
|
140
|
+
health_check {
|
|
141
|
+
enabled = true
|
|
142
|
+
path = "/health"
|
|
143
|
+
port = "traffic-port"
|
|
144
|
+
protocol = "HTTP"
|
|
145
|
+
healthy_threshold = 2
|
|
146
|
+
unhealthy_threshold = 2
|
|
147
|
+
timeout = 5
|
|
148
|
+
interval = 30
|
|
149
|
+
matcher = "200"
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
stickiness {
|
|
153
|
+
type = "lb_cookie"
|
|
154
|
+
cookie_duration = 86400
|
|
155
|
+
enabled = true
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
deregistration_delay = 30
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
resource "aws_lb_listener" "https" {
|
|
162
|
+
load_balancer_arn = aws_lb.application.arn
|
|
163
|
+
port = 443
|
|
164
|
+
protocol = "HTTPS"
|
|
165
|
+
ssl_policy = "ELBSecurityPolicy-TLS-1-2-2017-01"
|
|
166
|
+
certificate_arn = var.certificate_arn
|
|
167
|
+
|
|
168
|
+
default_action {
|
|
169
|
+
type = "forward"
|
|
170
|
+
target_group_arn = aws_lb_target_group.api.arn
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
# Path-based routing
|
|
175
|
+
resource "aws_lb_listener_rule" "api_v2" {
|
|
176
|
+
listener_arn = aws_lb_listener.https.arn
|
|
177
|
+
priority = 100
|
|
178
|
+
|
|
179
|
+
action {
|
|
180
|
+
type = "forward"
|
|
181
|
+
target_group_arn = aws_lb_target_group.api_v2.arn
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
condition {
|
|
185
|
+
path_pattern {
|
|
186
|
+
values = ["/api/v2/*"]
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
# Header-based routing
|
|
192
|
+
resource "aws_lb_listener_rule" "canary" {
|
|
193
|
+
listener_arn = aws_lb_listener.https.arn
|
|
194
|
+
priority = 50
|
|
195
|
+
|
|
196
|
+
action {
|
|
197
|
+
type = "forward"
|
|
198
|
+
target_group_arn = aws_lb_target_group.canary.arn
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
condition {
|
|
202
|
+
http_header {
|
|
203
|
+
http_header_name = "X-Canary-Version"
|
|
204
|
+
values = ["v2"]
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Global Load Balancers
|
|
211
|
+
|
|
212
|
+
**Characteristics:**
|
|
213
|
+
- Geographic distribution
|
|
214
|
+
- DNS-based routing
|
|
215
|
+
- Multi-region failover
|
|
216
|
+
- Latency-based routing
|
|
217
|
+
|
|
218
|
+
**Example: AWS Global Accelerator**
|
|
219
|
+
```hcl
|
|
220
|
+
resource "aws_globalaccelerator_accelerator" "main" {
|
|
221
|
+
name = "app-accelerator"
|
|
222
|
+
ip_address_type = "IPV4"
|
|
223
|
+
enabled = true
|
|
224
|
+
|
|
225
|
+
attributes {
|
|
226
|
+
flow_logs_enabled = true
|
|
227
|
+
flow_logs_s3_bucket = aws_s3_bucket.flow_logs.id
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
resource "aws_globalaccelerator_listener" "main" {
|
|
232
|
+
accelerator_arn = aws_globalaccelerator_accelerator.main.id
|
|
233
|
+
protocol = "TCP"
|
|
234
|
+
|
|
235
|
+
port_range {
|
|
236
|
+
from_port = 443
|
|
237
|
+
to_port = 443
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
resource "aws_globalaccelerator_endpoint_group" "us_east" {
|
|
242
|
+
listener_arn = aws_globalaccelerator_listener.main.id
|
|
243
|
+
endpoint_group_region = "us-east-1"
|
|
244
|
+
|
|
245
|
+
health_check_interval_seconds = 30
|
|
246
|
+
health_check_path = "/health"
|
|
247
|
+
health_check_port = 443
|
|
248
|
+
health_check_protocol = "HTTPS"
|
|
249
|
+
threshold_count = 3
|
|
250
|
+
traffic_dial_percentage = 100
|
|
251
|
+
|
|
252
|
+
endpoint_configuration {
|
|
253
|
+
endpoint_id = aws_lb.us_east.arn
|
|
254
|
+
weight = 100
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
resource "aws_globalaccelerator_endpoint_group" "eu_west" {
|
|
259
|
+
listener_arn = aws_globalaccelerator_listener.main.id
|
|
260
|
+
endpoint_group_region = "eu-west-1"
|
|
261
|
+
|
|
262
|
+
traffic_dial_percentage = 100
|
|
263
|
+
|
|
264
|
+
endpoint_configuration {
|
|
265
|
+
endpoint_id = aws_lb.eu_west.arn
|
|
266
|
+
weight = 100
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Load Balancing Algorithms
|
|
272
|
+
|
|
273
|
+
### Round Robin
|
|
274
|
+
|
|
275
|
+
**How it works:** Distributes requests sequentially across all servers.
|
|
276
|
+
|
|
277
|
+
**Pros:**
|
|
278
|
+
- Simple and fair distribution
|
|
279
|
+
- No state required
|
|
280
|
+
- Works well with identical servers
|
|
281
|
+
|
|
282
|
+
**Cons:**
|
|
283
|
+
- Doesn't account for server load
|
|
284
|
+
- Not suitable for varying server capacities
|
|
285
|
+
|
|
286
|
+
**Configuration:**
|
|
287
|
+
```nginx
|
|
288
|
+
upstream backend {
|
|
289
|
+
server backend1.example.com;
|
|
290
|
+
server backend2.example.com;
|
|
291
|
+
server backend3.example.com;
|
|
292
|
+
}
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### Weighted Round Robin
|
|
296
|
+
|
|
297
|
+
**How it works:** Distributes based on assigned weights.
|
|
298
|
+
|
|
299
|
+
```nginx
|
|
300
|
+
upstream backend {
|
|
301
|
+
server backend1.example.com weight=3; # Gets 3x traffic
|
|
302
|
+
server backend2.example.com weight=2; # Gets 2x traffic
|
|
303
|
+
server backend3.example.com weight=1; # Gets 1x traffic
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Least Connections
|
|
308
|
+
|
|
309
|
+
**How it works:** Routes to server with fewest active connections.
|
|
310
|
+
|
|
311
|
+
**Best for:** Long-lived connections, varying request durations
|
|
312
|
+
|
|
313
|
+
```nginx
|
|
314
|
+
upstream backend {
|
|
315
|
+
least_conn;
|
|
316
|
+
|
|
317
|
+
server backend1.example.com;
|
|
318
|
+
server backend2.example.com;
|
|
319
|
+
server backend3.example.com;
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### IP Hash
|
|
324
|
+
|
|
325
|
+
**How it works:** Hash client IP to determine server.
|
|
326
|
+
|
|
327
|
+
**Best for:** Session persistence, sticky sessions
|
|
328
|
+
|
|
329
|
+
```nginx
|
|
330
|
+
upstream backend {
|
|
331
|
+
ip_hash;
|
|
332
|
+
|
|
333
|
+
server backend1.example.com;
|
|
334
|
+
server backend2.example.com;
|
|
335
|
+
server backend3.example.com;
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Consistent Hashing
|
|
340
|
+
|
|
341
|
+
**How it works:** Hash-based distribution with minimal disruption on server changes.
|
|
342
|
+
|
|
343
|
+
```haproxy
|
|
344
|
+
backend app_servers
|
|
345
|
+
balance hdr(X-User-ID)
|
|
346
|
+
hash-type consistent
|
|
347
|
+
|
|
348
|
+
server app1 10.0.1.10:8080 check
|
|
349
|
+
server app2 10.0.1.11:8080 check
|
|
350
|
+
server app3 10.0.1.12:8080 check
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
## Health Checks
|
|
354
|
+
|
|
355
|
+
### Active Health Checks
|
|
356
|
+
|
|
357
|
+
**HTTP/HTTPS Health Checks:**
|
|
358
|
+
```yaml
|
|
359
|
+
# Kubernetes Liveness Probe
|
|
360
|
+
livenessProbe:
|
|
361
|
+
httpGet:
|
|
362
|
+
path: /health
|
|
363
|
+
port: 8080
|
|
364
|
+
httpHeaders:
|
|
365
|
+
- name: X-Health-Check
|
|
366
|
+
value: "true"
|
|
367
|
+
initialDelaySeconds: 30
|
|
368
|
+
periodSeconds: 10
|
|
369
|
+
timeoutSeconds: 5
|
|
370
|
+
failureThreshold: 3
|
|
371
|
+
successThreshold: 1
|
|
372
|
+
|
|
373
|
+
# Kubernetes Readiness Probe
|
|
374
|
+
readinessProbe:
|
|
375
|
+
httpGet:
|
|
376
|
+
path: /ready
|
|
377
|
+
port: 8080
|
|
378
|
+
initialDelaySeconds: 5
|
|
379
|
+
periodSeconds: 5
|
|
380
|
+
timeoutSeconds: 3
|
|
381
|
+
failureThreshold: 3
|
|
382
|
+
successThreshold: 1
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
**TCP Health Checks:**
|
|
386
|
+
```haproxy
|
|
387
|
+
backend mysql_servers
|
|
388
|
+
mode tcp
|
|
389
|
+
balance leastconn
|
|
390
|
+
|
|
391
|
+
option tcp-check
|
|
392
|
+
tcp-check connect port 3306
|
|
393
|
+
|
|
394
|
+
server mysql1 10.0.1.20:3306 check inter 2s rise 2 fall 3
|
|
395
|
+
server mysql2 10.0.1.21:3306 check inter 2s rise 2 fall 3
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Passive Health Checks
|
|
399
|
+
|
|
400
|
+
**Circuit Breaker Pattern:**
|
|
401
|
+
```nginx
|
|
402
|
+
upstream backend {
|
|
403
|
+
server backend1.example.com max_fails=3 fail_timeout=30s;
|
|
404
|
+
server backend2.example.com max_fails=3 fail_timeout=30s;
|
|
405
|
+
server backend3.example.com max_fails=3 fail_timeout=30s;
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
## SSL/TLS Termination
|
|
410
|
+
|
|
411
|
+
### HAProxy SSL Termination
|
|
412
|
+
|
|
413
|
+
```haproxy
|
|
414
|
+
global
|
|
415
|
+
maxconn 4096
|
|
416
|
+
tune.ssl.default-dh-param 2048
|
|
417
|
+
|
|
418
|
+
frontend https_frontend
|
|
419
|
+
bind *:443 ssl crt /etc/haproxy/certs/site.pem alpn h2,http/1.1
|
|
420
|
+
|
|
421
|
+
# Security headers
|
|
422
|
+
http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
|
423
|
+
http-response set-header X-Frame-Options "SAMEORIGIN"
|
|
424
|
+
http-response set-header X-Content-Type-Options "nosniff"
|
|
425
|
+
|
|
426
|
+
# Redirect HTTP to HTTPS
|
|
427
|
+
redirect scheme https code 301 if !{ ssl_fc }
|
|
428
|
+
|
|
429
|
+
default_backend app_servers
|
|
430
|
+
|
|
431
|
+
backend app_servers
|
|
432
|
+
balance roundrobin
|
|
433
|
+
option httpchk GET /health
|
|
434
|
+
http-check expect status 200
|
|
435
|
+
|
|
436
|
+
server app1 10.0.1.10:8080 check
|
|
437
|
+
server app2 10.0.1.11:8080 check
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
### Nginx SSL Termination
|
|
441
|
+
|
|
442
|
+
```nginx
|
|
443
|
+
server {
|
|
444
|
+
listen 443 ssl http2;
|
|
445
|
+
server_name app.example.com;
|
|
446
|
+
|
|
447
|
+
ssl_certificate /etc/nginx/ssl/cert.pem;
|
|
448
|
+
ssl_certificate_key /etc/nginx/ssl/key.pem;
|
|
449
|
+
|
|
450
|
+
# Modern SSL configuration
|
|
451
|
+
ssl_protocols TLSv1.2 TLSv1.3;
|
|
452
|
+
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
|
|
453
|
+
ssl_prefer_server_ciphers off;
|
|
454
|
+
|
|
455
|
+
ssl_session_cache shared:SSL:10m;
|
|
456
|
+
ssl_session_timeout 10m;
|
|
457
|
+
ssl_stapling on;
|
|
458
|
+
ssl_stapling_verify on;
|
|
459
|
+
|
|
460
|
+
add_header Strict-Transport-Security "max-age=31536000" always;
|
|
461
|
+
|
|
462
|
+
location / {
|
|
463
|
+
proxy_pass http://backend;
|
|
464
|
+
proxy_set_header Host $host;
|
|
465
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
466
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
467
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
## Session Persistence
|
|
473
|
+
|
|
474
|
+
### Cookie-Based Persistence
|
|
475
|
+
|
|
476
|
+
```haproxy
|
|
477
|
+
backend app_servers
|
|
478
|
+
balance roundrobin
|
|
479
|
+
|
|
480
|
+
# Insert cookie for session stickiness
|
|
481
|
+
cookie SERVERID insert indirect nocache
|
|
482
|
+
|
|
483
|
+
server app1 10.0.1.10:8080 check cookie app1
|
|
484
|
+
server app2 10.0.1.11:8080 check cookie app2
|
|
485
|
+
server app3 10.0.1.12:8080 check cookie app3
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### Application-Controlled Sessions
|
|
489
|
+
|
|
490
|
+
```nginx
|
|
491
|
+
upstream backend {
|
|
492
|
+
hash $cookie_session_id consistent;
|
|
493
|
+
|
|
494
|
+
server backend1.example.com;
|
|
495
|
+
server backend2.example.com;
|
|
496
|
+
server backend3.example.com;
|
|
497
|
+
}
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
## Cloud Load Balancers
|
|
501
|
+
|
|
502
|
+
### AWS Load Balancer Comparison
|
|
503
|
+
|
|
504
|
+
```
|
|
505
|
+
Feature ALB NLB GLB
|
|
506
|
+
Layer 7 4 4
|
|
507
|
+
Protocol HTTP/HTTPS TCP/UDP/TLS Any IP
|
|
508
|
+
Routing Content Connection Network
|
|
509
|
+
Static IP No Yes No
|
|
510
|
+
PrivateLink Yes Yes No
|
|
511
|
+
WebSocket Yes Yes No
|
|
512
|
+
gRPC Yes Yes No
|
|
513
|
+
Lambda Target Yes No No
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
### GCP Load Balancer
|
|
517
|
+
|
|
518
|
+
```yaml
|
|
519
|
+
# GCP HTTP(S) Load Balancer via Terraform
|
|
520
|
+
resource "google_compute_global_forwarding_rule" "https" {
|
|
521
|
+
name = "app-https-forwarding-rule"
|
|
522
|
+
target = google_compute_target_https_proxy.default.id
|
|
523
|
+
port_range = "443"
|
|
524
|
+
ip_address = google_compute_global_address.default.address
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
resource "google_compute_target_https_proxy" "default" {
|
|
528
|
+
name = "app-https-proxy"
|
|
529
|
+
url_map = google_compute_url_map.default.id
|
|
530
|
+
ssl_certificates = [google_compute_ssl_certificate.default.id]
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
resource "google_compute_url_map" "default" {
|
|
534
|
+
name = "app-url-map"
|
|
535
|
+
default_service = google_compute_backend_service.default.id
|
|
536
|
+
|
|
537
|
+
host_rule {
|
|
538
|
+
hosts = ["app.example.com"]
|
|
539
|
+
path_matcher = "allpaths"
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
path_matcher {
|
|
543
|
+
name = "allpaths"
|
|
544
|
+
default_service = google_compute_backend_service.default.id
|
|
545
|
+
|
|
546
|
+
path_rule {
|
|
547
|
+
paths = ["/api/v2/*"]
|
|
548
|
+
service = google_compute_backend_service.api_v2.id
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
resource "google_compute_backend_service" "default" {
|
|
554
|
+
name = "app-backend-service"
|
|
555
|
+
protocol = "HTTP"
|
|
556
|
+
timeout_sec = 30
|
|
557
|
+
health_checks = [google_compute_health_check.default.id]
|
|
558
|
+
|
|
559
|
+
backend {
|
|
560
|
+
group = google_compute_instance_group.us_central1.id
|
|
561
|
+
balancing_mode = "UTILIZATION"
|
|
562
|
+
capacity_scaler = 1.0
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
backend {
|
|
566
|
+
group = google_compute_instance_group.us_east1.id
|
|
567
|
+
balancing_mode = "UTILIZATION"
|
|
568
|
+
capacity_scaler = 1.0
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
log_config {
|
|
572
|
+
enable = true
|
|
573
|
+
sample_rate = 1.0
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
resource "google_compute_health_check" "default" {
|
|
578
|
+
name = "app-health-check"
|
|
579
|
+
check_interval_sec = 10
|
|
580
|
+
timeout_sec = 5
|
|
581
|
+
healthy_threshold = 2
|
|
582
|
+
unhealthy_threshold = 3
|
|
583
|
+
|
|
584
|
+
http_health_check {
|
|
585
|
+
port = 8080
|
|
586
|
+
request_path = "/health"
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
## HAProxy Configuration
|
|
592
|
+
|
|
593
|
+
```haproxy
|
|
594
|
+
global
|
|
595
|
+
log /dev/log local0
|
|
596
|
+
maxconn 4096
|
|
597
|
+
user haproxy
|
|
598
|
+
group haproxy
|
|
599
|
+
daemon
|
|
600
|
+
|
|
601
|
+
# SSL settings
|
|
602
|
+
ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
|
|
603
|
+
ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
|
|
604
|
+
|
|
605
|
+
stats socket /run/haproxy/admin.sock mode 660 level admin
|
|
606
|
+
stats timeout 30s
|
|
607
|
+
|
|
608
|
+
defaults
|
|
609
|
+
log global
|
|
610
|
+
mode http
|
|
611
|
+
option httplog
|
|
612
|
+
option dontlognull
|
|
613
|
+
option http-server-close
|
|
614
|
+
option forwardfor except 127.0.0.0/8
|
|
615
|
+
option redispatch
|
|
616
|
+
retries 3
|
|
617
|
+
timeout connect 5000
|
|
618
|
+
timeout client 50000
|
|
619
|
+
timeout server 50000
|
|
620
|
+
errorfile 400 /etc/haproxy/errors/400.http
|
|
621
|
+
errorfile 403 /etc/haproxy/errors/403.http
|
|
622
|
+
errorfile 408 /etc/haproxy/errors/408.http
|
|
623
|
+
errorfile 500 /etc/haproxy/errors/500.http
|
|
624
|
+
errorfile 502 /etc/haproxy/errors/502.http
|
|
625
|
+
errorfile 503 /etc/haproxy/errors/503.http
|
|
626
|
+
errorfile 504 /etc/haproxy/errors/504.http
|
|
627
|
+
|
|
628
|
+
frontend stats
|
|
629
|
+
bind *:8404
|
|
630
|
+
stats enable
|
|
631
|
+
stats uri /stats
|
|
632
|
+
stats refresh 10s
|
|
633
|
+
stats auth admin:password
|
|
634
|
+
|
|
635
|
+
frontend http_frontend
|
|
636
|
+
bind *:80
|
|
637
|
+
redirect scheme https code 301
|
|
638
|
+
|
|
639
|
+
frontend https_frontend
|
|
640
|
+
bind *:443 ssl crt /etc/haproxy/certs/
|
|
641
|
+
|
|
642
|
+
# Rate limiting
|
|
643
|
+
stick-table type ip size 100k expire 30s store http_req_rate(10s)
|
|
644
|
+
http-request track-sc0 src
|
|
645
|
+
http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
|
|
646
|
+
|
|
647
|
+
# ACLs for routing
|
|
648
|
+
acl is_api path_beg /api
|
|
649
|
+
acl is_admin path_beg /admin
|
|
650
|
+
acl is_static path_end .jpg .png .css .js
|
|
651
|
+
|
|
652
|
+
use_backend api_servers if is_api
|
|
653
|
+
use_backend admin_servers if is_admin
|
|
654
|
+
use_backend static_servers if is_static
|
|
655
|
+
default_backend app_servers
|
|
656
|
+
|
|
657
|
+
backend app_servers
|
|
658
|
+
balance roundrobin
|
|
659
|
+
option httpchk GET /health HTTP/1.1\r\nHost:\ localhost
|
|
660
|
+
http-check expect status 200
|
|
661
|
+
|
|
662
|
+
server app1 10.0.1.10:8080 check inter 2s rise 2 fall 3 maxconn 1000
|
|
663
|
+
server app2 10.0.1.11:8080 check inter 2s rise 2 fall 3 maxconn 1000
|
|
664
|
+
server app3 10.0.1.12:8080 check inter 2s rise 2 fall 3 maxconn 1000
|
|
665
|
+
|
|
666
|
+
backend api_servers
|
|
667
|
+
balance leastconn
|
|
668
|
+
option httpchk GET /api/health
|
|
669
|
+
|
|
670
|
+
server api1 10.0.2.10:8080 check
|
|
671
|
+
server api2 10.0.2.11:8080 check
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
## Nginx Load Balancing
|
|
675
|
+
|
|
676
|
+
```nginx
|
|
677
|
+
http {
|
|
678
|
+
upstream backend {
|
|
679
|
+
least_conn;
|
|
680
|
+
|
|
681
|
+
server backend1.example.com:8080 max_fails=3 fail_timeout=30s;
|
|
682
|
+
server backend2.example.com:8080 max_fails=3 fail_timeout=30s;
|
|
683
|
+
server backend3.example.com:8080 max_fails=3 fail_timeout=30s;
|
|
684
|
+
|
|
685
|
+
# Backup server
|
|
686
|
+
server backup.example.com:8080 backup;
|
|
687
|
+
|
|
688
|
+
keepalive 32;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
upstream api_backend {
|
|
692
|
+
hash $request_uri consistent;
|
|
693
|
+
|
|
694
|
+
server api1.example.com:8080;
|
|
695
|
+
server api2.example.com:8080;
|
|
696
|
+
|
|
697
|
+
keepalive 32;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
server {
|
|
701
|
+
listen 80;
|
|
702
|
+
server_name app.example.com;
|
|
703
|
+
return 301 https://$server_name$request_uri;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
server {
|
|
707
|
+
listen 443 ssl http2;
|
|
708
|
+
server_name app.example.com;
|
|
709
|
+
|
|
710
|
+
ssl_certificate /etc/nginx/ssl/cert.pem;
|
|
711
|
+
ssl_certificate_key /etc/nginx/ssl/key.pem;
|
|
712
|
+
|
|
713
|
+
location / {
|
|
714
|
+
proxy_pass http://backend;
|
|
715
|
+
proxy_http_version 1.1;
|
|
716
|
+
proxy_set_header Connection "";
|
|
717
|
+
proxy_set_header Host $host;
|
|
718
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
719
|
+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
720
|
+
proxy_set_header X-Forwarded-Proto $scheme;
|
|
721
|
+
|
|
722
|
+
# Timeouts
|
|
723
|
+
proxy_connect_timeout 60s;
|
|
724
|
+
proxy_send_timeout 60s;
|
|
725
|
+
proxy_read_timeout 60s;
|
|
726
|
+
|
|
727
|
+
# Buffering
|
|
728
|
+
proxy_buffering on;
|
|
729
|
+
proxy_buffer_size 4k;
|
|
730
|
+
proxy_buffers 8 4k;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
location /api/ {
|
|
734
|
+
proxy_pass http://api_backend;
|
|
735
|
+
proxy_http_version 1.1;
|
|
736
|
+
proxy_set_header Connection "";
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
location /health {
|
|
740
|
+
access_log off;
|
|
741
|
+
return 200 "healthy\n";
|
|
742
|
+
add_header Content-Type text/plain;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
}
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
## Kubernetes Ingress
|
|
749
|
+
|
|
750
|
+
```yaml
|
|
751
|
+
apiVersion: networking.k8s.io/v1
|
|
752
|
+
kind: Ingress
|
|
753
|
+
metadata:
|
|
754
|
+
name: app-ingress
|
|
755
|
+
annotations:
|
|
756
|
+
kubernetes.io/ingress.class: nginx
|
|
757
|
+
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
758
|
+
nginx.ingress.kubernetes.io/rate-limit: "100"
|
|
759
|
+
nginx.ingress.kubernetes.io/ssl-redirect: "true"
|
|
760
|
+
nginx.ingress.kubernetes.io/use-regex: "true"
|
|
761
|
+
nginx.ingress.kubernetes.io/affinity: "cookie"
|
|
762
|
+
nginx.ingress.kubernetes.io/session-cookie-name: "route"
|
|
763
|
+
nginx.ingress.kubernetes.io/session-cookie-max-age: "86400"
|
|
764
|
+
spec:
|
|
765
|
+
tls:
|
|
766
|
+
- hosts:
|
|
767
|
+
- app.example.com
|
|
768
|
+
secretName: app-tls
|
|
769
|
+
rules:
|
|
770
|
+
- host: app.example.com
|
|
771
|
+
http:
|
|
772
|
+
paths:
|
|
773
|
+
- path: /api/v1
|
|
774
|
+
pathType: Prefix
|
|
775
|
+
backend:
|
|
776
|
+
service:
|
|
777
|
+
name: api-v1
|
|
778
|
+
port:
|
|
779
|
+
number: 8080
|
|
780
|
+
- path: /api/v2
|
|
781
|
+
pathType: Prefix
|
|
782
|
+
backend:
|
|
783
|
+
service:
|
|
784
|
+
name: api-v2
|
|
785
|
+
port:
|
|
786
|
+
number: 8080
|
|
787
|
+
- path: /
|
|
788
|
+
pathType: Prefix
|
|
789
|
+
backend:
|
|
790
|
+
service:
|
|
791
|
+
name: frontend
|
|
792
|
+
port:
|
|
793
|
+
number: 80
|
|
794
|
+
```
|
|
795
|
+
|
|
796
|
+
## Best Practices
|
|
797
|
+
|
|
798
|
+
1. **Always use health checks** - Detect and remove unhealthy instances
|
|
799
|
+
2. **Enable connection draining** - Allow in-flight requests to complete
|
|
800
|
+
3. **Use SSL/TLS termination** - Offload encryption from backends
|
|
801
|
+
4. **Implement rate limiting** - Protect against abuse and DDoS
|
|
802
|
+
5. **Enable access logs** - Debug issues and analyze traffic patterns
|
|
803
|
+
6. **Use appropriate timeouts** - Prevent resource exhaustion
|
|
804
|
+
7. **Configure proper session persistence** - When stateful sessions required
|
|
805
|
+
8. **Enable monitoring and metrics** - Track performance and errors
|
|
806
|
+
9. **Use multiple availability zones** - Ensure high availability
|
|
807
|
+
10. **Test failover regularly** - Verify redundancy works
|
|
808
|
+
|
|
809
|
+
## Anti-Patterns
|
|
810
|
+
|
|
811
|
+
- **Single load balancer** - Creates single point of failure
|
|
812
|
+
- **No health checks** - Sends traffic to failed instances
|
|
813
|
+
- **Overly aggressive health checks** - Can overload backends
|
|
814
|
+
- **No SSL/TLS** - Exposes traffic to interception
|
|
815
|
+
- **Hard-coded server IPs** - Makes scaling difficult
|
|
816
|
+
- **Insufficient connection limits** - Can exhaust resources
|
|
817
|
+
- **No monitoring** - Can't detect issues
|
|
818
|
+
- **Same health check and application port** - Can give false positives
|
|
819
|
+
- **No timeout configuration** - Leads to resource leaks
|
|
820
|
+
- **Ignoring connection draining** - Causes dropped requests during deployments
|