use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct AdvancedClusterConfig {
pub basic_config: super::super::distributed::DistributedConfig,
pub consensus_config: ConsensusConfig,
pub sharding_config: ShardingConfig,
pub fault_tolerance: FaultToleranceConfig,
pub auto_scaling: AutoScalingConfig,
pub locality_config: LocalityConfig,
pub optimization_config: OptimizationConfig,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ConsensusConfig {
pub algorithm: ConsensusAlgorithm,
pub quorum_size: usize,
pub election_timeout_ms: u64,
pub heartbeat_interval_ms: u64,
pub max_entries_per_append: usize,
pub log_compaction_threshold: usize,
pub snapshot_interval: Duration,
pub node_id: Option<String>,
pub peers: Option<Vec<String>>,
}
impl Default for ConsensusConfig {
fn default() -> Self {
Self {
algorithm: ConsensusAlgorithm::Raft,
quorum_size: 3,
election_timeout_ms: 5000,
heartbeat_interval_ms: 1000,
max_entries_per_append: 100,
log_compaction_threshold: 10000,
snapshot_interval: Duration::from_secs(3600),
node_id: None,
peers: None,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ConsensusAlgorithm {
Raft,
Pbft,
ProofOfStake,
DelegatedProofOfStake,
SimpleMajority,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ShardingConfig {
pub strategy: ShardingStrategy,
pub shard_count: usize,
pub replication_factor: usize,
pub hash_function: HashFunction,
pub virtual_nodes: usize,
pub dynamic_resharding: bool,
pub migration_threshold: f64,
}
impl Default for ShardingConfig {
fn default() -> Self {
Self {
strategy: ShardingStrategy::ConsistentHash,
shard_count: 16,
replication_factor: 3,
hash_function: HashFunction::Murmur3,
virtual_nodes: 256,
dynamic_resharding: true,
migration_threshold: 0.8,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ShardingStrategy {
Hash,
Range,
Directory,
ConsistentHash,
Geographic,
FeatureBased,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum HashFunction {
Md5,
Sha256,
Crc32,
Murmur3,
XxHash,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FaultToleranceConfig {
pub max_failures: usize,
pub auto_recovery: bool,
pub recovery_timeout: u64,
pub health_check_interval: u64,
pub replacement_strategy: NodeReplacementStrategy,
pub backup_interval: Duration,
pub rolling_updates: bool,
pub graceful_shutdown_timeout: Duration,
}
impl Default for FaultToleranceConfig {
fn default() -> Self {
Self {
max_failures: 1,
auto_recovery: true,
recovery_timeout: 300,
health_check_interval: 30,
replacement_strategy: NodeReplacementStrategy::HotStandby,
backup_interval: Duration::from_secs(3600),
rolling_updates: true,
graceful_shutdown_timeout: Duration::from_secs(60),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum NodeReplacementStrategy {
Immediate,
Delayed { delay: Duration },
Manual,
HotStandby,
ColdStandby,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AutoScalingConfig {
pub enabled: bool,
pub min_nodes: usize,
pub max_nodes: usize,
pub scale_up_cpu_threshold: f64,
pub scale_down_cpu_threshold: f64,
pub scale_up_memory_threshold: f64,
pub scale_down_memory_threshold: f64,
pub cooldown_period: Duration,
pub policies: Vec<ScalingPolicy>,
}
impl Default for AutoScalingConfig {
fn default() -> Self {
Self {
enabled: true,
min_nodes: 2,
max_nodes: 10,
scale_up_cpu_threshold: 80.0,
scale_down_cpu_threshold: 30.0,
scale_up_memory_threshold: 85.0,
scale_down_memory_threshold: 40.0,
cooldown_period: Duration::from_secs(300),
policies: vec![],
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScalingPolicy {
pub name: String,
pub metric: String,
pub threshold: f64,
pub action: ScalingAction,
pub adjustment_type: AdjustmentType,
pub adjustment_value: f64,
pub cooldown: Duration,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ScalingAction {
ScaleUp,
ScaleDown,
None,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AdjustmentType {
ChangeInCapacity,
ExactCapacity,
PercentChangeInCapacity,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalityConfig {
pub enabled: bool,
pub strategy: LocalityStrategy,
pub topology: NetworkTopology,
pub affinity_rules: Vec<AffinityRule>,
pub cache_config: CacheConfig,
}
impl Default for LocalityConfig {
fn default() -> Self {
Self {
enabled: true,
strategy: LocalityStrategy::NetworkAware,
topology: NetworkTopology::default(),
affinity_rules: vec![],
cache_config: CacheConfig::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum LocalityStrategy {
NetworkAware,
Geographic,
LatencyBased,
BandwidthAware,
CostOptimized,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
pub struct NetworkTopology {
pub levels: Vec<TopologyLevel>,
pub node_locations: std::collections::HashMap<String, Location>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Location {
pub coordinates: Vec<String>,
pub geo_coordinates: Option<(f64, f64)>,
pub bandwidth: f64,
pub latency_ms: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TopologyLevel {
pub name: String,
pub index: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AffinityRule {
pub name: String,
pub source_pattern: String,
pub target_pattern: String,
pub affinity_type: AffinityType,
pub weight: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AffinityType {
Attract,
Repel,
SameLevel(usize),
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CacheConfig {
pub enabled: bool,
pub cache_size_mb: u64,
pub eviction_policy: EvictionPolicy,
pub coherence_protocol: CoherenceProtocol,
pub invalidation_strategy: InvalidationStrategy,
}
impl Default for CacheConfig {
fn default() -> Self {
Self {
enabled: true,
cache_size_mb: 1024,
eviction_policy: EvictionPolicy::Lru,
coherence_protocol: CoherenceProtocol::WriteInvalidate,
invalidation_strategy: InvalidationStrategy::LazyInvalidation,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum EvictionPolicy {
Lru,
Lfu,
Fifo,
Random,
Ttl,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CoherenceProtocol {
WriteInvalidate,
WriteUpdate,
DirectoryBased,
SnoopingBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum InvalidationStrategy {
ImmediateInvalidation,
LazyInvalidation,
LeaseBased,
VersionBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OptimizationConfig {
pub enabled: bool,
pub batch_optimization: BatchOptimization,
pub network_optimization: NetworkOptimization,
pub compute_optimization: ComputeOptimization,
pub memory_optimization: MemoryOptimization,
}
impl Default for OptimizationConfig {
fn default() -> Self {
Self {
enabled: true,
batch_optimization: BatchOptimization::default(),
network_optimization: NetworkOptimization::default(),
compute_optimization: ComputeOptimization::default(),
memory_optimization: MemoryOptimization::default(),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BatchOptimization {
pub adaptive_batching: bool,
pub max_batch_size: usize,
pub min_batch_size: usize,
pub batch_timeout_ms: u64,
pub algorithm: AdaptiveBatchingAlgorithm,
}
impl Default for BatchOptimization {
fn default() -> Self {
Self {
adaptive_batching: true,
max_batch_size: 1000,
min_batch_size: 10,
batch_timeout_ms: 100,
algorithm: AdaptiveBatchingAlgorithm::LoadBased,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AdaptiveBatchingAlgorithm {
LoadBased,
LatencyBased,
ThroughputBased,
MlBased,
Custom(String),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkOptimization {
pub compression: CompressionConfig,
pub prefetching: bool,
pub prefetching_strategy: PrefetchingStrategy,
pub connection_pooling: bool,
pub max_connections: usize,
}
impl Default for NetworkOptimization {
fn default() -> Self {
Self {
compression: CompressionConfig::default(),
prefetching: true,
prefetching_strategy: PrefetchingStrategy::AdaptivePrefetching,
connection_pooling: true,
max_connections: 100,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CompressionConfig {
pub enabled: bool,
pub algorithm: CompressionAlgorithm,
pub level: u8,
pub min_size_bytes: usize,
}
impl Default for CompressionConfig {
fn default() -> Self {
Self {
enabled: true,
algorithm: CompressionAlgorithm::Zstd,
level: 3,
min_size_bytes: 1024,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum CompressionAlgorithm {
None,
Gzip,
Lz4,
Zstd,
Snappy,
Brotli,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PrefetchingStrategy {
None,
Sequential,
PatternBased,
AdaptivePrefetching,
MlBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ComputeOptimization {
pub algorithm_selection: bool,
pub selection_strategy: AlgorithmSelectionStrategy,
pub precision_optimization: PrecisionOptimization,
pub vectorization: bool,
pub parallelization: bool,
}
impl Default for ComputeOptimization {
fn default() -> Self {
Self {
algorithm_selection: true,
selection_strategy: AlgorithmSelectionStrategy::PerformanceBased,
precision_optimization: PrecisionOptimization::default(),
vectorization: true,
parallelization: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AlgorithmSelectionStrategy {
PerformanceBased,
MemoryBased,
EnergyBased,
CostBased,
MlBased,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PrecisionOptimization {
pub mixed_precision: bool,
pub default_precision: PrecisionLevel,
pub adaptive_precision: bool,
}
impl Default for PrecisionOptimization {
fn default() -> Self {
Self {
mixed_precision: true,
default_precision: PrecisionLevel::Float32,
adaptive_precision: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum PrecisionLevel {
Float16,
Float32,
Float64,
BFloat16,
Int8,
Int16,
Int32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MemoryOptimization {
pub memory_pooling: bool,
pub pool_size_mb: u64,
pub gc_optimization: bool,
pub allocation_strategy: AllocationStrategy,
}
impl Default for MemoryOptimization {
fn default() -> Self {
Self {
memory_pooling: true,
pool_size_mb: 512,
gc_optimization: true,
allocation_strategy: AllocationStrategy::PoolBased,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum AllocationStrategy {
PoolBased,
ArenaBased,
StackBased,
HeapBased,
}