1use serde::{Deserialize, Serialize};
13use std::time::Duration;
14
15#[derive(Debug, Clone, Serialize, Deserialize, Default)]
17pub struct AdvancedClusterConfig {
18 pub basic_config: super::super::distributed::DistributedConfig,
20 pub consensus_config: ConsensusConfig,
22 pub sharding_config: ShardingConfig,
24 pub fault_tolerance: FaultToleranceConfig,
26 pub auto_scaling: AutoScalingConfig,
28 pub locality_config: LocalityConfig,
30 pub optimization_config: OptimizationConfig,
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct ConsensusConfig {
37 pub algorithm: ConsensusAlgorithm,
39 pub quorum_size: usize,
41 pub election_timeout_ms: u64,
43 pub heartbeat_interval_ms: u64,
45 pub max_entries_per_append: usize,
47 pub log_compaction_threshold: usize,
49 pub snapshot_interval: Duration,
51 pub node_id: Option<String>,
53 pub peers: Option<Vec<String>>,
55}
56
57impl Default for ConsensusConfig {
58 fn default() -> Self {
59 Self {
60 algorithm: ConsensusAlgorithm::Raft,
61 quorum_size: 3,
62 election_timeout_ms: 5000,
63 heartbeat_interval_ms: 1000,
64 max_entries_per_append: 100,
65 log_compaction_threshold: 10000,
66 snapshot_interval: Duration::from_secs(3600),
67 node_id: None,
68 peers: None,
69 }
70 }
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
75pub enum ConsensusAlgorithm {
76 Raft,
78 Pbft,
80 ProofOfStake,
82 DelegatedProofOfStake,
84 SimpleMajority,
86 None,
88}
89
90#[derive(Debug, Clone, Serialize, Deserialize)]
92pub struct ShardingConfig {
93 pub strategy: ShardingStrategy,
95 pub shard_count: usize,
97 pub replication_factor: usize,
99 pub hash_function: HashFunction,
101 pub virtual_nodes: usize,
103 pub dynamic_resharding: bool,
105 pub migration_threshold: f64,
107}
108
109impl Default for ShardingConfig {
110 fn default() -> Self {
111 Self {
112 strategy: ShardingStrategy::ConsistentHash,
113 shard_count: 16,
114 replication_factor: 3,
115 hash_function: HashFunction::Murmur3,
116 virtual_nodes: 256,
117 dynamic_resharding: true,
118 migration_threshold: 0.8,
119 }
120 }
121}
122
123#[derive(Debug, Clone, Serialize, Deserialize)]
125pub enum ShardingStrategy {
126 Hash,
128 Range,
130 Directory,
132 ConsistentHash,
134 Geographic,
136 FeatureBased,
138 Custom(String),
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize)]
144pub enum HashFunction {
145 Md5,
147 Sha256,
149 Crc32,
151 Murmur3,
153 XxHash,
155 Custom(String),
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize)]
161pub struct FaultToleranceConfig {
162 pub max_failures: usize,
164 pub auto_recovery: bool,
166 pub recovery_timeout: u64,
168 pub health_check_interval: u64,
170 pub replacement_strategy: NodeReplacementStrategy,
172 pub backup_interval: Duration,
174 pub rolling_updates: bool,
176 pub graceful_shutdown_timeout: Duration,
178}
179
180impl Default for FaultToleranceConfig {
181 fn default() -> Self {
182 Self {
183 max_failures: 1,
184 auto_recovery: true,
185 recovery_timeout: 300,
186 health_check_interval: 30,
187 replacement_strategy: NodeReplacementStrategy::HotStandby,
188 backup_interval: Duration::from_secs(3600),
189 rolling_updates: true,
190 graceful_shutdown_timeout: Duration::from_secs(60),
191 }
192 }
193}
194
195#[derive(Debug, Clone, Serialize, Deserialize)]
197pub enum NodeReplacementStrategy {
198 Immediate,
200 Delayed { delay: Duration },
202 Manual,
204 HotStandby,
206 ColdStandby,
208}
209
210#[derive(Debug, Clone, Serialize, Deserialize)]
212pub struct AutoScalingConfig {
213 pub enabled: bool,
215 pub min_nodes: usize,
217 pub max_nodes: usize,
219 pub scale_up_cpu_threshold: f64,
221 pub scale_down_cpu_threshold: f64,
223 pub scale_up_memory_threshold: f64,
225 pub scale_down_memory_threshold: f64,
227 pub cooldown_period: Duration,
229 pub policies: Vec<ScalingPolicy>,
231}
232
233impl Default for AutoScalingConfig {
234 fn default() -> Self {
235 Self {
236 enabled: true,
237 min_nodes: 2,
238 max_nodes: 10,
239 scale_up_cpu_threshold: 80.0,
240 scale_down_cpu_threshold: 30.0,
241 scale_up_memory_threshold: 85.0,
242 scale_down_memory_threshold: 40.0,
243 cooldown_period: Duration::from_secs(300),
244 policies: vec![],
245 }
246 }
247}
248
249#[derive(Debug, Clone, Serialize, Deserialize)]
251pub struct ScalingPolicy {
252 pub name: String,
254 pub metric: String,
256 pub threshold: f64,
258 pub action: ScalingAction,
260 pub adjustment_type: AdjustmentType,
262 pub adjustment_value: f64,
264 pub cooldown: Duration,
266}
267
268#[derive(Debug, Clone, Serialize, Deserialize)]
270pub enum ScalingAction {
271 ScaleUp,
273 ScaleDown,
275 None,
277}
278
279#[derive(Debug, Clone, Serialize, Deserialize)]
281pub enum AdjustmentType {
282 ChangeInCapacity,
284 ExactCapacity,
286 PercentChangeInCapacity,
288}
289
290#[derive(Debug, Clone, Serialize, Deserialize)]
292pub struct LocalityConfig {
293 pub enabled: bool,
295 pub strategy: LocalityStrategy,
297 pub topology: NetworkTopology,
299 pub affinity_rules: Vec<AffinityRule>,
301 pub cache_config: CacheConfig,
303}
304
305impl Default for LocalityConfig {
306 fn default() -> Self {
307 Self {
308 enabled: true,
309 strategy: LocalityStrategy::NetworkAware,
310 topology: NetworkTopology::default(),
311 affinity_rules: vec![],
312 cache_config: CacheConfig::default(),
313 }
314 }
315}
316
317#[derive(Debug, Clone, Serialize, Deserialize)]
319pub enum LocalityStrategy {
320 NetworkAware,
322 Geographic,
324 LatencyBased,
326 BandwidthAware,
328 CostOptimized,
330 Custom(String),
332}
333
334#[derive(Debug, Clone, Serialize, Deserialize, Default)]
336pub struct NetworkTopology {
337 pub levels: Vec<TopologyLevel>,
339 pub node_locations: std::collections::HashMap<String, Location>,
341}
342
343#[derive(Debug, Clone, Serialize, Deserialize)]
345pub struct Location {
346 pub coordinates: Vec<String>,
348 pub geo_coordinates: Option<(f64, f64)>,
350 pub bandwidth: f64,
352 pub latency_ms: f64,
354}
355
356#[derive(Debug, Clone, Serialize, Deserialize)]
358pub struct TopologyLevel {
359 pub name: String,
361 pub index: usize,
363}
364
365#[derive(Debug, Clone, Serialize, Deserialize)]
367pub struct AffinityRule {
368 pub name: String,
370 pub source_pattern: String,
372 pub target_pattern: String,
374 pub affinity_type: AffinityType,
376 pub weight: f64,
378}
379
380#[derive(Debug, Clone, Serialize, Deserialize)]
382pub enum AffinityType {
383 Attract,
385 Repel,
387 SameLevel(usize),
389 Custom(String),
391}
392
393#[derive(Debug, Clone, Serialize, Deserialize)]
395pub struct CacheConfig {
396 pub enabled: bool,
398 pub cache_size_mb: u64,
400 pub eviction_policy: EvictionPolicy,
402 pub coherence_protocol: CoherenceProtocol,
404 pub invalidation_strategy: InvalidationStrategy,
406}
407
408impl Default for CacheConfig {
409 fn default() -> Self {
410 Self {
411 enabled: true,
412 cache_size_mb: 1024,
413 eviction_policy: EvictionPolicy::Lru,
414 coherence_protocol: CoherenceProtocol::WriteInvalidate,
415 invalidation_strategy: InvalidationStrategy::LazyInvalidation,
416 }
417 }
418}
419
420#[derive(Debug, Clone, Serialize, Deserialize)]
422pub enum EvictionPolicy {
423 Lru,
425 Lfu,
427 Fifo,
429 Random,
431 Ttl,
433}
434
435#[derive(Debug, Clone, Serialize, Deserialize)]
437pub enum CoherenceProtocol {
438 WriteInvalidate,
440 WriteUpdate,
442 DirectoryBased,
444 SnoopingBased,
446}
447
448#[derive(Debug, Clone, Serialize, Deserialize)]
450pub enum InvalidationStrategy {
451 ImmediateInvalidation,
453 LazyInvalidation,
455 LeaseBased,
457 VersionBased,
459}
460
461#[derive(Debug, Clone, Serialize, Deserialize)]
463pub struct OptimizationConfig {
464 pub enabled: bool,
466 pub batch_optimization: BatchOptimization,
468 pub network_optimization: NetworkOptimization,
470 pub compute_optimization: ComputeOptimization,
472 pub memory_optimization: MemoryOptimization,
474}
475
476impl Default for OptimizationConfig {
477 fn default() -> Self {
478 Self {
479 enabled: true,
480 batch_optimization: BatchOptimization::default(),
481 network_optimization: NetworkOptimization::default(),
482 compute_optimization: ComputeOptimization::default(),
483 memory_optimization: MemoryOptimization::default(),
484 }
485 }
486}
487
488#[derive(Debug, Clone, Serialize, Deserialize)]
490pub struct BatchOptimization {
491 pub adaptive_batching: bool,
493 pub max_batch_size: usize,
495 pub min_batch_size: usize,
497 pub batch_timeout_ms: u64,
499 pub algorithm: AdaptiveBatchingAlgorithm,
501}
502
503impl Default for BatchOptimization {
504 fn default() -> Self {
505 Self {
506 adaptive_batching: true,
507 max_batch_size: 1000,
508 min_batch_size: 10,
509 batch_timeout_ms: 100,
510 algorithm: AdaptiveBatchingAlgorithm::LoadBased,
511 }
512 }
513}
514
515#[derive(Debug, Clone, Serialize, Deserialize)]
517pub enum AdaptiveBatchingAlgorithm {
518 LoadBased,
520 LatencyBased,
522 ThroughputBased,
524 MlBased,
526 Custom(String),
528}
529
530#[derive(Debug, Clone, Serialize, Deserialize)]
532pub struct NetworkOptimization {
533 pub compression: CompressionConfig,
535 pub prefetching: bool,
537 pub prefetching_strategy: PrefetchingStrategy,
539 pub connection_pooling: bool,
541 pub max_connections: usize,
543}
544
545impl Default for NetworkOptimization {
546 fn default() -> Self {
547 Self {
548 compression: CompressionConfig::default(),
549 prefetching: true,
550 prefetching_strategy: PrefetchingStrategy::AdaptivePrefetching,
551 connection_pooling: true,
552 max_connections: 100,
553 }
554 }
555}
556
557#[derive(Debug, Clone, Serialize, Deserialize)]
559pub struct CompressionConfig {
560 pub enabled: bool,
562 pub algorithm: CompressionAlgorithm,
564 pub level: u8,
566 pub min_size_bytes: usize,
568}
569
570impl Default for CompressionConfig {
571 fn default() -> Self {
572 Self {
573 enabled: true,
574 algorithm: CompressionAlgorithm::Zstd,
575 level: 3,
576 min_size_bytes: 1024,
577 }
578 }
579}
580
581#[derive(Debug, Clone, Serialize, Deserialize)]
583pub enum CompressionAlgorithm {
584 None,
586 Gzip,
588 Lz4,
590 Zstd,
592 Snappy,
594 Brotli,
596}
597
598#[derive(Debug, Clone, Serialize, Deserialize)]
600pub enum PrefetchingStrategy {
601 None,
603 Sequential,
605 PatternBased,
607 AdaptivePrefetching,
609 MlBased,
611}
612
613#[derive(Debug, Clone, Serialize, Deserialize)]
615pub struct ComputeOptimization {
616 pub algorithm_selection: bool,
618 pub selection_strategy: AlgorithmSelectionStrategy,
620 pub precision_optimization: PrecisionOptimization,
622 pub vectorization: bool,
624 pub parallelization: bool,
626}
627
628impl Default for ComputeOptimization {
629 fn default() -> Self {
630 Self {
631 algorithm_selection: true,
632 selection_strategy: AlgorithmSelectionStrategy::PerformanceBased,
633 precision_optimization: PrecisionOptimization::default(),
634 vectorization: true,
635 parallelization: true,
636 }
637 }
638}
639
640#[derive(Debug, Clone, Serialize, Deserialize)]
642pub enum AlgorithmSelectionStrategy {
643 PerformanceBased,
645 MemoryBased,
647 EnergyBased,
649 CostBased,
651 MlBased,
653}
654
655#[derive(Debug, Clone, Serialize, Deserialize)]
657pub struct PrecisionOptimization {
658 pub mixed_precision: bool,
660 pub default_precision: PrecisionLevel,
662 pub adaptive_precision: bool,
664}
665
666impl Default for PrecisionOptimization {
667 fn default() -> Self {
668 Self {
669 mixed_precision: true,
670 default_precision: PrecisionLevel::Float32,
671 adaptive_precision: true,
672 }
673 }
674}
675
676#[derive(Debug, Clone, Serialize, Deserialize)]
678pub enum PrecisionLevel {
679 Float16,
681 Float32,
683 Float64,
685 BFloat16,
687 Int8,
689 Int16,
691 Int32,
693}
694
695#[derive(Debug, Clone, Serialize, Deserialize)]
697pub struct MemoryOptimization {
698 pub memory_pooling: bool,
700 pub pool_size_mb: u64,
702 pub gc_optimization: bool,
704 pub allocation_strategy: AllocationStrategy,
706}
707
708impl Default for MemoryOptimization {
709 fn default() -> Self {
710 Self {
711 memory_pooling: true,
712 pool_size_mb: 512,
713 gc_optimization: true,
714 allocation_strategy: AllocationStrategy::PoolBased,
715 }
716 }
717}
718
719#[derive(Debug, Clone, Serialize, Deserialize)]
721pub enum AllocationStrategy {
722 PoolBased,
724 ArenaBased,
726 StackBased,
728 HeapBased,
730}