SOA

Some articles about service orientated architecture and the related patterns and technologies. That means microservices too. Oh yes it does.

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

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.

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.

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?

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.

June 28th, 2016

Should microservices share technologies and platform capabilities?

Should agile teams be encouraged to share capabilities or be given total autonomy over their technology choices? For larger organisations this can become a trade-off between economies of scale and speed of delivery.

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?

February 1st, 2016

Data design for event-driven architecture: autonomy, encapsulation and ordering

When you’re implementing an event-driven architecture, the design of your events is absolutely critical to realize the benefits of loose coupling.

December 12th, 2015

Pragmatic REST: APIs without hypermedia and HATEOAS

If you’re not using HATEAOS then you’re not using REST. That’s true enough, but in many cases adopting HATEOAS doesn’t deliver much value beyond architectural purity.

November 26th, 2015

Comparing nServiceBus and MassTransit: Do we still need .Net integration frameworks?

Both nServiceBus and Mass Transit plugged an important gap in Microsoft’s integration landscape, but do they have a role in a future that is likely to be dominated by diverse technologies and autonomous agile teams?

October 15th, 2015

Using the REST API connector as a data source in Informatica Cloud

It can be pretty straightforward to read REST API resources using Informatica Cloud – so long as you know which levers to pull and your data is in a sympathetic format.

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?

February 8th, 2015

Protocol buffers for .Net: protobuf-net vs protobuf-csharp-port

Google’s open source serialization format is an efficient way of passing platform-independent and version-tolerant data between end-points. Two very different implementations have emerged for .Net.

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.

December 16th, 2014

Don’t assume message ordering in Azure Service Bus

Azure Service Bus can provide first-in-first-out messaging in theory, but this is not the same as guaranteeing the order in which your messages are processed.

September 9th, 2014

CQRS is a state of mind rather than a cookie-cutter design pattern

CQRS is based on the simple notion that you use a different model to update information than the one to read it. This does not necessarily have to give rise to the same solution every time.

August 21st, 2014

Messaging shouldn’t be used for queries

When developers first start using messaging they can be tempted to use it as a brand new hammer for every nail. Messaging brings a lot to the party, but it isn’t necessarily a suitable transport for fast, synchronous query processing.

July 22nd, 2014

Using a tolerant reader for web service integrations in .Net

Using version tolerant readers can help you to cope with changes to service contracts though this does come at the expense of a weaker contract. The approach is more appropriate for fluid services that are prone to frequent change.

July 9th, 2014

The problem with tiered or layered architecture

An architecture based on tiers or layers is too inflexible to deal with the more flexible demands of modern systems, particularly when you working with high-volume systems that require distributed processing.

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?

May 4th, 2014

Eventual consistency and the trade-offs required by distributed development

Developers who have been brought up on the certainties of ACID transactions often have a problem trusting eventual consistency. Once you start exploring the requirements in more depth this really so much of a handicap.

February 22nd, 2013

A shared database is still an anti-pattern, no matter what the justification

Shared databases risk turning into performance bottlenecks that encourage close-coupling and create a single point of failure. There’s no justification for using them to integrate processes and applications.