-
-
Notifications
You must be signed in to change notification settings - Fork 319
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add article: The four tenets of SOA revisited
- Loading branch information
Showing
1 changed file
with
65 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
--- | ||
layout: post | ||
title: "The four tenets of SOA revisited" | ||
description: "Twenty years after." | ||
date: 2024-03-01 13:47 UTC | ||
tags: [Services, Architecture, Article Series] | ||
--- | ||
{% include JB/setup %} | ||
|
||
<div id="post"> | ||
<p> | ||
<em>{{ page.description }}</em> | ||
</p> | ||
<p> | ||
In the <a href="https://learn.microsoft.com/en-us/archive/msdn-magazine/2004/january/msdn-magazine-january-2004">January 2004 issue of MSDN Magazine</a> you can find an article by <a href="https://en.wikipedia.org/wiki/Don_Box">Don Box</a> titled <a href="https://learn.microsoft.com/en-us/archive/msdn-magazine/2004/january/a-guide-to-developing-and-running-connected-systems-with-indigo">A Guide to Developing and Running Connected Systems with Indigo</a>. Buried within the (now dated) discussion of the technology code-named <em>Indigo</em> (later <a href="https://en.wikipedia.org/wiki/Windows_Communication_Foundation">Windows Communication Foundation</a>) you can find a general discussion of <em>four tenets of service-oriented architecture</em> (SOA). | ||
</p> | ||
<p> | ||
I remember that they resonated strongly with me back then, or that they at least prompted me to think explicitly about how to design software services. Some of these ideas have stayed with me ever since, while another has nagged at me for decades before I found a way to reconcile it with other principles of software design. | ||
</p> | ||
<p> | ||
Now that it's twenty years ago that the MSDN article was published, I find that this is as good a time as ever to revisit it. | ||
</p> | ||
<h3 id="96e92c4bccef4d5789bbb5d860e3ce3f"> | ||
Legacy <a href="#96e92c4bccef4d5789bbb5d860e3ce3f">#</a> | ||
</h3> | ||
<p> | ||
Why should we care about an old article about <a href="https://en.wikipedia.org/wiki/SOAP">SOAP</a> and SOA? Does anyone even use such things today, apart from legacy systems? | ||
</p> | ||
<p> | ||
After all, we've moved on from SOAP to <a href="https://en.wikipedia.org/wiki/REST">REST</a>, <a href="https://en.wikipedia.org/wiki/GRPC">gRPC</a>, or <a href="https://en.wikipedia.org/wiki/GraphQL">GraphQL</a>, and from SOA to <a href="https://en.wikipedia.org/wiki/Microservices">microservices</a> - that is, if we're not already swinging back towards monoliths. | ||
</p> | ||
<p> | ||
Even so, I find much of what Don Box wrote twenty years ago surprisingly prescient. If you're interested in distributed software design involving some kind of remote API design, the four tenets of service-orientation apply beyond their original context. Some of the ideas, at least. | ||
</p> | ||
<p> | ||
As is often the case in our field, various resources discuss the tenets without much regard to proper citation. Thus, I can't be sure that the MSDN article is where they first appeared, but I haven't found any earlier source. | ||
</p> | ||
<p> | ||
My motivation for writing these article is partly to rescue the four tenets from obscurity, and partly to add some of my own commentary. | ||
</p> | ||
<p> | ||
Much of the original article is about Indigo, and I'm going to skip that. On the other hand, I'm going to quote rather extensively from the article, in order to lift the more universal ideas out of their original context. | ||
</p> | ||
<p> | ||
I'll do that in a series of articles, each covering one of the tenets. | ||
</p> | ||
<ul> | ||
<li>Boundaries are explicit</li> | ||
<li>Services are autonomous</li> | ||
<li>Services share schema and contract, not class</li> | ||
<li>Service compatibility is determined based on policy</li> | ||
</ul> | ||
<p> | ||
Not all of the tenets have stood the test of time equally well, so I may not add an equal amount of commentary to all four. | ||
</p> | ||
<h3 id="ad6f66b0ac954647bebf4d288939d2ab"> | ||
Conclusion <a href="#ad6f66b0ac954647bebf4d288939d2ab">#</a> | ||
</h3> | ||
<p> | ||
Ever since I first encountered the four tenets of SOA, they've stayed with me in one form or other. When helping teams to design services, even what we may today consider 'modern services', I've drawn on some of those ideas. There are insights of a general nature that are worth considering even today. | ||
</p> | ||
<p> | ||
<strong>Next:</strong> Boundaries are explicit. | ||
</p> | ||
</div> |