Zend\Cloud_Infrastructure is a component of the cloud services to manage a cloud computing infrastructure.
Cloud Components in Zend Framework
In Zend Framework we have a specific class, Zend\Cloud, to manage different cloud services coming from different vendors. This class is an abstact interface of the most common used cloud services in the market.
These cloud services are:
Document databases (Zend\Cloud\DocumentService)
Queue (Zend\Cloud\Queue)
Storage (Zend\Clou\Storage)
The adapters supported by these services are reported in the table below:
Document
Queue
Storage
Amazon Web Service
✓ (SimpleDB)
✓ (SQS)
✓ (S3)
Windows Azure
✓
✓
✓
Nirvanix
✓
The Zend\Cloud class uses some specific Zend Framework components to implement the vendor adapters. These service classes are:
Zend\Service\Amazon
Zend\Service\Amazon\SimpleDB
Zend\Service_Amazon\Sqs
Zend\Service\Amazon\S3
Zend\Service\WindowsAzure
Zend\Service\WindowsAzure\Storage\Table
Zend\Service\WindowsAzure\Storage\Queue
Zend\Service\WindowsAzure\Storag\Blob
Zend\Servic\Nirvanix
Proposal
We would like to extend the Zend\Cloud class to manage the deploy phase of a PHP application in a cloud environment. In particular we would like to insert some features to manage the computational resources (instances) in a cloud environment. The idea is to provide an abstract interface to manage instances of different vendors.
There are other open source projects that provide these abstraction layer for cloud services for different computer languages. For instance:
unifiedcloud, http://code.google.com/p/unifiedcloud/
Unified Cloud Computing is an attempt to create an open and standardized cloud interface for the unification of various cloud api's. A singular programmatic point of contact that can encompass the entire infrastructure stack as well as emerging cloud centric technologies all through a unified interface. One of the key drivers of the unified cloud interface is to create an api about other api's. A singular programmatic point of contact that can encompass the entire infrastructure stack as well as emerging cloud centric technologies all through a unified interface.
We would like to provide a similar solution for PHP.
In order to to manage the deploy of a web application in different cloud environments we have to support two different types of cloud services:
by Application
by Infrastructure
Application means cloud services focused on the applications instead of the infrastructure. Infrastructure means cloud services focused on the infrastructure instead of the application.
For instance, Windows Azure is a Microsoft cloud service focused on applications, instead Amazon Elastic Compute Cloud (EC2) is a cloud service focused on the infrastructure.
Below we reported a more generic classification of the functionalities of some of the most important cloud vendors:
Application
Infrastructure
Services
Amazon Web Service
✓
✓
Windows Azure
✓
?
✓
GoGrid
✓
✓
Nirvanix
✓
IBM
?
✓
✓
Rackspace
✓
✓
The cloud vendors offer specific API to manage the cloud services. These API are based on web services (REST/SOAP) that can be easily managed in different computer languages. Some of these vendors offer specific API for PHP:
3. Component Requirements, Constraints, and Acceptance Criteria
This component will include a factory method.
This component will use the Zend\Service* class to manage the Adapter of each cloud computing vendors (so far we have only available the class Zend\Service\Amazon\Ec2).
This component will not save any data using Zend\Cache or the filesystem.
4. Dependencies on Other Framework Components
Zend\Service\Amazon\Ec2
Zend\Service* (cloud computing services)
5. Theory of Operation
The component is managed by a factory to initialize specific cloud computing adapters.
6. Milestones / Tasks
Milestone 1: Proposal [DONE]
Milestone 2: Working prototype supporting use cases #1, #2 .. #8 [DONE]
Milestone 3: Working prototype supporting use cases #9 [DONE]
Milestone 4: Working prototype supporting use cases #10 (you need the SSH extension enabled "ext/ssh2") [DONE]