The project is an implementation of the fundamental architecture of a private cloud, hosted on a Linux distribution, providing services of IaaS, StaaS, PaaS and SaaS. Although, all services may be accessed by a Windows client, I primarily used Linux distribution (Red Hat Enterprise Linux 7.2) for hosting my cloud.
The modules cgi and cgitb have been used for passing queries through forms to the dedicated web program, eliminating the need to write a resolute application server.The private cloud is predominantly accessible by thick clients. The end product allows clients to create, configure and customize resources online. It offers services of infrastructure (IaaS), platform (PaaS), software (SaaS) and storage (StaaS).
The clients can access services of both object and block storage (StaaS). To achieve feasible resizing of filesystems, I used logical volume management for creating logical volumes of multiple physical volumes which also allows dynamic volume resizing. The object storage can be used to store unstructured data sets such as static web content, data backups and archival images, and multimedia (videos, pictures or music) files. I used the industry standard for sharing the filesystem with client systems, that is, Network File System (NFS). A client machine can be configured to mount the remote filesystem by executing the transferred script. The mounting may be made boot persistent by an entry in the /etc/fstab file. To provide raw storage or block storage over the network , I used the iSCSI protocol. Through this, I could transport block-level data between iSCSI initiator on a server and iSCSI target on a storage device. The protocol encapsulated SCSI commands and assembled data in packets for the TCP/IP layer. Packets sent over the network using point-to-point connection, upon arrival, are dissembled by the iSCSI protocol. This ensures separation of SCSI commands so the operating system may see the storage as a local SCSI device that may be formatted as usual. At the client side, filesystem must be applied on top of the block-level storage to map files onto a sequence of blocks.
To render virtualized computing resources over the internet (IaaS), I used type-2 hypervisor (QEMU-KVM) for managing resources like CPU and RAM to virtual machine instances. The use of VNC protocol makes possible the transmission of one graphic primitive from server to client, hence allowing client to share some control of the instance shared.
To realize a platform which allows clients to develop, run, and manage applications, we used primarily used containerization. This eradicates customer's association with complexities of implementing the infrastructure typically associated with developing and launching an application. I put to use Docker's features of application isolation through deployment of containers, also eliminating the need of a hypervisor. Within the containers, I used web based terminal emulator shellinabox that enables control of Linux Server SSH Shell remotely. And hence, providing a platform for development in Python and Ruby. The functionalities can be easily be added according to the requirements.
In order to provide software as a service, I used encrypted tunnel created through SSH protocol connection. The SSH tunnel is then used to transfer unencrypted traffic over the network through an encrypted channel. The script is then executed by the client to access the utility. And hence use various services such as media player, web browser, text editor, calculator, et cetera.