DISTRIBUTED SYSTEMS: PRINCIPLES AND PARADIGMS