π Major Architectural Improvements
Version 0.2.0 introduces a complete architectural overhaul that transforms how the Outbox pattern scales across multiple instances. We've replaced distributed locking with hash-based partitioning, delivering significant performance improvements and true horizontal scalability.
π Key Features
Hash-based Partitioning
- π― Consistent Hashing: Each aggregate maps to the same partition using MurmurHash3
- β‘ Lock-Free Design: Eliminates distributed lock overhead and deadlock risks
- π Linear Scaling: Performance scales directly with instance count
- π Automatic Rebalancing: Partitions redistribute automatically when instances join/leave
- π‘οΈ Ordering Guarantee: Maintains strict event ordering per aggregate
- 256 Fixed Partitions: Provides fine-grained load distribution
Instance Coordination
- π Heartbeat System: Automatic detection of healthy/failed instances
- π Dynamic Discovery: New instances automatically join the cluster
- βοΈ Load Balancing: Even distribution of partitions across all instances
- π Graceful Shutdown: Clean partition handover during instance shutdown
Multi-Database Support
- ποΈ Programmatic Transactions: Replaced
@TransactionalwithTransactionTemplate - π§ Multi-Persistence Units: Support for multiple database configurations
- βοΈ Configurable Transaction Managers: Custom transaction template support
π§ Technical Improvements
Performance Enhancements
- β‘ Eliminated Lock Contention: No more distributed lock overhead
- π Optimized Queries: New database indexes for partition-based queries
- π Batch Processing: Efficient partition-aware record processing
- π― Reduced Latency: Direct partition assignment without lock acquisition
π Migration from v0.1.0
Simple Migration (Recommended)
-- Stop all instances, then drop and recreate tables
DROP TABLE IF EXISTS outbox_record;
DROP TABLE IF EXISTS outbox_lock; -- If exists from v0.1.0
-- Tables will be recreated automatically with new schemaCustom Migration
For production environments requiring data preservation, contact the maintainer for migration assistance.
β οΈ Breaking Changes
Removed Features
- Distributed Locking: Completely replaced with hash-based partitioning
- Lock Tables:
outbox_locktable no longer needed - Lock Configuration: All lock-related configuration options removed
Changed Behavior
- Record Structure:
OutboxRecordnow includes partition information - Processing Logic: Events processed based on partition assignment
- Scaling Model: Horizontal scaling through partitions instead of locks
- Transaction Management: Switched from declarative to programmatic transactions
Updated Dependencies
- Spring Boot: 3.0+ required
- Java: 21+ required
- Kotlin: 2.2+ required
π Performance Improvements
Real-world Impact
- Multiple Instances: Seamless scaling from 1 to N instances
- Load Distribution: Even workload distribution across instances
- Failure Recovery: Sub-second partition reassignment on instance failure
- Resource Usage: Reduced CPU and memory overhead
π Acknowledgments
Special thanks to the community for feedback and testing that made this release possible. The architectural improvements in v0.2.0 lay the foundation for even better performance and scalability in future releases.
@AZapata27 @icepuma @wimdeblauwe
π Resources
- π Documentation: outbox.namastack.io
- π§ Migration Guide: See README.md for detailed migration instructions
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
Download: GitHub Releases
Maven Central: io.namastack:namastack-outbox-starter-jpa:0.2.0