A Case for Node.js

A Case for Node.js

Posted on June 11, 2014 0 Comments

Eduardo Pelegri-LepartNode.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking IO model that is lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. Node.js is experiencing huge adoption and yesterday, Progress announced the acquisition of Modulus, a young start-up out of Cincinnati, Ohio focused in the Node.js space.

I must say I’m really looking forward to working more closely with the Modulus team – I’ve really enjoyed all my interactions with Charlie, Brandon and Ghuffran and it will be fun to meet the rest. I even scheduled a get-together in Cincinnati with our Progress summer interns!

Modulus provides a PaaS to host, deploy, scale and monitor applications using Node.js and MongoDB. The Modulus platform is offered as a hosted service and can also be deployed by enterprises in public, private and hybrid clouds as well as in an on-premise infrastructure.  This flexibility is fully aligned with what we offer in the Progress Software product line.

The Modulus team has been doing an outstanding job with their platform, adding new features like multi-region and multi-provider scalability; you can expect continued new features with the extra resources that come with the acquisition.

In addition to its great team and great product, Modulus is also built on up-to-the-minute technology. It is a very young company which means it leverages all the modern building blocks that we, and our customers, need to face the needs of our changing industry – from Joyent JoyentCloud and Amazon’s AWS to LXC.  The code is also very well architected, reusable and scalable.  The platform is all written in Node.js except for the new load balancer, which is written in Go.

As we Modulus and Progress start working together, I thought it would be useful to write down the main reasons why the adoption of Node.js is taking off now.

Why Node.js Now?

In 2005, Roberto Chinicci, one of the senior engineers in Sun’s Java group, started Phobos, a project combining Java with server-side scripting. Phobos used JavaScript, though it was ahead of the adoption curve, which led to limited adoption. However, a few years later in 2008, Google released Chrome with a v8 engine in it. The year after, in 2009, Ryan Dahl released Node.js. This time, the conditions were just right and Node.js began to gain adoption among developers.

Recent conferences and events, including those focused on the enterprise like NodeDay and Node On The Road, have been very well attended, and adoption is everywhere, including within the Progress community. Some examples include the AKIOMA CRM, the WApp framework from wiz4biz and the #42 app from dot.r.

Node on the Road, Boston

JavaScript and JSR 223

One clear advantage that Node.js has over Phobos is that Node is focused just on JavaScript, which has huge adoption now – for example, JavaScript is now #1 in the latest Programming Language Rankings from James Governor.

In the Phobos days, it was very hard to choose a winning scripting language. In addition to JavaScript, there was Ruby, Python, Lua, Groovy, PHP, and more. That proliferation led to creating JSR 223, which was used by Phobos. Node.js instead is leveraging the adoption of JavaScript, plus all the performance and interoperability of the modern browsers, partly because of projects like V8.

JavaScript is very well suited to the type of applications that are most commonly built using Node.js: relatively small (micro-) services that interact with mobile or browser-based clients and follow API-first architectures.

Computational Model

Node.js is designed around non-blocking IO and asynchronous events. This is a good model for modern horizontally scalable applications. Node is portable (via V8), easy to install, fast to start and has good performance – with a few exceptions like computation-bound applications.

Node.js is also a great match for the new API-first, mobile/browser client architectures. And the principles that served Unix well are clearly a part of Node.js. (See posts by Alex Young andIsaac Z. Schlueter.)

Node is also efficient, relatively small and is being used in many contexts, including Fitness machines! (See presentation from Koko Fit Club.)

NPM

Another key driver for adoption is NPM, the Node Package Management repository, which is growing very rapidly. NPM has been a part of Node since the very early releases (since 0.3, in late 2009) and the large majority of the industry uses it. A typical organization will have a local repository, a remote one and contributions to the main repository are encouraged. There are more than 78K modules in NPM; some contributed by corporation but most by individuals – and publishing is as easy as npm publish.

