SlideShare a Scribd company logo
Microservices
The Right Way
GR8CONF / MINNEAPOLIS / 2015-07-30
@danveloper
A Simple Truth
There is no right way to “do” microservices.
• Microservices represent a problem domain
that scales development, architecture,
operations, and infrastructure
• Thinking that one-size-fits-all is naïve
• Need to consider your domain and how it should
all fit together
Guidelines for Microservices
• Should perform a single function in the scope
of the domain
– Business/Platform/Operation function
• Should not emphasize LoC in the “micro”
mindset
– “Micro” should speak to a service’s function, not
its size
• Should encapsulate its domain
– Domain modeling, business logic, API
What Are You Building?
• Understand how your distributed
infrastructure fits together
• Are you building a set of services that
collaborate toward a common goal?
– Then you’re building a “platform”
• Are you building services that act in a one-off
or composable manner?
– Then you’re building a “distributed service layer”
Building A Platform
• A Platform is composed of many different
microservices that collaborate in terms of a
broader “system”
• Microservices perform a very specific function
in the overall processing
• A Gateway Layer should be employed to
service consumers
Platform Architecture
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Gateway Layer
Platform Architecture
• Consumers never speak directly to the
underlying microservices
• Consumers talk to the Gateway layer as
though they are talking to a monolith
• Microservices never talk amongst themselves
– They are clean vertical slices in the architecture
• Gateway layer is responsible for consuming
and aggregating data from microservices
Platform Architecture
• In a platform, the data model is coupled because of
the overall collaborative nature of the system
• It is OK to share a data model between microservice and
Gateway layers through a client library
• Since the Gateway will be the only consumer of a backend
microservice, coupling via a client library is OK
• Gateway can gracefully degrade service or data
offerings when a backend service is not available
Distributed Service Layer
Microservices
• Distributed Service Layer microservices are
those services that do not cooperate within a
strict “system”
• They are able to be composed by many
consumers for their purposes
• Consumers are responsible for understanding
the service’s data structures and domains
Distributed Service Layer
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Distributed Service Layer
Microservices
• Interconnectivity means the dependency
graph can be difficult to figure out
• Failure in the overall infrastructure can be
difficult to realize and trace
• May be difficult to push data structure and
model changes without breaking many
consumers
• Can quickly turn in “spaghetti infrastructure”
OFFICEModern Application Architecture
DatabaseDatabaseDatabase
Database
Database
Database
Database
REST API
microservice
microservice
microservice
microservice
microservice
microservice
microservice
microservice
microservice microservice
microservice
microservice
microservice
microservice
microservice
microservice
microservice
microservice
Courtesy of @bizzyunderscore
Distributed Service Layer
Microservices Architecture
• Define two tiers of distributed service layer
types: data consumers/aggregators & data
producers
• Having a logical boundary between services
that talk to other services and those that do
not makes the infrastructure manageable
• Data producers should not inter-communicate
at their level
Distributed Service Layer
Microservices Architecture
Microservice Microservice Microservice Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice
Distributed Service Layer
Microservices Architecture
• Microservices should not share a domain
model
– The complexity of a distributed service layer can
make dependency management very difficult
• Microservices should focus on documentation
as the contract
• Consumer service tier should be resilient to
failure
Distributed Service Layer
Microservices Architecture
• Considerations:
– What about when one or more “consuming”
service tier microservices want to collaborate?
– Dependency graph can still be messy; versioning
of APIs and data models should be strictly
adhered to
– Documentation is hard to get right. How can we
make service structures and APIs more
discoverable?
Documentation
• It’s important to document a distributed
service layer microservice in a “human
consumable” way
– Explaining the domain and what a service is doing
is more important than showing the endpoints
– Showing the endpoints is still important
• Platform architectures should expose
documentation through the Gateway layer
Documentation
• Discoverability:
– Documentation can be difficult to maintain and
manage, especially with an evolving API
– Statically documenting the API is OK, making it
programmatically discoverable is better
– Documentation + making the API discoverable
gives great coverage over what a service is doing
and how to interface with it
Discoverability
• HATEOAS
– Informs of what relationships exist within the data
object that is returned
– Informs of how to access the data of some
relationship
– Can be a great strategy for gracefully degrading
behavior in a platform
Discoverability
• Platform Architecture
Product
Microservice
Review
Microservice
User
Microservice
Payment
Microservice
Gateway Layer
/review/…
Discoverability
{
“_links”: [
{
“rel”: “product.list”,
“href”: “/product/list”
},
{
“rel”: “product.search”,
“href”: “/product/search”
},
{
“rel”: “reviews.show”,
“href”: “/reviews/show{?productId}”
},
...
]
}
GET /status
Discoverability
• Platform Architecture
Product
Microservice
Review
Microservice
User
Microservice
Payment
Microservice
Gateway Layer
X
Discoverability
{
“_links”: [
{
“rel”: “product.list”,
“href”: “/product/list”
},
{
“rel”: “product.search”,
“href”: “/product/search”
},
{
“rel”: “reviews.show”,
“href”: “/reviews/show{?productId}”
},
...
]
}
Discoverability
• HATEOAS
– When the review service goes offline, we can
inform consumers by removing it from the
_links block in the data object
– This means that we only need to document the
model and intention of the service
– Consumers will only need to know the
relationship within the system to know
Discoverability
• JSON-LD
– Provides a “linked data” structure for consumers
– Allows you to provide a type for your API
endpoints, and can be programmatically
interpreted in a number of ways
– Worth investigating: http://www.hydra-cg.com/
Project Structure
• Many questions in a microservice
architecture:
– Repo per microservice?
– Module per microservice?
– Every microservice in its own process space?
Project Structure
• In services that do not collaborate, they should
not share a project structure
• It may make sense for platform microservices to
exist as a module in a singular project
• Following a repo-per- approach for distributed
service layer microservices keeps the concerns
nicely isolated
– “What about when we need to share common things
(constants, configs, etc)?” Publish a library; it’s easier
than ever with things like jfrog* and jcenter*
* http://bintray.com
Project Structure
microservice
microservice
Project Structure
Microservice’s own
Main class
Project Structure
• Principles:
– Generate a self-contained, lightweight artifact
– Should be runnable and environment agnostic
(within the build)
– Runnable JARs or a standalone distribution is the
best way to go
Project Structure
• Principles:
– Generate a self-contained, lightweight artifact
– Should be runnable and environment agnostic
(within the build)
– Runnable JARs or a standalone distribution is the
best way to go
Project Structure
apply plugin: 'groovy’
apply plugin: 'application'
mainClassName = "com.tld.microservice.Main"
repositories {
jcenter()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.3’
...
}
How do we run this thing
Project Structure
apply plugin: 'groovy’
apply plugin: 'application'
mainClassName = "com.tld.microservice.Main"
repositories {
jcenter()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.3’
...
}
How do we build this thing
Project Structure
apply plugin: 'groovy’
apply plugin: 'application’
...
• Gradle Task
./gradlew installDist
Creates a distribution of the application, which pulls down all the
dependencies, structures them in a directory, and produces shell scripts that
can start the app in a standalone way.
Can be found in {projectDir}/build/install/{projectName}
Project Structure
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.1’
}
}
apply plugin: 'groovy’
apply plugin: 'application’
apply plugin: 'com.github.johnrengelman.shadow’
mainClassName = "com.tld.microservice.Main"
repositories {
jcenter()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.4.3’
...
}
Project Structure
./gradlew shadowJar
• Produces a “fat jar” with all the dependencies contained
• Integrates with the application plugin to make the fat jar
runnable
• Excellent solution for building lightweight deployables
• Can be run anywhere Java is available
Infrastructure
• Managing a microservice infrastructure is
difficult
• Big benefit to microservices/distributed
systems is the ability to scale a service
according to its specific requirements
• Means that all microservices will run on their
own instances/containers
Infrastructure
• Infrastruct principles for microservices:
– Follow immutable infrastructure paradigms
– Make the unit of deployment for a microservice
portable
– Structure microservices such that configuration is
derived from the runtime environment
Infrastructure
• Immutable infrastructure:
– Once a server is provisioned, it cannot be changed
– Any detail about provisioning a server for a
microservice should come from the microservice’s
build
– Initialization, service starting, base configuration
should be performed only once during provisioning,
never adjusted after that
– Any modifications to the server’s runtime should be in
change control under the microservice project’s
purview
Infrastructure
• Portable deployables:
– Building just a JAR is fine, but it doesn’t inform the
server as to how to run that JAR
– Unit of deployment should specify all of the
dependencies required to run your application
• “My microservice depends on Java”, for example
– Unit of deployment should self-contain any
configuration steps, including things like
ansible/chef/puppet runs (beyond any base-image
configuration)
Infrastructure
• Portable deployables:
– Package your project as an os-package
– Gradle plugin available from Netflix (Nebula) to
pull your project into a .deb or .rpm file
• Provides a DSL for specifying pre-install/post-install
steps
• Uses Gradle CopySpec to install files into the resulting
os package
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’
}
}
... [snip] ...
mainClassName = "com.tld.products.Main"
ospackage {
packageName = "products"
release '3'
into "/opt/products"
from "${project.buildDir}/install/${project.applicationName}"
from("osfiles") {
into "/"
}
}
buildDeb {
dependsOn installDist
requires(“openjdk-7-jre”)
preInstall file('scripts/preInstall.sh')
}
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’
}
}
... [snip] ...
mainClassName = "com.tld.products.Main"
ospackage {
packageName = "products"
release '3'
into "/opt/products"
from "${project.buildDir}/install/${project.applicationName}"
from("osfiles") {
into "/"
}
}
buildDeb {
dependsOn installDist
requires(“openjdk-7-jre”)
preInstall file('scripts/preInstall.sh')
}
Places the generated application
project structure into /opt/products
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’
}
}
... [snip] ...
mainClassName = "com.tld.products.Main"
ospackage {
packageName = "products"
release '3'
into "/opt/products"
from "${project.buildDir}/install/${project.applicationName}"
from("osfiles") {
into "/"
}
}
buildDeb {
dependsOn installDist
requires(“openjdk-7-jre”)
preInstall file('scripts/preInstall.sh')
}
Puts everything in the project’s
“osfiles” directory into the root of the
server’s filesystem (config, start scripts, other?)
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’
}
}
... [snip] ...
mainClassName = "com.tld.products.Main"
ospackage {
packageName = "products"
release '3'
into "/opt/products"
from "${project.buildDir}/install/${project.applicationName}"
from("osfiles") {
into "/"
}
}
buildDeb {
dependsOn installDist
requires(“openjdk-7-jre”)
preInstall file('scripts/preInstall.sh')
}
Informs the server as to any dependencies
that your project might have
buildscript {
repositories { jcenter() }
dependencies {
classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’
}
}
... [snip] ...
mainClassName = "com.tld.products.Main"
ospackage {
packageName = "products"
release '3'
into "/opt/products"
from "${project.buildDir}/install/${project.applicationName}"
from("osfiles") {
into "/"
}
}
buildDeb {
dependsOn installDist
requires(“openjdk-7-jre”)
preInstall file('scripts/preInstall.sh')
}
Will execute the script before your project
is installed on the server. Allows you to provide
Any additional tuning.
Infrastructure
./gradlew buildDeb
• Produces the artifact into the
{project}/build/distributions/{projectName}_{vers
ion}-3.deb file
• Can be installed on any server/container and all dependencies are
resolved at provisioning
• “osfiles” can include anything, but common use-cases are startup
scripts, any system-level configuration needed by the microservice
• Pre/Post install can include things like Ansible/Chef/Puppet runs
Infrastructure
Infrastructure
• Docker:
– An “OK” option for microservices
– Can be difficult to manage
– Cloud providers out there taking this on
• CloudFoundry (cloudfoundry.com)
• Morpheus (gomorpheus.com)
• Project Atomic (projectatomic.io)
– Gradle Plugin available for packaging your
microservice as a Docker container
• https://github.com/bmuschko/gradle-docker-plugin
Microservice Configuration
Management
• When you get into a distributed architecture,
you need faculties to help manage
configuration
• Builds/projects should be agnostic to the
environment they are deployed in
• Environment configuration should be derived
from the environment
Microservice Configuration
Management
• Configuration management (K/V store, consul
for example)
Consul
Microservice
Microservice
Microservice
Microservice
Microservice
Microservice Configuration
Management
• Configuration management (K/V store, consul
for example)
$ curl localhost:8500/v1/kv/configs/dev/mymicroservice
{
“database”: {
“username”: “user”,
“password”: “…”,
“url”: “jdbc:mysql://db.host:3306/db”
},
…
}
Microservice Configuration
Management
• Rules of thumb for configuration
management:
– Place config server in an internal DNS zone
– For robust architectures, have a config server per
environment
– Have microservices re-poll the configuration
server for any real-time changes
– During server deployment, export the
environment key (as part of User Data, for
example)
Microservice Configuration
Management
• Spring Cloud OSS helps provide integration
with configuration management servers for
pulling properties dynamically
– Gives you the ability to read from Cloud CM
– Provides management endpoints for updating
microservice configurations dynamically
– https://github.com/spring-cloud/spring-cloud-config#spring-cloud-config-client
– http://cloud.spring.io/spring-cloud-consul/spring-cloud-consul.html
Additional Considerations
• Metrics Reporting
– Use statsd and things will be very portable
• Service Discovery
– Eureka, Consul, Load Balancing
• Log publishing
– Should write out application logs to a common
location (S3, for example) for inspection
QUESTIONS.

