Upload
amazon-web-services-korea
View
235
Download
0
Embed Size (px)
Citation preview
Smaller IS Better - Exploiting Microservices on AWSCraig S. Dickson, Solutions Architect, Amazon Web Services
Presentation Takeaways
When we are finished today, you will be able to answer the following questions:
• What are microservices?
• What do they look like on AWS?
• What problems can you address using a microservicesarchitecture?
• Is there a customer success story I can leverage?
• How do I get “microserviced”?
Who am I?
• Solutions Architect at AWS since 2012
• Software Engineer / Architect / Manager prior to that
• Based in Brisbane, Australia
Who are you?
• Architect
• Developer
• SysOps / Server Admin / Networking
• Development Manager
• CTO
High Expectations …
Microservices
https://www.gartner.com/doc/3102217/hype-cycle-application-architecture-
“Microservices are the first post DevOps revolution architecture”
– Neal Ford
(Director, Software Architect, and
Meme Wrangler at ThoughtWorks)
Image: http://nealford.com/bio
Why does everyone
hate me?
Image: 1869 / ptwo / license
A Definition of Microservices
“… is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.”
- Martin Fowler (Chief Scientist, ThoughtWorks)
- James Lewis (Principal Consultant, ThoughtWorks)
“Say hello to my micro friend!”
- Tony Montaña
(Cuban Software Architect)
Image: http://www.amazon.com/Scarface-Limited-Edition-Blu-ray-Digital/dp/B0019N94X6
Um, isn’t this just SOA?
SOA Microservices
Smart pipes, dumb endpoints Simple pipes, smart endpoints
Centralized governance (ESB) Minimal governance
Proprietary standards Open standards
Services provide myriad functions Services are single purposed
Distributed monoliths?
A Well-Architected Microservice on AWS
1. cannot be made any smaller• has a single functional purpose
• has minimized total lines of code, architecture components, etc.
• is cost optimized
2. is vertically isolated• runs in its own process
• uses the best fit-for-purpose architecture (app. & infra.)
• uses the best fit-for-purpose programming language
• uses the best fit-for-purpose persistance option(s)
A Well-Architected Microservice on AWS (2)
3. has a well defined interface (API)• can be versioned
• provides SDKs & documentation for clients
• no backdoors
4. is automatically and independently deployed• first deploy and all updates
• to all environments, not just test and dev.
5. is automatically tested thoroughly• functional, integration, performance, etc.
• baseline metrics collected and evaluated
A Well-Architected Microservice on AWS (3)
6. is operationally mature• horizontally scalable
• self healing
• metrics & logs collected centrally
• elegantly handles failures of downstream services
7. is managed by a small team (2 pizzas?) • co-located & cross-functional
• back-end devs, UX, ops, DBA, etc.
• with cradle-to-grave responsibilities
The Poor-Man’s Microservice
Clients
Elastic IP
RDS
HTTP
REST
Running EC2
Instance
Auto Scaling Group
AZ-A
AZ-B
Min = 1, Max = 1
Future EC2
Instance
The Traditional Microservice
ClientsRDS
HTTP
REST
EC2
Instance
Auto Scaling Group
AZ-A
AZ-B
Min > 1
Elastic Load
Balancing
EC2
Instance
AWS
OpsWorksAWS Elastic
Beanstalk
And don’t forget …
.
That’s nice, but can we make it smaller?
Image: http://www.nowverybad.com/honey-i-shrunk-the-kids-1989/
The Elastic Container Service Microservice
ClientsRDS
HTTP
REST
ECS Fleet
AZ-A
AZ-BElastic Load Balancing
Servers? Where we’re going, we don’t need servers
Doc Brown
(Early Cloud Adopter)
Image: http://memorydelta.wikia.com/wiki/Emmett_Brown
“No server is easier to manage than no server”
Werner Vogels
(CTO, Amazon.com)
Image: 20081108 DDP Werner_Vogels / Guido van Nispen / license
The Serverless Microservice API
Amazon API
GatewayClients
HTTP
REST
AWS
Lambda
Amazon
S3
Amazon
DynamoDB
Amazon Machine
Learning
Amazon
SNSAmazon
SQS
Amazon
Kinesis
Lambda
Blueprints
The Hybrid Microservice API
Amazon API
GatewayClients
HTTP
REST
Amazon
EC2
AWS
Lambda
Lambda
Blueprints
Amazon ECS
Elastic Load
Balancing
The Micro-Microservice API
Clients
Amazon API
Gateway
Free
Amazon API
Gateway
Premium
Amazon API
Gateway
Partner
Amazon API
Gateway
Experimental
Amazon
EC2
Amazon ECSAWS
Lambda
Lambda
Blueprints
• Product Management has a great idea
• Even better: Product Management has many
great ideas, but are not sure which ones are
winners
• Takes weeks, months or worse to get them in
front of a customer
• A massive barrier to innovation
Problem: Long Feature Cycle Times
• Create an architecture that enables rapid change, inherently
supports agility and encourages innovation
Exploit Microservices to …
Conway’s Law
”organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations”
- Melvin Conway
Image: https://twitter.com/conways_law
• Large pieces of software, require large teams
• Increased inertia, lack of agility
• Hard to integrate work from other teams
• Many problems are actually people problems, not
technology problems
Problem: Large Teams
• Create an architecture that encourages smaller
software components
• Better align team size and responsibilities to
services
Exploit Microservices to …
“Being woken up at 3am every night by your pager is certainly a powerful incentive to focus on quality when writing your code.”
- Martin Fowler
Image: https://en.wikipedia.org/wiki/Martin_Fowler
• Monoliths lead to “shared” responsibilities• Focus is on project deliverables, not full lifecycle
Problem: Lack of Ownership
• Create small teams working on small pieces of functionality
• Provide an opportunity for cradle-to-grave ownership• Foster a “You build it, you run it” philosophy
Exploit Microservices to …
• Geographically, Temporally, Organizationally• Burden of orchestration
Problem: Distributed Teams
• Provide a mechanism to divide work up so that only co-located teams have to collaborate heavily
• Define service level APIs that allow distributed teams to move at different velocities
Exploit Microservices to …
• Upskilling takes time
• Unable to make use of temporary resources
Problem: Inelastic Human Capacity
• Reduce the surface area that individuals need to
understand at any one time
• Enable temporary resources to work quickly and
integrate easily
Exploit Microservices to …
• Lack of Availability = Loss of Revenue
• Small issues rendering whole applications
unusable
Problem: Availability
• Encourage a design-for-failure attitude
• Enable individual services to implement
appropriate fall-back plans and continue to
provide value to customers
Exploit Microservices to …
• Cannot create à la carte application offerings to
users
• Cannot easily get feedback about new ideas
before investing large resources
Problem: Product Management
• Enable flexibility for product management and
increase innovation
• Quickly test ideas by combining strategies such as
Feature Toggling and A/B Testing
Exploit Microservices to …
"I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.”
- Abraham Maslow (1966)
Maslow’s Hammer
Image: DSC_1607 / Justin Baeder / license
“Give a small boy a hammer, and he will find that everything he encounters needs pounding.”
- Abraham
Kaplan (1964)
Image: Thor and his hammer / tenthousandcubans / license
• Different teams forced to use/learn technologies
that they are not effective with, just because it is
“the standard”
• Inability to adopt different or emerging
technologies
Problem: Single Technology Syndrome
• Encourage a polyglot attitude
• Allow the best solution for each problem to be
selected
Exploit Microservices to …
• Fear of deployments due to assumed risk
• Large deployment sizes due to dependencies
Problem: Constrained Delivery Velocities
• Allow different parts of applications to move at
different speeds for development and deployment
activities
• Minimize risk by reducing the deployment sizes
down to single services
Exploit Microservices to …
• Large functional surface area
• All potential failure scenarios are hard to define
• Long running tests delay feedback
Problem: Lack of Testability
• Provide well defined APIs that can be deployed in
isolation
• Allow for quicker, yet more complete testing
Exploit Microservices to …
• Standardizing onto limited EC2 instance types
• Using generic scaling strategies
• Scaling every thing, every time
• Failing to use existing AWS services
Problem: Inefficient Scaling
• Allow the correct scaling option for each service to
be selected
• Scale services independently
• Quickly adopt new AWS services
Exploit Microservices to …
• Inability to easily/safely try new algorithms or
patterns
• Inability to quickly adopt disruptive technologies
Problem: Lack of Technical Innovation
• To encourage vertical decoupling of components
• Evolve individual services quickly without
interfering with other parts of an application
Exploit Microservices to …
Microservices may not be the right choice for you.
Image: http://insec.in/blog/2015/01/09/discounts-ethical-hacking-course-in-kolkata/shocked-woman-1/
Before Adopting Microservices
• Are you are a startup?
• Is this a brand new green field project?
• Do you have a deep understanding of the domain?
• Is your organisational structure compatible?
• Have you adopted DevOps practices?
Consider these questions …
“A microservices-first approach for a brand new project that we didn’t fully understand the domain for led to a lot of unexpected complexity. We are however, having great success on another project refactoring an existing monolithic service into microservices.”
Mark Bond
(Group Architect, Dominos Pizza Enterprises)
Mo’ services, mo’ problems
The Notorious B.I.G.
(Influential East-Coast Software Architect)
Image: http://www.neontommy.com/news/2014/03/notorious-big-top-ten-songs
Focus on DevOps and Automation
• Even a medium scale microservices architecture (10s or 100s of services) is difficult to manage by hand
• Invest in automating EVERYTHING
• Code builds and testing (CI)
• Code deployments to all environments (CD)
• Operational monitoring• CloudWatch Metrics, CloudWatch Logs, custom dashboards etc.
• A/B testing, function toggling
Focus on Your Organisation
• Evolve team sizes and responsibilities
• Moving towards smaller, cross-functional teams
• With cradle-to-grave responsibilities
• Integrate Product Management, QA, Ops, etc.
Focus on Your Services
• Business capability, rather than technical function
• Everything fails, all the time• retry, fail-over and service down scenarios
• the circuit-breaker pattern
• Netflix Hystrix
• Centralized metrics and logging collection
µSummary
7 tenets
7 architecture patterns 8 business problems
6 technical problems 1 big warning
3 tips for evolving 13 awesome jokes (at least)
What You Should Do Next
µAWS Lambda Amazon API Gateway Identify problems
Hunt MonolithsChampion Microservices Get Help
Resources
• Microservices – Martin Fowler & James Lewis• http://martinfowler.com/articles/microservices.html
• Introduction to Microservices – Chris Richardson• https://www.nginx.com/blog/introduction-to-microservices/
• Are You Well Architected? – AWS Blog• https://aws.amazon.com/blogs/aws/are-you-well-architected/
• Netflix Hystrix• https://github.com/Netflix/Hystrix
Online Labs & Training
Gain confidence and hands-on
experience with AWS.
Watch free Instructional Videos and
explore Self-Paced Labs
Instructor Led Classes
Learn how to design, deploy and
operate highly available, cost-effective
and secure applications on AWS in
courses led by qualified AWS
instructors
Validate your technical expertise
with AWS and use practice
exams to help you prepare for
AWS Certification
AWS Certification
More info at http://aws.amazon.com/training