Acknowledgements We thank all the anonymous reviewers for their valuable feedback on an earlier version of this paper. This work was supported by the National Basic Research Program of China (973) (2009CB320703); the National Natural Science Foundation of China (Grant Nos. 61121063, 60933003, 61003010); the High-tech Research and Development Program of China (863) (2012AA011207), the European Commission Seventh Framework Programme (231167); and the NCET.
When reengineering a monolithic application to be a distributed one, programmers always have to decide how many distributed parts the application should be partitioned, and write many codes related to where a part wil...