More Related Content

What's hot

Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - API
Chetan Gadodia
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
SOAT
 
Microservices Architecture
Microservices ArchitectureMicroservices Architecture
Microservices Architecture
Joshua Costa
 
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
승필 박
 
Container security
Container securityContainer security
Container security
Anthony Chow
 
Kubernetes security
Kubernetes securityKubernetes security
Kubernetes security
Thomas Fricke
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
Arawn Park
 
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
Jean-Michel Doudoux
 
Introduction to Vault
Introduction to VaultIntroduction to Vault
Introduction to Vault
Knoldus Inc.
 
Kubernetes - Security Journey
Kubernetes - Security JourneyKubernetes - Security Journey
Kubernetes - Security Journey
Jerry Jalava
 
Static Application Security Testing Strategies for Automation and Continuous ...
Static Application Security Testing Strategies for Automation and Continuous ...Static Application Security Testing Strategies for Automation and Continuous ...
Static Application Security Testing Strategies for Automation and Continuous ...
Kevin Fealey
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
Paul Mooney
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring Cloud
VMware Tanzu
 
Bridging the Security Testing Gap in Your CI/CD Pipeline
Bridging the Security Testing Gap in Your CI/CD PipelineBridging the Security Testing Gap in Your CI/CD Pipeline
Bridging the Security Testing Gap in Your CI/CD Pipeline
DevOps.com
 
gRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at SquaregRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at Square
Apigee | Google Cloud
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack Routers
BGA Cyber Security
 
Zero Code Multi-Cloud Automation with Ansible and Terraform
Zero Code Multi-Cloud Automation with Ansible and TerraformZero Code Multi-Cloud Automation with Ansible and Terraform
Zero Code Multi-Cloud Automation with Ansible and Terraform
Avi Networks
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
sparkfabrik
 
Static Analysis Security Testing for Dummies... and You
Static Analysis Security Testing for Dummies... and YouStatic Analysis Security Testing for Dummies... and You
Static Analysis Security Testing for Dummies... and You
Kevin Fealey
 
Spring Security
Spring SecuritySpring Security
Spring Security
Boy Tech
 

What's hot (20)

Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - API
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
 
Microservices Architecture
Microservices ArchitectureMicroservices Architecture
Microservices Architecture
 
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
분산 트랜잭션 환경에서 데이터 일관성 유지 방안 업로드용
 
Container security
Container securityContainer security
Container security
 
Kubernetes security
Kubernetes securityKubernetes security
Kubernetes security
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdfdevoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
devoxx 2022 - 10 ans de Devoxx FR et de Java.pdf
 
Introduction to Vault
Introduction to VaultIntroduction to Vault
Introduction to Vault
 
