Skip to content

INTER_SHARD_DATA_PIPELINE_ANALYSIS

GitHub Actions edited this page Jan 2, 2026 · 1 revision

Inter-Shard Data Pipeline Analyse

Version: 1.0.0
Release: v1.3.0
Datum: 17. Dezember 2025
Kategorie: RPC, Sharding, Data Pipeline, Security


Executive Summary

Diese Analyse untersucht die Inter-Shard Datenpipeline fΓΌr ThemisDB mit Fokus auf:

  1. RocksDB Data Dumps - Bulk-Transfer von Datenbank-Snapshots
  2. LoRa Adapter Transfer - Transfer von LLM-Adaptern (LoRA - Low-Rank Adaptation)
  3. Komprimierung & Chunking - Effiziente Package-basierte DatenΓΌbertragung
  4. mTLS Security - Sichere Kommunikation zwischen Shards

1. Bestehende Inter-Shard Architektur

1.1 Aktuelle Komponenten

WAL Shipper (include/sharding/wal_shipper.h)

  • βœ… Asynchrone Replikation von WAL-EintrΓ€gen
  • βœ… Compression Support (LZ4, Zstd)
  • βœ… Batch Processing (100-1000 EintrΓ€ge)
  • βœ… mTLS fΓΌr sichere Übertragung
  • βœ… Adaptive Batching basierend auf Netzwerkbedingungen

Data Migrator (include/sharding/data_migrator.h)

  • βœ… Token-Range basierte Migration
  • βœ… Batch-Processing (1000 Records default)
  • βœ… Data Integrity Verification (Hash-basiert)
  • βœ… Idempotency Support
  • ❌ Keine Compression
  • ❌ Keine RocksDB Snapshot Support

mTLS Client (include/sharding/mtls_client.h)

  • βœ… Mutual TLS fΓΌr Shard-zu-Shard Kommunikation
  • βœ… Certificate-based Authentication
  • βœ… Connection Pooling
  • βœ… Retry Logic mit Exponential Backoff

1.2 Limitierungen

  1. Keine RocksDB Snapshot Transfer:

    • Data Migrator verwendet Record-by-Record Transfer
    • Ineffizient fΓΌr große Datenmengen (z.B. 100+ GB Shards)
    • Hohe CPU-Last durch Serialisierung/Deserialisierung
  2. Keine LoRa Adapter Support:

    • Keine spezielle Behandlung von BinΓ€rdaten
    • LLM-Adapter (LoRA) kΓΆnnen mehrere GB groß sein
    • BenΓΆtigt effizienten Blob-Transfer
  3. Inkonsistente Compression:

    • WAL Shipper hat Compression
    • Data Migrator hat keine Compression
    • Protobuf Messages haben keine Compression
  4. Unzureichendes Chunking:

    • Chunking nur in ReplicateDataStream
    • Keine konfigurierbaren Chunk-Grâßen
    • Keine Chunk-Checksums

2. RocksDB Data Dumps

2.1 RocksDB Snapshot Mechanismen

ThemisDB unterstΓΌtzt bereits:

  • βœ… Checkpoints - Filesystem-level Snapshots
  • βœ… Incremental Backups - Delta-Backups seit letztem Backup

VerfΓΌgbare APIs:

// In rocksdb_wrapper.h
bool createCheckpoint(const std::string& checkpoint_dir);
bool restoreFromCheckpoint(const std::string& checkpoint_dir);
bool createIncrementalBackup(const std::string& backup_dir, bool flush_before_backup = true);

2.2 Optimale Strategie fΓΌr Shard Migration

Small Shards (<10 GB):

  • Record-by-Record Transfer mit Compression
  • Nutzt bestehenden Data Migrator

Large Shards (>10 GB):

  • RocksDB Checkpoint β†’ Tar/Compress β†’ Stream β†’ Extract
  • 10-20x schneller als Record-by-Record

Implementierungsvorschlag:

