Building Event-Driven Serverless Architectures
bene@theodo.co.uk
Ben Ellerby
@EllerbyBen
Ben Ellerby
@EllerbyBen
serverless-transformation
Alex White
@EllerbyBen
Serverless
What is this Serverless thing?
-
Architectural movement
- “allows you to build and run applications and services without thinking about servers” — AWS
- Developers send application code which is run by the cloud provider in isolated containers abstracted from the developer.
- Use 3rd party services used to manage backend logic and state (e.g. Firebase, Cognito)
- A framework with the same name
@EllerbyBen
Why Serverless?
💰 Cost reduction
👷♂️ #NoOps... well LessOps
💻 Developers focus on delivering business value
📈 More scalable
🌳 Greener
@EllerbyBen
Not just Lambda (FaaS)
Lambda
S3
Dynamo
API Gateway
Compute
Storage
Data
API Proxy
Cognito
Auth
SQS
Queue
Step Functions
Workflows
EventBridge
Bus
Power and Flexibility to build...
@EllerbyBen
Big Ball of Mud
A software system that lacks a perceivable architecture. Although undesirable from a software engineering point of view, such systems are common in practice due to business pressures, developer turnover and code entropy. They are a type of design anti-pattern.
@EllerbyBen
Microservices
@EllerbyBen
The Lambda Pinball
@EllerbyBen
Lambda pinball architectures characteristically lose sight of important domain logic in the tangled web of lambdas, buckets and queues as requests bounce around increasingly complex graphs of cloud services.
Big Ball of Mud
A software system that lacks a perceivable architecture. Although undesirable from a software engineering point of view, such systems are common in practice due to business pressures, developer turnover and code entropy. They are a type of design anti-pattern.
@EllerbyBen
Microservices work well when:
@EllerbyBen
- Are split into clear Services
- Can be deployed independently
- Only communicate with each other asynchronously
- Master their own data
This is nothing new...
@EllerbyBen
- The Service-Oriented Architecture (SOA) movement, that preceded Microservices, had many of the same tenants
The ESB
@EllerbyBen
The ESB
@EllerbyBen
- Enterprise: Implies use in large Enterprise organisation as often used to tackle complexity in these domains along with the historically large infrastructure investment needed.
The ESB
@EllerbyBen
-
Service: As this is providing a way for the different Services (logical self-contained representations of business processes) to communicate.
The ESB
@EllerbyBen
- Bus: Referencing the hardware element of computers that allows the transfer of signals between different components.
The Event
@EllerbyBen
- Event: “A significant change in state” — K. Mani Chandy
Enter EventBridge
@EllerbyBen
Amazon EventBridge: "Serverless event bus that connects application data from your own apps, SaaS, and AWS services" -AWS
Enter EventBridge
@EllerbyBen
The biggest Serverless announcement since the release of AWS Lambda.
The key component to building state-of-the-art Serverless EDAs.
@EllerbyBen
The ESB is dead, long live the ESB
@EllerbyBen
- The difference is it's completely Serverless, with no management required.
- Simple integration with existing AWS Services
So...
how do we get from here to there?
@EllerbyBen
How do I start?
@EllerbyBen
🤷♂️
@EllerbyBen
Domain-Driven Design and Event Storming
- Event Storming, an extension to DDD, from Alberto Brandolini is a workshop based approach to discover your domain Events, Boundaries and Entities (or Aggregates)
@EllerbyBen
EventBridge Storming
EventBridge Storming: "A specific variant of EventStorming that reduces rework and tight-coupling for teams building state-of-the-art Serverless Event-Driven Architectures with EventBridge."
@EllerbyBen
EventBridge Storming
@EllerbyBen
1. Event Discovery
@EllerbyBen
2. Temporal Sequencing
@EllerbyBen
4. Categorize into Entities (& Aggregates)
@EllerbyBen
5. Categorization into Bounded Contexts
@EllerbyBen
Bounded Context
A set of Language Consistency.
-
Single team
-
Few stakeholders
Optimize to eliminate dependencies across bounded contexts
Same Aggregate can appear in more than one BC, this implies both use it in different ways and duplication will reduce coupling.
@EllerbyBen
6. Name Microservices
- One Bounded Context may have multiple Microservices corresponding to its underlying Aggregates & Entities
@EllerbyBen
6. Name Microservices
- ⚠️If an Entity or Aggregate appears in two Bounded Contexts, this implies there should be two independent Microservices to handle the divergent business processes in these two contexts.
@EllerbyBen
7. Creating a Single EventBridge Event Bus
@EllerbyBen
8. Building a Shared Schema
- Teams should be able to work on and deploy Services independently.
- Teams need to agree on the structure of Events, their Schema.
- Title, structure and types.
- Teams should share Schema, not data and code.
@EllerbyBen
EventBridge Schema Registry
@EllerbyBen
EventBridge Schema Registry
"Event": {
"type": "object",
"properties": {
"ordinal": {
"type": "number",
"format": "int64"
},
"name": {
"type": "string"
},
"price": {
"type": "number",
"format": "double"
},
"address": {
"type": "string"
},
"comments": {
"type": "array",
"items": {
"type": "string"
}
},
"created_at": {
"type": "string",
"format": "date-time"
}
}
}
@EllerbyBen
Result
@EllerbyBen
EventBridge Storming
EventBridge Storming: "A specific variant of EventStorming that reduces rework and tight-coupling for teams building state-of-the-art Serverless Event-Driven Architectures with EventBridge."
@EllerbyBen
EventBridge Storming
@EllerbyBen
How to trigger an Event?
🤷♂️
Practical...
@EllerbyBen
@EllerbyBen
@agwhi_
DRAFT: Building Event-Driven Serverless Architectures on AWS (Melbourne AWS Meetup 2021)
By Ben Ellerby
DRAFT: Building Event-Driven Serverless Architectures on AWS (Melbourne AWS Meetup 2021)
Serverless has changed the way we build applications, and with the introduction of Amazon EventBridge building event-driven applications is massively improved. We all want to avoid the distributed monolith, and clear event-driven structure along with tools like EventBridge can ensure we build high scale extensible architectures that have good development experiences. In this talk we’ll look at how Domain-Driven Design, in the form of EventBridge storming can be used to design our architectures. We’ll the jump into a hands on exercise to play around with EventBridge via the Serverless Framework and sls-dev-tools.
- 966