Kubernetes - Security Journey
Kubernetes - Security JourneyKubernetes - Security Journey
Kubernetes - Security Journey
 
Static Application Security Testing Strategies for Automation and Continuous ...
Static Application Security Testing Strategies for Automation and Continuous ...Static Application Security Testing Strategies for Automation and Continuous ...
Static Application Security Testing Strategies for Automation and Continuous ...
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
The Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring CloudThe Beginner’s Guide To Spring Cloud
The Beginner’s Guide To Spring Cloud
 
Bridging the Security Testing Gap in Your CI/CD Pipeline
Bridging the Security Testing Gap in Your CI/CD PipelineBridging the Security Testing Gap in Your CI/CD Pipeline
Bridging the Security Testing Gap in Your CI/CD Pipeline
 
gRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at SquaregRPC: The Story of Microservices at Square
gRPC: The Story of Microservices at Square
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack Routers
 
Zero Code Multi-Cloud Automation with Ansible and Terraform
Zero Code Multi-Cloud Automation with Ansible and TerraformZero Code Multi-Cloud Automation with Ansible and Terraform
Zero Code Multi-Cloud Automation with Ansible and Terraform
 
Gitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a proGitlab ci e kubernetes, build test and deploy your projects like a pro
Gitlab ci e kubernetes, build test and deploy your projects like a pro
 
Static Analysis Security Testing for Dummies... and You
Static Analysis Security Testing for Dummies... and YouStatic Analysis Security Testing for Dummies... and You
Static Analysis Security Testing for Dummies... and You
 
Spring Security
Spring SecuritySpring Security
Spring Security
 

Viewers also liked

Automated Deployment with Capistrano
Automated Deployment with CapistranoAutomated Deployment with Capistrano
Automated Deployment with Capistrano
Sumit Chhetri
 
Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)
Michele Orselli
 
Vagrant to-aws-flow
Vagrant to-aws-flowVagrant to-aws-flow
Vagrant to-aws-flow
Kimberly Macias
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software Development
Carlos Perez
 
Vagrant For DevOps
Vagrant For DevOpsVagrant For DevOps
Vagrant For DevOps
Lalatendu Mohanty
 
Multi-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and moreMulti-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and more
Chef Software, Inc.
 

Viewers also liked (6)

Automated Deployment with Capistrano
Automated Deployment with CapistranoAutomated Deployment with Capistrano
Automated Deployment with Capistrano
 
Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)Vagrant for real (codemotion rome 2016)
Vagrant for real (codemotion rome 2016)
 
Vagrant to-aws-flow
Vagrant to-aws-flowVagrant to-aws-flow
Vagrant to-aws-flow
 
It Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software DevelopmentIt Works On My Machine: Vagrant for Software Development
It Works On My Machine: Vagrant for Software Development
 
Vagrant For DevOps
Vagrant For DevOpsVagrant For DevOps
Vagrant For DevOps
 
Multi-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and moreMulti-provider Vagrant and Chef: AWS, VMware, and more
Multi-provider Vagrant and Chef: AWS, VMware, and more
 

Similar to Microservices: The Right Way

Microservice's in detailed
Microservice's in detailedMicroservice's in detailed
Microservice's in detailed
Mohammed Fazuluddin
 
[WSO2Con EU 2017] Microservices for Enterprises
[WSO2Con EU 2017] Microservices for Enterprises[WSO2Con EU 2017] Microservices for Enterprises
[WSO2Con EU 2017] Microservices for Enterprises
WSO2
 
Microservices for Enterprises
Microservices for Enterprises Microservices for Enterprises
Microservices for Enterprises
Kasun Indrasiri
 
MicroserviceArchitecture in detail over Monolith.
MicroserviceArchitecture in detail over Monolith.MicroserviceArchitecture in detail over Monolith.
MicroserviceArchitecture in detail over Monolith.
PLovababu
 
SOA (Service Oriented Architecture)
SOA (Service Oriented Architecture)SOA (Service Oriented Architecture)
SOA (Service Oriented Architecture)Annie Comp
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
MahmoudZidan41
 
Software Architectures, Week 3 - Microservice-based Architectures
Software Architectures, Week 3 - Microservice-based ArchitecturesSoftware Architectures, Week 3 - Microservice-based Architectures
Software Architectures, Week 3 - Microservice-based ArchitecturesAngelos Kapsimanis
 
Over view of software artitecture
Over view of software artitectureOver view of software artitecture
Over view of software artitecture
ABDEL RAHMAN KARIM
 
Best Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with MicroservicesBest Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with Microservices
Jim (张建军) Zhang
 
#dbhouseparty - Should I be building Microservices?
#dbhouseparty - Should I be building Microservices?#dbhouseparty - Should I be building Microservices?
#dbhouseparty - Should I be building Microservices?
Tammy Bednar
 
MuCon 2015 - Microservices in Integration Architecture
MuCon 2015 - Microservices in Integration ArchitectureMuCon 2015 - Microservices in Integration Architecture
MuCon 2015 - Microservices in Integration Architecture
Kim Clark
 
The Reality of Managing Microservices in Your CD Pipeline
The Reality of Managing Microservices in Your CD PipelineThe Reality of Managing Microservices in Your CD Pipeline
The Reality of Managing Microservices in Your CD Pipeline
DevOps.com
 