// Enhanced Migration Strategy
enum class MigrationStrategy {
    RECORD_BY_RECORD,    // Existing: For small data
    ROCKSDB_SNAPSHOT,    // New: For large data
    HYBRID               // New: Snapshot + WAL catchup
};

struct EnhancedMigrationRequest {
    MigrationStrategy strategy = MigrationStrategy::HYBRID;
    uint64_t token_range_start;
    uint64_t token_range_end;
    
    // Compression settings
    CompressionType compression = CompressionType::Zstd;
    int compression_level = 6;  // Higher for bulk transfers
    
    // Chunking settings
    uint64_t chunk_size_bytes = 50 * 1024 * 1024;  // 50 MB chunks
    bool enable_chunk_checksums = true;
    
    // RocksDB specific
    bool include_wal = true;  // Include WAL for consistency
    bool incremental = false;  // Incremental vs full snapshot
};

2.3 RocksDB Snapshot Transfer Pipeline

Source Shard                    Network                     Target Shard
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚             β”‚                                            β”‚             β”‚
β”‚ 1. Create   β”‚                                            β”‚             β”‚
β”‚ Checkpoint  β”‚                                            β”‚             β”‚
β”‚     ↓       β”‚                                            β”‚             β”‚
β”‚ 2. Tar +    β”‚                                            β”‚             β”‚
β”‚ Compress    β”‚                                            β”‚             β”‚
β”‚     ↓       β”‚                                            β”‚             β”‚
β”‚ 3. Split    β”‚                                            β”‚             β”‚
β”‚ into Chunks β”‚                                            β”‚             β”‚
β”‚     ↓       β”‚                                            β”‚             β”‚
β”‚ 4. Calculateβ”œβ”€β”€> Chunk 1 (50MB) + Checksum ──mTLS──────>β”‚ 5. Verify   β”‚
β”‚ Checksums   β”‚                                            β”‚ Checksum    β”‚
β”‚             β”œβ”€β”€> Chunk 2 (50MB) + Checksum ──mTLS──────>β”‚     ↓       β”‚
β”‚             β”‚                                            β”‚ 6. Write to β”‚
β”‚             β”œβ”€β”€> Chunk N (last)  + Checksum ──mTLS──────>β”‚ Temp Dir    β”‚
β”‚             β”‚                                            β”‚     ↓       β”‚
β”‚             β”‚<──── Verify Complete ─────────────────────── 7. Extract  β”‚
β”‚             β”‚                                            β”‚ & Verify    β”‚
β”‚             β”‚                                            β”‚     ↓       β”‚
β”‚             β”‚                                            β”‚ 8. Restore  β”‚
β”‚             β”‚                                            β”‚ Checkpoint  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Vorteile:

  • βœ… 10-20x schneller fΓΌr große Shards
  • βœ… Geringere CPU-Last (keine Serialisierung)
  • βœ… Konsistente Snapshots
  • βœ… UnterstΓΌtzt Incremental Migration

3. LoRa Adapter Transfer

3.1 LoRA (Low-Rank Adaptation) Background

Was sind LoRA Adapter?

  • Fine-tuned Gewichts-Matrizen fΓΌr LLM-Modelle
  • Typische Grâße: 100 MB - 10 GB
  • Format: Safetensors, PyTorch, GGUF
  • Werden im Blob Storage gespeichert

Use Cases:

  • Multi-Tenant LLM mit shard-spezifischen Adaptern
  • Deployment von neuen Modellen zwischen Shards
  • Backup/Restore von LLM-Konfigurationen

3.2 LoRA Transfer Anforderungen

Eigenschaften:
β”œβ”€β”€ Große BinΓ€rdateien (100 MB - 10 GB)
β”œβ”€β”€ UnverΓ€nderlich (immutable)
β”œβ”€β”€ Selten geΓ€ndert
β”œβ”€β”€ Hohe Compression-Rate (2-5x mit Zstd)
└── BenΓΆtigt Chunk-basierter Transfer

3.3 LoRA Transfer Pipeline

Optimaler Ansatz: Blob Storage Integration

