Book Image

Software Architecture Patterns for Serverless Systems

By : John Gilbert
Book Image

Software Architecture Patterns for Serverless Systems

By: John Gilbert

Overview of this book

As businesses are undergoing a digital transformation to keep up with competition, it is now more important than ever for IT professionals to design systems to keep up with the rate of change while maintaining stability. This book takes you through the architectural patterns that power enterprise-grade software systems and the key architectural elements that enable change (such as events, autonomous services, and micro frontends), along with showing you how to implement and operate anti-fragile systems. First, you’ll divide up a system and define boundaries so that your teams can work autonomously and accelerate innovation. You’ll cover low-level event and data patterns that support the entire architecture, while getting up and running with the different autonomous service design patterns. Next, the book will focus on best practices for security, reliability, testability, observability, and performance. You’ll combine all that you've learned and build upon that foundation, exploring the methodologies of continuous experimentation, deployment, and delivery before delving into some final thoughts on how to start making progress. By the end of this book, you'll be able to architect your own event-driven, serverless systems that are ready to adapt and change so that you can deliver value at the pace needed by your business.
Table of Contents (99 chapters)
Preface
1
Section 1: Establishing an Architectural Vision
Free Chapter
2
Chapter 1: Architecting for Innovation
3
Continuously delivering business value
4
Taking control of lead time
5
Dissecting integration styles
6
Enabling autonomous teams with autonomous services
7
Summary
8
Chapter 2: Defining Boundaries and Letting Go
9
Building on SOLID principles
10
Thinking about events first
11
Dividing a system into autonomous subsystems
12
Decomposing a subsystem into autonomous services
13
Dissecting an autonomous service
14
Governing without impeding
15
Summary
16
Section 2: Dissecting the Software Architecture Patterns
17
Chapter 3: Taming the Presentation Tier
18
Zigzagging through time
19
Breaking up the frontend monolith
20
Dissecting micro frontends
21
Designing for offline-first
22
Securing the user experience
23
Observing real user activity
24
Summary
25
Chapter 4: Trusting Facts and Eventual Consistency
26
Living in an eventually consistent world
27
Publishing to an event hub
28
Dissecting the Event Sourcing pattern
29
Processing event streams
30
Designing for failure
31
Optimizing throughput
32
Observing throughput
33
Accounting for regional failover
34
Summary
35
Chapter 5: Turning the Cloud into the Database
36
Escaping data's gravity
37
Embracing data life cycle
38
Turning the database inside out
39
Dissecting the CQRS pattern
40
Keeping data lean
41
Implementing idempotence and order tolerance
42
Modeling data for operational performance
43
Leveraging change data capture
44
Replicating across regions
45
Observing resource metrics
46
Redacting sensitive data
47
Summary
48
Chapter 6: A Best Friend for the Frontend
49
Focusing on user activities
50
Dissecting the Backend for Frontend (BFF) pattern
51
Choosing between GraphQL and REST
52
Implementing different kinds of BFF services
53
Securing a BFF in depth
54
Leveraging multiple regions
55
Observing BFF metrics
56
Optimizing BFF performance
57
Summary
58
Chapter 7: Bridging Intersystem Gaps
59
Creating an anti-corruption layer
60
Dissecting the External Service Gateway pattern
61
Integrating with third-party systems
62
Integrating with other subsystems
63
Integrating across cloud providers
64
Integrating with legacy systems
65
Providing an external API and SPI
66
Tackling common data challenges
67
Managing shared secrets
68
Addressing multi-regional differences
69
Summary
70
Chapter 8: Reacting to Events with More Events
71
Promoting inter-service collaboration
72
Dissecting the Control Service pattern
73
Orchestrating business processes
74
Employing the Saga pattern
75
Calculating event-sourcing snapshots
76
Implementing CEP logic
77
Leveraging ML for control flow
78
Implementing multi-regional cron jobs
79
Summary
80
Section 3: Putting Everything in Motion
81
Chapter 9: Choreographing Deployment and Delivery
82
Optimizing testing for continuous deployment
83
Focusing on risk mitigation
84
Achieving zero-downtime deployments
85
Planning at multiple levels
86
Turning the crank
87
Summary
88
Chapter 10: Don't Delay, Start Experimenting
89
Gaining trust and changing culture
90
Funding products, not projects
91
Dissecting the Strangler pattern
92
Addressing event-first concerns
93
Poly everything
94
Summary
95
Why subscribe?
96
Other Books You May Enjoy
97
Packt is searching for authors like you
98
Share Your Thoughts

Chapter 3: Taming the Presentation Tier

In Chapter 2, Defining Boundaries and Letting Go, we defined the architecture of a system by dividing it into a set of autonomous subsystems. These architectural boundaries create bulkheads that enable change by promoting autonomy. They give autonomous teams confidence to push the limits and continuously deliver business value because they know these fortified boundaries will help control the blast radius when things go wrong.

Now we turn our attention to the frontend user experience. Frontend architecture has been going through a revolution. Many of the new techniques are only at the beginning of the adoption curve. In this chapter, you will learn how to decompose the frontend into micro applications, to enable change and ensure autonomy. You will also learn how to secure the user experience and how to design for offline-first and regional failover.

In this chapter, we're going to cover the following main topics:

  • Innovation...