$30 off During Our Annual Pro Sale. View Details »

Domain Service Aggregators

Domain Service Aggregators

A Structured Approach to Microservice Composition

Caoilte O'Connor

February 12, 2015
Tweet

Other Decks in Programming

Transcript

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

    View Slide

  2. .
    INTRO
    Based on a true story...

    View Slide


  3. You stand on the shoulders of
    giants
    How do you build Microservices?
    http://www.thoughtworks.com/insights/blog/microservices-nutshell
    http://www.se-radio.net/2014/10/episode-213-james-lewis-on-microservices

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. “Firm Foundations”
    Background Image Copyright Daniel Mayer http://bit.ly/1BXZHui

    View Slide

  8. View Slide

  9. 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.

    View Slide

  10. 1.
    DOMAIN SERVICES
    Building Blocks for a Microservices Architecture

    View Slide

  11. Guidance
    Licencing
    Schedule Images
    Video
    Catalogue

    View Slide

  12. Guidance
    Licencing
    Schedule
    Images
    Video
    Catalogue
    A set of Bounded Contexts
    Organisational Boundaries work best
    High Cohesion, Loose Coupling
    Think Resource Oriented

    View Slide

  13. /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
    Catalogue
    REST

    View Slide

  14. /licencing/licences?episode=123456
    {
    "_embedded": {
    "licences": [
    {
    "platform": "samsung",
    "startDate": "2013-01-04T19:30:00Z",
    "endDate": "2013-01-11T19:30:00Z"
    }
    ]
    }
    }
    Licencing
    REST

    View Slide

  15. External Caching on a Domain
    Legacy System Microservice Varnish Cache

    View Slide

  16. External Caching on a Domain
    Legacy System Microservice Varnish Cache

    View Slide

  17. Invalidating External Caching on a Domain
    Legacy System Microservice Varnish Cache

    View Slide

  18. Invalidating External Caching on a Domain
    Legacy System Microservice Varnish Cache

    View Slide

  19. The Netflix API Gateway Pattern
    http://techblog.netflix.com/2012/07/embracing-differences-inside-netflix.html
    https://github.com/Netflix/zuul/wiki

    View Slide

  20. 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)

    View Slide

  21. Simple Made Easy
    http://www.infoq.com/presentations/Simple-Made-Easy
    Rich Hickey

    View Slide

  22. Successes
    Bounded Contexts
    Resource Oriented
    Anti-Corruption Layers

    View Slide

  23. Compromises
    Ignored Underlying Data Sources
    API Gateway can become a monolith

    View Slide

  24. 2.
    THE WRONG WAY
    of Scaling Aggregation

    View Slide

  25. 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

    View Slide

  26. 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

    View Slide

  27. Publishing Updated Events
    Legacy System Microservice Varnish Cache SQS / AMQP

    View Slide

  28. Consuming Updated Events
    SQS / AMQP Aggregation
    Service
    Domain
    Service
    Aggregation
    Service
    Datastore

    View Slide

  29. 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

    View Slide

  30. 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

    View Slide

  31. Successes
    Client Integration separated from Service Aggregation
    “Inner Join” HTTP Calls eliminated
    Query logic delegated to specialist datastore

    View Slide

  32. Compromises
    High Coupling between Aggregator and Domain Services
    Aggregator must be updated if Domain Services Change

    View Slide

  33. 3.
    THE RIGHT WAY
    of Scaling Aggregation

    View Slide

  34. Guidance
    Licencing
    Schedule Images
    Video
    Catalogue
    Availability

    View Slide

  35. HATEOAS and HAL
    {
    "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

    View Slide

  36. Availability Request Sequence

    View Slide

  37. Successes
    Identified a new and highly cohesive domain
    Decoupled domain services from domain aggregator

    View Slide

  38. Compromises
    We’ve pushed some duplicated logic back into API Gateways
    A challenge for Consumer Contract Testing

    View Slide

  39. 4.
    VERSIONING
    What aggregation can teach us about it

    View Slide

  40. 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

    View Slide

  41. 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/123456
    Accept: application/hal+json
    HTTP GET:
    https://api.itv.com/catalogue/episodes/123456
    Api-Version: 1
    Accept: application/hal+json
    HTTP GET:
    https://api.itv.com/catalogue/episodes/123456
    Accept: application/vnd.itv.ctv.production.v1+hal+json
    HTTP GET:
    https://api.itv.com/catalogue/episodes/123456
    Accept: application/vnd.itv.ctv.production+hal+json;version=1
    Require a Version Request Parameter
    HTTP GET:
    https://api.itv.com/catalogue/episodes/123456?version=1
    Accept: application/hal+json

    View Slide

  42. Content Negotiation
    Web browser makes a standard request
    Give it html
    HTTP GET:
    https://api.itv.com/catalogue/episodes/123456
    Accept: text/html;q=0.9,image/webp,*/*;q=0.8
    HTTP GET:
    https://api.itv.com/catalogue/episodes/123456
    Content-Type: text/html; charset=utf-8

    View Slide

  43. No Version? No JSON!

    View Slide

  44. .
    IN SUMMARY

    View Slide

  45. 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!
    We have promoted many concepts
    from application architecture
    integration architecture

    View Slide

  46. Thanks!
    Any questions?
    You can find me at:
    @caoilte_oconnor
    [email protected]

    View Slide

  47. Credits
    Thanks to:
    ▷ Presentation template by SlidesCarnival
    ▷ Photography by Daniel Mayer, Leighton
    Dann and “Pere”
    ▷ Icons by Webalys and Pixabay

    View Slide