microservices: from theory to · pdf filesunil joshi valerie lampkin ... viii microservices...
TRANSCRIPT
Redbooks
Front cover
Microservices from Theory to PracticeCreating Applications in IBM Bluemix Using the Microservices Approach
Shahir Daya
Nguyen Van Duy
Kameswara Eati
Carlos M Ferreira
Dejan Glozic
Vasfi Gucer
Manav Gupta
Sunil Joshi
Valerie Lampkin
Marcelo Martins
Shishir Narain
Ramratan Vennam
International Technical Support Organization
Microservices from Theory to Practice: Creating Applications in IBM Bluemix Using the Microservices Approach
August 2015
SG24-8275-00
Copyright International Business Machines Corporation 2015. All rights reserved.Note to U.S. Government Users Restricted Rights -- Use, duplication or disclosure restricted by GSA ADP ScheduleContract with IBM Corp.
First Edition (August 2015)
This edition applies to IBM Bluemix Version 1.0.
Note: Before using this information and the product it supports, read the information in Notices on page vii.
Contents
Notices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viiTrademarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii
IBM Redbooks promotions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiAuthors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiNow you can become a published author, too . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvComments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xvStay connected to IBM Redbooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvi
Part 1. Introducing the microservices architectural style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Chapter 1. Motivations for microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.1 What are microservices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.1 Small and focused . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.1.2 Loosely coupled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.1.3 Language-neutral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.1.4 Bounded context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.1.5 Comparing microservices and monolithic architectures . . . . . . . . . . . . . . . . . . . . . 6
1.2 Benefits from microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2.1 Enterprise solutions context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.2.2 Challenges with monolithic architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2.3 Developer perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2.4 Tester perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.5 Business owner perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.2.6 Service management perspective. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3 What to avoid with microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.3.1 Dont start with microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.2 Dont even think about microservices without DevOps. . . . . . . . . . . . . . . . . . . . . 111.3.3 Dont manage your own infrastructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.4 Dont create too many microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.3.5 Dont forget to keep an eye on the potential latency issue . . . . . . . . . . . . . . . . . . 12
1.4 How is this different than service-oriented architecture?. . . . . . . . . . . . . . . . . . . . . . . . 121.5 Case studies and most common architectural patterns . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.1 An e-commerce discount site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.5.2 Financial services company . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.5.3 Large brick-and-mortar retailer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.6 Example scenarios using microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.6.1 Cloud Trader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.6.2 Online Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.6.3 Acme Air . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Chapter 2. Elements of a microservices architecture . . . . . . . . . . . . . . . . . . . . . . . . . . 192.1 Characteristics of microservices architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.1 Business-oriented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.1.2 Design for failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1.3 Decentralized data management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232.1.4 Discoverability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Copyright IBM Corp. 2015. All rights reserved. iii
2.1.5 Inter-service communication design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242.1.6 Dealing with complexity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.1.7 Evolutionary design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2 Designing microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.2.1 Use design thinking to scope and identify microservices . . . . . . . . . . . . . . . . . . . 292.2.2 Choosing the implementation stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.2.3 Sizing the microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3 REST API and messaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.3.1 REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.3.2 Messaging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342.3.3 REST and messaging together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4 The future of microservices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Chapter 3. Microservices and DevOps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.1 Why you should use DevOps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1.1 Defining DevOps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.1.2 DevOps is a prerequisite to successfully adopting microservices. . . . . . . . . . . . . 403.1.3 Organizing teams to support microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.1.4 Organize a DevOps team to support other microservices teams . . . . . . . . . . . . . 41
3.2 DevOps capabilities for microservices architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . 413.2.1 Continuous business planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.2.2 Continuous integration and collaborative development . . . . . . . . . . . . . . . . . . . . 443.2.3 Continuous testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.2.4 Continuous release and deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453.2.5 Continuous monitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.2.6 Continuous customer feedback and optimization . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3 Microservices governance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.3.1 Centralized versus decentralized governance . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.3.2 Enterprise transformation for microservices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.4 DevOps capabilities: Testing strategies for microservices . . . . . . . . . . . . . . . . . . . . . .