# Production Performance Tuning Configuration # Optimized for 16-Core 32GB Production Server import Config # BEAM VM Optimizations for 16-Core Server config :kernel, # Increase ETS table limits for high throughput ets_limit: 262_144, # 4x increase for production # Optimize scheduler configuration schedulers_online: 16, # Match CPU cores # Increase process limit processes: 2_000_000 # Support millions of concurrent processes # AsyncCorrelator Production Configuration config :da_product_app, :async_correlator_performance, # High-Performance ETS Configuration ets_configuration: [ table_type: :set, table_options: [ :public, :named_table, {:read_concurrency, true}, {:write_concurrency, true}, {:decentralized_counters, true} # BEAM 24+ optimization ], correlation_table_size: 100_000, # Large correlation table cleanup_interval_ms: 30_000 # Frequent cleanup for high volume ], # Connection Pool Optimization for Production connection_pool: [ # High connection counts for production throughput default_pool_size: 50, # 5x increase per network max_pool_size: 100, # Maximum pool size checkout_timeout_ms: 5_000, # Fast checkout idle_timeout_ms: 300_000, # 5 minute idle timeout # Connection optimization socket_options: [ {:nodelay, true}, # Disable Nagle's algorithm {:send_timeout, 30_000}, # 30 second send timeout {:send_timeout_close, true}, # Close on timeout {:keepalive, true}, # Enable TCP keepalive {:buffer, 65_536}, # Large TCP buffer {:recbuf, 65_536}, # Large receive buffer {:sndbuf, 65_536} # Large send buffer ] ], # Instance Management for 16-Core Production instance_management: [ # Scale instances with cores default_instances_per_network: 8, # 2 instances per 2 cores max_instances_per_network: 16, # Maximum instances # Auto-scaling configuration enable_auto_scaling: true, scaling_trigger_threshold: 0.8, # Scale at 80% utilization scaling_cooldown_ms: 60_000, # 1 minute cooldown # Load balancing optimization load_balance_strategy: :least_loaded, health_check_interval_ms: 10_000 # Frequent health checks ], # Performance Testing Thresholds for Production performance_testing: [ # Production performance targets min_throughput_rps: 10_000, # 10K RPS minimum max_response_time_ms: 100, # <100ms response time min_success_rate: 0.99, # 99% success rate max_memory_usage_mb: 8_000, # 8GB memory limit (25% of total) # High-volume test scenarios test_scenarios: [ production_light_load: [ concurrent_requests: 100, request_rate_rps: 5_000, duration_ms: 300_000 # 5 minute tests ], production_normal_load: [ concurrent_requests: 500, request_rate_rps: 15_000, duration_ms: 300_000 ], production_peak_load: [ concurrent_requests: 1_000, request_rate_rps: 25_000, duration_ms: 180_000 # 3 minute peak tests ], production_burst_load: [ concurrent_requests: 2_000, request_rate_rps: 35_000, duration_ms: 60_000 # 1 minute burst tests ] ] ], # Memory Management for 32GB Server memory_management: [ # BEAM VM memory optimization erlang_memory_limit_mb: 24_000, # 75% of 32GB # Garbage collection tuning fullsweep_after: 10, # More frequent full GC min_heap_size: 233, # Larger initial heap min_bin_vheap_size: 46422, # Larger binary heap # ETS memory optimization ets_compressed: true, # Compress ETS tables ets_memory_limit_mb: 4_000, # 4GB for ETS tables # Process memory limits max_heap_size: %{ size: 1_000_000, # 1M words per process kill: true, error_logger: true } ], # Monitoring and Telemetry for Production telemetry: [ # High-frequency metrics collection event_sampling_rate: 0.1, # 10% sampling for production metrics_buffer_size: 10_000, # Large buffer flush_interval_ms: 5_000, # 5 second flush # Performance monitoring enable_performance_monitoring: true, performance_check_interval_ms: 30_000, # Alerting thresholds alert_thresholds: [ high_latency_ms: 200, # Alert if >200ms low_throughput_rps: 5_000, # Alert if <5K RPS high_memory_usage_mb: 20_000, # Alert if >20GB high_cpu_percentage: 85, # Alert if >85% CPU high_error_rate: 0.05 # Alert if >5% errors ] ] # Network-Specific Production Configuration config :da_product_app, :upstream_networks, [ # High-Volume Networks (VISA/MasterCard) :visa_network => %{ enabled: true, instance_count: 8, # 8 instances for high volume load_balance_strategy: :least_loaded, correlation_timeout: 30_000, max_pending_requests: 5_000, # High request capacity connection_config: %{ pool_size: 100, # Large connection pool connect_timeout: 3_000, keepalive: true, retry_attempts: 3, # TCP optimization for high throughput socket_opts: [ {:nodelay, true}, {:keepalive, true}, {:buffer, 131_072}, # 128KB buffer {:recbuf, 131_072}, {:sndbuf, 131_072} ] } }, :mastercard_network => %{ enabled: true, instance_count: 8, load_balance_strategy: :least_loaded, correlation_timeout: 30_000, max_pending_requests: 5_000, connection_config: %{ pool_size: 100, connect_timeout: 3_000, keepalive: true, retry_attempts: 3, socket_opts: [ {:nodelay, true}, {:keepalive, true}, {:buffer, 131_072}, {:recbuf, 131_072}, {:sndbuf, 131_072} ] } }, # Medium-Volume Networks :amex_network => %{ enabled: true, instance_count: 4, load_balance_strategy: :round_robin, correlation_timeout: 25_000, max_pending_requests: 2_000, connection_config: %{ pool_size: 50, connect_timeout: 4_000, keepalive: true, retry_attempts: 2 } }, :discover_network => %{ enabled: true, instance_count: 2, load_balance_strategy: :round_robin, correlation_timeout: 20_000, max_pending_requests: 1_000, connection_config: %{ pool_size: 25, connect_timeout: 5_000, keepalive: false, retry_attempts: 2 } } ] # Switch Performance Configuration config :da_product_app, :switch, # High-performance switch settings performance: %{ max_concurrent_messages: 10_000, # 10x increase message_processing_timeout_ms: 15_000, # Faster timeout enable_async_processing: true, queue_max_size: 100_000, # Large queue # Worker pool configuration worker_pool_size: 64, # 4x CPU cores worker_max_overflow: 32, # Additional workers worker_checkout_timeout: 5_000 # Fast worker checkout }, # Security with performance optimization security: %{ enable_audit_logging: true, mask_sensitive_data: true, max_connection_rate: 1_000, # 1K connections/minute enable_rate_limiting: true, # Rate limiting configuration rate_limit_window_ms: 60_000, # 1 minute window rate_limit_burst_size: 5_000, # Allow bursts rate_limit_cleanup_interval_ms: 300_000 # 5 minute cleanup } # Database Connection Pool for High TPS config :da_product_app, DaProductApp.Repo, # Production database optimization pool_size: 50, # Large pool for high TPS queue_target: 5_000, # Queue up to 5K queries queue_interval: 1_000, # 1 second queue interval # Connection optimization timeout: 15_000, # 15 second timeout ownership_timeout: 30_000, # 30 second ownership # Database-specific optimization prepare: :named, # Use prepared statements parameters: [ {"work_mem", "256MB"}, # Large work memory {"shared_buffers", "8GB"}, # Large shared buffers {"effective_cache_size", "24GB"}, # Effective cache size {"max_connections", "500"} # High connection limit ] # Logger Performance for Production config :logger, level: :info, # Info level for production # Async logging for better performance backends: [ {LoggerFileBackend, :info_log}, {LoggerFileBackend, :error_log} ], # File backend configuration compile_time_purge_matching: [ [level_lower_than: :info] # Remove debug logs ] config :logger, :info_log, path: "logs/info.log", level: :info, format: "$time $metadata[$level] $message\n", metadata: [:request_id, :network, :correlation_id], rotate: %{max_bytes: 104_857_600, keep: 10} # 100MB rotation config :logger, :error_log, path: "logs/error.log", level: :error, format: "$time $metadata[$level] $message\n", metadata: [:request_id, :network, :correlation_id, :error_reason], rotate: %{max_bytes: 104_857_600, keep: 20} # 100MB rotation, keep more error logs