Principles and architectural models of distributed systems. Design and implementation issues.