Horizontal Scaling in Go Applications
Overview
Horizontal scaling—adding more instances to handle increased load—is a fundamental strategy for building resilient, high-performance Go applications. This chapter provides practical guidance for implementing horizontal scaling in production environments.
Learning Objectives
By the end of this chapter, you will understand:
- Core horizontal scaling concepts and when to apply them
- Load distribution strategies for Go services
- Service discovery patterns in distributed Go applications
- Auto-scaling implementation with practical Go examples
- Monitoring and metrics essential for scaling decisions
- Common pitfalls and how to avoid them
When to Scale Horizontally
Indicators You Need Horizontal Scaling
Traffic Patterns:
- Request volume exceeds single-instance capacity
- Geographic distribution requires edge presence
- Peak traffic creates temporary bottlenecks
Resource Constraints:
- CPU utilization consistently above 70-80%
- Memory pressure affects response times
- Network bandwidth becomes a limiting factor
Availability Requirements:
- Single points of failure are unacceptable
- Maintenance windows must be transparent to users
- Disaster recovery requires geographic distribution
Go-Specific Considerations
Go applications are particularly well-suited for horizontal scaling due to:
- Stateless design patterns: Goroutines and channels encourage stateless architectures
- Fast startup times: Quick instance provisioning and deployment
- Low memory footprint: Cost-effective scaling compared to other languages
- Built-in concurrency: Efficient handling of concurrent requests per instance
Practical Scaling Implementation
Basic Horizontal Scaling Pattern
Let's start with a simple example of a scalable Go service:
package main
import (
"context"
"fmt"
"log"
"net/http"
"os"
"os/signal"
"sync"
"time"
)
// ScalableService represents a horizontally scalable Go service
type ScalableService struct {
port string
instanceID string
registry ServiceRegistry
handler *ServiceHandler
}
// ServiceRegistry handles service discovery
type ServiceRegistry interface {
Register(instanceID, address string) error
Deregister(instanceID string) error
Discover(serviceName string) ([]string, error)
HealthCheck(instanceID string) error
}
// ServiceHandler processes business logic
type ServiceHandler struct {
requestCount int64
mu sync.RWMutex
}
func NewScalableService(port, instanceID string) *ScalableService {
return &ScalableService{
port: port,
instanceID: instanceID,
registry: NewConsulRegistry(), // Example: Consul for service discovery
handler: &ServiceHandler{},
}
}
func (s *ScalableService) Start(ctx context.Context) error {
// Register with service discovery
address := fmt.Sprintf("localhost:%s", s.port)
if err := s.registry.Register(s.instanceID, address); err != nil {
return fmt.Errorf("failed to register service: %w", err)
}
// Setup HTTP handlers
mux := http.NewServeMux()
mux.HandleFunc("/health", s.healthHandler)
mux.HandleFunc("/api/process", s.processHandler)
mux.HandleFunc("/metrics", s.metricsHandler)
// Configure server
server := &http.Server{
Addr: ":" + s.port,
Handler: mux,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
}
// Graceful shutdown handling
go func() {
<-ctx.Done()
log.Printf("Shutting down instance %s", s.instanceID)
// Deregister from service discovery
s.registry.Deregister(s.instanceID)
// Shutdown server
shutdownCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
server.Shutdown(shutdownCtx)
}()
log.Printf("Starting instance %s on port %s", s.instanceID, s.port)
return server.ListenAndServe()
}
func (s *ScalableService) healthHandler(w http.ResponseWriter, r *http.Request) {
// Health check endpoint for load balancers
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, `{"status":"healthy","instance":"%s","timestamp":"%s"}`,
s.instanceID, time.Now().Format(time.RFC3339))
}
func (s *ScalableService) processHandler(w http.ResponseWriter, r *http.Request) {
// Increment request counter (thread-safe)
s.handler.mu.Lock()
s.handler.requestCount++
current := s.handler.requestCount
s.handler.mu.Unlock()
// Simulate processing work
time.Sleep(time.Millisecond * 10)
// Return response with instance information
response := map[string]interface{}{
"instance": s.instanceID,
"request_id": current,
"processed_at": time.Now().Format(time.RFC3339),
"result": "success",
}
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"instance":"%s","request_id":%d,"processed_at":"%s","result":"success"}`,
s.instanceID, current, time.Now().Format(time.RFC3339))
}
func (s *ScalableService) metricsHandler(w http.ResponseWriter, r *http.Request) {
s.handler.mu.RLock()
count := s.handler.requestCount
s.handler.mu.RUnlock()
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, `{"instance":"%s","total_requests":%d,"uptime":"%s"}`,
s.instanceID, count, time.Since(startTime).String())
}
var startTime = time.Now()
// Example usage
func main() {
// Get instance configuration from environment
port := os.Getenv("PORT")
if port == "" {
port = "8080"
}
instanceID := os.Getenv("INSTANCE_ID")
if instanceID == "" {
instanceID = fmt.Sprintf("instance-%d", time.Now().Unix())
}
// Create and start service
service := NewScalableService(port, instanceID)
// Setup graceful shutdown
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
// Start service
if err := service.Start(ctx); err != nil && err != http.ErrServerClosed {
log.Fatalf("Service failed: %v", err)
}
log.Println("Service stopped gracefully")
}
// Mock service registry for example
type ConsulRegistry struct{}
func NewConsulRegistry() *ConsulRegistry {
return &ConsulRegistry{}
}
func (c *ConsulRegistry) Register(instanceID, address string) error {
log.Printf("Registering %s at %s", instanceID, address)
return nil
}
func (c *ConsulRegistry) Deregister(instanceID string) error {
log.Printf("Deregistering %s", instanceID)
return nil
}
func (c *ConsulRegistry) Discover(serviceName string) ([]string, error) {
return []string{"localhost:8080", "localhost:8081"}, nil
}
func (c *ConsulRegistry) HealthCheck(instanceID string) error {
return nil
}
Running Multiple Instances
To test horizontal scaling locally, run multiple instances:
# Terminal 1
PORT=8080 INSTANCE_ID=web-1 go run main.go
# Terminal 2
PORT=8081 INSTANCE_ID=web-2 go run main.go
# Terminal 3
PORT=8082 INSTANCE_ID=web-3 go run main.go
Load Testing the Scaled Setup
# Test individual instances
curl http://localhost:8080/api/process
curl http://localhost:8081/api/process
curl http://localhost:8082/api/process
# Check health endpoints
curl http://localhost:8080/health
curl http://localhost:8081/health
# Monitor metrics
curl http://localhost:8080/metrics
Load Balancing Strategies
Round Robin Load Balancer
package main
import (
"fmt"
"net/http"
"net/http/httputil"
"net/url"
"sync/atomic"
)
// RoundRobinBalancer implements round-robin load balancing
type RoundRobinBalancer struct {
backends []*Backend
current uint64
}
type Backend struct {
URL *url.URL
Proxy *httputil.ReverseProxy
Healthy bool
}
func NewRoundRobinBalancer(backendURLs []string) *RoundRobinBalancer {
backends := make([]*Backend, len(backendURLs))
for i, urlStr := range backendURLs {
url, _ := url.Parse(urlStr)
backends[i] = &Backend{
URL: url,
Proxy: httputil.NewSingleHostReverseProxy(url),
Healthy: true,
}
}
return &RoundRobinBalancer{backends: backends}
}
func (rb *RoundRobinBalancer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
backend := rb.nextBackend()
if backend == nil {
http.Error(w, "No healthy backends", http.StatusServiceUnavailable)
return
}
backend.Proxy.ServeHTTP(w, r)
}
func (rb *RoundRobinBalancer) nextBackend() *Backend {
next := atomic.AddUint64(&rb.current, 1)
return rb.backends[next%uint64(len(rb.backends))]
}
// Example usage
func ExampleLoadBalancer() {
backends := []string{
"http://localhost:8080",
"http://localhost:8081",
"http://localhost:8082",
}
balancer := NewRoundRobinBalancer(backends)
http.Handle("/", balancer)
fmt.Println("Load balancer starting on :9000")
http.ListenAndServe(":9000", nil)
}
alertManager *AlertManager
costOptimizer *CostOptimizer
mu sync.RWMutex
activeInstances map[string]*ServiceInstance
scalingOperations map[string]*ScalingOperation
}
// HorizontalScalingConfig contains horizontal scaling configuration type HorizontalScalingConfig struct { ServiceConfig ServiceConfig InstanceConfig InstanceConfig LoadBalancingConfig LoadBalancingConfig AutoScalingConfig AutoScalingConfig PlacementConfig PlacementConfig NetworkConfig NetworkConfig StorageConfig StorageConfig SecurityConfig SecurityConfig MonitoringConfig MonitoringConfig HealthCheckConfig HealthCheckConfig DeploymentConfig DeploymentConfig CostConfig CostConfig ComplianceConfig ComplianceConfig PerformanceConfig PerformanceConfig ReliabilityConfig ReliabilityConfig }
// ServiceConfig contains service configuration type ServiceConfig struct { Name string Version string Image string Ports []ServicePort Environment map[string]string Secrets []SecretMount ConfigMaps []ConfigMount Volumes []VolumeMount Resources ResourceRequirements Probes HealthProbes Affinity AffinityRules Tolerations []Toleration SecurityContext SecurityContext ServiceAccount string Annotations map[string]string Labels map[string]string }
// ServicePort defines service ports type ServicePort struct { Name string Port int TargetPort int Protocol PortProtocol NodePort int }
// PortProtocol defines port protocols type PortProtocol int
const ( TCPProtocol PortProtocol = iota UDPProtocol HTTPProtocol HTTPSProtocol GRPCProtocol )
// SecretMount defines secret mounts type SecretMount struct { Name string MountPath string SubPath string ReadOnly bool Optional bool }
// ConfigMount defines config mounts type ConfigMount struct { Name string MountPath string SubPath string ReadOnly bool Optional bool }
// VolumeMount defines volume mounts type VolumeMount struct { Name string MountPath string SubPath string ReadOnly bool Type VolumeType Source VolumeSource }
// VolumeType defines volume types type VolumeType int
const ( EmptyDirVolume VolumeType = iota HostPathVolume PersistentVolume ConfigMapVolume SecretVolume NetworkVolume )
// VolumeSource defines volume sources type VolumeSource struct { Type SourceType Path string Server string Share string Options map[string]string ReadOnly bool Size string AccessMode AccessMode }
// SourceType defines source types type SourceType int
const ( LocalSource SourceType = iota NFSSource CIFSSource ISCSISource CloudSource )
// AccessMode defines access modes type AccessMode int
const ( ReadWriteOnce AccessMode = iota ReadOnlyMany ReadWriteMany ReadWriteOncePod )
// ResourceRequirements defines resource requirements type ResourceRequirements struct { Requests ResourceSpec Limits ResourceSpec Claims []ResourceClaim }
// ResourceSpec defines resource specifications type ResourceSpec struct { CPU string Memory string Storage string GPU string Custom map[string]string }
// ResourceClaim defines resource claims type ResourceClaim struct { Name string Type ResourceType Amount string Priority int }
// ResourceType defines resource types type ResourceType int
const ( CPUResource ResourceType = iota MemoryResource StorageResource NetworkResource GPUResource CustomResource )
// HealthProbes defines health probes type HealthProbes struct { Liveness ProbeConfig Readiness ProbeConfig Startup ProbeConfig }
// ProbeConfig contains probe configuration type ProbeConfig struct { Enabled bool Type ProbeType Path string Port int Headers map[string]string Command []string InitialDelaySeconds int PeriodSeconds int TimeoutSeconds int SuccessThreshold int FailureThreshold int GracePeriodSeconds int }
// ProbeType defines probe types type ProbeType int
const ( HTTPProbe ProbeType = iota TCPProbe ExecProbe GRPCProbe )
// AffinityRules defines affinity rules type AffinityRules struct { NodeAffinity NodeAffinity PodAffinity PodAffinity PodAntiAffinity PodAntiAffinity }
// NodeAffinity defines node affinity type NodeAffinity struct { Required []NodeSelector Preferred []PreferredNodeSelector }
// NodeSelector defines node selectors type NodeSelector struct { MatchExpressions []MatchExpression MatchFields []MatchField }
// MatchExpression defines match expressions type MatchExpression struct { Key string Operator MatchOperator Values []string }
// MatchOperator defines match operators type MatchOperator int
const ( InOperator MatchOperator = iota NotInOperator ExistsOperator DoesNotExistOperator GreaterThanOperator LessThanOperator )
// MatchField defines match fields type MatchField struct { Key string Operator MatchOperator Values []string }
// PreferredNodeSelector defines preferred node selectors type PreferredNodeSelector struct { Weight int Preference NodeSelector }
// PodAffinity defines pod affinity type PodAffinity struct { Required []PodAffinityTerm Preferred []WeightedPodAffinityTerm }
// PodAffinityTerm defines pod affinity terms type PodAffinityTerm struct { LabelSelector LabelSelector NamespaceSelector LabelSelector Namespaces []string TopologyKey string MatchLabelKeys []string MismatchLabelKeys []string }
// LabelSelector defines label selectors type LabelSelector struct { MatchLabels map[string]string MatchExpressions []MatchExpression }
// WeightedPodAffinityTerm defines weighted pod affinity terms type WeightedPodAffinityTerm struct { Weight int PodAffinityTerm PodAffinityTerm }
// PodAntiAffinity defines pod anti-affinity type PodAntiAffinity struct { Required []PodAffinityTerm Preferred []WeightedPodAffinityTerm }
// Toleration defines tolerations type Toleration struct { Key string Operator TolerationOperator Value string Effect TaintEffect TolerationSeconds *int64 }
// TolerationOperator defines toleration operators type TolerationOperator int
const ( EqualToleration TolerationOperator = iota ExistsToleration )
// TaintEffect defines taint effects type TaintEffect int
const ( NoScheduleEffect TaintEffect = iota PreferNoScheduleEffect NoExecuteEffect )
// SecurityContext defines security context type SecurityContext struct { RunAsUser int64 RunAsGroup int64 RunAsNonRoot bool ReadOnlyRootFilesystem bool AllowPrivilegeEscalation bool Privileged bool Capabilities Capabilities SELinuxOptions SELinuxOptions SeccompProfile SeccompProfile SupplementalGroups []int64 FSGroup *int64 FSGroupChangePolicy FSGroupChangePolicy }
// Capabilities defines capabilities type Capabilities struct { Add []Capability Drop []Capability }
// Capability defines capabilities type Capability string
const ( SysAdminCapability Capability = "SYS_ADMIN" NetAdminCapability Capability = "NET_ADMIN" SysTimeCapability Capability = "SYS_TIME" ChownCapability Capability = "CHOWN" DacOverrideCapability Capability = "DAC_OVERRIDE" )
// SELinuxOptions defines SELinux options type SELinuxOptions struct { User string Role string Type string Level string }
// SeccompProfile defines seccomp profiles type SeccompProfile struct { Type SeccompProfileType LocalhostProfile string }
// SeccompProfileType defines seccomp profile types type SeccompProfileType int
const ( RuntimeDefaultSeccomp SeccompProfileType = iota UnconfinedSeccomp LocalhostSeccomp )
// FSGroupChangePolicy defines FS group change policies type FSGroupChangePolicy int
const ( AlwaysFSGroupChangePolicy FSGroupChangePolicy = iota OnRootMismatchFSGroupChangePolicy )
// InstanceConfig contains instance configuration type InstanceConfig struct { Template InstanceTemplate Scaling ScalingConfig Placement PlacementConfig Networking NetworkingConfig Storage StorageConfig Security SecurityConfig Monitoring MonitoringConfig Lifecycle LifecycleConfig Recovery RecoveryConfig Backup BackupConfig Updates UpdateConfig Compliance ComplianceConfig }
// InstanceTemplate defines instance templates type InstanceTemplate struct { Type InstanceType Image ImageConfig Resources ResourceRequirements Environment EnvironmentConfig Configuration ConfigurationConfig Networking NetworkingConfig Storage StorageConfig Security SecurityConfig Monitoring MonitoringConfig Metadata map[string]string Labels map[string]string Annotations map[string]string }
// InstanceType defines instance types type InstanceType int
const ( ContainerInstance InstanceType = iota VirtualMachineInstance BareMetalInstance ServerlessInstance EdgeInstance )
// ImageConfig contains image configuration type ImageConfig struct { Registry string Repository string Tag string Digest string PullPolicy ImagePullPolicy PullSecrets []string Verification ImageVerification }
// ImagePullPolicy defines image pull policies type ImagePullPolicy int
const ( AlwaysPull ImagePullPolicy = iota IfNotPresentPull NeverPull )
// ImageVerification contains image verification configuration type ImageVerification struct { Enabled bool Signatures []SignatureConfig Policies []VerificationPolicy Trust TrustConfig }
// SignatureConfig contains signature configuration type SignatureConfig struct { Type SignatureType PublicKey string Keyring string Issuer string }
// SignatureType defines signature types type SignatureType int
const ( PGPSignature SignatureType = iota X509Signature CosignSignature NotarySignature )
// VerificationPolicy defines verification policies type VerificationPolicy struct { Type PolicyType Rules []PolicyRule Action PolicyAction Severity PolicySeverity }
// PolicyType defines policy types type PolicyType int
const ( SecurityPolicy PolicyType = iota CompliancePolicy QualityPolicy BusinessPolicy )
// PolicyRule defines policy rules type PolicyRule struct { Name string Condition string Action PolicyAction Message string }
// PolicyAction defines policy actions type PolicyAction int
const ( AllowAction PolicyAction = iota DenyAction WarnAction AuditAction )
// PolicySeverity defines policy severity type PolicySeverity int
const ( LowSeverity PolicySeverity = iota MediumSeverity HighSeverity CriticalSeverity )
// TrustConfig contains trust configuration type TrustConfig struct { Enabled bool Registries []TrustedRegistry Policies []TrustPolicy Delegation TrustDelegation }
// TrustedRegistry defines trusted registries type TrustedRegistry struct { Name string URL string Certificate string PublicKey string Trusted bool }
// TrustPolicy defines trust policies type TrustPolicy struct { Name string Scope string Keys []string Threshold int Expiry time.Time }
// TrustDelegation contains trust delegation configuration type TrustDelegation struct { Enabled bool Roles []DelegationRole Keys []DelegationKey }
// DelegationRole defines delegation roles type DelegationRole struct { Name string Paths []string Keys []string Threshold int }
// DelegationKey defines delegation keys type DelegationKey struct { ID string Type KeyType PublicKey string Role string }
// KeyType defines key types type KeyType int
const ( RSAKey KeyType = iota ECDSAKey Ed25519Key )
// EnvironmentConfig contains environment configuration type EnvironmentConfig struct { Variables []EnvironmentVariable Secrets []SecretReference ConfigMaps []ConfigMapReference Files []FileMount Init InitConfig }
// EnvironmentVariable defines environment variables type EnvironmentVariable struct { Name string Value string ValueFrom ValueSource Required bool }
// ValueSource defines value sources type ValueSource struct { SecretKeyRef SecretKeySelector ConfigMapKeyRef ConfigMapKeySelector FieldRef FieldSelector ResourceFieldRef ResourceFieldSelector }
// SecretKeySelector defines secret key selectors type SecretKeySelector struct { Name string Key string Optional bool }
// ConfigMapKeySelector defines config map key selectors type ConfigMapKeySelector struct { Name string Key string Optional bool }
// FieldSelector defines field selectors type FieldSelector struct { FieldPath string APIVersion string }
// ResourceFieldSelector defines resource field selectors type ResourceFieldSelector struct { ContainerName string Resource string Divisor string }
// SecretReference defines secret references type SecretReference struct { Name string Namespace string Keys []string Optional bool }
// ConfigMapReference defines config map references type ConfigMapReference struct { Name string Namespace string Keys []string Optional bool }
// FileMount defines file mounts type FileMount struct { Source string Destination string Mode int Owner string Group string Content string Template bool }
// InitConfig contains initialization configuration type InitConfig struct { Enabled bool Commands []string Scripts []string Timeout time.Duration FailureMode FailureMode }
// FailureMode defines failure modes type FailureMode int
const ( FailFast FailureMode = iota Continue Retry Ignore )
// ConfigurationConfig contains configuration management type ConfigurationConfig struct { Source ConfigSource Format ConfigFormat Validation ConfigValidation Reload ConfigReload Encryption ConfigEncryption Versioning ConfigVersioning }
// ConfigSource defines configuration sources type ConfigSource struct { Type SourceType Location string Credentials CredentialConfig Polling PollingConfig Watch WatchConfig }
// CredentialConfig contains credential configuration type CredentialConfig struct { Type CredentialType Config map[string]string }
// CredentialType defines credential types type CredentialType int
const ( NoCredentials CredentialType = iota BasicCredentials TokenCredentials CertificateCredentials OAuthCredentials APIKeyCredentials )
// PollingConfig contains polling configuration type PollingConfig struct { Enabled bool Interval time.Duration Timeout time.Duration Jitter time.Duration }
// WatchConfig contains watch configuration type WatchConfig struct { Enabled bool Events []string Debounce time.Duration Reconnect ReconnectConfig }
// ReconnectConfig contains reconnect configuration type ReconnectConfig struct { Enabled bool MaxRetries int Delay time.Duration Backoff BackoffStrategy }
// BackoffStrategy defines backoff strategies type BackoffStrategy int
const ( FixedBackoff BackoffStrategy = iota LinearBackoff ExponentialBackoff RandomBackoff )
// ConfigFormat defines configuration formats type ConfigFormat int
const ( JSONFormat ConfigFormat = iota YAMLFormat TOMLFormat INIFormat PropertiesFormat XMLFormat )
// ConfigValidation contains configuration validation type ConfigValidation struct { Enabled bool Schema string Rules []ValidationRule Strict bool }
// ValidationRule defines validation rules type ValidationRule struct { Path string Type RuleType Condition string Message string Severity ValidationSeverity }
// RuleType defines rule types type RuleType int
const ( RequiredRule RuleType = iota TypeRule RangeRule PatternRule CustomRule )
// ConfigReload contains configuration reload settings type ConfigReload struct { Enabled bool Strategy ReloadStrategy Signal string Graceful bool Timeout time.Duration }
// ReloadStrategy defines reload strategies type ReloadStrategy int
const ( HotReload ReloadStrategy = iota GracefulReload RestartReload RollingReload )
// ConfigEncryption contains configuration encryption type ConfigEncryption struct { Enabled bool Algorithm EncryptionAlgorithm KeySource KeySource Fields []string }
// EncryptionAlgorithm defines encryption algorithms type EncryptionAlgorithm int
const ( AESEncryption EncryptionAlgorithm = iota ChaCha20Encryption FernetEncryption )
// KeySource defines key sources type KeySource struct { Type KeySourceType Location string Rotation KeyRotation }
// KeySourceType defines key source types type KeySourceType int
const ( StaticKey KeySourceType = iota VaultKey KMSKey FileKey EnvironmentKey )
// KeyRotation contains key rotation configuration type KeyRotation struct { Enabled bool Frequency time.Duration Retention int Automatic bool }
// ConfigVersioning contains configuration versioning type ConfigVersioning struct { Enabled bool Backend VersionBackend Retention int Tagging bool }
// VersionBackend defines version backends type VersionBackend int
const ( GitBackend VersionBackend = iota S3Backend DatabaseBackend FileBackend )
// ScalingConfig contains scaling configuration type ScalingConfig struct { MinReplicas int MaxReplicas int TargetReplicas int Metrics []ScalingMetric Behavior ScalingBehavior Policies []ScalingPolicy Stabilization StabilizationConfig Prediction PredictionConfig }
// ScalingMetric defines scaling metrics type ScalingMetric struct { Type MetricType Name string Target MetricTarget Selector MetricSelector Aggregation AggregationType Window time.Duration Stabilization time.Duration Weight float64 Threshold MetricThreshold }
// MetricType defines metric types type MetricType int
const ( CPUMetric MetricType = iota MemoryMetric NetworkMetric DiskMetric QueueMetric CustomMetric ExternalMetric )
// MetricTarget defines metric targets type MetricTarget struct { Type TargetType Value string AverageValue string Utilization int32 }
// TargetType defines target types type TargetType int
const ( UtilizationTarget TargetType = iota ValueTarget AverageValueTarget )
// MetricSelector defines metric selectors type MetricSelector struct { MatchLabels map[string]string MatchExpressions []MatchExpression }
// AggregationType defines aggregation types type AggregationType int
const ( AverageAggregation AggregationType = iota MaximumAggregation MinimumAggregation SumAggregation CountAggregation )
// MetricThreshold defines metric thresholds type MetricThreshold struct { Lower float64 Upper float64 Hysteresis float64 Confidence float64 Sensitivity float64 }
// ScalingBehavior defines scaling behavior type ScalingBehavior struct { ScaleUp ScalingRules ScaleDown ScalingRules }
// ScalingRules defines scaling rules type ScalingRules struct { StabilizationWindowSeconds int32 SelectPolicy SelectPolicy Policies []ScalingPolicyRule }
// SelectPolicy defines select policies type SelectPolicy int
const ( MaxSelectPolicy SelectPolicy = iota MinSelectPolicy DisabledSelectPolicy )
// ScalingPolicyRule defines scaling policy rules type ScalingPolicyRule struct { Type PolicyRuleType Value int32 PeriodSeconds int32 }
// PolicyRuleType defines policy rule types type PolicyRuleType int
const ( PodsPolicy PolicyRuleType = iota PercentPolicy )
// StabilizationConfig contains stabilization configuration type StabilizationConfig struct { UpscaleStabilization time.Duration DownscaleStabilization time.Duration ScaleUpLimit int ScaleDownLimit int CooldownPeriod time.Duration }
// PredictionConfig contains prediction configuration type PredictionConfig struct { Enabled bool Algorithm PredictionAlgorithm Window time.Duration Horizon time.Duration Confidence float64 Model ModelConfig }
// PredictionAlgorithm defines prediction algorithms type PredictionAlgorithm int
const ( LinearPrediction PredictionAlgorithm = iota ExponentialSmoothing ARIMAPrediction MLPrediction EnsemblePrediction )
// ModelConfig contains model configuration type ModelConfig struct { Type ModelType Parameters map[string]interface{} Training TrainingConfig Validation ValidationConfig Deployment ModelDeployment }
// ModelType defines model types type ModelType int
const ( LinearModel ModelType = iota TreeModel NeuralNetworkModel EnsembleModel TimeSeriesModel )
// TrainingConfig contains training configuration type TrainingConfig struct { DataSource DataSourceConfig Features []FeatureConfig Target TargetConfig Validation TrainingValidation Hyperparams map[string]interface{} Schedule TrainingSchedule }
// DataSourceConfig contains data source configuration type DataSourceConfig struct { Type DataSourceType Location string Query string Window time.Duration Sampling SamplingConfig }
// DataSourceType defines data source types type DataSourceType int
const ( MetricsDataSource DataSourceType = iota LogsDataSource EventsDataSource ExternalDataSource )
// SamplingConfig contains sampling configuration type SamplingConfig struct { Strategy SamplingStrategy Rate float64 Size int }
// SamplingStrategy defines sampling strategies type SamplingStrategy int
const ( RandomSampling SamplingStrategy = iota StratifiedSampling SystematicSampling ClusterSampling )
// FeatureConfig contains feature configuration type FeatureConfig struct { Name string Type FeatureType Transform FeatureTransform Window time.Duration Lag time.Duration }
// FeatureType defines feature types type FeatureType int
const ( NumericFeature FeatureType = iota CategoricalFeature TimeFeature TextFeature CompositeFeature )
// FeatureTransform defines feature transforms type FeatureTransform struct { Type TransformType Parameters map[string]interface{} }
// TransformType defines transform types type TransformType int
const ( NormalizationTransform TransformType = iota StandardizationTransform EncodingTransform BinningTransform PolynomialTransform )
// TargetConfig contains target configuration type TargetConfig struct { Metric string Transform TargetTransform Window time.Duration Horizon time.Duration }
// TargetTransform defines target transforms type TargetTransform struct { Type TransformType Parameters map[string]interface{} }
// TrainingValidation contains training validation configuration type TrainingValidation struct { Method ValidationMethod Split float64 Folds int Metrics []string Threshold float64 }
// ValidationMethod defines validation methods type ValidationMethod int
const ( HoldoutValidation ValidationMethod = iota CrossValidation TimeSeriesValidation BootstrapValidation )
// TrainingSchedule contains training schedule configuration type TrainingSchedule struct { Frequency time.Duration Triggers []TrainingTrigger Window time.Duration Timeout time.Duration }
// TrainingTrigger defines training triggers type TrainingTrigger struct { Type TriggerType Condition string Threshold float64 }
// TriggerType defines trigger types type TriggerType int
const ( TimeBasedTrigger TriggerType = iota MetricBasedTrigger EventBasedTrigger ErrorBasedTrigger )
// ModelDeployment contains model deployment configuration type ModelDeployment struct { Strategy DeploymentStrategy Validation DeploymentValidation Rollback DeploymentRollback Monitoring DeploymentMonitoring }
// DeploymentStrategy defines deployment strategies type DeploymentStrategy int
const ( BlueGreenDeployment DeploymentStrategy = iota CanaryDeployment RollingDeployment A_BDeployment )
// DeploymentValidation contains deployment validation configuration type DeploymentValidation struct { Tests []ValidationTest Metrics []string Threshold float64 Duration time.Duration }
// ValidationTest defines validation tests type ValidationTest struct { Name string Type TestType Target string Expected interface{} Tolerance float64 Timeout time.Duration }
// DeploymentRollback contains deployment rollback configuration type DeploymentRollback struct { Enabled bool Triggers []RollbackTrigger Strategy RollbackStrategy Timeout time.Duration }
// RollbackTrigger defines rollback triggers type RollbackTrigger struct { Condition string Threshold float64 Duration time.Duration }
// RollbackStrategy defines rollback strategies type RollbackStrategy int
const ( ImmediateRollback RollbackStrategy = iota GradualRollback ManualRollback )
// DeploymentMonitoring contains deployment monitoring configuration type DeploymentMonitoring struct { Enabled bool Metrics []string Alerts []string Dashboard string Retention time.Duration }
// ServiceInstance represents a service instance type ServiceInstance struct { ID string Name string Type InstanceType Status InstanceStatus Health HealthStatus Resources ResourceUsage Network NetworkInfo Storage StorageInfo Placement PlacementInfo Metadata InstanceMetadata CreatedAt time.Time UpdatedAt time.Time Version string Configuration map[string]interface{} Metrics InstanceMetrics Events []InstanceEvent }
// InstanceStatus defines instance status type InstanceStatus int
const ( PendingInstance InstanceStatus = iota RunningInstance StoppingInstance StoppedInstance FailedInstance TerminatingInstance UnknownInstance )
// HealthStatus defines health status type HealthStatus int
const ( HealthyStatus HealthStatus = iota UnhealthyStatus UnknownStatus DegradedStatus )
// ResourceUsage contains resource usage information type ResourceUsage struct { CPU CPUUsage Memory MemoryUsage Network NetworkUsage Storage StorageUsage GPU GPUUsage }
// CPUUsage contains CPU usage information type CPUUsage struct { Cores float64 Utilization float64 Throttled bool Frequency float64 }
// MemoryUsage contains memory usage information type MemoryUsage struct { Total int64 Used int64 Available int64 Utilization float64 Pressure bool }
// NetworkUsage contains network usage information type NetworkUsage struct { BytesIn int64 BytesOut int64 PacketsIn int64 PacketsOut int64 Errors int64 Drops int64 Utilization float64 }
// StorageUsage contains storage usage information type StorageUsage struct { Total int64 Used int64 Available int64 Utilization float64 IOPS float64 Throughput float64 }
// GPUUsage contains GPU usage information type GPUUsage struct { Devices []GPUDevice Utilization float64 Memory GPUMemory Temperature float64 }
// GPUDevice contains GPU device information type GPUDevice struct { ID string Type string Utilization float64 Memory GPUMemory Temperature float64 Power float64 }
// GPUMemory contains GPU memory information type GPUMemory struct { Total int64 Used int64 Available int64 Utilization float64 }
// NetworkInfo contains network information type NetworkInfo struct { Interfaces []NetworkInterface Routes []NetworkRoute Policies []NetworkPolicy Security NetworkSecurity }
// NetworkInterface contains network interface information type NetworkInterface struct { Name string Type InterfaceType IPAddress string MACAddress string MTU int Status InterfaceStatus Bandwidth int64 Utilization float64 }
// InterfaceType defines interface types type InterfaceType int
const ( EthernetInterface InterfaceType = iota WiFiInterface LoopbackInterface TunnelInterface VirtualInterface )
// InterfaceStatus defines interface status type InterfaceStatus int
const ( UpInterface InterfaceStatus = iota DownInterface UnknownInterface )
// NetworkRoute contains network route information type NetworkRoute struct { Destination string Gateway string Interface string Metric int Type RouteType }
// RouteType defines route types type RouteType int
const ( StaticRoute RouteType = iota DynamicRoute DefaultRoute )
// NetworkPolicy contains network policy information type NetworkPolicy struct { Name string Type PolicyType Rules []PolicyRule Direction PolicyDirection Action PolicyAction }
// PolicyDirection defines policy direction type PolicyDirection int
const ( IngressPolicy PolicyDirection = iota EgressPolicy BidirectionalPolicy )
// NetworkSecurity contains network security information type NetworkSecurity struct { Encryption bool Firewall FirewallConfig VPN VPNConfig Certificates []CertificateInfo }
// FirewallConfig contains firewall configuration type FirewallConfig struct { Enabled bool Rules []FirewallRule Default FirewallAction }
// FirewallRule defines firewall rules type FirewallRule struct { Name string Direction TrafficDirection Protocol string Port string Source string Destination string Action FirewallAction }
// TrafficDirection defines traffic direction type TrafficDirection int
const ( InboundTraffic TrafficDirection = iota OutboundTraffic BidirectionalTraffic )
// FirewallAction defines firewall actions type FirewallAction int
const ( AllowFirewallAction FirewallAction = iota DenyFirewallAction DropFirewallAction LogFirewallAction )
// VPNConfig contains VPN configuration type VPNConfig struct { Enabled bool Type VPNType Endpoint string Protocols []VPNProtocol Tunnels []VPNTunnel }
// VPNType defines VPN types type VPNType int
const ( SiteToSiteVPN VPNType = iota RemoteAccessVPN P2PVPN )
// VPNProtocol defines VPN protocols type VPNProtocol int
const ( IPSecVPN VPNProtocol = iota OpenVPNProtocol WireGuardProtocol SSLVPNProtocol )
// VPNTunnel contains VPN tunnel information type VPNTunnel struct { Name string LocalIP string RemoteIP string Status TunnelStatus Encryption string Throughput int64 }
// TunnelStatus defines tunnel status type TunnelStatus int
const ( ConnectedTunnel TunnelStatus = iota DisconnectedTunnel ConnectingTunnel ErrorTunnel )
// CertificateInfo contains certificate information type CertificateInfo struct { Name string Type CertificateType Subject string Issuer string NotBefore time.Time NotAfter time.Time Fingerprint string KeyUsage []string }
// CertificateType defines certificate types type CertificateType int
const ( X509Certificate CertificateType = iota PGPCertificate SSHCertificate )
// StorageInfo contains storage information type StorageInfo struct { Volumes []VolumeInfo Filesystems []FilesystemInfo Backup BackupInfo Replication ReplicationInfo }
// VolumeInfo contains volume information type VolumeInfo struct { Name string Type VolumeType Size int64 Used int64 Available int64 Utilization float64 MountPoint string Device string FileSystem string Options []string }
// FilesystemInfo contains filesystem information type FilesystemInfo struct { Type string Size int64 Used int64 Available int64 Utilization float64 Inodes FilesystemInodes Options []string }
// FilesystemInodes contains filesystem inode information type FilesystemInodes struct { Total int64 Used int64 Available int64 Utilization float64 }
// BackupInfo contains backup information type BackupInfo struct { Enabled bool LastBackup time.Time NextBackup time.Time Status BackupStatus Size int64 Retention time.Duration Destination string }
// BackupStatus defines backup status type BackupStatus int
const ( SuccessBackup BackupStatus = iota FailedBackup InProgressBackup ScheduledBackup )
// ReplicationInfo contains replication information type ReplicationInfo struct { Enabled bool Type ReplicationType Targets []ReplicationTarget Status ReplicationStatus Lag time.Duration Bandwidth int64 }
// ReplicationType defines replication types type ReplicationType int
const ( SynchronousReplication ReplicationType = iota AsynchronousReplication SemiSynchronousReplication )
// ReplicationTarget contains replication target information type ReplicationTarget struct { Name string Endpoint string Status TargetStatus Lag time.Duration Health HealthStatus }
// TargetStatus defines target status type TargetStatus int
const ( ActiveTarget TargetStatus = iota InactiveTarget ErrorTarget UnknownTarget )
// ReplicationStatus defines replication status type ReplicationStatus int
const ( HealthyReplication ReplicationStatus = iota DegradedReplication FailedReplication StalledReplication )
// PlacementInfo contains placement information type PlacementInfo struct { Node NodeInfo Zone string Region string Rack string Datacenter string Cloud string Constraints []PlacementConstraint Preferences []PlacementPreference }
// NodeInfo contains node information type NodeInfo struct { Name string Type NodeType Resources NodeResources Capacity NodeCapacity Allocatable NodeAllocatable Conditions []NodeCondition Taints []NodeTaint Labels map[string]string Annotations map[string]string }
// NodeType defines node types type NodeType int
const ( WorkerNode NodeType = iota MasterNode EdgeNode GPUNode ComputeNode StorageNode )
// NodeResources contains node resource information type NodeResources struct { CPU string Memory string Storage string GPU string Network string Pods string }
// NodeCapacity contains node capacity information type NodeCapacity struct { CPU string Memory string Storage string GPU string Pods string }
// NodeAllocatable contains node allocatable information type NodeAllocatable struct { CPU string Memory string Storage string GPU string Pods string }
// NodeCondition contains node condition information type NodeCondition struct { Type ConditionType Status ConditionStatus LastHeartbeatTime time.Time LastTransitionTime time.Time Reason string Message string }
// ConditionStatus defines condition status type ConditionStatus int
const ( TrueCondition ConditionStatus = iota FalseCondition UnknownCondition )
// NodeTaint contains node taint information type NodeTaint struct { Key string Value string Effect TaintEffect TimeAdded time.Time }
// PlacementConstraint defines placement constraints type PlacementConstraint struct { Type ConstraintType Key string Operator ConstraintOperator Values []string Required bool }
// ConstraintOperator defines constraint operators type ConstraintOperator int
const ( InConstraint ConstraintOperator = iota NotInConstraint ExistsConstraint DoesNotExistConstraint GreaterThanConstraint LessThanConstraint )
// PlacementPreference defines placement preferences type PlacementPreference struct { Weight int Type PreferenceType Key string Values []string }
// PreferenceType defines preference types type PreferenceType int
const ( AffinityPreference PreferenceType = iota AntiAffinityPreference SpreadPreference PackPreference )
// InstanceMetadata contains instance metadata type InstanceMetadata struct { Owner string Team string Project string Environment string Service string Version string Build string Commit string Branch string Tags map[string]string Annotations map[string]string Timestamps MetadataTimestamps }
// MetadataTimestamps contains metadata timestamps type MetadataTimestamps struct { Created time.Time Updated time.Time Started time.Time Deployed time.Time LastSeen time.Time }
// InstanceMetrics contains instance metrics type InstanceMetrics struct { Performance PerformanceMetrics Resource ResourceMetrics Network NetworkMetrics Storage StorageMetrics Application ApplicationMetrics Custom map[string]float64 }
// PerformanceMetrics contains performance metrics type PerformanceMetrics struct { ResponseTime time.Duration Throughput float64 ErrorRate float64 Availability float64 Latency LatencyMetrics }
// LatencyMetrics contains latency metrics type LatencyMetrics struct { Mean float64 P50 float64 P90 float64 P95 float64 P99 float64 Max float64 }
// ResourceMetrics contains resource metrics type ResourceMetrics struct { CPU CPUMetrics Memory MemoryMetrics Network NetworkMetrics Storage StorageMetrics GPU GPUMetrics }
// CPUMetrics contains CPU metrics type CPUMetrics struct { Utilization float64 Load LoadMetrics Frequency float64 Temperature float64 Throttled bool }
// LoadMetrics contains load metrics type LoadMetrics struct { Load1 float64 Load5 float64 Load15 float64 }
// MemoryMetrics contains memory metrics type MemoryMetrics struct { Used int64 Available int64 Utilization float64 Pressure MemoryPressure Swap SwapMetrics }
// MemoryPressure contains memory pressure information type MemoryPressure struct { Level PressureLevel Reclaim int64 OOMKills int64 PageFaults int64 }
// PressureLevel defines pressure levels type PressureLevel int
const ( NoPressure PressureLevel = iota LowPressure MediumPressure HighPressure CriticalPressure )
// SwapMetrics contains swap metrics type SwapMetrics struct { Total int64 Used int64 Utilization float64 In int64 Out int64 }
// NetworkMetrics contains network metrics type NetworkMetrics struct { BytesReceived int64 BytesTransmitted int64 PacketsReceived int64 PacketsTransmitted int64 Errors NetworkErrors Utilization float64 Latency time.Duration }
// NetworkErrors contains network error metrics type NetworkErrors struct { Receive int64 Transmit int64 Drops int64 Overruns int64 Collisions int64 }
// StorageMetrics contains storage metrics type StorageMetrics struct { Read IOMetrics Write IOMetrics Utilization float64 Latency IOLatency Queue QueueMetrics }
// IOMetrics contains I/O metrics type IOMetrics struct { Bytes int64 Operations int64 Throughput float64 IOPS float64 }
// IOLatency contains I/O latency metrics type IOLatency struct { Read time.Duration Write time.Duration Sync time.Duration Async time.Duration }
// QueueMetrics contains queue metrics type QueueMetrics struct { Depth int Avg float64 Max int Waiting int }
// GPUMetrics contains GPU metrics type GPUMetrics struct { Utilization float64 Memory GPUMemoryMetrics Temperature float64 Power float64 Frequency GPUFrequency }
// GPUMemoryMetrics contains GPU memory metrics type GPUMemoryMetrics struct { Used int64 Available int64 Utilization float64 Bandwidth float64 }
// GPUFrequency contains GPU frequency information type GPUFrequency struct { Graphics float64 Memory float64 Video float64 }
// ApplicationMetrics contains application-specific metrics type ApplicationMetrics struct { Requests RequestMetrics Connections ConnectionMetrics Sessions SessionMetrics Transactions TransactionMetrics Cache CacheMetrics Database DatabaseMetrics Queue QueueMetrics Custom map[string]float64 }
// RequestMetrics contains request metrics type RequestMetrics struct { Total int64 Success int64 Errors int64 Rate float64 ResponseTime time.Duration Size RequestSize }
// RequestSize contains request size metrics type RequestSize struct { Request int64 Response int64 Headers int64 Body int64 }
// ConnectionMetrics contains connection metrics type ConnectionMetrics struct { Active int64 Total int64 Established int64 Failed int64 Dropped int64 Rate float64 }
// SessionMetrics contains session metrics type SessionMetrics struct { Active int64 Total int64 Created int64 Expired int64 Duration time.Duration }
// TransactionMetrics contains transaction metrics type TransactionMetrics struct { Total int64 Committed int64 Aborted int64 Pending int64 Duration time.Duration Rate float64 }
// CacheMetrics contains cache metrics type CacheMetrics struct { Hits int64 Misses int64 HitRate float64 Size int64 Evictions int64 Expiry int64 }
// DatabaseMetrics contains database metrics type DatabaseMetrics struct { Connections ConnectionMetrics Queries QueryMetrics Transactions TransactionMetrics Locks LockMetrics Replication ReplicationMetrics }
// QueryMetrics contains query metrics type QueryMetrics struct { Total int64 Success int64 Errors int64 Duration time.Duration SlowQueries int64 Rate float64 }
// LockMetrics contains lock metrics type LockMetrics struct { Acquired int64 Waiting int64 Timeouts int64 Deadlocks int64 Duration time.Duration }
// ReplicationMetrics contains replication metrics type ReplicationMetrics struct { Lag time.Duration Rate float64 Errors int64 Status ReplicationStatus Bandwidth int64 }
// InstanceEvent defines instance events type InstanceEvent struct { Timestamp time.Time Type EventType Reason string Message string Source EventSource Severity EventSeverity Count int FirstSeen time.Time LastSeen time.Time Metadata map[string]interface{} }
// EventType defines event types type EventType int
const ( CreatedEvent EventType = iota UpdatedEvent DeletedEvent StartedEvent StoppedEvent FailedEvent HealthEvent ScalingEvent NetworkEvent StorageEvent SecurityEvent ConfigEvent )
// EventSource defines event sources type EventSource struct { Component string Host string Instance string Process string Thread string }
// EventSeverity defines event severity type EventSeverity int
const ( InfoSeverity EventSeverity = iota WarningSeverity ErrorSeverity CriticalSeverity FatalSeverity )
// Component type definitions type InstanceManager struct{} type LoadBalancer struct{} type ServiceDiscovery struct{} type ServiceOrchestrator struct{} type AutoScaler struct{} type HealthChecker struct{} type MetricsCollector struct{} type PlacementEngine struct{} type ResourceManager struct{} type NetworkManager struct{} type StorageManager struct{} type SecurityManager struct{} type ConfigurationManager struct{} type DeploymentManager struct{} type MonitoringHub struct{} type AlertManager struct{} type CostOptimizer struct{} type LoadBalancingConfig struct{} type AutoScalingConfig struct{} type PlacementConfig struct{} type NetworkConfig struct{} type StorageConfig struct{} type SecurityConfig struct{} type MonitoringConfig struct{} type HealthCheckConfig struct{} type DeploymentConfig struct{} type CostConfig struct{} type ComplianceConfig struct{} type PerformanceConfig struct{} type ReliabilityConfig struct{}
// NewHorizontalScaler creates a new horizontal scaler func NewHorizontalScaler(config HorizontalScalingConfig) HorizontalScaler { return &HorizontalScaler{ config: config, instanceManager: &InstanceManager{}, loadBalancer: &LoadBalancer{}, serviceDiscovery: &ServiceDiscovery{}, orchestrator: &ServiceOrchestrator{}, autoScaler: &AutoScaler{}, healthChecker: &HealthChecker{}, metricsCollector: &MetricsCollector{}, placementEngine: &PlacementEngine{}, resourceManager: &ResourceManager{}, networkManager: &NetworkManager{}, storageManager: &StorageManager{}, securityManager: &SecurityManager{}, configManager: &ConfigurationManager{}, deploymentManager: &DeploymentManager{}, monitoringHub: &MonitoringHub{}, alertManager: &AlertManager{}, costOptimizer: &CostOptimizer{}, activeInstances: make(map[string]ServiceInstance), scalingOperations: make(map[string]*ScalingOperation), } }
// ScaleOut adds new instances to handle increased load func (h HorizontalScaler) ScaleOut(ctx context.Context, serviceName string, targetInstances int) (ScalingOperation, error) { h.mu.Lock() defer h.mu.Unlock()
fmt.Printf("Scaling out service %s to %d instances\n", serviceName, targetInstances)
// Create scaling operation
operation := &ScalingOperation{
ID: fmt.Sprintf("scaleout-%d", time.Now().Unix()),
Type: HorizontalOperation,
Direction: ScaleUp,
Target: serviceName,
StartTime: time.Now(),
Status: RunningOperation,
Progress: 0.0,
}
h.scalingOperations[operation.ID] = operation
// Create new instances
currentCount := len(h.getServiceInstances(serviceName))
instancesToAdd := targetInstances - currentCount
if instancesToAdd <= 0 {
operation.Status = CompletedOperation
operation.Progress = 100.0
return operation, nil
}
// Add instances
for i := 0; i < instancesToAdd; i++ {
instance, err := h.createInstance(ctx, serviceName)
if err != nil {
operation.Status = FailedOperation
return nil, fmt.Errorf("failed to create instance: %w", err)
}
h.activeInstances[instance.ID] = instance
operation.Progress = float64(i+1) / float64(instancesToAdd) * 100.0
}
// Register with load balancer
if err := h.registerWithLoadBalancer(ctx, serviceName); err != nil {
fmt.Printf("Failed to register with load balancer: %v\n", err)
}
operation.Status = CompletedOperation
operation.EndTime = time.Now()
operation.Progress = 100.0
fmt.Printf("Scale out completed for service %s\n", serviceName)
return operation, nil
}
func (h HorizontalScaler) getServiceInstances(serviceName string) []ServiceInstance { var instances []*ServiceInstance for _, instance := range h.activeInstances { if instance.Name == serviceName { instances = append(instances, instance) } } return instances }
func (h HorizontalScaler) createInstance(ctx context.Context, serviceName string) (ServiceInstance, error) { // Instance creation logic instance := &ServiceInstance{ ID: fmt.Sprintf("%s-%d", serviceName, time.Now().Unix()), Name: serviceName, Type: ContainerInstance, Status: PendingInstance, Health: UnknownStatus, CreatedAt: time.Now(), Version: "1.0.0", Metadata: InstanceMetadata{ Service: serviceName, Environment: "production", Tags: map[string]string{"type": "scaled"}, }, }
// Simulate instance startup
time.Sleep(time.Second)
instance.Status = RunningInstance
instance.Health = HealthyStatus
return instance, nil
}
func (h *HorizontalScaler) registerWithLoadBalancer(ctx context.Context, serviceName string) error { // Load balancer registration logic fmt.Printf("Registering service %s with load balancer\n", serviceName) return nil }
// Example usage func ExampleHorizontalScaling() { config := HorizontalScalingConfig{ ServiceConfig: ServiceConfig{ Name: "web-service", Version: "1.0.0", Ports: []ServicePort{ {Name: "http", Port: 80, TargetPort: 8080, Protocol: HTTPProtocol}, }, Resources: ResourceRequirements{ Requests: ResourceSpec{CPU: "100m", Memory: "128Mi"}, Limits: ResourceSpec{CPU: "500m", Memory: "512Mi"}, }, }, InstanceConfig: InstanceConfig{ Scaling: ScalingConfig{ MinReplicas: 2, MaxReplicas: 20, TargetReplicas: 5, }, }, }
scaler := NewHorizontalScaler(config)
ctx := context.Background()
operation, err := scaler.ScaleOut(ctx, "web-service", 8)
if err != nil {
fmt.Printf("Scale out failed: %v\n", err)
return
}
fmt.Printf("Scaling Operation - ID: %s, Status: %d, Progress: %.1f%%\n",
operation.ID, operation.Status, operation.Progress)
} ```
Architecture Patterns
Proven architecture patterns for horizontal scaling.
Microservices Architecture
Service decomposition and independent scaling strategies.
Container Orchestration
Container-based horizontal scaling with Kubernetes and Docker Swarm.
Serverless Scaling
Event-driven horizontal scaling with serverless functions.
Edge Computing
Distributed horizontal scaling across edge locations.
Load Distribution
Advanced load distribution strategies for horizontal scaling.
Load Balancing Algorithms
Comprehensive load balancing algorithms and strategies.
Health-Based Routing
Intelligent routing based on instance health and performance.
Geographic Distribution
Location-aware load distribution and traffic routing.
Session Affinity
Session-aware load distribution and sticky connections.
Best Practices
- Stateless Design: Design stateless services for easier horizontal scaling
- Health Monitoring: Implement comprehensive health monitoring
- Gradual Scaling: Use gradual scaling to minimize impact
- Load Testing: Validate scaling behavior under load
- Cost Optimization: Balance performance and cost considerations
- Automated Scaling: Implement intelligent auto-scaling policies
- Failure Handling: Design for graceful failure handling
- Resource Efficiency: Optimize resource utilization across instances
Summary
Horizontal scaling provides scalable, distributed system architectures:
- Elastic Scaling: Automatic scaling based on demand and metrics
- Load Distribution: Intelligent load balancing and traffic routing
- High Availability: Improved availability through redundancy
- Cost Efficiency: Pay-as-you-scale cost model
- Performance Optimization: Optimized performance through distribution
- Fault Tolerance: Enhanced fault tolerance through redundancy
These capabilities enable organizations to build highly scalable, resilient systems that can handle varying loads while maintaining performance and availability.