Welcome to MSDN Blogs Sign in | Join | Help

Welcome to The Metaverse

Navigating the service-oriented, identity aware metaverse

News

  • Disclaimer:
    The content of this blog are my own personal opinions and do not necessarily represent Microsoft's position, commitments or strategy. In addition, my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent point in time snapshot you should not consider out of date posts to reflect my current thoughts and opinions.




    Add to Technorati Favorites
In response ... Dear John

Dear John [edited]

Thank you so very much for taking the time to read the whitepaper I recently published to MSDN laying out Microsoft’s prescriptive guidance on how to most appropriately use our current distributed systems technologies when building distributed services today. I’m sorry that you found the paper so woefully lacking and that you feel the guidance presented is so horribly misleading to application developers the world over.

Permit me a moment to ruminate on the stated aim of the paper: “to help you make the best choices when deciding how to build distributed systems today on the Microsoft platform”. The primary goals of the paper were to help:

  • Those who are confused by the plethora of technologies available today on Microsoft’s distributed systems platform understand where and when each technology in our stack is most (generally) appropriate
  • Those who are concerned about Microsoft’s commitment to our current technologies and how we are evolving our distributed systems technology platform moving forward into the new world of Indigo Windows Communication Foundation (WCF) and beyond

The paper never states explicitly, or proposes to provide, guidance on best practices for how to actually go about designing distributed systems – that is beyond the scope of the paper. Also, this paper does not argue the pros and cons of message-based vs. RPC-style distributed systems technologies – something I know you feel strongly about:

You appear to assume that I promote the use of RPC-style distributed component technologies. This confuses me because as I clearly state, before the end of the second page of the paper, that “while distributed component technologies are a very powerful way to construct tightly coupled portions of your systems, they are not the most appropriate technologies to use when building distributed systems that must be interoperable and able to be quickly adapted to changes in the business requirements”.

From my analysis of your post, we’re in agreement, no?

I think what you’re trying to state is your enormous dislike of what you call “RPC-style” programming interfaces for distributed systems. You appear to greatly dislike the notion of developers writing code that requests actions on a remote service using the oft used nonclemature:

ResultType ServiceName.Action([ParameterType value1] [, ParameterType value2] … [, ParameterType valuen])

However, you do not articulate clearly your preferred approach. Instead, you berate me, and the Indigo WCF team, and allude to your own preference for the notion of explicitly forming messages containing data requesting work to be done and (optionally) processing responses asynchronously. And who would we be to argue with you? This is precisely what TCP, UDP, RPC, DCOM, SOAP, MSMQ, MQSeries, RMI, JAX-*, IPX, Telex, Morse Code, etc., have all been doing for years. If you would prefer to continue coding at the transport or messaging level, then neither I, nor any of my Indigo WCF compatriots will stand in your way. However, we will point out that message-oriented programming is rarely as productive and consistent as using coding constructs that have stood the test of time and proven to be a very effective way to describe how any given piece of code interacts with objects and services around it.

So, let me synthesize an alternative for you: If we were able to construct a technology which would make it explicit to developers that they are acting against a remote service whilst enabling them to continue with the form of coding that they enjoy today – be it via method calls or via message passing, then I think that would be a winner, no? This is Indigo WCF – a technology which lets you send messages or invoke methods across different transports, encoded, secured and made reliable via practically any transport you want. What *precisely* are we missing here? Have you attempted to build a messaging-based app with Indigo yet? Did you manage to get it to work? What difficulties, *specifically* did you find? Did you submit your experience via the Indigo newsgroup so that the team had a chance to make changes to Indigo to support your scenarios?

I am also very interested in how you managed to synthesize the guidance point “Use WSE when MSMQ is not available” from my paper. WSE and MSMQ are orthogonal technologies. As I am sure you understand, WSE provides developers tactical implementation of several WS-* protocols whereas MSMQ provides async, persistent message-queueing capabilities using Microsoft’s MSMQ communications infrastructure. Please enlighten us with a clear description of how you would build an interoperable, general-purpose, consistent programming interface using WSE and MSMQ.

I think you’ve muddied your critique of the paper with your own agenda. You later comment on the fact that WSE has “a really nice message-oriented programming model and an excellent extensibility mechanism”. Yes, WSE2 does. As can .NET Remoting if you want it to. The point, however, is that if you build your system on top of your custom WSE2 or .NET Remoting based messaging infrastructure, you’re going to end up with a proprietary messaging stack of your own devising, which will not be easily interoperable with across platforms and technologies and you’ll have a much harder time moving from onto Indigo WCF in the future. Also, there are some significant performance implications of doing this which will make themselves evident as you begin to test such a messaging substrate compared to using, for example, Indigo. Oh, and in WSE3, the chances are that you’re going to have to significantly re-work your custom plumbing. Are you planning on publishing this sound, reliable, extensible, interoperable communication framework you seem to keen to espouse? I look forward to seeing the fruits of your labor!

