While at NDC Oslo, K Scott and Jon talked to Ian Cooper about Microservices and using the Brighter library for Command Dispatcher / Command Processor patterns.
Download / Listen: Herding Code 210: Ian Cooper on Microservices and the Brighter library
Show Notes:
- Why Microservices?
- (0:48) Ian explains that "micro" doesn’t imply number of lines of code but "A bounded concept/business capability within your Domain" (put forth by Martin Fowler and James Lewis)
- (1:20) Ian talks about breaking the domain problem down further and further for simpler testing, better fault tolerance and incremental releases.
- (2:20) "If you can’t QA everything you need to be able to monitor and respond to issues rapidly."
- (2:42) Scott Allen asks if Devops is a driver for Microservices rather than physical deployment or team size.
- (3:00) Ian talks about the scale limits of developers and teams and how component based architectures.
- Have we been here before?
- (4:00) Ian talks about how Microservices is the next generation of component-based architectures after DCOM, CORBA, SOA and the importance of understanding what worked, what didn’t and why.
- (4:49) Asking a component for a cup of tea vs telling something how to make tea highlighting the difference between Microservices vs RPC. RPC was very coupled to behavior which lead to fragile APIs.
- Finding the "micro" sweet spot
- (5:50) Jon asks how you manage the complexity of orchestrating many smaller pieces.
- (6:15) Ian advises against going too small – Nanoservices – where the overhead of a service overshadows the utility value of it.
- (6:30) "It’s really hard to get a feel in a new domain of where those points are that you can slice effectively" – one solution is to start exploring the domain in a traditional monolithic way and to break the parts apart at the seems to get the tradeoff right.
- Tooling and support
- (7:06) Jon asks what a good way to manage these services including profiling and monitoring.
- (7:20) Ian recommends some tools to help:
- (8:28) Scott Allen and Ian talk about how Microservices take forward SOA principles such as autonomous services, not sharing types and stable interfaces.
- (9:00) Scott Allen asks what options for communications between the services are and Ian compares HTTP, Sockets and message queues like RabbitMQ.
- Ian’s Brighter .NET lightweight Microservices project
- (10:20) Basic two parts of Brighter are:
- Command Dispatcher/Processor – Maps a command to a processor with a pipeline where you can insert orthogonal operations like logging and monitoring
- Task Queue – Allows some commands will be handled asynchronously elsewhere
- Very simple for the developer – just write a command and a handler.
- Easy to embed in your existing Windows service if using something like Topshelf.
- Provides timeouts, retries and a circuit breaker inspired by Netflix’s Hystrix in a declarative manner.
- (12:45) Scott Allen clarifies how easy it is to get two services talking to each other using this via RabbitMQ.
- (13:00) Ian talks about future support for Azure Service Bus and the possibility of producing one for Redis – RabbitMQ and Amazon SQS are already supported.
- (13:30) Scott Allen asks if this is used in production and Ian explains how Huddle started with using RX on the server and had difficulties managing subscriptions.
- (14:20) Brighter is on ThoughtWorks Technology Radar and evangelized by ex-Huddlers at their new roles.
- (14:40) Ian talks about the importance of good documentation and welcomes feedback on theirs.
- (15:10) Ian mentions they facilitate hexagonal architecture.
- Scott Allen asks if you can use in-process and Ian explains the subtleties
- (10:20) Basic two parts of Brighter are:
- Wrap-up
- (16:00) Ian’s time is sucked up by being a a new dad, congratulations!
- (16:30) The one job of a parent is keeping children alive.
- (16:40) Thank-you and goodbye.
Show Links:
- Fowler & Lewis on Microservices
- New Relic for .NET documentation
- Decoupling from ASP.NET – Hexagonal Architecture with Ian Cooper at NDC 2014
- Chris Fidao on Hexagonal Architecture
These show notes were contributed by Damien Guard. Thanks!