TECHNOLOGY SOLUTIONS DELIVEREDTECHNOLOGY SOLUTIONS DELIVERED
Success	Factors	for	a	Mature	
Microservices Implementation
Dustin Ruehle
ECS Team, Senior Cloud Architect
@DustinRuehle .
druehle@ecsteam.com .
About	me...
With ECS Team for 9+ years
About	me...
•My cloud-native journey began 2+ years ago
•Working with Pivotal as a trusted partner
•Pairing with large customers enabling transformation using Pivotal
Cloud Foundry
•Platform, operations, application migration/modernization
•For who:
• a very large private company,
• a near Fortune 100 company,
• and several others with a Fortune 500 average of 24
About	me...
Custom Tile Generation in PCFMonitoring Cloud Foundry –
Learning about the Firehose
Do	you	ever	feel	like…
What	is	the	problem?
What	is	the	problem?
“Taking to long to offer new features”
What	is	the	problem?
“Taking to long to offer new features”
“We get a lot of users at once during a promotion and we crash”
What	is	the	problem?
“Taking to long to offer new features”
“We get a lot of users at once during a promotion and we crash”
What are some of your problems?
What	should	be	our	goal?
What	should	be	our	goal?
avoid	undifferentiated	heavy	lifting
This	is	what	I	need…right?
Or	do	I	need	this	to	solve	my	problem?
This	isn’t	new…
Cloud Native
Definition
Cloud	Native	
DevOps
Continuous
Delivery
ContainersMicroservices
Do	you	agree?
=
Cloud Native
What	about	this?
=
Cloud Native
=
What	is	Cloud	Native?
• 12 factor applications
• Microservices
• Self-service architecture
• API-Based collaboration
• Antifragility
- Matt Stine
Migrating to Cloud-Native Application Architectures
Why	Cloud	Native?
Faster, easier, safer
”Cloud Native describes the patterns of high
performing organizations delivering software faster,
consistently and reliably at scale.”
- Pivotal
Cloud	Native	why?
”Cloud Native describes the patterns of high
performing organizations delivering software faster,
consistently and reliably at scale.”
- Pivotal
Faster, easier, safer
AND IT SOLVES A BUSINESS PROBLEM
Random	success	factor….	A	µS	smell	test
When I want to deploy this
Random	success	factor….	A	µS	smell	test
When I want to deploy this But have to deploy all that
Random	success	factor….	A	µS	smell	test
Not loosely coupled
When I want to deploy this But have to deploy all that
Random	success	factor….	A	µS	smell	test
When I want to use this
Random	success	factor….	A	µS	smell	test
When I want to use this
I have to know about all that
Random	success	factor….	A	µS	smell	test
Not a bounded context
I have to know about all that
When I want to use this
Random	success	factor….	A	µS	smell	test
Refactor your
Bounded context
I have to know about all that
When I want to use this
Your	are	probably	doing	this…
Customer
Ordering Reporting
Your	should	probably	be	doing	this…
Customer
Ordering Reporting
CustomerPolyglot Persistence
API-Based collaboration
Why	containers	aren’t	enough?
To go to prod…
• Setup non-prod env
• Develop my business capability
• Determine
• logging
• monitoring (app and where it runs)
• security
• Integrate with other services to test
• Performance test my new business capability
• Setup my prod env
• Scale up and down based on user demand
• Troubleshoot my application working with other business
capabilities
• Patch my environment – CVEs for example
Problems	I	have	yet	to	solve…
To go to prod…
• Setup non-prod env
• Develop my business capability
• Determine
• logging
• monitoring (app and where it runs)
• security
• Integrate with other services to test
• Performance test my new business capability
• Setup my prod env
• Scale up and down based on user demand
• Troubleshoot my application working with other business
capabilities
• Patch my environment – CVEs for example
Easy,	I’ll	just	create	some	scripts…
Create my container
Easy,	I’ll	just	create	some	scripts…
Create my container
Deploy my app with my
container
Easy,	I’ll	just	create	some	scripts…
Create my container
Deploy my app with my
container
Scale my app
Easy,	I’ll	just	create	some	scripts…
Create my container
Deploy my app with my
container
Scale my app
All my other scripts
Now	what?
Somebody	really	smart	said…
“A cloud-native application is an application
that has been designed and implemented to run
on a Platform-as-a-Service installation and to
embrace horizontal elastic scaling.”
- Kevin Hoffman
Beyond the Twelve-Factor App
Somebody	really	smart	said…
Hint: This is another success factor
“A cloud-native application is an application
that has been designed and implemented to run
on a Platform-as-a-Service installation and to
embrace horizontal elastic scaling.”
- Kevin Hoffman
Beyond the Twelve-Factor App
What	are	the	problems	we	are	solving	again?
We started with…
- Taking to long to offer new features
- We get a lot of users at once during a
promotion and we crash
What	are	the	problems	we	are	solving	again?
We started with…
- Taking to long to offer new features
- We get a lot of users at once during a
promotion and we crash
Cloud Native
Helps me solve problems
What	are	the	problems	we	are	solving	again?
We inherited…
• Setup non-prod env
• Determine
• logging
• monitoring (app and where it runs)
• security
• Integrate with other services to test
• Performance test my new business capability
• Setup my prod env
• Scale up and down based on user demand
• Troubleshoot my application working with other business
capabilities
• Patch my environment – CVEs for example
Helps me solve problems
We started with…
- Taking to long to offer new features
- We get a lot of users at once during a
promotion and we crash
Cloud Native
What	are	the	problems	we	are	solving	again?
We inherited…
• Setup non-prod env
• Determine
• logging
• monitoring (app and where it runs)
• security
• Integrate with other services to test
• Performance test my new business capability
• Setup my prod env
• Scale up and down based on user demand
• Troubleshoot my application working with other business
capabilities
• Patch my environment – CVEs for example
We started with…
- Taking to long to offer new features
- We get a lot of users at once during a
promotion and we crash
Cloud Native
Helps me solve problems
A	platform	solved	a	lot…but	some	remain…
Problems that remain…
- How do I troubleshoot my application
working with other business
capabilities?
- How does my application know how to
connect to other applications?
- How do I manage configuration for my
application?
- How do I handle when an application I
consume behaves badly?
- How do I connect to my backing
services?
How	can	I	solve	these	problems?
Problems that remain…
- How do I troubleshoot my application
working with other business
capabilities?
- How does my application know how to
connect to other applications?
- How do I manage configuration for my
application?
- How do I handle when an application I
consume behaves badly?
- How do I connect to my backing
services?
How	can	I	solve	these	problems?
Hint: This is another success factor
Problems that remain…
- How do I troubleshoot my application
working with other business
capabilities?
- How does my application know how to
connect to other applications?
- How do I manage configuration for my
application?
- How do I handle when an application I
consume behaves badly?
- How do I connect to my backing
services?
What	magic	is	this?
What	magic	is	this?
Service Discovery - Eureka
What	magic	is	this?
Service Discovery - Eureka
Circuit Breaker - Hystrix
What	magic	is	this?
Service Discovery - Eureka
Circuit Breaker - Hystrix
Distributed tracing – Spring Cloud Slueth
What	magic	is	this?
Service Discovery - Eureka
Circuit Breaker - Hystrix
Distributed tracing – Spring Cloud Slueth
Centralized external configuration management – Spring Cloud Config
What	magic	is	this?
Service Discovery - Eureka
Circuit Breaker - Hystrix
Distributed tracing – Spring Cloud Slueth
Connect to backend services like databases and message brokers – Spring Cloud Connectors
Centralized external configuration management – Spring Cloud Config
Using	Hystrix to	Fail	Gracefully
source: http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html
Using	Hystrix to	Fail	Gracefully
source: http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html
Not	just	for	Java…
resilient, scalable microservices to .NET developers
Not	just	for	Java…
Service Discovery Config server Cloud Connectors
resilient, scalable microservices to .NET developers
Did	I	solve	my	problems?
Do	you	feel	like	this?
Or	this?
Did	I	meet	my	goal?
avoid	undifferentiated	heavy	lifting
Did	I	meet	my	goal?
avoid	undifferentiated	heavy	lifting
Questions?

Cloud-Native Workshop - Santa Monica