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

Microservices in Practice

Microservices in Practice

My talk at RubyConf Argentina 2014

Jano González

October 24, 2014
Tweet

More Decks by Jano González

Other Decks in Technology

Transcript

  1. View Slide

  2. @janogonzalez
    MICROSERVICES


    IN PRACTICE

    View Slide

  3. LAST YEAR…


    View Slide

  4. View Slide

  5. Leandro “Inkel” López, 2013
    “El ordenador, ordena.

    La computadora, computa”
    ˝

    View Slide

  6. 12hrs AUDIO/min


    View Slide

  7. HUNDREDS OF MILLIONS
    users/month


    View Slide

  8. MANY PLATFORMS


    View Slide

  9. $ rails soundcloud


    View Slide

  10. The Mothership

    View Slide

  11. Pearl Jam - Do the Evolution
    “It’s evolution, baby!”
    ˝

    View Slide

  12. soundcloud.com
    iOS/Android
    3rd party
    Public API Domain logic
    The Mothership

    View Slide

  13. View Slide

  14. WELCOME TO THE MONOLITH


    Population: you

    View Slide

  15. CONWAY’S LAW


    View Slide

  16. Marvin Conway, 1968
    “Organizations produce
    systems whose design is a
    copy of the structure of the
    organization”


    View Slide

  17. BREAKING THE

    MONOLITH
    ˝

    View Slide

  18. MICROSERVICES
    ARCHITECTURE


    View Slide

  19. JUST SOA FOR HIPSTERS?


    View Slide

  20. CROSS FUNCTIONAL

    TEAMS
    ˝

    View Slide

  21. View Slide

  22. View Slide

  23. BOUNDED

    CONTEXTS
    ˝

    View Slide

  24. Track
    User Favoriting

    View Slide

  25. DOMAIN MODEL

    FITS IN YOUR HEAD
    ˝

    View Slide

  26. Track Likes Count
    Favoriting

    View Slide

  27. YOU CAN USE

    THE RIGHT TOOLS
    ˝

    View Slide

  28. FASTERS

    TESTS
    ˝

    View Slide

  29. ENABLES

    REPLACEABILITY
    ˝

    View Slide

  30. View Slide

  31. CONTINUOUS

    DEPLOYMENT
    ˝

    View Slide

  32. SOA WITHOUT VENDOR LOCK-IN?

    View Slide

  33. SMART COMPONENTS,

    DUMB PIPES
    ˝

    View Slide

  34. HC SVNT
    DRACONES
    ˝

    View Slide

  35. YOU CAN USE

    TOO MANY TOOLS
    ˝

    View Slide

  36. DUPLICATED

    EFFORTS
    ˝

    View Slide

  37. AVAILABILITY VS

    CONSISTENCY
    ˝

    View Slide

  38. CASCADING

    FAILURES
    ˝

    View Slide

  39. View Slide

  40. View Slide

  41. View Slide

  42. View Slide

  43. TOO MANY

    NETWORK CALLS
    ˝

    View Slide

  44. View Slide

  45. YOU HAVE

    NETWORK CALLS
    ˝

    View Slide

  46. L. Peter Deutsch - Ten Fallacies of Distributed Computing
    “The network is reliable”


    View Slide

  47. WHO CALLS WHO AGAIN?


    View Slide

  48. OUR MIGRATION TO
    MICROSERVICES


    View Slide

  49. SAY NO TO THE

    BIG-BANG
    ˝

    View Slide

  50. EXTRACT WHEN

    MODIFYING
    ˝

    View Slide

  51. Client Apps Public API Domain logic
    The Mothership
    Microservice
    Internal API
    (bounded context)

    View Slide

  52. DE-ACTIVE

    RECORD
    ˝

    View Slide

  53. def index
    likes = user_likes_service.public_track_likes(
    @user, pagination_params)
    !
    respond collection_for(likes)
    end

    View Slide

  54. USE

    FEATURE FLAGS
    ˝

    View Slide

  55. if $feature.active?(:use_likes_service, current_user)

    else

    end

    View Slide

  56. CREATE

    YOUR SERVICE
    ˝

    View Slide

  57. MONITOR

    YOUR SERVICE
    ˝

    View Slide

  58. PREVENT

    CASCADING FAILURES
    ˝

    View Slide

  59. View Slide

  60. CIRCUIT BREAKERS
    ˝

    View Slide

  61. View Slide

  62. X
    X
    X

    View Slide

  63. X
    X
    X

    View Slide

  64. X
    X

    View Slide

  65. USE LIFECYCLE

    EVENTS
    ˝

    View Slide

  66. Public API Domain logic
    The Mothership
    Microservice
    Internal API
    Events Broker

    View Slide

  67. EVENTUAL

    CONSISTENCY
    ˝

    View Slide

  68. Microservice
    Microservice
    Client
    b1:(p,q,r), b2:(/)
    (a1;b1),(a1;b2)

    View Slide

  69. DEFINE AUTHORITATIVE

    SOURCES
    ˝

    View Slide

  70. DEFINE SYSTEM

    ROLES
    ˝

    View Slide

  71. Microservice
    Microservice
    Client
    b1:(p,q,r), b2:(/)
    (a1;b1),(a1;b2)

    View Slide

  72. Listing system
    Entity System
    Client
    b1:(p,q,r), b2:(/)
    (a1;b1),(a1;b2)

    View Slide

  73. REDUCE

    “CHATTINESS”
    ˝

    View Slide

  74. ONE SIZE

    DOESN’T FIT ALL
    ˝

    View Slide

  75. CLIENT SPECIFIC

    APIs
    ˝

    View Slide

  76. BFF
    ˝

    View Slide

  77. Listing system
    Entity System
    Entity System
    Client specific API

    View Slide

  78. Listing system
    Entity System
    Entity System
    Client specific API
    (a1;b1),(a1;b2)

    View Slide

  79. Listing system
    Entity System
    Entity System
    Client specific API
    a1:(x,y,z)
    b1:(p,q,r), b2:(/)

    View Slide

  80. Listing system
    Entity System
    Entity System
    Client specific API
    (a1.x, a1.y, b1.p)

    View Slide

  81. EXTRACTING

    LIBRARIES
    ˝

    View Slide

  82. COMING SOON…


    View Slide

  83. DISTRIBUTED

    TRACING
    ˝

    View Slide

  84. MORE TOLERANT

    READERS
    ˝

    View Slide

  85. BINARY

    PROTOCOLS?
    ˝

    View Slide

  86. CONCLUSIONS


    View Slide

  87. SMALL FOCUSED

    TEAMS
    ˝

    View Slide

  88. DELIVERING

    FAST
    ˝

    View Slide

  89. BEWARE OF

    LOSING THE BIG PICTURE
    ˝

    View Slide

  90. BEWARE OF

    TOO MANY STACKS
    ˝

    View Slide

  91. BEWARE OF

    DUPLICATE EFFORTS
    ˝

    View Slide

  92. AVOID

    BIG-BANG MIGRATIONS
    ˝

    View Slide

  93. EXPECT

    DISTRIBUTED FAILURE
    ˝

    View Slide

  94. MONITOR

    ALL THE SERVICES
    ˝

    View Slide

  95. MICROSERVICES WORK

    FOR US, BUT…

    View Slide

  96. NO SILVER
    BULLET
    ˝

    View Slide

  97. THANK YOU


    [email protected]
    http://soundcloud.com/jobs

    View Slide

  98. (WE ARE HIRING)


    [email protected]
    http://soundcloud.com/jobs

    View Slide

  99. •https://www.flickr.com/photos/rubyconfar/11231906253/in/set-72157638113568114

    •"Gilbert Hill, Andheri" by Madhav Pai - originally posted to Flickr as Gilbert Hill, Andheri. Licensed under
    Creative Commons Attribution 2.0 via Wikimedia Commons - http://commons.wikimedia.org/wiki/
    File:Gilbert_Hill,_Andheri.jpg#mediaviewer/File:Gilbert_Hill,_Andheri.jpg

    View Slide