Software Architecture Patterns for Big Data Topics prediction models CAP messaging queues non functional requirements