Skip to content

Latest commit

 

History

History
233 lines (187 loc) · 6.68 KB

plan.md

File metadata and controls

233 lines (187 loc) · 6.68 KB

Базовые улучшения для rzd-des-engine:

🔧 Архитектурные улучшения

1. Модульны конфиг_listener / маршрутизатор команд

Создать специализированные модули для разных типов команд:

// В crates/rzd-cli/src/commands/
- benchmark/mod.rs
- validate/mod.rs
- scenario/mod.rs
- checkpoint/mod.rs
- comparison/mod.rs
- export/mod.rs

2. Enhanced Error Handling

Создать централизованный тип RzdError с классификацией:

enum RzdError {
    Validation(String),
    Simulation(String),
    Export(String),
    Config(String),
    Timeout(Duration),
    ResourceExhaustion(String),
}

⚡ Performance критические улучшения

3. Memory Pool оптимизация

Использовать crossbeam и parking_lot для снижения GC:

// crates/rzd-core/src/lib.rs
#[global_allocator]
static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc;

thread_local! {
    static EVENT_POOL: Mutex<VecDeque<Event>> = Mutex::new(VecDeque::with_capacity(1024));
}

4. Parallel processing для экспорта

Батчевое сохранение экспортов:

// crates/rzd-cli/src/export/ced.rs
async fn export_ced_batch(
    events: &[Event],
    config: &ExportConfig
) -> Result<CedExport, ExportError> {
    // Ручнаяแบ่ง� на тайлы для параллельной записи
}

📊 Enhanced Monitoring & Telemetry

5. Performance метрики с детализацией по событиям

// crates/rzd-core/src/monitor.rs
pub struct Monitor {
    event_counts: RwLock<HashMap<EventType, u64>>,
    processing_times: RwLock<VecDeque<Duration>>,
    export_metrics: RwLock<ExportMetrics>,
}

impl Monitor {
    pub fn record_event(&self, event_type: EventType, processing_time: Duration) {
        // Детализация с таймстампами и context_id
    }

    pub fn get_performance_summary(&self) -> PerformanceSummary {
        // Вычислять throughput, P95/P99 задержки
    }
}

🔧 CLI & UX улучшения

6. Interactive прогресс-бар с детализацией

// crates/rzd-cli/src/ui/progress.rs
struct ProgressTracker {
    current_event: AtomicU64,
    total_events: u64,
    start_time: Instant,
    events_per_second: f64,
    eta: Duration,
}

impl ProgressTracker {
    fn update(&self, completed: u64) {
        // Animate spinner + percentage + ETA + throughput
    }
}

7. Enhanced benchmarking с profile matching

Поддерживать сложные профили и матчинг:

// crates/rzd-cli/src/benchmark/mod.rs
struct ProfileMatcher {
    criteria: ProfileCriteria,
    weights: HashMap<String, f64>,
}

impl ProfileMatcher {
    fn match_profile(&self, results: &BenchmarkResults) -> String {
        // Маштабировать результаты на множество профилей
    }
}

📈 Scaling & Extensibility

8. Plugin system для расширения

// crates/rzd-core/src/plugin.rs
pub trait RzdPlugin {
    fn name(&self) -> &'static str;
    fn version(&self) -> &'static str;
    fn event_filter(&self) -> Vec<EventType>;
    fn handle_event(&self, event: &Event) -> Result<(), PluginError>;
}

// Core engine support:
- CedExporterPlugin
- TraceExporterPlugin
- StatisticsCollectorPlugin
- ScriptedDisruptionPlugin

🔄 Enhanced Checkpointing

9. Incremental бэкапы с дельта-файлами

// crates/rzd-cli/src/checkpoint/incremental.rs
struct IncrementalCheckpoint {
    engine_state: EngineSnapshot,
    event_delta_file: PathBuf,  // Только новые события
    metadata_file: PathBuf,      // Мета-информация о снепе
}

impl IncrementalCheckpoint {
    fn save_delta(&self, new_events: &[Event]) -> Result<(), CheckpointError> {
        // Записать только новые события в дельта-файл
    }
}

📝 Documentation & Examples

10. Automated examples генерация

Сохранять демонстрационные сценарии в репозитории:

// crates/rzd-cli/src/examples.rs
impl ScenarioGenerator {
    fn generate_realistic_workload(&self, profile: ProfileType) -> Result<ScenarioConfig, ScenarioError> {
        // Сгенерировать realistic crew/loco assignments с реальными ограничениями
    }
}

🏗️ Architecture символическое улучшение

11. Enhance сепарация вызов через traits

// crates/rzd-core/src/traits.rs
pub trait EngineRunner {
    fn run_scenario(&self, config: ScenarioConfig) -> Result<RunResult, EngineError>;
    fn export_event_trace(&self, run_id: u64) -> Result<TraceExport, ExportError>;
}

pub trait ExportPlugin {
    fn export(&self, run_id: u64, engine_state: &EngineState) -> Result<Box<dyn ExportOutput>, ExportError>;
}

🎯 Приоритеты для первого спринта

Высокая отдача

  1. Memory pool (5-10% выигрыш производительности)
  2. Enhanced CLI progress (лучший UX)
  3. Instrumentation (видимость задержек)

Средняя отдача

  1. Parallel export processing (лучше используется CPU)
  2. Plugin system (готовность к будущим функциям)

Низкая отдача

  1. Инкременентальные бэкапы
  2. Enhanced benchmarking
  3. Plugin examples

📊 Метрики успеха

Performance

  • <500ms для 100k событий (остается)
  • <100мс для экспорта CED (>10k событий)
  • <200мс для экспорта нарушения
  • Memory usage <2GB для крупных нагрузок

Reliability

  • Детализация всех отказов
  • Processing без остановки на I/O (mock-парты)
  • Recovery timeout детализации

UX

  • Интерактивное отображение прогресса
  • Better ошибки с иерархией
  • Лучшая CLI документация

Вот стратегическое плановое обеспечение High Velocity + High Quality, которое не жертвует стабильностью ради скорости. Какие аспекты вы бы хотели approfondie быстрее?