Rockford Lhotka's Blog

Home | Lhotka.net | CSLA .NET

 Monday, 18 June 2018

In my microservices presentations at conferences I talk about APIs like this. I go into more depth in my presentations in terms of the background, but these are the high level points of that section of the talk.

From 1996 with the advent of MTS, Jaguar, and EJB, a lot of people create a public service API with endpoints like this pseudo-code:

int MyService(int x, double y)

That is not a service, that is RPC (remote procedure call) modeling. It is horrible. But people understand it, and the technologies have supported it forever (going back decades, and rolling forward to today). So LOTS of people create "services" that expose that sort of endpoint. Horrible!!

A better endpoint would be this:

Response MyService(Request r)

At least in this case the Request and Response concepts are abstract, and can be thought of as message definitions rather than types. Not that hardly anybody thinks that way, but they should think that way.

With this approach you can at least apply the VB6 COM rules for evolving an API (which is to say you can add new stuff, but can't change or remove any existing stuff) without breaking clients.

However, that is still a two-way synchronous API definition, so achieving things like fault tolerance, scaling, and load balancing is overly complex and WAY overly expensive.

So the correct API endpoint is this:

void MyService(Request r)

In this case the service is a one-way call, that can easily be made async (queued). That helps the mental adjustment that Request is a message definition. It also makes it extremely easy and cost-effective to get fault tolerance, scaling, and load balancing, because the software architecture directly enables those concepts.

Monday, 18 June 2018 09:54:09 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Monday, 11 June 2018

Windows Server is a wonderful server operating system. However, I think it is closing in on END OF LINE (with a nod toward Tron fans).

Why do I say this? Here's my train of thought.

  1. .NET Core runs on either Windows or Linux interchangeably
  2. Linux servers are cheaper to run than Windows Servers (especially in public clouds)
  3. Docker is the future of deployment
    1. Linux containers are more mature and generally better than Windows containers
    2. Linux containers are cheaper to run
    3. Azure runs Linux and Windows Server, and Microsoft seems to care more about you using Azure than which OS you use on Azure
  4. If you are writing new server code, why wouldn't you write it in .NET Core?
  5. If you are writing .NET Core code, why wouldn't you run in (cheaper) Linux containers on (cheaper) Linux hosts?

Now I get it. You say that you have tons of full .NET 1.x, 2.x, 3.x, or 4.x code. That stuff can only run on Windows, not Linux. So obviously Windows Server isn't EOL.

I agree. It isn't yet. But neither is the green-screen AS/400 software my auto mechanic uses to file tickets when I bring my car in to get the oil changed. Has that software been updated in the past 20 years? Probably not. Does it still work? Yes, clearly. Is it the vibrant present or future of software? Hahahahahahahaa NO!

When I say Windows Server is headed toward EOL I mean it is headed toward the same place as the AS/400, the VAX, and more platforms. It'll continue to run legacy software for decades until it eventually becomes cost effective to rewrite the software running on those servers into the then-current technologies.

But if I were starting a new project today, you'd have to come up with some terribly compelling reasons why I wouldn't

  1. Write it in .NET Core (really in netstandard)
  2. Deploy it via Linux Docker containers
  3. Use a Linux Docker host

That's not to say there might not be some compelling, if short term, arguments. Such as

  1. Your IT staff only knows Windows (a career limiting move (CLM) for them!!)
  2. Your IT infrastructure is centered around Windows deployment (Docker and Kubernetes will eat you for dinner, sorry)
  3. Your IT infrastructure is centered around Windows management (valid for a while, but also a CLM)
  4. You value that Windows Server can run both Linux and Windows Docker containers (valid argument imo, for the host)

To reiterate, as a .NET developer I feel comfortable saying that the future of server-side code is .NET Standard, .NET Core, and the ability to run my code on Linux or Windows equally. And I feel comfortable saying that Docker is the best server-side deployment scenario I've yet seen in my 30+ year career.

So I guess at the end of the day, the future of Windows Server rests entirely in the hands of IT Pros, who'll be using some host OS to run my Linux Docker containers with my .NET Core apps.

Either Windows Server or Linux will offer a better overall value proposition. Which is to say that one of them will be cheaper to run on a per-hour basis in a cloud. Today that's Linux. Barring change, Windows Server is headed toward END OF LINE.

Monday, 11 June 2018 21:05:44 (Central Standard Time, UTC-06:00)  #    Disclaimer
 Tuesday, 05 June 2018

Hello all!

I'm coordinating a codeathon on Saturday, June 23, to work on the Mobile Kids Id Kit app.

This project is sponsored by the Humanitarian Toolbox and Missing Children Minnesota, and provides you with a literal opportunity to make the world a better place for children and parents.

The app is partially complete, and has been created with Xamarin Forms. There are a number of important backlog items remaining to be completed, and we need to do the work to get the apps into the Apple, Google, and Microsoft stores.

If you are looking for a way to use your Xamarin (or ASP.NET Core) skills to make the world a better place, this is your chance! Sign up here.

Tuesday, 05 June 2018 15:45:52 (Central Standard Time, UTC-06:00)  #    Disclaimer
On this page....
Search
Archives
Feed your aggregator (RSS 2.0)
June, 2018 (3)
May, 2018 (1)
April, 2018 (3)
March, 2018 (4)
December, 2017 (1)
November, 2017 (2)
October, 2017 (1)
September, 2017 (3)
August, 2017 (1)
July, 2017 (1)
June, 2017 (1)
May, 2017 (1)
April, 2017 (2)
March, 2017 (1)
February, 2017 (2)
January, 2017 (2)
December, 2016 (5)
November, 2016 (2)
August, 2016 (4)
July, 2016 (2)
June, 2016 (4)
May, 2016 (3)
April, 2016 (4)
March, 2016 (1)
February, 2016 (7)
January, 2016 (4)
December, 2015 (4)
November, 2015 (2)
October, 2015 (2)
September, 2015 (3)
August, 2015 (3)
July, 2015 (2)
June, 2015 (2)
May, 2015 (1)
February, 2015 (1)
January, 2015 (1)
October, 2014 (1)
August, 2014 (2)
July, 2014 (3)
June, 2014 (4)
May, 2014 (2)
April, 2014 (6)
March, 2014 (4)
February, 2014 (4)
January, 2014 (2)
December, 2013 (3)
October, 2013 (3)
August, 2013 (5)
July, 2013 (2)
May, 2013 (3)
April, 2013 (2)
March, 2013 (3)
February, 2013 (7)
January, 2013 (4)
December, 2012 (3)
November, 2012 (3)
October, 2012 (7)
September, 2012 (1)
August, 2012 (4)
July, 2012 (3)
June, 2012 (5)
May, 2012 (4)
April, 2012 (6)
March, 2012 (10)
February, 2012 (2)
January, 2012 (2)
December, 2011 (4)
November, 2011 (6)
October, 2011 (14)
September, 2011 (5)
August, 2011 (3)
June, 2011 (2)
May, 2011 (1)
April, 2011 (3)
March, 2011 (6)
February, 2011 (3)
January, 2011 (6)
December, 2010 (3)
November, 2010 (8)
October, 2010 (6)
September, 2010 (6)
August, 2010 (7)
July, 2010 (8)
June, 2010 (6)
May, 2010 (8)
April, 2010 (13)
March, 2010 (7)
February, 2010 (5)
January, 2010 (9)
December, 2009 (6)
November, 2009 (8)
October, 2009 (11)
September, 2009 (5)
August, 2009 (5)
July, 2009 (10)
June, 2009 (5)
May, 2009 (7)
April, 2009 (7)
March, 2009 (11)
February, 2009 (6)
January, 2009 (9)
December, 2008 (5)
November, 2008 (4)
October, 2008 (7)
September, 2008 (8)
August, 2008 (11)
July, 2008 (11)
June, 2008 (10)
May, 2008 (6)
April, 2008 (8)
March, 2008 (9)
February, 2008 (6)
January, 2008 (6)
December, 2007 (6)
November, 2007 (9)
October, 2007 (7)
September, 2007 (5)
August, 2007 (8)
July, 2007 (6)
June, 2007 (8)
May, 2007 (7)
April, 2007 (9)
March, 2007 (8)
February, 2007 (5)
January, 2007 (9)
December, 2006 (4)
November, 2006 (3)
October, 2006 (4)
September, 2006 (9)
August, 2006 (4)
July, 2006 (9)
June, 2006 (4)
May, 2006 (10)
April, 2006 (4)
March, 2006 (11)
February, 2006 (3)
January, 2006 (13)
December, 2005 (6)
November, 2005 (7)
October, 2005 (4)
September, 2005 (9)
August, 2005 (6)
July, 2005 (7)
June, 2005 (5)
May, 2005 (4)
April, 2005 (7)
March, 2005 (16)
February, 2005 (17)
January, 2005 (17)
December, 2004 (13)
November, 2004 (7)
October, 2004 (14)
September, 2004 (11)
August, 2004 (7)
July, 2004 (3)
June, 2004 (6)
May, 2004 (3)
April, 2004 (2)
March, 2004 (1)
February, 2004 (5)
Categories
About

Powered by: newtelligence dasBlog 2.0.7226.0

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2018, Marimer LLC

Send mail to the author(s) E-mail



Sign In