Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A...

46
Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor

Transcript of Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A...

Page 1: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Domain Service Aggregators

A Structured Approach to Microservice Composition

Caoilte O’Connor @caoilte_oconnor

Page 2: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

.INTRO

Based on a true story...

Page 3: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

“You stand on the shoulders of

giants

How do you build Microservices?

http://www.thoughtworks.com/insights/blog/microservices-nutshellhttp://www.se-radio.net/2014/10/episode-213-james-lewis-on-microservices

Page 4: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

“Microservices Iceberg”

Background Image Copyright “Pere” http://bit.ly/1BPTITp

Page 5: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

“Microservices Iceberg”

Background Image Copyright “Pere” http://bit.ly/1BPTITp

Page 6: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

“Microservices Iceberg”

Background Image Copyright “Pere” http://bit.ly/1BPTITp

Page 7: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

“Firm Foundations”

Background Image Copyright Daniel Mayer http://bit.ly/1BXZHui

Page 8: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO
Page 9: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Evolving our Architecture

Our core systems are also difficult to change and do not scale well but we are are not ready to replace them yet.

It is difficult to understand / change our current television catchup services. We want to replace them.

Isolate and protect the core systems. Build Microservices.Use REST.

Page 10: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

1.DOMAIN SERVICES

Building Blocks for a Microservices Architecture

Page 11: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Guidance

LicencingSchedule Images

Video

Catalogue

Page 12: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Guidance

Licencing

Schedule

Images

Video

Catalogue

A set of Bounded Contexts

Organisational Boundaries work best

High Cohesion, Loose Coupling

Think Resource Oriented

Page 13: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

/catalogue/episodes/123456

{ "synopsis" : "Maggie Smith, Hugh Bonneville and Elizabeth McGovern star in a glittering period drama following the lives of the aristocratic Crawley family on their estate, Downton.", “orderInSeries” : 2, “orderInProgramme” : 23 }

{ "restricted" : true, “message” : “Contains Strong Language”}

/guidance/episodes/123456

Guidance

CatalogueREST

Page 14: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

/licencing/licences?episode=123456

{ "_embedded": { "licences": [ { "platform": "samsung", "startDate": "2013-01-04T19:30:00Z", "endDate": "2013-01-11T19:30:00Z" } ] }}

Licencing

REST

Page 15: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

External Caching on a Domain

Legacy System Microservice Varnish Cache

Page 16: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

External Caching on a Domain

Legacy System Microservice Varnish Cache

Page 17: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Invalidating External Caching on a Domain

Legacy System Microservice Varnish Cache

Page 18: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Invalidating External Caching on a Domain

Legacy System Microservice Varnish Cache

Page 19: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

The Netflix API Gateway Pattern

http://techblog.netflix.com/2012/07/embracing-differences-inside-netflix.html

https://github.com/Netflix/zuul/wiki

Page 20: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Vendor API Gateways - The ESBs of Tomorrow?

Build "mash-ups" and composite services by orchestration or aggregation of existing APIs and web services.

Edge API Services

“”

Customizable API composition and virtualization capabilities.“ ”

API Gateway (formerly CA Layer 7 API Gateway)

Page 21: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

SuccessesBounded Contexts

Resource Oriented

Anti-Corruption Layers

Page 22: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

CompromisesIgnored Underlying Data Sources

API Gateway can become a monolith

Page 23: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

2.THE WRONG WAY

of Scaling Aggregation

Page 24: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

API Gateway

Why is our API Gateway so complex?

We’re not doing batch queries

We’re using HTTP queries to simulate database inner joins

Page 25: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

VOD Aggregation Service

client specific integrations separated

new VOD Service gets datastore

Video On Demand Aggregation

less HTTP calls

exploit appropriate datastore query tools

VOD Service populated by events

Page 26: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Publishing Updated Events

Legacy System Microservice Varnish Cache SQS / AMQP

Page 27: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Consuming Updated Events

SQS / AMQP Aggregation Service

DomainService

AggregationService

Datastore

Page 28: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Domain Service and Aggregator Service compared

Domain Service

Aggregation Service

Consistent Eventually Consistent