Microservices in Practice
Microservices in PracticeMicroservices in Practice
Microservices in Practice
Kasun Indrasiri
 
MICROSERVICES ARCHITECTURE unit -2.pptx
MICROSERVICES ARCHITECTURE unit -2.pptxMICROSERVICES ARCHITECTURE unit -2.pptx
MICROSERVICES ARCHITECTURE unit -2.pptx
MohammedShahid562503
 
Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.
Richard Langlois P. Eng.
 
QCon 2015 - Microservices Track Notes
QCon 2015 - Microservices Track Notes QCon 2015 - Microservices Track Notes
QCon 2015 - Microservices Track Notes
Abdul Basit Munda
 
Modernizing the monolithic architecture to container based architecture apaco...
Modernizing the monolithic architecture to container based architecture apaco...Modernizing the monolithic architecture to container based architecture apaco...
Modernizing the monolithic architecture to container based architecture apaco...
Vinay Kumar
 
Making Rational HATS a Strategic Investment
Making Rational HATS a Strategic InvestmentMaking Rational HATS a Strategic Investment
Making Rational HATS a Strategic Investment
Strongback Consulting
 
Cloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a CacheCloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a Cache
cornelia davis
 
Cloud-native Data
Cloud-native DataCloud-native Data
Cloud-native Data
cornelia davis
 

Similar to Microservices: The Right Way (20)

Microservice's in detailed
Microservice's in detailedMicroservice's in detailed
Microservice's in detailed
 
[WSO2Con EU 2017] Microservices for Enterprises
[WSO2Con EU 2017] Microservices for Enterprises[WSO2Con EU 2017] Microservices for Enterprises
[WSO2Con EU 2017] Microservices for Enterprises
 
Microservices for Enterprises
Microservices for Enterprises Microservices for Enterprises
Microservices for Enterprises
 
MicroserviceArchitecture in detail over Monolith.
MicroserviceArchitecture in detail over Monolith.MicroserviceArchitecture in detail over Monolith.
MicroserviceArchitecture in detail over Monolith.
 
SOA (Service Oriented Architecture)
SOA (Service Oriented Architecture)SOA (Service Oriented Architecture)
SOA (Service Oriented Architecture)
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Software Architectures, Week 3 - Microservice-based Architectures
Software Architectures, Week 3 - Microservice-based ArchitecturesSoftware Architectures, Week 3 - Microservice-based Architectures
Software Architectures, Week 3 - Microservice-based Architectures
 
Over view of software artitecture
Over view of software artitectureOver view of software artitecture
Over view of software artitecture
 
Best Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with MicroservicesBest Practices Building Cloud Scale Apps with Microservices
Best Practices Building Cloud Scale Apps with Microservices
 
#dbhouseparty - Should I be building Microservices?
#dbhouseparty - Should I be building Microservices?#dbhouseparty - Should I be building Microservices?
#dbhouseparty - Should I be building Microservices?
 
MuCon 2015 - Microservices in Integration Architecture
MuCon 2015 - Microservices in Integration ArchitectureMuCon 2015 - Microservices in Integration Architecture
MuCon 2015 - Microservices in Integration Architecture
 
The Reality of Managing Microservices in Your CD Pipeline
The Reality of Managing Microservices in Your CD PipelineThe Reality of Managing Microservices in Your CD Pipeline
The Reality of Managing Microservices in Your CD Pipeline
 
Microservices in Practice
Microservices in PracticeMicroservices in Practice
Microservices in Practice
 
MICROSERVICES ARCHITECTURE unit -2.pptx
MICROSERVICES ARCHITECTURE unit -2.pptxMICROSERVICES ARCHITECTURE unit -2.pptx
MICROSERVICES ARCHITECTURE unit -2.pptx
 
Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.Microservice Architecture Patterns, by Richard Langlois P. Eng.
Microservice Architecture Patterns, by Richard Langlois P. Eng.
 
QCon 2015 - Microservices Track Notes
QCon 2015 - Microservices Track Notes QCon 2015 - Microservices Track Notes
QCon 2015 - Microservices Track Notes
 
Modernizing the monolithic architecture to container based architecture apaco...
Modernizing the monolithic architecture to container based architecture apaco...Modernizing the monolithic architecture to container based architecture apaco...
Modernizing the monolithic architecture to container based architecture apaco...
 
Making Rational HATS a Strategic Investment
Making Rational HATS a Strategic InvestmentMaking Rational HATS a Strategic Investment
Making Rational HATS a Strategic Investment
 
Cloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a CacheCloud-native Data: Every Microservice Needs a Cache
Cloud-native Data: Every Microservice Needs a Cache
 
Cloud-native Data
Cloud-native DataCloud-native Data
Cloud-native Data
 

More from Daniel Woods

Continuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStackContinuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStack
Daniel Woods
 
High Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootHigh Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring Boot
Daniel Woods
 
Groovy in the Cloud
Groovy in the CloudGroovy in the Cloud
Groovy in the Cloud
Daniel Woods
 
Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015
Daniel Woods
 
Ratpack Web Framework
Ratpack Web FrameworkRatpack Web Framework
Ratpack Web Framework
Daniel Woods
 
Ratpack Web Framework
Ratpack Web FrameworkRatpack Web Framework
Ratpack Web Framework
Daniel Woods
 
Facilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at ScaleFacilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at Scale
Daniel Woods
 
Continuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSSContinuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSS
Daniel Woods
 