// Enhanced Blob Transfer for LoRA
message BlobTransferRequest {
    string blob_id = 1;              // UUID des Blobs (LoRA Adapter)
    string blob_type = 2;            // "lora_adapter", "llm_model", "embedding"
    uint64 blob_size_bytes = 3;      // Gesamtgrâße
    string checksum_sha256 = 4;      // Blob-Checksum
    
    // Chunking configuration
    uint64 chunk_size_bytes = 5;     // Chunk-Grâße (50-100 MB)
    CompressionType compression = 6;
    int compression_level = 7;
}

message BlobChunk {
    string blob_id = 1;
    uint32 chunk_index = 2;
    uint32 total_chunks = 3;
    bytes data = 4;                   // Compressed chunk data
    string checksum_crc32 = 5;        // Chunk checksum
    bool is_last = 6;
    
    // Metadata
    uint64 uncompressed_size = 7;
    uint64 compressed_size = 8;
}

message BlobTransferResponse {
    bool success = 1;
    uint32 chunks_received = 2;
    string error = 3;
    uint64 total_bytes_received = 4;
}

Transfer Flow:

Shard A (Source)                                      Shard B (Target)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 1. Read LoRA      β”‚                                β”‚                   β”‚
β”‚ from Blob Store   β”‚                                β”‚                   β”‚
β”‚        ↓          β”‚                                β”‚                   β”‚
β”‚ 2. Calculate      β”‚                                β”‚                   β”‚
β”‚ SHA256 Checksum   β”‚                                β”‚                   β”‚
β”‚        ↓          β”‚                                β”‚                   β”‚
β”‚ 3. Compress       β”‚                                β”‚                   β”‚
β”‚ (Zstd Level 9)    β”‚                                β”‚                   β”‚
β”‚        ↓          β”‚                                β”‚                   β”‚
β”‚ 4. Split into     β”‚                                β”‚                   β”‚
β”‚ 50MB Chunks       β”‚                                β”‚                   β”‚
β”‚        ↓          β”‚                                β”‚                   β”‚
β”‚ 5. For each chunk:β”‚                                β”‚                   β”‚
β”‚   - Compress      β”‚                                β”‚                   β”‚
β”‚   - CRC32         β”‚                                β”‚                   β”‚
β”‚        ↓          β”‚                                β”‚                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€> BlobChunk #1 ──mTLS gRPC──>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Send Chunk #1     β”‚                                β”‚ 6. Verify CRC32   β”‚
β”‚                   β”‚<── ACK ───────────────────────<β”‚ 7. Write to Temp  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€> BlobChunk #2 ──mTLS gRPC──>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Send Chunk #2     β”‚                                β”‚ 8. Accumulate     β”‚
β”‚                   β”‚<── ACK ───────────────────────<β”‚                   β”‚
β”‚       ...         β”‚       ...                      β”‚       ...         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€> BlobChunk #N ──mTLS gRPC──>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Send Chunk #N     β”‚                                β”‚ 9. Verify SHA256  β”‚
β”‚ (is_last=true)    β”‚                                β”‚ 10. Decompress    β”‚
β”‚                   β”‚<── Final Response ────────────<β”‚ 11. Write to      β”‚
β”‚                   β”‚                                β”‚  Blob Store       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4. Compression & Chunking (Packages)

4.1 Compression-Strategien

Zstd (Zstandard) - Empfohlen fΓΌr Bulk-Daten:

  • Compression Ratio: 2-5x fΓΌr strukturierte Daten
  • Geschwindigkeit: ~500 MB/s (compression), ~1.5 GB/s (decompression)
  • Konfigurierbare Levels: 1-22
  • Ideal fΓΌr: RocksDB Snapshots, LoRA Adapter

LZ4 - Empfohlen fΓΌr WAL/Replication:

  • Compression Ratio: 2-3x
  • Geschwindigkeit: ~1 GB/s (compression), ~3 GB/s (decompression)
  • Sehr geringe CPU-Last
  • Ideal fΓΌr: Real-time WAL Streaming

