Kyle Brown, Bobby Woolf & Joseph Yoder Foreword by Sam Newman Cloud Application Architecture Patterns Designing, Building, and Modernizing for the Cloud
ISBN: 978-1-098-11690-3 US $55.99 CAN $69.99 WEB OP S There are more applications running in the cloud than there are ones that run well there. If you’re considering taking advantage of cloud technology for your company’s projects, this practical guide is an ideal way to understand the best practices that will help you architect applications that work well in the cloud, no matter which vendors, products, or languages you use. Architects and lead developers will learn how cloud applications should be designed, how they fit into a larger architectural picture, and how to make them operate efficiently. Authors Kyle Brown, Bobby Woolf, and Joseph Yoder take you through the process step-by-step. • Explore proven architectural practices for developing applications for the cloud • Understand why some architectural choices are better suited than others for applications intended to run on the cloud • Learn design and implementation techniques for developing cloud applications • Select the most appropriate cloud adoption patterns for your organization • See how all potential choices in application design relate to each other through the connections of the patterns • Chart your own course in adopting the right strategies for developing application architectures for the cloud Kyle Brown is an IBM Fellow, vice president, and CTO for the IBM CIO, and author of The Cloud Adoption Playbook. Bobby Woolf is an Open Group Certified Distinguished Technical Specialist who has worked with IBM clients and partners and is coauthor of Enterprise Integration Patterns. Joseph Yoder is a distinguished member of the Association for Computing Machinery and a founder and principal of The Refactory, which focuses on software architecture, design, implementation, consulting, and mentoring. He’s also a coauthor of A Scrum Book: The Spirit of the Game. Cloud Application Architecture Patterns “In your hands you now hold a well-written, eminently actionable, and incredibly comprehensive distillation of the industry’s proven and battle-hardened institutional knowledge, covering everything you need to know about architecting software-intensive systems for the cloud.” Grady Booch, IBM Fellow and chief scientist for software engineering “These three pattern champions have unsurprisingly written a collection of cloud application architecture patterns in a welcoming style that will make practitioners better architects and developers.” Vaughn Vernon, leading domain-driven design practitioner and author
List of Patterns Adapter Microservice (135) How can the application take advantage of existing func‐ tionality without abandoning the microser‐ vices approach? Aggregate (211) How do you tie together the groups of tightly related concepts and the values that belong within them in a sub‐ domain? Anti-Corruption Layer (229) How can we design the system so that the Bounded Contexts (BCs) can interact without being tightly coupled together? Application Database (328) How should a cloud-native application store the data it uses so that it can run as a stateless applica‐ tion? Application Package (62) What features of a computer language ecosystem are required to implement a Cloud Application? Backend Service (106) How can multiple applications share the same reusable func‐ tionality? Big Ball of Mud (22) What is the simplest possible architecture for an application that helps get something working quickly to get needed feedback? Bounded Context (201) How do you clearly define the logical boundaries (edges) of a domain and subdomain(s) where particular terms and rules apply? Browser Application (410) What is the easiest, most universal Client Application for any user that does not assume a specific hardware or software configuration? Client Application (406) How can an end user take advantage of the services provided by an application running in the cloud? Cloud Application (6) How can I build applications to take the maximum advantage of all the features of the cloud for the best future proofing and agility? Cloud Database (311) How should a cloud- native application store data persistently in a cloud environment? Cloud-Native Architecture (58) How can I architect an application to take maximum advantage of the cloud platform it will run on? Columnar Database (356) How can an application most efficiently store data for performing analytics, such as in a data ware‐ house? Command-Line Interface (437) How can an end user automate activities like bulk loads, bulk changes, or scheduled execution of activities using the services provided by an application running in the cloud? i
Command Query Responsibility Segrega‐ tion (CQRS) (382) How do you optimize throughput for query and updates by multi‐ ple clients that have numerous cross-cutting views of the data? Configuration Database (323) How can a cloud service store its service state such that all of the nodes in the service can share and access the state? Containerize the Application (478) How can an application be packaged to facilitate greater deployment density and platform portability? Data Module (366) How can I align my data model with my application model so that both are easier to maintain and can evolve quickly? Database-as-a-Service (378) How does an application have access to an Application Database? Dispatcher (140) How can a client access a microservices application through a channel-specific service interface when the business functionality is spread across an evolving set of domain-specific APIs? Distributed Architecture (38) How can I architect my application so that parts of it can be developed, deployed, and run inde‐ pendently? Document Database (338) How can an application most efficiently store and retrieve data when the future structure of the data is not well known? Domain Event (193) How do you model those aspects of a design that correspond to things that happen during the various sce‐ narios encountered by the system? Domain Microservice (130) How should a set of microservices in an architecture pro‐ vide the business functionality for an appli‐ cation? Domain Service (222) How do you model those operations within a subdomain that do not belong to a specific Entity or Aggre‐ gate? Event (255) How do you represent a change in one component to be communicated to other components? Event API (274) How can the reactive components in an event-driven architecture know what events to expect? Event Backbone (279) How can reactive components receive the events they are interested in without being coupled directly to the event notifiers that generate the events? Event Choreography (246) When a change occurs in one component, how can a vari‐ able number of other components react accordingly? Event Notifier (269) How and when should a component announce changes to other components? Event Sourcing (289) As an application’s state changes constantly and unpredictably due to evolving conditions, how can you audit the history that created the current state? Event Storming (189) How do you get the stakeholders to understand and describe the elements and events around the domain and subdomain? External Configuration (97) How can I build my application once and yet be able to deploy it to multiple environments that are configured differently? Extract Component (535) How do you sep‐ arate loosely related parts of the code in our monolith into distinct deployable units? Graph Database (351) How can an appli‐ cation most efficiently store and retrieve interrelated data entities by navigating their relationships? ii | List of Patterns
Hairline Cracks (530) How do you identify the areas within a monolith application that are candidate boundaries for microservices? Interaction Model (448) How do you avoid mixing business and presentation logic inside your Client Application? Key-Value Database (344) How can an application most efficiently store and retrieve independent data entities that are always looked up by the same key? Lift and Shift (470) What is the simplest possible way to move an existing application to the cloud? Micro Frontend (426) How do you avoid creating a monolithic Single-Page Applica‐ tion by placing too much functionality in a common front-end? Microservices (119) How do you architect an application as a set of interconnected modules that can be developed independ‐ ently? Mobile Application (430) How do you pro‐ vide the most optimized user experience on a mobile device and take advantage of the features that make mobile computing unique? Model Around the Domain (183) How can you encourage stakeholders to explain enough of the domain requirements in a way that reveals the relevant capabilities for the application you are building? Modular Monolith (29) How can I archi‐ tect my application to make it easier to maintain and evolve quickly? Monolith to Microservice Proxy (552) How can developers change the code in the mon‐ olith to access and use the functionality that was replaced with microservices? New Features as Microservices (521) While strangling a monolith, how do you avoid adding new functionality to the monolith that will later have to be modernized into microservices? Pave the Road (496) How can we encourage teams to move to the cloud and adopt these new technologies without letting each team go in their own direction and work at cross purposes? Playback Testing (556) How do you ensure that the new microservices architecture maintains the same functionality as the old monolithic system, especially when the amount of detailed end-to-end application knowledge of the existing application may be limited? Polyglot Persistence (374) How can an application store its Data Modules in the type of database that works best for the application’s data structure and how it accesses the data? Polyglot Development (146) What com‐ puter language(s) should be used for imple‐ menting microservices? Public API (443) How do you best enable third-party applications to interact pro‐ grammatically with a Cloud Application? Reactive Component (260) How can you construct an application that can react to events? Refactor the Monolith (484) How can I make an existing application easier for multiple teams to maintain and able to run effectively in a multi-computer environ‐ ment? Refactor then Extract (542) How do we address coupling within the monolith to facilitate extraction into microservices? Relational Database (333) How can an application store well-structured data that it needs to query dynamically? Replace as Microservice (546) How can we move complex and important pieces of functionality that are tightly coupled in List of Patterns | iii
the monolith to microservices with minimal impact? Replicable Application (88) How can an application run reliably on an unreliable platform and scale to handle greater client load the way the platform scales? Replicated Database (316) How can a Cloud Database provide the same quality of service as a cloud-native application, with the same availability, scalability, and perfor‐ mance as the application? Repositories (215) How do we address coupling within the monolith to facilitate extraction into microservices? Self-Managed Data Store (154) How does a microservice store its state? Service API (70) How should an applica‐ tion expose its functionality to clients that want to use the application? Service Orchestrator (160) How does a microservice perform a complex task, one that is performed in multiple steps? Single-Page Application (421) How do you design the front end of your application to provide the best mix of client responsiveness and server optimization? Start Small (492) How can we start adopt‐ ing cloud services and moving existing applications to the cloud or writing new applications for the cloud, possibly using microservices? Stateless Application (80) How can an application support concurrent requests effi‐ ciently and recover from failures without losing data? Strangle the Monolith (514) How can we replace a monolithic architecture with a microservices architecture while reducing overall risk? Transform Monolith into Microservices (526) How do you keep the original mono‐ lithic system working while you substitute pieces of functionality with microservices over time? Virtualize the Application (475) What is the simplest possible way to package an application so that it can easily be deployed to traditional IT or to the cloud? Web Form Application (414) How do you build a user interface to provide basic func‐ tionality to the largest possible set of users using the largest possible set of devices and hardware? List of Supporting Patterns Application Services (205) How can you protect the internals of a bounded context? Context Map (206) How do you understand the relationships and boundaries between different domains within a complex system? Macro Service (538) How can we extract larger internally entangled components from the monolith to implement with microservices? Repositories (215) How do you mediate between an Aggregate’s entities and the per‐ sistent storage for their values? Ubiquitous Language (186) How can adopting shared vocabulary minimize com‐ munication gaps between stakeholders for various domains and subdomains? Wrap the Monolith (518) How do we decouple the monolith and new microser‐ vices from one another during the migration process? iv | List of Patterns
Praise for Cloud Application Architecture Patterns I’ve witnessed the authors’ deep understanding of software architecture for decades. Cloud Application Architecture Patterns distills that hard-won wisdom into a blueprint, a practical guide for building and modernizing applications in the cloud. From cloud-first thinking to microservices and event architecture design, this book is an essential resource for developers and architects navigating the complexities of modern software development. —Kerrie Holley, author of LLMs and Generative AI for Healthcare: The Next Frontier Years of knowledge on migrating and evolutioning complex, high-volume systems, distilled into an easy-to-digest format. If I had access to this material at the start of my career, many projects would have been far easier! —Diego Oliveira, software developer manager, Amazon This book has been an absolute pleasure to read. Cloud Application Architecture Patterns is exactly what I’ve been looking for to help level up my teams and tech leads. I’ll be recommending it for our tech book club later this year. —Michael Keeling, senior staff software engineer at Kiavi and author of Design It!: From Programmer to Software Architect These patterns give you a simple path to building cloud applications the right way. A valuable read for developers at any skill level. —Steve Berczuk, principal software engineer, Cambridge Mobile Telematics
As someone who’s wrestled with the complexities of cloud application architecture, I can confidently say this book is a game-changer. Brown, Woolf, and Yoder have delivered a truly practical and insightful guide. It’s not just theory; it’s a roadmap. They expertly break down proven architectural practices, clearly explaining why certain choices are superior in the cloud. I particularly appreciated how they connected the dots between different technical decisions and adoption patterns, showing how they all fit into a cohesive strategy. Finally, a resource that empowers you to not just follow a template, but to intelligently chart your own course. If you’re serious about building efficient, robust cloud applications, this book is an absolute must-read. —William A Brown, CEO, CIO, architect, cloud application engineering, distinguished engineer emeritus, and coauthor of SOA Governance: Achieving and Sustaining Business and IT Agility This book will help architects to apply the right pattern in cloud architecture development, as well as application modernization and migration. —Elizabeth Koumpan, distinguished engineer, BPO CTO This is probably the most comprehensive book covering end-to-end cloud architecture that I have read. The chapters are easy to read and have a great flow. This will be my go-to playbook for years to come. —Jim Episale, IBM CIO chief integration and data architect, STSM This book belongs on the bookshelf of every software engineer and architect! It was written by three seasoned software experts, each with decades of practical, real- world experience. Unlike many vendor platform-centric publications, the authors are delightfully technology-neutral. The book covers everything one needs to architect and design modern cloud applications. The authors explain the principles and practices of cloud architecture using well-established architecture patterns. I strongly recommend this book for those developing new applications or migrating a legacy monolith to the cloud. —Dave Thomas, CEO, Bedarra Corporation This book is all about getting applications to work with the cloud, rather than in spite of the cloud. —Sam Newman, technologist, author of Building Microservices and Monolith To Microservices
Kyle Brown, Bobby Woolf, and Joseph Yoder Foreword by Sam Newman Cloud Application Architecture Patterns Designing, Building, and Modernizing for the Cloud
978-1-098-11690-3 [LSI] Cloud Application Architecture Patterns by Kyle Brown, Bobby Woolf, and Joseph Yoder Copyright © 2025 Kyle Brown, Bobby Woolf, and Joseph Yoder Enterprises. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://oreilly.com). For more information, contact our corporate/institutional sales department: 800-998-9938 or corporate@oreilly.com. Acquisitions Editor: Megan Laddusaw Development Editor: Melissa Potter Production Editor: Ashley Stussy Copyeditor: Piper Editorial Consulting, LLC Proofreader: Helena Stirling Indexer: Ellen Troutman-Zaig Interior Designer: David Futato Cover Designer: Karen Montgomery Illustrator: Kate Dullea April 2025: First Edition Revision History for the First Edition 2025-04-15: First Release See http://oreilly.com/catalog/errata.csp?isbn=9781098116903 for release details. The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Cloud Application Architecture Pat‐ terns, the cover image, and related trade dress are trademarks of O’Reilly Media, Inc. The views expressed in this work are those of the authors and do not represent the publisher’s views. While the publisher and the authors have used good faith efforts to ensure that the information and instructions contained in this work are accurate, the publisher and the authors disclaim all responsibility for errors or omissions, including without limitation responsibility for damages resulting from the use of or reliance on this work. Use of the information and instructions contained in this work is at your own risk. If any code samples or other technology this work contains or describes is subject to open source licenses or the intellectual property rights of others, it is your responsibility to ensure that your use thereof complies with such licenses and/or rights.
Table of Contents List of Patterns. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Foreword. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Preface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv 1. Cloud Applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Introduction to Cloud Applications 1 Cloud Computing Defined 1 Cloud Computing Practices 3 Cloud Application 6 Conclusion: Wrapping Up Cloud Applications 15 2. Application Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Introduction to Application Architecture 17 Software Architecture 18 Architectural Trade-Offs 18 Component Terminology 19 Architectural Patterns 21 Big Ball of Mud 22 Modular Monolith 29 Distributed Architecture 38 Conclusion: Wrapping Up Application Architecture 48 ix
3. Cloud-Native Application. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Introduction to Cloud-Native Application 51 Cloud Computing 52 Cloud Native 53 Cloud-Native Maturity 54 The Twelve-Factor App 55 Designing Applications for the Cloud 57 Cloud-Native Architecture 58 Application Package 62 Service API 70 Stateless Application 80 Replicable Application 88 External Configuration 97 Backend Service 106 Conclusion: Wrapping Up Cloud-Native Application 112 4. Microservices Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Introduction to Microservices Architecture 115 Microservices 116 Microservices Architecture Versus Monolithic Architecture 117 Microservices and Cloud-Native Architecture 118 Architecting Microservices Applications 118 Microservice 119 Domain Microservice 130 Adapter Microservice 135 Dispatcher 140 Polyglot Development 146 Self-Managed Data Stores 154 Service Orchestrator 160 Conclusion: Wrapping up Microservices Architecture 171 5. Microservice Design. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Introduction to Microservice Design 176 Guiding IDEALS for Designing Microservices 176 Domain Modeling Techniques for Designing Microservices 178 What’s the Right Size for a Microservice? 180 Lower Bound 181 Upper Bound 182 Finding the Right Level of Abstraction 182 Model Around the Domain 183 x | Table of Contents
Ubiquitous Language 186 Event Storming 189 Domain Event 193 Bounded Context 201 Application Services 205 Context Map 206 Aggregate 211 Repositories 215 Domain Service 222 Anti-Corruption Layer 229 Conclusion: Wrapping Up Microservice Design 233 6. Event-Driven Architecture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Introduction to Event-Driven Architecture 240 A Motivating Example 240 From Service Orchestration to Event-Driven Architecture 240 Pseudosynchronous and Asynchronous Service Invocation 241 Decoupling Listeners from Emitters 243 Event-Driven Architecture and Cloud-Native Architecture 244 Developing Event-Driven Architecture 244 Event Choreography 246 Event 255 Reactive Component 260 Event Notifier 269 Event API 274 Event Backbone 279 Event Sourcing 289 Conclusion: Wrapping Up Event-Driven Architecture 298 7. Cloud-Native Storage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Introduction to Cloud-Native Storage 301 Storing Data for Cloud-Native Applications 302 Architecting Applications with Cloud-Native Storage 302 Database Topology and Database Selection 304 Cloud Database 311 Replicated Database 316 Configuration Database 323 Application Database 328 Relational Database 333 Document Database 338 Key-Value Database 344 Table of Contents | xi
Graph Database 351 Columnar Database 356 Data Module 366 Polyglot Persistence 374 Database-as-a-Service 378 Command Query Responsibility Segregation (CQRS) 382 Conclusion: Wrapping Up Cloud-Native Storage 392 8. Cloud Application Clients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Introduction to Cloud Application Clients 399 Multimodal User Interfaces 400 Separate UI and Domain 400 Ports and Adapters (Hexagonal) Architecture 400 Principles for Application User Interfaces 404 Architecting Applications with Multimodal Clients 404 Client Application 406 Browser Application 410 Web Form Application 414 Servlet and JSP with Microservices and Interaction Models 417 Single-Page Application 421 Micro Frontend 426 Mobile Application 430 Command-Line Interface 437 Public API 443 Interaction Model 448 Conclusion: Wrapping Up Cloud Application Clients 454 9. Application Migration and Modernization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Introduction to Application Migration and Modernization 457 Cloud Computing Service Models 458 Modernization and Technical Debt 459 Application Fundamentals 460 Cloud Migration Strategies 466 Migrating and Modernizing Applications in the Cloud 468 Lift and Shift 470 Virtualize the Application 475 Containerize the Application 478 Refactor the Monolith 484 Start Small 492 Pave the Road 496 Conclusion: Wrapping Up Application Migration and Modernization 503 xii | Table of Contents
10. Strangling Monoliths. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Introduction to Strangling Monoliths 510 Strangler Patterns 511 Strangle the Monolith 514 Wrap the Monolith 518 New Features as Microservices 521 Transform Monolith into Microservices 526 Hairline Cracks 530 Extract Component 535 Macro Service 538 Refactor then Extract 542 Replace as Microservice 546 Addressing Challenging Areas in the Monolith 549 Monolith to Microservice Proxy 552 Playback Testing 556 Conclusion: Wrapping Up Strangling Monoliths 561 Conclusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 Table of Contents | xiii
(This page has no text content)
Foreword Make it work. Make it right. Make it fast. —Kent Beck Cloud computing isn’t a new thing. Long gone are the days of hype, and what we are left with is reality. Many organizations have already taken the leap, and with the emergence of cloud infrastructure in the mid to late 2000s more and more of the software we write runs on the cloud. Against this backdrop, it might seem odd therefore for me to talk about a book on cloud application architecture being important, but it is. Fundamentally, the easy stuff has already gone to the cloud. Those applications that haven’t made the move haven’t done so because it is hard for them to make that jump. The low hanging fruit has been picked—we’re now reaching into the high branches, and we need help and support to get there. And this is where this book comes in. Given how long we’ve had access to cloud infrastructure, it’s important to understand why many applications still haven’t made the switch. Legal and regulatory restrictions have long since ceased to be a roadblock in most situations. But fundamentally, a lot of applications are not built with the cloud in mind, so a planned transition is difficult. Even for the applications that have made the move over, there is work to be done. As Kyle, Bobby, and Joe put it, “There are more applications running in the cloud than there are ones that run well in the cloud”. I don’t have a problem with a lift-and-shift approach to get applications into the cloud—what I have always objected to is seeing that as the entirety of the process, rather than an initial step. This book is packed with concrete patterns and practice to help take an application that runs uneasily on the cloud, to one that is cloud native—built with the ethos and understanding of its environment, rather than some awkward, ungainly alien transplant. This book is all about getting applications to work with the cloud, rather than in spite of the cloud. xv
This is also not a book with purist intentions, looking at beautiful and elegant architectural patterns without any care to wider context. The appropriate systems architecture is always a function of tradeoffs. The authors acknowledge this well, while at the same time giving you a pathway of where to go when the expedient choices made to quickly get a new product off the ground need to give way to something more appropriate for a longer-lived, cloud-based application. In a book about tradeoffs, it can be easy for the reader to become overwhelmed with choice. But the authors clearly lay out their thinking, the variety of choices that exist, but then articulately distill this down with concrete advice. Those looking for useful guidelines will find them aplenty in these pages, but they will also find the well reasoned rationale behind them. If you’re a developer or architect struggling to understand how your existing applica‐ tion can make the switch to the cloud, then this book is packed with useful advice. If you’re already dealing with a cloud-based application where you feel that you aren’t getting full use of the cloud, then again this is for you. At its core, though, the authors of this book recognize that the route to the cloud isn’t necessarily linear. And whatever path you might take, this book will be a very useful guide. — Sam Newman Technologist, author of Building Microservices and Monolith to Microservices xvi | Foreword
Preface This is a book about how to architect applications so that they will run well in the cloud. It is not based on any particular technology or product. Rather, it is designed for application architects using a variety of cloud platforms and technologies. Because the concepts in this book are product-neutral and vendor-neutral, the concepts will remain relevant even as technologies evolve and as old products fall out of favor and are replaced by newer, better products. A book focused on a single product will become obsolete when the product does, but one focused on architectural concepts remains relevant as long as the architecture does, potentially even outlasting the usefulness of the platforms that host the architecture. Because this book focuses on designing applications to be deployed on the cloud, we do assume a fundamental set of technologies that have become a de facto standard stack that applications make use of to take advantage of cloud computing. These tech‐ nologies include Linux, containers, and container orchestrators. These technologies and ones like them are referenced in this book. To get the discussion rolling, we’ll explain why we wrote this book and who we intend to read it. Adopting cloud is a very broad topic, more than can fit in one book, so we’ll discuss what you can expect to learn, what topics are covered, and what is outside the scope of this book. Lastly, we’ll give a quick overview of how this book structures the material. Why We Wrote This Book Through our experience with hundreds of applications, we have discovered that there are more applications running in the cloud than there are ones that run well in the cloud. This may be because architects do not realize that applications should be designed differently for the cloud than for traditional IT, or because they realize the need but don’t know how to do it. By traditional IT, we mean applications that have been written to run on premises using technologies and methods that were optimized for the reality of computing prior to the introduction of the cloud. We (the authors) xvii
have hard-earned experience in making applications work well in the cloud, usually through making mistakes and thereby realizing what does and does not work. We have also successfully taught others these lessons and have captured that experience in this book. We hope that we can convince you that the cloud is different from traditional approaches, and teach you how to architect your applications differently, thereby making cloud adoption much easier for you than it has been for us. Who Should Read This Book This book is for application architects and developers who want to learn proven practices about how to design applications for the cloud. Architects who want their applications to run well in the cloud need to know these proven practices and employ them. These practices apply to any application that will run in the cloud. We assume most developers are writing business applications for commercial enterprises—let’s face it, that’s where the money is—but these techniques apply equally well to other fields such as research and science, government, nonprofits—any field where users have requirements for what an application should do and the organization wants to deploy their applications on the cloud. What You Will Learn This book briefly explains what the cloud is, and it does not justify the business case for using the cloud. We assume the reader already wants to use the cloud, so we focus on how to develop applications that run well in the cloud. You will learn how to architect applications for the cloud by understanding the following: • The advantages and limitations of cloud computing architecture compared to traditional IT architecture and the consequences for application architecture • How to make an application cloud native so that it will run well in the cloud • How an application can encompass collaborating microservices and how to design a set of microservices for a particular domain of functionality • How to make multiple microservices and other software components collaborate, both through orchestration as well as via choreography • How to apply agile development techniques to designing a cloud application • Strategies to rehost and replatform an existing IT application to run in the cloud, and to refactor an existing application while it is running in production This understanding will enable you to create better cloud applications. xviii | Preface
Comments 0
Loading comments...
Reply to Comment
Edit Comment