Server-Side JavaScript with Nashorn
Server-Side JavaScript with NashornServer-Side JavaScript with Nashorn
Server-Side JavaScript with Nashorn
Daniel Woods
 
Future of Grails
Future of GrailsFuture of Grails
Future of Grails
Daniel Woods
 
Groovy for System Administrators
Groovy for System AdministratorsGroovy for System Administrators
Groovy for System Administrators
Daniel Woods
 
Message Driven Architecture in Grails
Message Driven Architecture in GrailsMessage Driven Architecture in Grails
Message Driven Architecture in Grails
Daniel Woods
 
Building Web Apps in Ratpack
Building Web Apps in RatpackBuilding Web Apps in Ratpack
Building Web Apps in Ratpack
Daniel Woods
 
Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012
Daniel Woods
 

More from Daniel Woods (14)

Continuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStackContinuous Delivery with Spinnaker and OpenStack
Continuous Delivery with Spinnaker and OpenStack
 
High Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring BootHigh Performance Microservices with Ratpack and Spring Boot
High Performance Microservices with Ratpack and Spring Boot
 
Groovy in the Cloud
Groovy in the CloudGroovy in the Cloud
Groovy in the Cloud
 
Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015Ratpack - SpringOne2GX 2015
Ratpack - SpringOne2GX 2015
 
Ratpack Web Framework
Ratpack Web FrameworkRatpack Web Framework
Ratpack Web Framework
 
Ratpack Web Framework
Ratpack Web FrameworkRatpack Web Framework
Ratpack Web Framework
 
Facilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at ScaleFacilitating Continuous Delivery at Scale
Facilitating Continuous Delivery at Scale
 
Continuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSSContinuous Delivery with NetflixOSS
Continuous Delivery with NetflixOSS
 
Server-Side JavaScript with Nashorn
Server-Side JavaScript with NashornServer-Side JavaScript with Nashorn
Server-Side JavaScript with Nashorn
 
Future of Grails
Future of GrailsFuture of Grails
Future of Grails
 
Groovy for System Administrators
Groovy for System AdministratorsGroovy for System Administrators
Groovy for System Administrators
 
Message Driven Architecture in Grails
Message Driven Architecture in GrailsMessage Driven Architecture in Grails
Message Driven Architecture in Grails
 
Building Web Apps in Ratpack
Building Web Apps in RatpackBuilding Web Apps in Ratpack
Building Web Apps in Ratpack
 
Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012Gainesville Web Developer Group, Sept 2012
Gainesville Web Developer Group, Sept 2012
 

Recently uploaded

Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
Product School
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Ramesh Iyer
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
Frank van Harmelen
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
g2nightmarescribd
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 

Recently uploaded (20)

Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
De-mystifying Zero to One: Design Informed Techniques for Greenfield Innovati...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*Neuro-symbolic is not enough, we need neuro-*semantic*
Neuro-symbolic is not enough, we need neuro-*semantic*
 
Generating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using SmithyGenerating a custom Ruby SDK for your web service or Rails API using Smithy
Generating a custom Ruby SDK for your web service or Rails API using Smithy
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 

