We recently had the priviledge to publish "The Nine Node Pillars" with some other leading contributors in the Node.js and JavaScript communities. Those pillars identify 9 key areas in which developers should think carefully and make intentional choices as they develop applications.
Our past work on the "Node.js reference architecture" prepared us for the discussions that went into the creation of the 9 pillars as there was a good amount of common ground. In this blog post we highlight the sections in the reference architecture that share our experience and guidance that can help you as you think about each of the 9 pillars.
The Node.js Reference Architecture
As a quick introduction if you have not yet come across the Node.js reference architecture, it is a collaboration between those at Red Hat and IBM who have:
- worked on internal Node.js deployments,
- worked with our customers who are deploying Node.js,
- contributed to the Node.js project.
They key principle of the Node.js reference architecture is that it is not intended as a set of rules that you must follow, but instead to share what has worked for us based on our experience with Node.js development and deployments.
In our opinion every organization over a certain size should develop their own reference architecture to share internally what's worked for them. This will allow individual teams to avoid having to relearn the same lessons. In a typical Node.js deployment you likely want to re-use past experience for 80% of what you use and focus your energy and innovation on the 20% of the deployment that makes the experience new and special for your customers.
The 9 Pillars
The guidance we share in the Node.js Reference Architecture can help as you work through the 9 pillars. Let's take a look at each pillar and the related sections in the reference architecture.
1. Do not block the event loop
Not blocking the event loop is important to ensure your applications scale and take advantage of the resources available to it. The reference architecture section titled "Load balancing, Scaling and Multi-threading" covers some of our experience that can help.
2. Monitor Node specific metrics and act on them
The following reference architecture sections share what has worked for us to monitor and act on metrics:
3. Use Node LTS versions in production
This reference architeture section shares our recommendations for what versions of Node.js to use and where to get Node.js binaries - Node.js Versions and Container Images.
4. Automate testing, code review and conformance as much as possible
The following reference architecture sections share our experience for testing and conformance:
5. Avoid dependency creep and 6. De-risk your dependencies
This reference architecture section provides some guidance that can help you avoid dependency creep - Choosing and vetting dependencies. In addition, the section "Module Diligence" share some of the criteria that the team has applied to selecting modules.
7. Avoid global variables, config or singletons
The reference architecture section Secure Development Process echos the recommendation to avoid global state (which can often contribute to security vulnerabilties) and includes a number of other suggestions for building secure applications.
8. Handle errors and provide meaningful logs
The reference architecture section on Logging provides guidance that will help you think about and plan for handling errors and providing logs.
9. Use API specifications and automatically generate clients
The reference architecture section on REST API Development provides some of our experience with using API specifications and generating clients.
Wrapping up
We hope that this blog post helps you leverage the experience we've shared in the "Node.js reference architecture" as you work through the "The Nine Node Pillars".
If you want to learn more about what the Red Hat Node.js team is up to check these out:
- https://developers.redhat.com/topics/nodejs
- https://developers.redhat.com/e-books/developers-guide-nodejs-reference-architecture
- https://github.com/nodeshift/nodejs-reference-architecture
- https://developers.redhat.com/topics/nodejs/ai
- https://developers.redhat.com/blog/2024/11/20/essential-ai-tutorials-nodejs-developers