Platform as a Service
What is cloud computing?
NIST Description
The National Institute of Standards and Technology (NIST) loosely describes cloud computing as:
"A model for enabling convenient, on-demand network access to a shared pool of configurable computing resources, such as networks, servers, storage, applications, and services, that can be rapidly provisioned and released with minimal management effort or service provider interaction."
Characteristics
A fundamental shift from physical infrastructure to virtual infrastructure: Seen as a major paradigm shift
A rapid way of provisioning and later releasing computing services on the network
Some important characteristics:
Rapid/automated provisioning and (later) release of services
Can be Pay-as-you-go
Appearance of infinite resources
Could be managed or unmanaged
Why use cloud services instead of running them yourself?
Youâll think, âif I was running my own Kafka cluster instead of using Kinesis, I could find the issue and fix itâ
That may be true, but you should remember two things:
That would be a distraction from creating business value
You would almost certainly be worse at running it. Youâd have more and worse incidents. Itâs a service providerâs purpose in life to be good at it and they have economies of scale you donât.
Moving past the âI could always build it myselfâ attitude can be hard.
Types of Clouds
Based on service provided
Software as a Service (SaaS)
Platform as a Service (PaaS)
Infrastructure as a Service (IaaS)
Based on ownership
Public Clouds
Private Clouds
Hybrid Clouds
Based on Location
On Premise
Off Premise
Computing as a Service
Types of Cloud Migration
Image Migration: Save an image of the server and restore it to a virtual machine
Workload Migration: Build a new server in the cloud and reinstall the application
Cloud Native: Rewrite the application to take advantage of cloud architectures
Cloud Enabled
Image Migration and Workload Migration donât take full advantage of the Cloud
You have the same number of VMâs as you had Physical Servers
Which means you need to manage the same number of servers in the end
Cloud Native Applications
The Twelve-Factor App describes patterns for cloud-native architectures which leverage microservices
Applications are design as a collection of stateless microservices
State is maintained in separate databases and persistent object stores
Resilience and horizontal scaling is achieved through deploying multiple instances
Failing instances are killed and re-spawned, not debugged and patched (cattle not pets)
DevOps pipelines help manage continuous delivery of services
Microservices
An architecture style aimed to achieve flexibility, resiliency and control, based on the following principles:
Loose Coupling bounded context
Independent life cycle: developed, deployed and scaled... and hopefully, fail independently
Design for resiliency
Polyglot
Built by autonomous teams with end-to-end responsibility, doing Continuous Delivery
Monolithic vs Microservices
Tightly coupled
Loosely coupled
Mixed Concerns
Minimal responsibility per service
Large Deployment units
Small Deployment units
Hard to Scale
Easy to Scale
Long release cycles
Short release cycles
Slow on-boarding for new developers
Fast on-boarding for new developers
Slower feedback loop
Develop quickly with fast feedback
Where to Deploy Our Microservice?
Deploying to Virtual Machines means that you now have to manage VMâs
Not desirable
Patching, upgrading, health check, etc.
Deploying to a Platform frees you up to only worry about your application
Cloud Native Deployment enables agility
IaaS vs PaaS
Containers vs Virtual Machines
VMs:
Virtual Machines are heavy-weight emulations of real hardware
Containers:
Containers are light-weight like a process
The app looks like itâs running on the Host OS
IBM Cloud Services
Cloud Foundry
Platform as a Service for running applications
Offers a set of run-time environments that you deploy into: Java, Python, NodeJS, Ruby, Go, Mobile, etc.
Uses Heroku Buildpacks to provide environments: You can bring your own or use community buildbacks
Deploying code is as easy as: cf push
Cloud Foundry Architecture
The Cloud Foundry platform is abstracted as a set of large-scale distributed services.
It uses Cloud Foundry Bosh to operate the underlying infrastructure from IaaS providers (e.g., VMware, Amazon AWS, OpenStack),
Components are dynamically discoverable and loosely coupled, exposing health through HTTP endpoints so agents can collect state information (app status & system state) and act on it.
Kubernetes
An open-source system for automating deployment, scaling, and management of containerized applications.
Groups containers that make up an application into logical units for easy management and discovery.
Based on 15 years of experience of running production workloads at Google, combined with best-of-breed ideas and practices from the community
Docker
Docker is a light-weight container service that runs on Linux
File system overlay
One Process Space
One Network Interface
Shares the Linux kernel
Containers encapsulate a run-time environment
Your code, libraries, etc.
Almost no overhead
Containers spin up in milliseconds
Native performance because there is no emulation
Package only what you need
Red HatÂŽ OpenShift
Open Source application platform based on Containers and Kubernetes. Makes the Kubernetes experience easier for developers and operations
OpenShift Provides:
Web Console for Developers
Source-2-Image (S2I)
Built-in CI/CD Pipeline
Validated integrations (Istio, K-Native, etc.)
Integrated container registry
Serverless
You don't need to provision a server
No permanent infrastructure
Your software only runs when it is needed
You only pay for actual use
Ideal for event driven environments
Cloud Functions with Apache OpenWhisk
OpenWhisk is a cloud-first distributed event-based programming service
It represents an event-action platform that allows you to execute code in response to an event
Provides a serverless deployment and operations model hiding infrastructural complexity: Simply provide the code you want to execute
Supported languages/runtimes:
NodeJS
Java
Swift
Python
Docker
Supported Events:
Periodic
IBM Cloudant
Message Hub (Kafka)
Mobile Push
GitHub
IBM API Connect
Plain Old VMâs
Sometimes you need a VM because of some unique requirement
Deploying to Virtual Machines means that you now have to manage VMâs
Patching, upgrading, health check, etc.
Not desirable
Use as a last resort!
DevOps Continuous Deployment
In order to facilitate Continuous Deployment, you want to deploy into an environment with the least friction
Setting up IaaS VMâs is a lot of work and leaves a large 'attack surface' for predators
Platform as a Service makes deployment frictionless and more secure
Advantages of PaaS
Minimal set-up time to get coding: Developers can concentrate on the application and not the infrastructure
Large number of services to take advantage of (Database, Messaging, Analytics, Mobile, etcâŚ)
Very easy to scale with demand
Delete it if it doesnât work out and pay nothing (or very little)
Last updated