This repository is a comprehensive, production-grade Java project inspired by the University of Colorado Boulder's "Fundamentals of Software Architecture for Big Data" course.
Each module demonstrates advanced software engineering, distributed systems, monitoring, and messaging solutions with real-world code, TDD, and deep documentation. All core data structures are implemented from scratch—no built-in Java collections are used for the main logic.
- Modules
- Technologies Used
- Project Structure
- Architecture Diagram
- How to Run
- Contributing
- Lessons Learned
- Goal: Implement a custom O(1) cache with TTL-based eviction, no built-in collections, full TDD, and concurrency support.
- Highlights:
- Custom hash table and linked list for storage
- Thread-safe operations
- Expiry and eviction logic
- Usage Example:
SimpleAgedCache cache = new SimpleAgedCache(); cache.put("key", "value", 1000); Object value = cache.get("key");
- Goal: Build a custom singly linked list blockchain with SHA-256 hashing, genesis block, and chain validation.
- Highlights:
- No built-in List/Map
- Genesis block auto-creation
- Block linking and hash validation
- Tampering and edge-case tests
- Usage Example:
Blockchain chain = new Blockchain(); chain.addBlock("data"); Block latest = chain.getLatestBlock();
- Goal: Thread-safe service monitoring, background job simulation, and real-time metrics with stress and concurrency tests.
- Highlights:
- Service availability calculation
- Background job scheduler
- Metrics reset and stress tests
- Concurrency and edge-case handling
- Usage Example:
MonitoringService service = new MonitoringService(); service.recordRequest(true); double availability = service.getAvailability();
- Goal: Custom message queue with thread-safety, capacity management, and advanced test coverage.
- Highlights:
- Custom queue (no built-in collections)
- Enqueue/dequeue with capacity checks
- Thread-safe, stress and concurrency tests
- Usage Example:
MessageQueue<String> queue = new MessageQueue<>(10); queue.enqueue("msg"); String msg = queue.dequeue();
Parallel-Programming-in-Java/
├── miniproject_0/
├── miniproject_1/
├── miniproject_2/
├── miniproject_3/
├── miniproject_4/
├── quiz1.pdf
├── quiz2.pdf
├── quiz3.pdf
├── quiz4.pdf
└── README.md
graph TD
A[Client/API] --> B[Cache Layer]
B --> C[Blockchain]
B --> D[Monitoring Service]
B --> E[Message Queue]
C --> F[Persistence/Storage]
D --> G[Metrics Dashboard]
E --> H[Consumers/Workers]
- Clone the repository:
git clone https://github.com/aliagasiyev/big-data-software-architecture-playground.git cd big-data-software-architecture-playground
- Build and test:
./gradlew build
- Explore each module's README for technical deep-dives and usage examples.
Contributions are welcome! Please open an issue or submit a pull request.
- Deep understanding of custom data structures and thread-safety in Java
- Real-world application of TDD and advanced testing strategies
- Architectural trade-offs in distributed systems and Big Data
- Documentation, code clarity, and professional project structure
Happy coding! 🚀