Microservices

What are microservices anyway? IMHO if the phrase means anything at all, it’s a decentralised, agile and automated take on building distributed services, which is got to be a good thing, right?

October 6th, 2019

Splitting up shared databases

The problem of shared databases is not confined to monolithic systems. A big store of shared state is the guilty secret lurking in many a microservice architecture.

April 14th, 2019

Why is loose coupling between services so important?

You can’t eliminate coupling between collaborating services, but you can ensure that it doesn’t prevent you from enjoying the benefits of service-based development.

March 8th, 2019

Sharing microservices across large organisations

Sharing microservices across organisational boundaries is much harder than it looks. There are technical, operational, organisational and financial issues that need to be considered if you want to be successful.

February 9th, 2019

Now that Kubernetes is on Azure, what is Service Fabric for?

There does seem to be growing confusion over what Service Fabric is really for. Is it an orchestrator for microservices? A means of lifting and shifting legacy applications into the cloud? An application development framework?

January 6th, 2019

Finding service boundaries: more than just the bounded context

When you are identifying service boundaries, it’s not enough to consider the domain model alone. There are other, more pragmatic concerns to bear in mind.

October 12th, 2018

Message design anti-patterns for event-driven architecture

Event-driven integration can improve the scalability, resilience and scalability of distributed applications… but this does depend on the design of your event messages…

September 21st, 2018

Implementing a Docker HEALTHCHECK using ASP.Net Core 2.2

Starting with version 2.2, ASP.Net Core will make it easier to implement monitoring endpoints that can be used by a Docker HEALTHCHECK command.

September 12th, 2018

Hosting .Net Core containers in Service Fabric

Service Fabric does support container-based applications, but it still feels more like an application server than a container orchestrator.

August 12th, 2018

Building Twelve Factor Apps with .Net Core

Twelve factor apps provide a methodology for building apps that are optimised for modern cloud environments. It’s only been achievable in the Microsoft world since the advent of .Net Core.

June 3rd, 2018

Layers, onions, hexagons and the folly of application-wide abstractions

Not only are layered applications difficult to maintain, but the common abstractions they are built on tend to give rise to inflexible implementations that have serious scalability challenges.

May 8th, 2018

How to decompose that monolith into microservices. Gently does it…

You’re rarely given the opportunity to focus on transitioning an architecture to the exclusion of everything else. You may have to get used to the idea that decomposing a monolith is a direction of travel rather than a clear destination.

March 20th, 2018

GraphQL will not solve your API design problems

If you find REST APIs difficult to design, develop and scale, then your experience with GraphQL is not going to be any easier.

March 9th, 2018

Microservice preconditions: what needs to be in place before you decompose that monolith…

One of the main benefits of microservices is that they reduce the cost of change. The problem is that you need to make a significant up-front investment to realise this saving. Your first few microservices are more likely to be an expensive and potentially painful undertaking.

December 13th, 2017

Entity services: when microservices are worse than monoliths

Finely-grained, entity-based services seem to be advocated by some pretty authoritative sources. This is unfortunate as they are something of an anti-pattern that can undermine many of the benefits of decomposing an monolith into micoservices.

December 3rd, 2017

Automating Docker image deployments using Azure Container Instances

Azure’s Container Instances provides an easy and quick way to run Docker images without having to learn the various complexities of orchestration platforms such as Kubernetes.

November 4th, 2017

Events, sagas and workflows: managing long-running processes between services

An event-driven architecture can give rise to complex chains of events that are difficult to manage. These problems can be mitigated through careful design rather than resorting to shared state databases or workflow engines.

October 3rd, 2017

Managing and throttling serverless scaling with Azure Functions

The serverless promise of unlimited scale-out can be a curse when your downstream processes and data stores have strict limits on throughput. With Azure Functions your options for mitigating this are limited, though the new durable functions may provide an answer…

August 14th, 2017

Swagger is not WSDL for REST. It’s much less useful than that…

Swagger enables the same kind of automated discovery and integration that WSDL was invented to support. In doing so it undermines the design of REST APIs and doesn’t even provide adequate documentation.

July 5th, 2017

Writing unit tests for Azure Functions using C#

You can now write compiled Azure functions in C# with full unit test coverage, though there are a few obstacles along the way.

June 4th, 2017

Can consumer-driven contracts manage breaking change in microservice integrations?

One of the more enduring problems with service integration is managing change in service interfaces. Consumer-driven contracts can help to detect breaking changes, but this visibility comes at a price.

May 26th, 2017

Comparing serverless C# and .Net development using Azure Functions and AWS Lambda

Recently released toolsets for AWS Lambda and Azure Functions are finally making serverless application development available to C# developers.

May 16th, 2017

API management and the return of the enterprise service bus

No self-respecting integration platform is complete without an API management story these days. Is this just a RESTful return of the enterprise service bus?

April 12th, 2017

Using Docker to build and deploy .Net Core console applications

Using Docker with .Net Core is initially straightforward, but to get beyond basic image building you will need to handle more than the simple scenarios demonstrated in quick-start guides.

November 13th, 2016

Handling Protocol Buffers backwards compatibility between versions 2 and 3 using C#

You will inevitably be pushed towards upgrading your protocol buffer messages to Proto3, particularly if you want a client that supports .Net Standard that .Net Core. This can be done, but there are a couple of speed bumps along the way.

October 3rd, 2016

What’s so bad about monoliths anyway…?!

Don’t get me wrong – I am an advocate of decomposing functionality into autonomous services. My reservation is that you need to have a lot of prerequisites in place before you can start leveraging microservices.

July 12th, 2016

Simplifying .Net REST API development: Nancy, self-hosting and ASP.Net Core

REST API development using ASP.Net WebAPI is so fussy compared to other ecosystems such as Node.js and Ruby. New frameworks are emerging that promise to simplify both development and hosting of APIs in the .Net world.

June 2nd, 2016

Is “Serverless” architecture just a finely-grained rebranding of PaaS?

Serverless computing makes bold promises of development without having to worry about environments, scaling or deployment. Haven’t we been here before?

May 5th, 2016

Managing services that don’t have clear code ownership

How do you organise code ownership for services that do not align conveniently with team or organisational boundaries?

July 25th, 2015

Can cross-cutting concerns really exist between services?

You might be able to identify cross-cutting concerns in a monolith, but in a service-orientated world they should melt away into specific implementations.

May 5th, 2015

Refactoring large monoliths to microservices: strategies, risks and pragmatic reality

Large scale rewrites of systems are loaded with risk. You can address this by preparing the ground in advance and adopting an incremental approach, but a willingness to be pragmatic is essential.

April 20th, 2015

Microservices, REST and the distributed big ball of mud

The “big ball of mud” describes a system architecture that is sprawling, sloppy and haphazard. That’s precisely how you’d describe some emerging microservice architectures.

March 9th, 2015

How big is a microservice?

We know that micro services are small and focused by design – just how small is this in practice?

January 4th, 2015

Why REST is not a silver bullet for service integration

REST is sometimes described as the next “evolutionary step” in service integration. The problem is that REST provides too much of a “dumb pipe” to support genuinely decoupled, fault-tolerant service integration.

June 12th, 2014

Are microservices just SOA “done properly”?

There’s nothing really new about many of the ideas that underpin microservices. Are they just an agile re-branding of SOA?