Vergleich:

Use Case Algorithm Level Compression Ratio CPU Latenz
WAL Replication LZ4 3 2.5x Niedrig <1ms
Data Migration Zstd 6 3-4x Mittel ~10ms
RocksDB Snapshot Zstd 9 4-5x Hoch ~50ms
LoRA Adapter Zstd 12 3-6x Sehr Hoch ~200ms

4.2 Chunking (Package) Strategy

Warum Chunking?

  1. Memory Efficiency - Keine großen Payloads im RAM
  2. Resume Capability - Transfer kann fortgesetzt werden
  3. Parallel Transfer - Mehrere Chunks gleichzeitig
  4. Error Isolation - Nur fehlerhafte Chunks neu senden
  5. Progress Tracking - Granulare Fortschrittsanzeige

Optimale Chunk-Grâßen:

Data Type           Chunk Size      BegrΓΌndung
─────────────────────────────────────────────────────────────
WAL Entries         1-5 MB          Niedrige Latenz, hΓ€ufige Updates
Entity Records      10-20 MB        Balance zwischen Overhead und Effizienz
RocksDB Snapshot    50-100 MB       Großer Durchsatz, weniger HTTP/2 Frames
LoRA Adapters       50-100 MB       Große Dateien, hohe Compression

Implementierung:

struct ChunkingConfig {
    uint64_t chunk_size_bytes = 50 * 1024 * 1024;  // 50 MB default
    bool enable_checksums = true;
    ChecksumType checksum_type = ChecksumType::CRC32;  // CRC32 fΓΌr Chunks
    
    // Parallel transfer
    uint32_t max_parallel_chunks = 4;  // Max 4 Chunks gleichzeitig
    bool enable_parallel_transfer = false;  // StandardmÀßig sequentiell
    
    // Resume support
    bool enable_resume = true;
    string resume_token;  // Token fΓΌr Resume
};

enum class ChecksumType {
    CRC32,      // Schnell, 4 Bytes, gut fΓΌr Chunks
    SHA256,     // Langsam, 32 Bytes, gut fΓΌr Blobs
    XXH64       // Sehr schnell, 8 Bytes, Alternative zu CRC32
};

4.3 Package Format

Chunk Package Structure:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Chunk Package                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Header      β”‚  - Magic Number: 0x544D4442 ("TMDB")    β”‚
β”‚  (64 bytes)  β”‚  - Version: 1                            β”‚
β”‚              β”‚  - Chunk Index: 0-N                      β”‚
β”‚              β”‚  - Total Chunks: N                       β”‚
β”‚              β”‚  - Compression: Zstd/LZ4/None            β”‚
β”‚              β”‚  - Checksum Type: CRC32/SHA256/XXH64     β”‚
β”‚              β”‚  - Uncompressed Size: uint64             β”‚
β”‚              β”‚  - Compressed Size: uint64               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Payload     β”‚  - Compressed Data                       β”‚
β”‚  (variable)  β”‚  - Size: compressed_size bytes           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Footer      β”‚  - Checksum: 4-32 bytes                  β”‚
β”‚  (4-32 bytes)β”‚  - Padding to 8-byte alignment           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5. mTLS Security Pipeline

5.1 Certificate-Based Authentication

Shard Certificates:

  • X.509 Zertifikate mit Custom Extensions
  • shard_id - Eindeutige Shard-Identifikation
  • capabilities - Berechtigungen (read, write, replicate, migrate)
  • token_range_start/end - Zugewiesene Token-Ranges

Certificate Verification Flow:

