Presented at CloudDevelop 2016
Building cloud native applications in containers is a new hot topic. Netflix and Google are two prime examples that have been doing it successfully for some time. Some of the new exciting projects like Docker and Kubernetes are focused on cloud native applications in containers. There are supposed to be numerous benefits including the ability to scale applications out easily while doing development on small systems like laptops, the ability for the system to handle some operational problems, and the capability to safely deploy updates to production many times per day. But, what does this look like in practice and how do you start the move to cloud native and containerized applications? In this session we'll look at what makes up a cloud native application, how they work, and how you can start small. We'll look at applications from an architecture and process point of view along with how you can deploy them to AWS, Azure, or Google Cloud. You'll walk away ready to start development on a cloud native app.
2. Who is this guy?
– mattfarina.com, @mattfarina
– Principal Engineer, Advanced Technology
Group, Hewlett Packard Enterprise
– Go, Node.js, PHP, Ruby, Python, .NET… in
just past 5 years
– Recently wrote book, “Go in Practice”
– Co-lead Kubernetes SIG Apps
– Likes to build things in the cloud
– Doesn’t like bullet lists
2
4. 4By Ted Silveira https://www.flickr.com/photos/cafebongo/14062452417/
Went from a large monolithic pet app to
a cloud native application through a
practical process
16. Method 1: You Manage It
16
Object
Storage
Chef, Ansible, or Puppet
Network
Compute
Compute
Compute
Compute
Compute
Compute
Compute
Compute
17. But, what way do most desktop applications work?
Choice 1 Choice B
17
App Laptop
Desktop
Pro Desktop
App CPU(s)
RAM
Drives
NIC(s)
18. Method 2: Datacenter/Cluster as a Computer
18
Computer
• Could be a
datacenter, rack,
or single
computer
• Manages the
needed infra
and changes for
your apps for
you
• Think of it as
one computer
rather than
managed
collection
REST API
24. “microservices based”
What is a microservice?
–Small
–Focused on doing one thing well (single responsibility principle)
–Independently deployable
–Clearly defined API for interaction
–Potentially reusable in other systems
24
27. What makes a good REST API?
– Versioned, typically in the URL
– Use proper HTTP methods
– Behind Authentication and Authorization
– HTTP/2 if possible (for pipelines and connection reuse)
– TLS/HTTPS (encrypted transport)
– Proper HTTP response codes
– JSON
– Open API Initiative (Swagger)
27
30. 12 Factor++ (12factor.net)
1. One codebase tracked in revision
control, many deploys
2. Explicitly declare and isolate
dependencies
3. Store config in the environment
4. Treat backing services as attached
resources
5. Strictly separate build and run
stages
6. Execute the app as one or more
typically stateless processes
containers
7. Export services via port binding
8. Scale out via the process model
containers
9. Maximize robustness with fast
startup and graceful shutdown
10.Keep development, staging, and
production as similar as possible
11.Treat logs as event streams
12.Run admin/management tasks as
one-off processes containers
30
47. My Web App Before The Cloud
47
This may look familiar
Webserver
Webserver
Webserver
Webserver
Load Balancers
Load BalancersUsers
Shared
filesystem
Via Gluster
memcached
memcached
memcached
memcached
MySQL
MySQL
MySQL
MySQL
MySQL had
master and slave
with fail over
Setup split
between two
physical locations
Individual servers managed by Chef in Prod, Test, and Dev environments
49. … at the same time... Experiments in the cloud
49
Object Storage
VMVM VM
VM VM VM
Network
Users
Cloud resources managed by scripts and toolchains (like Chef)
Block
Storage
55. Stackato Cluster(s)
Stackato Clusters
Production, QA, and Development Clusters
55
App 1
Load Balancers
Load BalancersUsers
memcached
memcached
memcached
MySQL
MySQL
MySQL
MySQL shifted over life of
cluster. In Stackato and
SaaS were used
Automation and scripts managed the clusters running on a IaaS (backed by
VMs, Networking, Block Storage, and Object Storage).
App 1
App 1
App 1
App 1
App 2
App 1
App 1
App N
…
Detected top level
problems and
handled some failover
Ops Managed Platform
Filesystem
Service
59. What is CD in CI/CD?
Continuous Delivery
Continuous Deployment
59
Code change
pushed
Test
code
Build
Image
Store
build
...
New build
detected /
chosen
Deploy to
environment
60. Started With A Mono App
60
Stackato
memcached
MySQL
Filesystem
Service
App 1
Big Mono App
61. Started With A Mono App
61
Stackato
memcached
MySQL
Filesystem
Service
App 1Slightly Smaller
Big App
App 1Microservice
(App 2)
69. We had a traditional application
69
These were physical but could have been VM
Webserver
Webserver
Webserver
Load Balancers
Load BalancersUsers
MongoDB
MongoDB
MongoDB
MongoDB
Setup split
between multiple
physical locations
Individual servers managed by Chef in Prod, Test, and Dev environments
Webserver
70. Added Cloud Native Environment
70
The legacy environment was not retired
Webserver
Webserver
Webserver MongoDB
MongoDB
MongoDB
MongoDB
Legacy App called
to cloud native app
over REST API
Webserver
Stackato
Service 1
Service 2
Service 3
Service 4
Load Balancers
Load BalancersUsers