A pattern-based architectural style for self-organizing software systems