Modified by Human Commands

Modified by Domain Update Events

Long lived datastore Ephemeral datastore

Like a single DB table Like a DB projected view

Page 29: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Aggregated Resource Model{ "synopsis" : "Maggie Smith, Hugh Bonneville and Elizabeth McGovern star in a glittering period drama [...]

{ "restricted" : true, [...]

{ "_embedded": { "licences": [ { "platform": "samsung", "startDate" : [...]

/vod/ios/episodes?channel=ITV&

{ "_embedded": { "productions": [ { "synopsis" : "Maggie Smith, Hugh Bonneville and Elizabeth McGovern star in a glittering period drama [...] ”, “restricted” : true, “startDate” : [...],

VOD

q=Downton&grouping=alphabetical

Page 30: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

SuccessesClient Integration separated from Service Aggregation

“Inner Join” HTTP Calls eliminated

Query logic delegated to specialist datastore

Page 31: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

CompromisesHigh Coupling between Aggregator and Domain Services

Aggregator must be updated if Domain Services Change

Page 32: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

3.THE RIGHT WAY

of Scaling Aggregation

Page 33: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Guidance

LicencingSchedule Images

Video

Catalogue

Availability

Page 34: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

HATEOAS{ "synopsis" : "Maggie Smith, Hugh Bonneville and Elizabeth McGovern star in a glittering period drama [...]

{ "restricted" : true, [...]

{ "_embedded": { "licences": [ { "platform": "samsung", "startDate" : [...]

/vod/ios/episodes?channel=ITV&

{ "_embedded": { "productions": [ { “episodeId” : 123456, “available” : true, "_links": { "catalogue": { "href": "/catalogue/episodes/123456", }, "guidance": { "href": "/catalogue/guidance/123456", }, [...]

Availability

q=Downton&grouping=alphabetical

Page 35: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Availability Request Sequence

Page 36: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

SuccessesIdentified a new and highly cohesive domain

Decoupled domain services from domain aggregator

Page 37: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

CompromisesWe’ve pushed some duplicated logic back into API Gateways

A challenge for Consumer Contract Testing

Page 38: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

4.VERSIONING

What aggregation can teach us about it

Page 39: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Versioning Pitfalls

/catalogue/v1/episodes/123456

/vod/ios/v1/episodes?channel=ITV&q=Downton&grouping=alphabetical

Availability

{ "_embedded": { "productions": [ { "_links": { "catalogue": { "href": "/catalogue/v1/episodes/123456", [...]

Catalogue

Page 40: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Versioning Solutions

Version the Host

Don’t Version your APIs

Require a Custom Version Header

Require a Version in the Accept Header Media Type

HTTP GET:https://v1.api.itv.com/catalogue/episodes/123456Accept: application/hal+json

HTTP GET:https://api.itv.com/catalogue/episodes/123456Api-Version: 1Accept: application/hal+json

HTTP GET:https://api.itv.com/catalogue/episodes/123456Accept: application/vnd.itv.ctv.production.v1+hal+json

HTTP GET:https://api.itv.com/catalogue/episodes/123456Accept: application/vnd.itv.ctv.production+hal+json;version=1

Require a Version Request Parameter

HTTP GET:https://api.itv.com/catalogue/episodes/123456?version=1Accept: application/hal+json

Page 41: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Content Negotiation

Web browser makes a standard request

Give it html

HTTP GET:https://api.itv.com/catalogue/episodes/123456Accept: text/html;q=0.9,image/webp,*/*;q=0.8

HTTP GET:https://api.itv.com/catalogue/episodes/123456Content-Type: text/html; charset=utf-8

Page 42: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

No Version? No JSON!

Page 43: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

.IN SUMMARY

Page 44: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Let the system design emerge during development

You may need to think more about how you compose your core Domains

Mix your Architectural Styles

Watch out for that monolith coming back!

Page 45: Domain Service Aggregators - microXchg 2020 · 2020-04-01 · Domain Service Aggregators A Structured Approach to Microservice Composition Caoilte O’Connor @caoilte_oconnor. INTRO

Thanks!Any questions?

You can find me at:

@caoilte_oconnor

[email protected]