The NPM repository has many types of modules, including infrastructure like async and frameworks like express. Because of the synergy between Node.js applications, developers and “modern” services, you are likely to find packages for most of your needs, from Philips Hue to Hadoop. NPM is still relatively new and will continue to improve with more contributions, along with better curating and searching; a recent development was the creation of NPM, Inc, which is focused specifically on NPM.

NPM is growing very fast. As of this writing, NPM is the second largest repository, only surpassed Maven Central with almost 80K components. NPM is growing twice as fast as Maven Central and it should be the largest repository sometime in July.

Modern Front-End Development

Node.js is very well suited to the needs of the modern front-end engineer. These engineers need velocity and productivity to create and deliver mobile and browser-based applications while interacting with services over which they have little control. The result is a mismatch of requirements. I like the way Nicholas Zakas presents this argument so I’ll borrow from Node.js and the new web front-end.

Zakas describes the goal in using Node.js as:

“To me, Node.js was [about] … liberating the back-end UI layer from the rest of the back-end.”

The current situation is pictured in the diagram below: the front-end developer has control of the UI layer (in the browser or the mobile app) but needs to conform to the architecture and processes imposed by the back-end layer.

Traditional Front-End Architecture

 The typical Node.js front-end architecture gives control back to the front-end engineer by separating these layers:

Node.js Front-End Architecture

The two service layers will differ not just in technology but also in development processes. Typically the back-end – written in .NET, Python, Java, etc. – will change very slowly, while the front-end can change very quickly, maybe even several times a day. The extra layer is also a good architectural practice to provide horizontal scalability.

A Chance to Rearchitect

The adoption of Node.js is also happening among many enterprises with 15 year old infrastructure. This infrastructure, often in Java, was designed for a different world, and cannot deliver the velocity and productivity needed in today’s world. Companies like eBay and PayPal have been trying to move away from that old architecture for many years, and Node.js is providing the opportunity and excuse to do the rewrite. The new architecture is usually based around the notion of micro-services. These services can be written in any of several languages but there are real benefits to using Node.js. As the industry moves this way, the benefits (like NPM) compound.

Performance

There are significant performance benefits from rearchitecting the layers following the principles discussed above, as presented in Jeff Harrell’s PayPal’s switch from Java to Node.js, but I also believe the performance could be achieved with other implementations – see for example Stephen Connolly’s About PayPal’s Node vs Java “fight”. That said, Node.js does encourage a good architecture and the overall community experience is very positive.

Not Java, Not Ruby, Learn a New Thing!

Finally, there are real benefits in being in a new platform and starting afresh, it is always fun for developers to learn something new and this means plenty of highly qualified candidates with high energy.

Node.js and Progress

Node.js opens many new ways to leverage other Progress technology. As I am writing this, the PUG Challenge Americas conference is winding down and I’ve attended multiple sessions reporting on these synergies; I’ll write a post on those. In addition to its great synergy with Progress Software, Node.js provides a natural way to interact with the services needed for IOT applications, and Rollbase and Node.js also mix nicely together for this purpose – check the posts from LAHacks for some early experiments.

It will be a fun summer and fall! For more information on Modulus visit their website and their blog and follow them at @onmodulus. I will also cover these topics here and in my blog and you can follow me at @pelegri.

Eduardo Pelegri-Llopart

Eduardo Pelegri-Llopart

Eduardo's focus is on strategic initiatives, technology trends and on Corporate Development. Eduardo is also interested in Technology Adoption and tries to stay in touch with the new waves of developers through Hackathons, internships and other community interactions. Eduardo joined Progress in November 2013; before that he worked at BlackBerry, Oracle, Sun Microsystems and Xerox PARC. He has CS degrees from UCB and USB (Venezuela).

Comments

Comments are disabled in preview mode.
Topics

Sitefinity Training and Certification Now Available.

Let our experts teach you how to use Sitefinity's best-in-class features to deliver compelling digital experiences.

Learn More
Latest Stories
in Your Inbox

Subscribe to get all the news, info and tutorials you need to build better business apps and sites

Loading animation