2. Background
Platform as a Service is a relatively new term for something that has been around for a
while.
Prior to 2010, most platforms as a service were on premise and proprietary, with high
vendor tie in and low interoperability e.g Oracle, Java, Microsoft, or were primitive
sandboxes provided by hosting providers.
Now there are ever increasing platforms and building blocks that are freely available to
help you deliver your Platforms as a Service
3. Considerations
Solutions nowadays come in a variety of forms, some proprietary and fully hosted,
some that is open source and can be deployed on premise or in the cloud.
They vary by opinion and interoperability with other platform and application building
blocks
Irrespective, all solutions are not specific enough for your enterprise or organisation
and should simply be considered as building blocks themselves
So it’s first worth understanding what you requirements are before you can identify
your PaaS!
4. Goals
A PaaS is foundational and is the cornerstone of your enterprise
It’s about encapsulating your engineering principles in a set of enterprise specific
building blocks...
… that ensures repeatability, predictability and consistency
It is the successor to traditional ‘Enterprise Architecture’ without all the cruft
6. Overview
The Software Development Lifecycle (build, test, deploy)
Service Production
Service Discovery and Service Configuration
Persistence, Storage and Event Sourcing
Security and Identity
7. The Software Development Lifecycle
Understand what your technology deliverables are. A good mantra is ‘Libraries’,
‘Distributions’ and ‘Solutions’:
● Libraries are software components that have no runtime, but are included in other
projects
● Distributions have runtimes and can be executed either on the host os, as a
container or on a hypervisor. Examples include an Executable JAR, a WAR, a binary
executable, a Docker Image, a VSphere Image, an AMI
● Solutions are configurations and profiles of Distributions orchestrated, attached
and integrated with platform or 3rd party services: e.g Your SaaS HTTP API, your
ecommerce website.
8. The Software Development Lifecycle
Every library, distribution or solution, features some or all of the following:
● Source Control Management
● Dependency Management
● Versioning
● Binary Repositories
● Project build tools
● Testing Frameworks
● Continuous Integration
● Build, Test, Deploy
9. Source Control Management
Across your team, organisation or enterprise, agree a consistent way to use source
control management
Pure Continuous Integration encourages zero branches
But find the pattern that is right and be consistent e.g gitflow, github flow, zero branch
10. Project Archetypes
A template for libraries, distributions (e.g microservices, console applications)
Contains configuration specific to your organisation e.g dependencies, artifact
repositories
Also encapsulates the required SDLC tasks, e.g build, test, deploy
Versioning, see Semantic Versioning
11. Testing
Treat non-functionals as first class citizens and have acceptance criteria built in and are
incorporated into the project archetypes
Tip! Provide emulators for distributions as a means to support testing, as part of your
product. This reduces the risk of client contracts becoming inconsistent with the 3rd
party api.
12. Continuous Integration
Is a principle, not a solution (e.g just using Jenkins is not doing continuous integration)
Information radiators and static analysis provide transparency to your organisation
Build, test and deploy gating
14. Service Discovery and Configuration
Service Capabilities
Service Availability
Service Discovery
Application Configuration
15. Persistence, Storage and Event Streams
Covers things like datastores, file systems, object stores, messaging and distributed
transaction logs
Look to take advantage of more modern datastores - Schemaless, resource base, e.g
GraphStores
The distributed transaction log becomes the lifeblood of your system that all solutions
plug into
JSON-LD makes a great interchange for use on event streams since It encourages URI’s
and linking data
Database migration tools for non event stream data e.g Flyway
17. What is my PaaS?
● Git - Bitbucket - 1 remote branch max, short lived local branches acceptable
● LazyBones for project archetypes
● Gradle for versioning, dependencies, build, test and deploy
● Artifactory, bintray and docker hub as binary repositories
● Spock, Geb, Gatling, ZapProxy for testing and part of project archetypes and CI
● Jenkins CI and Job DSL
● Docker for distributions
● Kubernetes for service production. Kubernetes runs locally!
● SkyDNS Kubernetes (RFC 6763, 2782) for service discovery
● OwnCloud, S3, Fuseki for persistence and datastore