Microservices: The Right Way

  • 1. Microservices The Right Way GR8CONF / MINNEAPOLIS / 2015-07-30 @danveloper
  • 2. A Simple Truth There is no right way to “do” microservices. • Microservices represent a problem domain that scales development, architecture, operations, and infrastructure • Thinking that one-size-fits-all is naïve • Need to consider your domain and how it should all fit together
  • 3. Guidelines for Microservices • Should perform a single function in the scope of the domain – Business/Platform/Operation function • Should not emphasize LoC in the “micro” mindset – “Micro” should speak to a service’s function, not its size • Should encapsulate its domain – Domain modeling, business logic, API
  • 4. What Are You Building? • Understand how your distributed infrastructure fits together • Are you building a set of services that collaborate toward a common goal? – Then you’re building a “platform” • Are you building services that act in a one-off or composable manner? – Then you’re building a “distributed service layer”
  • 5. Building A Platform • A Platform is composed of many different microservices that collaborate in terms of a broader “system” • Microservices perform a very specific function in the overall processing • A Gateway Layer should be employed to service consumers
  • 7. Platform Architecture • Consumers never speak directly to the underlying microservices • Consumers talk to the Gateway layer as though they are talking to a monolith • Microservices never talk amongst themselves – They are clean vertical slices in the architecture • Gateway layer is responsible for consuming and aggregating data from microservices
  • 8. Platform Architecture • In a platform, the data model is coupled because of the overall collaborative nature of the system • It is OK to share a data model between microservice and Gateway layers through a client library • Since the Gateway will be the only consumer of a backend microservice, coupling via a client library is OK • Gateway can gracefully degrade service or data offerings when a backend service is not available
  • 9. Distributed Service Layer Microservices • Distributed Service Layer microservices are those services that do not cooperate within a strict “system” • They are able to be composed by many consumers for their purposes • Consumers are responsible for understanding the service’s data structures and domains
  • 11. Distributed Service Layer Microservices • Interconnectivity means the dependency graph can be difficult to figure out • Failure in the overall infrastructure can be difficult to realize and trace • May be difficult to push data structure and model changes without breaking many consumers • Can quickly turn in “spaghetti infrastructure”
  • 12. OFFICEModern Application Architecture DatabaseDatabaseDatabase Database Database Database Database REST API microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice microservice
  • 14. Distributed Service Layer Microservices Architecture • Define two tiers of distributed service layer types: data consumers/aggregators & data producers • Having a logical boundary between services that talk to other services and those that do not makes the infrastructure manageable • Data producers should not inter-communicate at their level
  • 15. Distributed Service Layer Microservices Architecture Microservice Microservice Microservice Microservice Microservice Microservice Microservice Microservice Microservice Microservice Microservice
  • 16. Distributed Service Layer Microservices Architecture • Microservices should not share a domain model – The complexity of a distributed service layer can make dependency management very difficult • Microservices should focus on documentation as the contract • Consumer service tier should be resilient to failure
  • 17. Distributed Service Layer Microservices Architecture • Considerations: – What about when one or more “consuming” service tier microservices want to collaborate? – Dependency graph can still be messy; versioning of APIs and data models should be strictly adhered to – Documentation is hard to get right. How can we make service structures and APIs more discoverable?
  • 18. Documentation • It’s important to document a distributed service layer microservice in a “human consumable” way – Explaining the domain and what a service is doing is more important than showing the endpoints – Showing the endpoints is still important • Platform architectures should expose documentation through the Gateway layer
  • 19. Documentation • Discoverability: – Documentation can be difficult to maintain and manage, especially with an evolving API – Statically documenting the API is OK, making it programmatically discoverable is better – Documentation + making the API discoverable gives great coverage over what a service is doing and how to interface with it
  • 20. Discoverability • HATEOAS – Informs of what relationships exist within the data object that is returned – Informs of how to access the data of some relationship – Can be a great strategy for gracefully degrading behavior in a platform
  • 22. Discoverability { “_links”: [ { “rel”: “product.list”, “href”: “/product/list” }, { “rel”: “product.search”, “href”: “/product/search” }, { “rel”: “reviews.show”, “href”: “/reviews/show{?productId}” }, ... ] } GET /status
  • 24. Discoverability { “_links”: [ { “rel”: “product.list”, “href”: “/product/list” }, { “rel”: “product.search”, “href”: “/product/search” }, { “rel”: “reviews.show”, “href”: “/reviews/show{?productId}” }, ... ] }
  • 25. Discoverability • HATEOAS – When the review service goes offline, we can inform consumers by removing it from the _links block in the data object – This means that we only need to document the model and intention of the service – Consumers will only need to know the relationship within the system to know
  • 26. Discoverability • JSON-LD – Provides a “linked data” structure for consumers – Allows you to provide a type for your API endpoints, and can be programmatically interpreted in a number of ways – Worth investigating: http://www.hydra-cg.com/
  • 27. Project Structure • Many questions in a microservice architecture: – Repo per microservice? – Module per microservice? – Every microservice in its own process space?
  • 28. Project Structure • In services that do not collaborate, they should not share a project structure • It may make sense for platform microservices to exist as a module in a singular project • Following a repo-per- approach for distributed service layer microservices keeps the concerns nicely isolated – “What about when we need to share common things (constants, configs, etc)?” Publish a library; it’s easier than ever with things like jfrog* and jcenter* * http://bintray.com
  • 31. Project Structure • Principles: – Generate a self-contained, lightweight artifact – Should be runnable and environment agnostic (within the build) – Runnable JARs or a standalone distribution is the best way to go
  • 32. Project Structure • Principles: – Generate a self-contained, lightweight artifact – Should be runnable and environment agnostic (within the build) – Runnable JARs or a standalone distribution is the best way to go
  • 33. Project Structure apply plugin: 'groovy’ apply plugin: 'application' mainClassName = "com.tld.microservice.Main" repositories { jcenter() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.3’ ... } How do we run this thing
  • 34. Project Structure apply plugin: 'groovy’ apply plugin: 'application' mainClassName = "com.tld.microservice.Main" repositories { jcenter() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.3’ ... } How do we build this thing
  • 35. Project Structure apply plugin: 'groovy’ apply plugin: 'application’ ... • Gradle Task ./gradlew installDist Creates a distribution of the application, which pulls down all the dependencies, structures them in a directory, and produces shell scripts that can start the app in a standalone way. Can be found in {projectDir}/build/install/{projectName}
  • 36. Project Structure buildscript { repositories { jcenter() } dependencies { classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.1’ } } apply plugin: 'groovy’ apply plugin: 'application’ apply plugin: 'com.github.johnrengelman.shadow’ mainClassName = "com.tld.microservice.Main" repositories { jcenter() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.3’ ... }
  • 37. Project Structure ./gradlew shadowJar • Produces a “fat jar” with all the dependencies contained • Integrates with the application plugin to make the fat jar runnable • Excellent solution for building lightweight deployables • Can be run anywhere Java is available
  • 38. Infrastructure • Managing a microservice infrastructure is difficult • Big benefit to microservices/distributed systems is the ability to scale a service according to its specific requirements • Means that all microservices will run on their own instances/containers
  • 39. Infrastructure • Infrastruct principles for microservices: – Follow immutable infrastructure paradigms – Make the unit of deployment for a microservice portable – Structure microservices such that configuration is derived from the runtime environment
  • 40. Infrastructure • Immutable infrastructure: – Once a server is provisioned, it cannot be changed – Any detail about provisioning a server for a microservice should come from the microservice’s build – Initialization, service starting, base configuration should be performed only once during provisioning, never adjusted after that – Any modifications to the server’s runtime should be in change control under the microservice project’s purview
  • 41. Infrastructure • Portable deployables: – Building just a JAR is fine, but it doesn’t inform the server as to how to run that JAR – Unit of deployment should specify all of the dependencies required to run your application • “My microservice depends on Java”, for example – Unit of deployment should self-contain any configuration steps, including things like ansible/chef/puppet runs (beyond any base-image configuration)
  • 42. Infrastructure • Portable deployables: – Package your project as an os-package – Gradle plugin available from Netflix (Nebula) to pull your project into a .deb or .rpm file • Provides a DSL for specifying pre-install/post-install steps • Uses Gradle CopySpec to install files into the resulting os package
  • 43. buildscript { repositories { jcenter() } dependencies { classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’ } } ... [snip] ... mainClassName = "com.tld.products.Main" ospackage { packageName = "products" release '3' into "/opt/products" from "${project.buildDir}/install/${project.applicationName}" from("osfiles") { into "/" } } buildDeb { dependsOn installDist requires(“openjdk-7-jre”) preInstall file('scripts/preInstall.sh') }
  • 44. buildscript { repositories { jcenter() } dependencies { classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’ } } ... [snip] ... mainClassName = "com.tld.products.Main" ospackage { packageName = "products" release '3' into "/opt/products" from "${project.buildDir}/install/${project.applicationName}" from("osfiles") { into "/" } } buildDeb { dependsOn installDist requires(“openjdk-7-jre”) preInstall file('scripts/preInstall.sh') } Places the generated application project structure into /opt/products
  • 45. buildscript { repositories { jcenter() } dependencies { classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’ } } ... [snip] ... mainClassName = "com.tld.products.Main" ospackage { packageName = "products" release '3' into "/opt/products" from "${project.buildDir}/install/${project.applicationName}" from("osfiles") { into "/" } } buildDeb { dependsOn installDist requires(“openjdk-7-jre”) preInstall file('scripts/preInstall.sh') } Puts everything in the project’s “osfiles” directory into the root of the server’s filesystem (config, start scripts, other?)
  • 46. buildscript { repositories { jcenter() } dependencies { classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’ } } ... [snip] ... mainClassName = "com.tld.products.Main" ospackage { packageName = "products" release '3' into "/opt/products" from "${project.buildDir}/install/${project.applicationName}" from("osfiles") { into "/" } } buildDeb { dependsOn installDist requires(“openjdk-7-jre”) preInstall file('scripts/preInstall.sh') } Informs the server as to any dependencies that your project might have
  • 47. buildscript { repositories { jcenter() } dependencies { classpath 'com.netflix.nebula:gradle-ospackage-plugin:2.0.2’ } } ... [snip] ... mainClassName = "com.tld.products.Main" ospackage { packageName = "products" release '3' into "/opt/products" from "${project.buildDir}/install/${project.applicationName}" from("osfiles") { into "/" } } buildDeb { dependsOn installDist requires(“openjdk-7-jre”) preInstall file('scripts/preInstall.sh') } Will execute the script before your project is installed on the server. Allows you to provide Any additional tuning.
  • 48. Infrastructure ./gradlew buildDeb • Produces the artifact into the {project}/build/distributions/{projectName}_{vers ion}-3.deb file • Can be installed on any server/container and all dependencies are resolved at provisioning • “osfiles” can include anything, but common use-cases are startup scripts, any system-level configuration needed by the microservice • Pre/Post install can include things like Ansible/Chef/Puppet runs
  • 50. Infrastructure • Docker: – An “OK” option for microservices – Can be difficult to manage – Cloud providers out there taking this on • CloudFoundry (cloudfoundry.com) • Morpheus (gomorpheus.com) • Project Atomic (projectatomic.io) – Gradle Plugin available for packaging your microservice as a Docker container • https://github.com/bmuschko/gradle-docker-plugin
  • 51. Microservice Configuration Management • When you get into a distributed architecture, you need faculties to help manage configuration • Builds/projects should be agnostic to the environment they are deployed in • Environment configuration should be derived from the environment
  • 52. Microservice Configuration Management • Configuration management (K/V store, consul for example) Consul Microservice Microservice Microservice Microservice Microservice
  • 53. Microservice Configuration Management • Configuration management (K/V store, consul for example) $ curl localhost:8500/v1/kv/configs/dev/mymicroservice { “database”: { “username”: “user”, “password”: “…”, “url”: “jdbc:mysql://db.host:3306/db” }, … }
  • 54. Microservice Configuration Management • Rules of thumb for configuration management: – Place config server in an internal DNS zone – For robust architectures, have a config server per environment – Have microservices re-poll the configuration server for any real-time changes – During server deployment, export the environment key (as part of User Data, for example)
  • 55. Microservice Configuration Management • Spring Cloud OSS helps provide integration with configuration management servers for pulling properties dynamically – Gives you the ability to read from Cloud CM – Provides management endpoints for updating microservice configurations dynamically – https://github.com/spring-cloud/spring-cloud-config#spring-cloud-config-client – http://cloud.spring.io/spring-cloud-consul/spring-cloud-consul.html
  • 56. Additional Considerations • Metrics Reporting – Use statsd and things will be very portable • Service Discovery – Eureka, Consul, Load Balancing • Log publishing – Should write out application logs to a common location (S3, for example) for inspection

Editor's Notes

  1. This is what most microservice architectures look like I say this half jokingly, but somebody on twitter sent me a real diagram from their whiteboard
  2. Most importantly brings the infrastructure definition into your code base This is critically important when dealing with many microservices