We in the Indigo WCF team, believe (based upon years of gathered experience and feedback from our customers) that developers should spend as much time writing their business apps as possible, rather than creating their own custom messaging infrastructures. Building a messaging layer that is performant, secure, interoperable and extensible might seem like a good idea at the beginning, but such custom plumbing infrastructure quickly reveals its demons when only slightly provoked. Getting it right is a very, very costly and complex process which adds significant and often unnecessary cost to most projects.

You point out that when I say “Keep Objects and Components Inside Your Services” that this is good advice, but that I contradict myself later. Where?

Finally, you state in the first paragraph of your critique that the whitepaper is, in fact, "accurate". And yet you class it as worthless trash that should be ignored. I have to admit, I must be dumb as a post as I am now very confused – either:

  1. The paper is full of worthless trash and should be ignored
  2. The paper contains clear, consistent, accurate information that will help the reader decide when and where to apply which technology when building their system

Which is it?

So, in closing John, please reveal to us your manifesto for how distributed systems should ideally be designed and built. Please do so succinctly and unambiguously. Please provide examples of what your app and service code should look like under your view of the world.

I look forward to your considered response.

Rich.

 

Posted: Tuesday, September 06, 2005 1:22 PM by RichTurner666

Comments

Henk de Koning said:

While you guys are fighting your little war, let's all agree that whereever you end up on the spectrum that ranges from build-the-packet-yourself to bold-and-beautiful-powertool-handles-all, the design of a distributed app still needs some clever thinking -- especially the interaction pattern between the different remoted parts.

I am so glad that even when using WCF you actually have to type something special in your code to make it remote (sure, it's just a few attribs in its simplest form). I think that is good. I hope it will force people to think before they remote ...
# September 6, 2005 5:59 PM

Paul Kinlan said:

Hi,

I hope this doesn't come out as a rant, but the start of your reply is quite childish.

"I hope you’ll forgive my impudence and grant me the opportunity to ask for your assistance. I bow to your oh so evidently superior mind as I clearly do not possess the gargantuan intellect necessary to comprehend your perspective.".

You could have put it a lot more professionally, and not lost any respect. It seems that John was saying that having read your article he didn't like it and didn't think the advice you provided was very good. Other than plainly stating that I didn't see any of the ... I don't know how to say it... trash talking you did in this entry, in his article. He stated an opinion that you got it wrong. [You might have for all I know.]

The middle of your post, rebutting his remarks is fair game.

You end it with: "I and everyone else who believe that the Web services platform have clearly got it so very, very wrong.

I look forward to your authoritative perspective."

You belive that yourself and everyone has got the web service platform wrong? Really? Again, I thought you were being slightly childish.

I personally belive you could have done a better and stronger reply and response by not slanderizing [is that a word?] John with name calling. You could have rebutted his points and show that you are in deed a leading authority on the subject. Name calling, I think seems to show that you get stroppy about criticism.

My opinion anyway. And I really don't want to cause offence, but your reply to john kind of took my by surprise.

Paul Kinlan.
# September 6, 2005 6:09 PM

David Ing said:

Hello Richard,

Hmmm. Things I know (as of today):

1. John's post was both funny and aggressive. He said what he thought. I liked that.

2. Your rebuttal was both funny and aggressive. You (obviously) said what you thought. I liked that. You might have overcooked it slightly, but it was still edible.

3. My guess would be that most readers will just think you're both just being aggressive rather than funny. They won't like it.

4. John has posted follow ups where he has tried to define his discomfort with Indigo. I think the nearest he's got so far is 'WCF doesn't smell right for covering up some abstractions that, in JCJ's opinion, are important not cover in doing an Everyman Mort DistComp design'. Conclusion that are probably not going to stop Whidbey shipping...

5. You're 'The Vendor' and John's, well, not. Not much point at being angry at him, as it won't squeeze anymore useful info out of the thread. Now you don't have to stand defenselessly by while people criticize your paper, but at the end of the day what difference is your reply going to make? It does make you look a little angry?

Anyway, enough with the Kofi Annan - has anyone got $20 on Goodwin's Law invoked on this topic by the end of the month?? $10?? I say we pool the winnings and buy margaritas at the PDC…

- David
# September 6, 2005 7:14 PM

RichTurner666 said:

I am sorry if you thought my response childish. This was not the intention. What I was trying to get across was the fact that Johns initial comments and criticisms are (in my opinion) all over the place and that he's not clearly articulating his thoughts and perspectives in a way that I can understand. So, either he really does have a better option (but needs to be clearer in his critiques) or I really am just too dense to get it. Specifically not wanting to denegrate or slander him, I opted for the latter position and I invited him to be more concrete and to illustrate clearly what it was he was thinking - albeit, admittedly, maybe in a manner "a little over the top".

Point taken though - toning down ... just a little.
# September 6, 2005 7:23 PM

RichTurner666 said:

Henk: I could not agree more ... and I am sure that John and practically everyone else who reads this and related blogs would do so too.

I have blogged several times on this subject and spoken about it more times than I can count. I think it's summarized well by Martin Fowler's first law of building distributed systems which, paraphrased, states "Don't unless you really have to"!

And if you have to ... then be really careful how you design and implement the system. Avoid statefulness, avoid chattiness, avoid the wire at all cost, minimize data being exchanged to the minimum necessary, etc., etc., etc.

And, yes, I totally agree that there is a cost to making hard things deceptively easy.
# September 6, 2005 7:36 PM

David Ing said:

Ah - the edits make it seem much calmer and rational. Of course, makes less exciting reading though; and I guess the $20 bet is off now then... :-)

