I’m preparing a presentation for a large consulting firm on architectural options for a massively scalable, bi-directional real time application.
I’ll post about the technology and the architectural choices in the near future but I’ve been chuckling at most of the content that I’ve been reviewing and though I’d spill a few thoughts about it.
Specifically I’ve been looking at “alternative” choices that might be uniquely ideal for this particular use case.
As a basis for understanding the challenge…. Up to half a billion users (yes, billion with a B) sending an update to the server once every 3 minutes and retrieving a stat structure every one or two minutes.
About six months ago I started mapping this use case scenario to Node.JS and NoSQL (Redit or MongoDB).
There are a few pretty big / high profile on-line properties already using Node.JS in production.
- ( )
- E-bay / PayPal ( )
- Microsoft ( ) They have extensive support, in fact their Azure CLI tools are actually written in Node.js.
- LinkedIn ( )
- Google ( )
- Yammer (now part of Microsoft) ( )
But, mining through articles and on line conversations has reminded me to the religious zeal with which many developers defend their choice of developer stack.
What’s I’ve been chuckling at is how threatened certain camps of mainstream developers seem so threatened by the emergence of any new technology in their space.
In response to article on Node.JS .NET developers jump in to try to convince you that you can do the same thing in .NET using Async, Threads and customizing the IIS pipeline (just follow these 40 steps.)
Java developers start talking about NIO as though it’s the same thing as Node.JS.
PHP devs point you at ReactPHP
Python developers start talking about Async I/O and threads, etc, etc, etc.
But what’s wrong with just accepting that there is a new technology that’s very good at a specific category of use-case?
Ok, I’ll admit I never loved programming in Java, but I spent a decade at Microsoft digging C#. I also did PHP there and ended up Zend (“The PHP Company”). I spent a year and a half at Mozilla with is mostly a Python shop and I still like all three.
But I don’t need any of those to be the right answer for every software development challenge.
Too often I see dialog from a .NET developer who needs every solution to be only .NET or from a Java developer who needs every answer to be Java.
For the last 13 years I’ve worked for organizations that manufacture a specific set of developer technologies. I frequently donned my “application/solutions architect” hat to help companies answer the question “what is the right approach for solving THIS business problem”. Even when I was working for a company who’s success was based on a technically bias answer to those sorts of questions, sometimes I answered in the alternative. (How fun it was to explain to my Microsoft management that I recommended PHP for a project )
It’s my personal opinion that many folks close their minds to this “best mapped use case” approach because technology grows and evolves so rapidly many of us just give up on the idea of staying on the “front edge” of of the software development industry. In some ways we’ve gone from looking for that silver bullet to trying to convince folks that the stuff we are already good at IS THE SILVER BULLET.
All of this I suppose by way of encouraging you to open your mind and spend a little time looking at how emerging technologies might provide better solutions to some of the problems you solve in your day job.
I’ll post the technical blueprint for the above referenced architecture using Node.JS and NoSQL in the near future.