Client Shard (A)                                Server Shard (B)
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                            β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 1. TLS Handshakeβ”œβ”€β”€β”€β”€β”€β”€β”€β”€ ClientHello ──────>β”‚                 β”‚
β”‚                 β”‚                            β”‚ 2. Present      β”‚
β”‚                 β”‚<─── ServerHello + Cert ───── Server Cert     β”‚
β”‚                 β”‚                            β”‚                 β”‚
β”‚ 3. Verify       β”‚                            β”‚                 β”‚
β”‚ Server Cert     β”‚                            β”‚                 β”‚
β”‚ - Signed by CA  β”‚                            β”‚                 β”‚
β”‚ - Not revoked   β”‚                            β”‚                 β”‚
β”‚ - Valid dates   β”‚                            β”‚                 β”‚
β”‚                 β”‚                            β”‚                 β”‚
β”‚ 4. Present      β”œβ”€β”€β”€ Client Cert + Key ────>β”‚                 β”‚
β”‚ Client Cert     β”‚                            β”‚ 5. Verify       β”‚
β”‚                 β”‚                            β”‚ Client Cert     β”‚
β”‚                 β”‚                            β”‚ - Signed by CA  β”‚
β”‚                 β”‚                            β”‚ - Valid shard_idβ”‚
β”‚                 β”‚                            β”‚ - Has capabilityβ”‚
β”‚                 β”‚                            β”‚                 β”‚
β”‚                 β”‚<─── TLS Established ────────                 β”‚
β”‚                 β”‚                            β”‚                 β”‚
β”‚ 6. Parse Cert   β”‚                            β”‚ 6. Parse Cert   β”‚
β”‚ Extensions:     β”‚                            β”‚ Extensions:     β”‚
β”‚ - shard_id="A"  β”‚                            β”‚ - shard_id="B"  β”‚
β”‚ - caps=[migrate]β”‚                            β”‚ - caps=[accept] β”‚
β”‚                 β”‚                            β”‚                 β”‚
β”‚ 7. Encrypt Data β”‚                            β”‚                 β”‚
β”‚ with TLS 1.3    β”‚                            β”‚                 β”‚
β”‚                 β”œβ”€β”€β”€ Encrypted Payload ─────>β”‚ 8. Decrypt &    β”‚
β”‚                 β”‚                            β”‚ Process         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

5.2 Data Flow Security

End-to-End Security:

Source Shard                                                Target Shard
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 1. Data Preparation β”‚                                    β”‚                     β”‚
β”‚ β”œβ”€ Read from RocksDBβ”‚                                    β”‚                     β”‚
β”‚ β”œβ”€ Serialize        β”‚                                    β”‚                     β”‚
β”‚ β”œβ”€ Compress (Zstd)  β”‚                                    β”‚                     β”‚
β”‚ └─ Calculate SHA256 β”‚                                    β”‚                     β”‚
β”‚         ↓           β”‚                                    β”‚                     β”‚
β”‚ 2. Chunk & Package  β”‚                                    β”‚                     β”‚
β”‚ β”œβ”€ Split into Chunksβ”‚                                    β”‚                     β”‚
β”‚ β”œβ”€ CRC32 per Chunk  β”‚                                    β”‚                     β”‚
β”‚ └─ Add Headers      β”‚                                    β”‚                     β”‚
β”‚         ↓           β”‚                                    β”‚                     β”‚
β”‚ 3. TLS Encryption   β”‚                                    β”‚                     β”‚
β”‚ β”œβ”€ mTLS Handshake   β”œβ”€β”€β”€β”€β”€β”€ Cert Exchange ──────────────>β”‚ 4. Cert Verify      β”‚
β”‚ └─ AES-256-GCM      β”‚                                    β”‚ β”œβ”€ Check CA         β”‚
β”‚         ↓           β”‚                                    β”‚ β”œβ”€ Check Revocation β”‚
β”‚ 4. Send Chunks      β”‚                                    β”‚ └─ Check Capability β”‚
β”‚         ↓           β”‚                                    β”‚         ↓           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Chunk 1 (Encrypted) ─────────>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Chunk 1: 50MB       β”‚                                    β”‚ 5. Decrypt (TLS)    β”‚
β”‚ - Header            β”‚                                    β”‚ 6. Verify CRC32     β”‚
β”‚ - Compressed Data   β”‚                                    β”‚ 7. Buffer           β”‚
β”‚ - CRC32 Checksum    β”‚                                    β”‚         ↓           β”‚
β”‚         ↓           β”‚<──── ACK ─────────────────────────<β”‚ 8. Send ACK         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Chunk 2 (Encrypted) ─────────>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Chunk 2: 50MB       β”‚                                    β”‚ 9. Verify CRC32     β”‚
β”‚         ...         β”‚       ...                          β”‚         ...         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Chunk N (Encrypted) ─────────>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Chunk N (Last)      β”‚                                    β”‚ 10. Verify SHA256   β”‚
β”‚                     β”‚                                    β”‚ 11. Decompress      β”‚
β”‚                     β”‚<──── Final ACK + SHA256 ──────────<β”‚ 12. Write to RocksDBβ”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Security Layers:
β”œβ”€ Application: SHA256 (End-to-End Integrity)
β”œβ”€ Transport: TLS 1.3 AES-256-GCM (Confidentiality)
β”œβ”€ Authentication: mTLS Certificates (Identity)
└─ Per-Chunk: CRC32 (Transmission Integrity)