- David
# September 6, 2005 7:39 PM

RichTurner666 said:

Goodwin's Law??? Always up for a worthwhile wager! ;)
# September 6, 2005 8:16 PM

Bruce said:

Henk and Paul, your Hitlereque attempts to denigrate and supress Rich's response might fly in 1940 - but not today. Rich has a right to be heard!
# September 6, 2005 8:49 PM

Bruce said:

(Does that mean I get the $20? *grin*)
# September 6, 2005 8:51 PM

Dennis van der Stelt said:

Why is your loginname "RichTurner666" ?
Why the 666 ?
# September 7, 2005 2:56 AM

Paul Kinlan said:

I like the edits over the original. :) I personally think it looks stronger.... If that makes sense.

Kind Regards,
Paul Kinlan
# September 7, 2005 3:24 AM

Erik Johnson said:

Richard, I saw your comment asking John to discuss these points in his BOF session.

Better yet, why don't BOTH of you come to my BOF slot -- "App Designs for SOA" (Tuesday, 10:15PM) and get me off the hook for coming up with talking points!
# September 7, 2005 11:53 AM

RichTurner666 said:

Regarding the 666 - here's what happened:

Back when MSDN blogs first started rolling, we were hosted on the same infrastructure that hosted the ASP.NET blogs which anyone could sign up to. When I first tried to sign up with my alias (richardt), it was already taken. So was richturner, rturner, rich.turner, richard.turner, richturner123, richturner000, etc. Rather than have richturner4562343 or some other completely unforgettable name, I chose 666 because 111, 222, 333, 444, 555 were all taken too!

Never did I think my blog would become as popular as it has. About 3 months after I started blogging, we moved MSDN blogs to a new infrastructure where only Microsoft employees could register. I changed my blog name to richardt (yippee!) but alas, our infrastructure is less than flexible and I am still trying to get the ops guys to understand that I want my sign-in name changed to richardt too ... bear with me though - have been having a conversation on this issue for over 3 months now, and hope for a resolution very soon!

Rest assured, I have no occult leanings, although my sign-in name has sparked more than a few humourous comments from people pointing out that I work at Microsoft ;)
# September 8, 2005 11:23 AM

Tom Fuller said:

At the risk of exposing myself as a 'newbie' I just had to thank you guys for the good laugh I got when I actually looked up Goodwin's Law (http://members.tripod.com/~goodwin_2/law.html). I had fully expected it to be some meaningful law that would enlighten me on the progression of distributed development technologies. I printed out the definition and headed off for lunch expecting to sit down and really learn something new. Well I did, many thanks for the education :)
# September 9, 2005 6:23 AM

Bruce said:

Trust me, there is *substantial* empirical evidence backing up Goodwin's Law!
# September 9, 2005 12:14 PM

RichTurner666 said:

ROFL ROFL ROFL! :) An education indeed. I've just learned the term for the first time too! :) Bruce - you win! ;)
# September 9, 2005 6:50 PM

Message for you, sir! said:

# September 11, 2005 10:26 AM

Stefan Tilkov's Random Stuff said:

Nothing like a nice pissing contest: Rich Turner and John Cavnar-Johnson go back and forth about how to do distributed programming the right way. The starting point was Rich’s whitepaper on Developing Distributed Services Today, to which John posted a somewhat less than favorable comment. Rich responded (a little childishly, IMO, even in the edited version); John followed up again....
# September 11, 2005 2:48 PM

On the road to Indigo said:

Dear John, Part II
Thanks once again for discussing your thoughts on my musings in my last blog to you....
# September 12, 2005 1:27 PM

On the road to Indigo said:

Thanks once again for discussing your thoughts on my musings in my last blog to you. I know you’re busy...
# September 12, 2005 1:27 PM

David Glaubman said:

I think it's actually Godwin's Law, after Mike Godwin who propounded it on the WELL some years ago.
# September 21, 2005 8:41 PM
Anonymous comments are disabled
Page view tracker