Modelling Distributed Systems