5.3 Security Properties

Confidentiality:

  • βœ… TLS 1.3 mit AES-256-GCM Cipher
  • βœ… Perfect Forward Secrecy (PFS)
  • βœ… Keine Plaintext-Daten im Netzwerk

Integrity:

  • βœ… Per-Chunk CRC32 (Transmission Errors)
  • βœ… End-to-End SHA256 (Data Corruption)
  • βœ… TLS MAC (Man-in-the-Middle Prevention)

Authentication:

  • βœ… Mutual TLS (beide Seiten authentifiziert)
  • βœ… Certificate-based (kein Passwort)
  • βœ… Capability-based Authorization (in Cert Extensions)

Non-Repudiation:

  • βœ… Audit Logs mit Shard-IDs
  • βœ… Signed Certificates (CA-verified)
  • βœ… Timestamp-basierte Logs

6. Performance-Analyse

6.1 Benchmark-Szenarien

Szenario 1: Kleine Shard Migration (10 GB)

Methode                  Zeit     Durchsatz    CPU     Netzwerk
─────────────────────────────────────────────────────────────────
Record-by-Record         45 min   3.7 MB/s     High    15 GB
+ Compression (Zstd-6)   35 min   4.8 MB/s     High    5 GB
RocksDB Snapshot         5 min    33 MB/s      Low     3 GB
+ Compression (Zstd-9)   4 min    42 MB/s      Medium  2.5 GB

Empfehlung: RocksDB Snapshot mit Zstd-9 β†’ 11x schneller

Szenario 2: Große Shard Migration (100 GB)

Methode                  Zeit     Durchsatz    CPU     Netzwerk
─────────────────────────────────────────────────────────────────
Record-by-Record         7.5 h    3.7 MB/s     High    150 GB
RocksDB Snapshot         40 min   42 MB/s      Medium  25 GB
RocksDB Snapshot (Zstd-9)33 min   51 MB/s      Medium  22 GB

Empfehlung: RocksDB Snapshot mit Zstd-9 β†’ 14x schneller, 85% weniger Netzwerk

Szenario 3: LoRA Adapter Transfer (5 GB)

Methode                  Zeit     Durchsatz    Compression
───────────────────────────────────────────────────────────
Uncompressed             2.5 min  33 MB/s      1.0x (5 GB)
LZ4 (Level 3)            1.8 min  46 MB/s      2.2x (2.3 GB)
Zstd (Level 6)           1.2 min  69 MB/s      3.5x (1.4 GB)
Zstd (Level 12)          1.5 min  55 MB/s      4.2x (1.2 GB)

Empfehlung: Zstd-6 β†’ Bester Balance zwischen Zeit und Compression

6.2 Netzwerk-Effizienz

Bandbreiten-Nutzung:

100 GB Shard Migration ΓΌber 1 Gbps Netzwerk:

Ohne Compression:
β”œβ”€ Daten: 100 GB
β”œβ”€ Zeit: ~15 min (theoretisch)
└─ Praktisch: ~40 min (Overhead, Latenz)

