DISTRIBUTED SYSTEMS: CONCEPTS AND DESIGN