Files
Tim Bendt 780ff3a02c feat: miller column browser, offline cache, search, breadcrumbs
- Dynamic miller column sizing with flexbox layout
- Root column (160px), middle slices (48px), active column (flex)
- Auto-scroll browser to rightmost column on navigation
- Offline indicator UI and IndexedDB cache integration
- /api/documents endpoint for client-side document caching
- Breadcrumb navigation in document content area
- FTS5 search with SQLite virtual table
- Client-side Mermaid and KaTeX rendering via CDN
- Deep sample content (advanced-topics/raft-deep-dive)
- Border removal (only search button keeps radius)
- Full viewport layout with proper borders between sidebar/content
2026-04-30 11:55:03 -04:00

1.1 KiB

Raft Performance Tuning

Optimizing Raft for high-throughput workloads.

Batch Processing

Batch multiple client requests into a single AppendEntries RPC:

// Example: batch size of 100 entries
batchSize := 100
for i := 0; i < len(requests); i += batchSize {
    end := min(i+batchSize, len(requests))
    batch := requests[i:end]
    leader.AppendEntries(batch)
}

Pipeline Optimization

Allow the leader to pipeline log entries without waiting for each Ack:

  • Set max_inflight_entries to 100-1000
  • Use a sliding window for acknowledgments
  • Retry only unacknowledged entries

Read Index Optimization

For read-heavy workloads, use read index instead of log replication:

  1. Client sends read request to leader
  2. Leader commits a heartbeat (no-op) entry
  3. Once committed, leader serves read from state machine
  4. Followers can serve stale reads directly

Benchmarks

Typical throughput on a 5-node cluster:

Workload Throughput Latency (p99)
Writes only 50K ops/sec 5ms
Mixed (80/20) 100K ops/sec 3ms
Reads only 500K ops/sec 0.5ms