Mit Zstd-9 Compression (4x):
β”œβ”€ Daten: 25 GB
β”œβ”€ Zeit: ~4 min (theoretisch)
β”œβ”€ Praktisch: ~10 min
└─ CPU-Overhead: +30% (akzeptabel)

Inter-DC (100 Mbps):
β”œβ”€ Ohne: 100 GB β†’ ~2.5 Stunden
β”œβ”€ Mit Zstd-9: 25 GB β†’ ~35 Minuten
└─ Ersparnis: ~2 Stunden

Kosten-Einsparung (Cloud Egress @ $0.12/GB):
β”œβ”€ Ohne: 100 GB Γ— $0.12 = $12
β”œβ”€ Mit Compression: 25 GB Γ— $0.12 = $3
└─ Ersparnis: $9 pro Migration

7. Empfehlungen

7.1 Kurzfristig (v1.3.0/v1.3.1)

  1. Erweitere Protobuf Definitions:

    • βœ… FΓΌge RocksDBSnapshotRequest/Response hinzu
    • βœ… FΓΌge BlobTransferRequest/Chunk/Response fΓΌr LoRA hinzu
    • βœ… FΓΌge Compression & Chunking Metadaten hinzu
  2. Implementiere Compression in Data Migrator:

    • βœ… Zstd Support hinzufΓΌgen
    • βœ… Konfigurierbare Compression Levels
  3. Verbessere Chunking:

    • βœ… Konfigurierbare Chunk-Grâßen
    • βœ… CRC32 Checksums pro Chunk
    • βœ… Resume Support

7.2 Mittelfristig (v1.3.2)

  1. RocksDB Snapshot Transfer:

    • Checkpoint Creation/Restore Integration
    • Tar/Compress Pipeline
    • Streaming Transfer
  2. LoRA Blob Transfer:

    • Dedicated Blob Transfer Service
    • Parallel Chunk Transfer
    • Progress Tracking UI
  3. Performance Optimierung:

    • Adaptive Compression (wΓ€hlt Algorithm basierend auf Datentyp)
    • Parallel Chunk Processing
    • Zero-Copy optimizations

7.3 Langfristig (v1.4.0)

  1. Advanced Features:

    • Deduplication (gleiche Chunks nur einmal senden)
    • Delta-Transfer (nur Γ„nderungen senden)
    • Multicast fΓΌr Broadcast-Szenarien
  2. Monitoring & Observability:

    • Real-time Transfer Dashboards
    • Compression Ratio Metrics
    • Network Utilization Graphs

8. Fazit

Die Inter-Shard Pipeline benΓΆtigt Erweiterungen fΓΌr:

  1. RocksDB Dumps β†’ Snapshot-basierter Transfer fΓΌr große Shards
  2. LoRA Adapters β†’ Blob Transfer mit hoher Compression
  3. Compression/Chunking β†’ Konsistente Strategie ΓΌber alle Transfer-Typen
  4. mTLS Security β†’ Bereits gut implementiert, keine Γ„nderungen nΓΆtig

NΓ€chste Schritte:

  • Erweitere shard_rpc.proto mit neuen Message Types
  • Implementiere Compression im Data Migrator
  • FΓΌge RocksDB Snapshot Transfer hinzu
  • Implementiere Blob Transfer fΓΌr LoRA

Autor: ThemisDB Development Team
Review: Pending
Status: Analysis Complete

ThemisDB Wiki

🏠 Overview

πŸš€ Getting Started

πŸ“– Tutorials

πŸ“— User Guide

βš™οΈ Operations & Security

πŸ“Ÿ Ops Runbooks

πŸ—οΈ Architecture

πŸ“ ADRs

πŸ”§ Contributing

πŸ“‹ Governance

πŸ” Audit

🧩 Plugins

πŸ”Œ Adapters

πŸ’‘ Examples

πŸ“¦ Client SDKs

πŸŽ“ Training

πŸ› οΈ Tools

πŸ€– Developer LLM Wiki

Clone this wiki locally