Applying Software Engineering Principles for Designing Cloud@Home
Vincenzo Daniele Cunsolo, Salvatore Distefano, Antonio Puliafito, Marco Lucio Scarpa · 2010
Cloud computing is the "new hot" topic in IT. It combines the maturity of Web technologies (networking, APIs, semantic Web 2.0, languages, protocols and standards such as WSDL, SOAP, REST, WS-BPEL, WS-CDL, IPSEC, etc.), the robustness of geographically distributed computing paradigm (Network, Internet and Grid computing) and self-management capabilities (Autonomic computing), with the capacity to manage quality of services by monitoring, metering, quantifying and billing computing resources and costs (Utility computing). Those have made possible and cost-effective for businesses, small and large, to completely host data- and application-centers virtually... in the Cloud. Our idea of Cloud proposes a new dimension of computing, in which everyone, from single users to communities and enterprises, can, on one hand, share resources and services in a transparent way and, on the other hand, have access to and use such resources and services adaptively to their requirements. Such an enhanced concept of Cloud, enriching the original one with Volunteer computing and interoperability challenges, has been proposed and synthesized in Cloud@Home. The complex infrastructure implementing Cloud@Home has to be supported by an adequate distributed middleware able to manage it. In order to develop such a complex distributed software, in this paper we apply software engineering principles such as rigor, separation of concerns and modularity. Our idea is, starting from a software engineering approach, to identify and separate concerns and tasks, and then to provide both the software middleware architecture and the hardware infrastructure following the hw/sw co-design technique widely used in embedded systems. In this way we want to primarily identify and specify the Cloud@Home middleware architecture and its deployment into a feasible infrastructure; secondly, we want to propose the development process we follow, based on hardware/software co-design, in distributed computing contexts, demonstrating its effectiveness through Cloud@Home.