Cloud computing is the on-demand delivery of computing services - servers, storage, databases, software, compute power, analytics and other IT resources over the Internet ('the cloud').
Companies providing these computing services are called cloud providers and typically charge clients for cloud computing services based on usage.
There are three types of cloud services in which most cloud computing services fall into.
Infrastructure-as-a-service (IaaS): Infrastructure-as-a-service (IaaS) refers to cloud services that provide on-demand instant computing infrastructure (Servers, Storage, Networking, Visualization), provisioned and managed over the Internet. Amazon Web Services (AWS), Microsoft Azure, Rackspace, and Google Compute Engine are examples of IaaS.
Platform as a service (PaaS): Platform as a service (PaaS) refers to cloud services that provide an on-demand environment (OS, Runtime, and Middleware components) for developing, testing, delivering, and managing software applications. AWS Elastic Beanstalk, Force.com, Heroku, Pivotal Cloud Foundry, Google App Engine, Apache Stratos and OpenShift are some examples of PaaS.
Software as a service (SaaS): Software-as-a-service (SaaS) refers to on-demand delivery of software applications over the Internet, usually on a subscription basis. With SaaS, cloud providers host and manage the software application and underlying infrastructure, and handle any maintenance, like software upgrades and security patching. Google Apps, Dropbox, Salesforce, Cisco WebEx, Concur, and GoToMeeting are some examples of SaaS.
Cloud computing has the following advantages over traditional computing environments.
1. Cost - In traditional on-prem environments individual companies are responsible for buying, setting up and managing servers, hardware and software. Cloud computing is more cost effective since it eliminates the expense of buying servers, hardware and software; eliminates the setup and maintenance of infrastructure and data centers; and eliminates the need for IT resources to manage the infrastructure.
2. Speed of provisioning - In traditional on-prem environments it takes time and effort to provision new hardware and servers. Cloud computing services are provided on demand and vast amounts of computing resources can be provisioned in minutes, typically with just a few mouse clicks. This gives businesses a lot of flexibility and takes the pressure off capacity planning.
3. Dynamic scaling - In traditional on-prem environments it takes time, effort and planning to scale for load. Cloud computing services have the ability to scale elastically. That means, depending on the load you can dynamically scale up or down the number of servers, computing power, storage, bandwidth etc.
4. Productivity - In traditional on-prem environments the IT team of the company is responsible for managing the hardware, software, patches etc. Cloud computing reduces the effort and personal required for hardware set up, software patching, and other time-consuming IT management chores. This increases the productivity of IT teams since they can spend time on achieving more important business goals.
5. Performance - Unlike services and applications running on traditional data-centers, Cloud computing services run on a worldwide network of secure data-centers. The data-centers are regularly upgraded to the latest generation of fast and efficient computing hardware.
6. Reliability - Cloud computing makes data backup, disaster recovery, and business continuity easier and less expensive, because data can be mirrored at multiple redundant sites on the cloud provider’s network.
There are three kinds of cloud deployments.
1. Public cloud - Public clouds are owned and managed by third-party cloud service providers. In a public cloud, all hardware, software, and other supporting infrastructure is owned and managed by the cloud provider. Microsoft Azure and Amazon AWS are examples of public clouds.
2. Private cloud - Private cloud refers to cloud computing resources used exclusively by a single business or organization. In a private cloud the services and infrastructure are maintained on a private network. A private cloud can either be physically located on the company’s on-site data-center or companies can pay third-party service providers to host their private cloud.
3. Hybrid cloud - Hybrid clouds combine public and private clouds, bound together by technology that allows data and applications to be shared between them. In a hybrid cloud the data and applications can move between private and public clouds, giving businesses more deployment options and greater flexibility.
Most of the Cloud platforms provide services and components for the following core categories.
1. Compute - These include components providing compute capabilities such as virtual machines, containers, memory, store, processors, etc.
2. Storage - These include components providing storage capabilities such as block storage, file storage, etc.
3. Datastores - Theses include components and services providing database and datastore capabilities.
4. Security and Identity Management - These include components and services providing security and access management capabilities.
5. Networking & Content Delivery - These include components and services providing network and content delivery capabilities.
6. Application Integration - These include components providing application integration and messaging capabilities.
In general there are three compute options or techniques provided by cloud providers.
1. Virtual Machines - Virtual Machines are software emulations of physical computers running on a host OS. They contain a virtual processor, memory, storage, and networking resources. Virtual Machines hosts their own Operating System, on which you can install apps and software similar to a physical computer.
2. Containers - Similar to Virtual Machines, Containers provide virtual environments to install and run software. But unlike Virtual Machines, Containers do not host their own Operating System, but they use the Host Operation.
3. Serverless Computing - Serverless computing is a computing environment provide by Cloud platforms where you can execute your code, agnostic to the underlying infrastructure and host environment.
Cloud-native is an approach to building and running applications that takes advantages of the cloud computing architecture, cloud computing environment and cloud computing delivery model. Cloud-native is about how applications are created and deployed.
Cloud-native is an approach to building and running applications that takes advantages of the cloud computing architecture, cloud computing environment and cloud computing delivery model. Cloud-native is about how applications are created and deployed.
The Twelve-Factor App is a methodology for building software-as-a-service applications, that has eventually become popular for building cloud-native applications.
The 12 factors are listed below.
1. Codebase - A twelve-factor app is always tracked in a version control system, such as Git. There is always a one-to-one correlation between the codebase and the app. There is only one codebase per app, but there will be many versions and deploys of the app.
2. Dependencies - A twelve-factor app explicitly declares all dependencies, completely and exactly, via a dependency declaration manifest.
3. Config - A twelve-factor app requires a strict separation of config from code, since config varies substantially across deploys and code does not. The twelve-factor app stores config in environment variables since they are easy to change between deploys without changing any code.
4. Backing Services - A twelve-factor app treats backing services as attached resources. Backing services are services that the app consumes over the network as part of its normal operations. These include datastores, messaging systems, caching systems and SMTP service calls. Backing services can be locally managed services or could be cloud third party manages services such as Amazon S3, New Relic etc. A twelve factor app does not differentiate between locally managed services and third party services.
5. Build, release, run - A twelve-factor app strictly separates the build, release and run stages.
6. Processes - A twelve factor app is executed in the execution environment as one or more stateless processes.
7. Port binding - The twelve-factor app is completely self-contained and does not rely on runtime injection of a webserver into the execution environment to create a web-facing service. The web app exports HTTP as a service by binding to a port, and listening to requests coming in on that port.
8. Concurrency - A twelve factor app scales out via the process model.
9. Disposability - A twelve-factor app’s processes are disposable, i.e. they can be started or stopped at a moment’s notice. This facilitates fast elastic scaling, rapid deployment of code or config changes, and robustness of production deploys.
10. Dev/prod parity - The twelve-factor app is designed for continuous deployment by keeping the gap between development and production small.
11. Logs - A twelve-factor app treats logs as event streams and does not concerns itself with its routing or storage. It does not attempt to write to or manage logfiles. Instead, each running process writes its event stream, unbuffered, to stdout. The streams from sysout are send to log indexing and analysis systems such as Splunk.
12. Admin processes - One-off admin processes should be run in an identical environment as the regular long-running processes of the twelve factor app. They run against a release, using the same codebase and config as any process run against that release.
For more detailed information you can refer to the twelve-factor Website.