Looking for top Java Developers? They are just a few clicks away.

Building JavaScript Microservices with Node.js

Jan 12, 202213 min read

Dawid Karczewski

Senior full stack developer and CTO at Ideamotive.

In software application development, microservices are a style of Service Oriented Architecture (SOA) in which an application is structured around an assembly of interconnected services. In microservices, the application architecture is built using lightweight protocols. Services are well thought out in architecture. Microservices break an application into smaller services and provide improved modularity.

 

Compared to its predecessor, monolithic architecture, microservices are more beneficial. You don't have to cram all the software components and services into one big container and pack them tightly. With microservices, you can create an application with:

  • Great flexibility,
  • High scalability,
  • Continuous development,
  • Systematic organization of data,
  • Time optimization,
  • Reliability.

 

Building JavaScript applications on microservices will help you focus on developing monofunctional modules with well-defined operations and precise interfaces. The application development process becomes more flexible, and the problems of continuous testing are reduced.

 

Intrigued? Here we’ll also show you some other benefits of microservices, see what is microservices in Node.js, as well as show you some Node microservices example implementations.

 

Let’s proceed!

Why put microservices + Node.js?

So, you may wonder why exactly Node.js microservices? Take any popular web project and there's a good chance it was built with Node.js. Developers praise this hugely popular JavaScript runtime for its flexibility and efficiency. As a matter of fact, the same can be said about the microservice architecture. 

 

What are the benefits of both and why is it a good idea in most cases to build an application based on microservices in Node.js, especially SaaS?

Benefits of microservices

Scalability

Maintaining a complex application in a large team is more efficient if the application is based on microservices, as it is easier to distribute responsibilities between developers.

More flexible development process

Building applications based on microservices allows developers to focus on well-defined modules, making development, testing, and maintenance more flexible and streamlined.

More efficient deployment

Unlike monolithic architecture, whenever a microservice needs to be updated, there is no need to deploy the entire application. The only requirement is to release a REST-ful API for other services.

Lighter iterations

Developers can iterate over microservices separately, they are not limited to other components.

Language agnostic

Microservices can be written in a variety of programming languages, allowing for significant flexibility in developing the entire application.

Disadvantages of microservices

It is difficult to manage the whole block

Microservices architecture can be a double-edged sword. On the one hand, it is easier to maintain small units than one large and complex one. However, whenever the need arises to manage the application as a whole, it is more difficult with microservices.

Difficult tests

The same problem applies to testing - it seems more efficient to test each microservice separately, but in a monolithic application, you can run end-to-end testing and come across bugs faster.

More pervasive issues

Login, caching, and other issues that affect the entire application are easier to deal with in a monolithic architecture because only one application needs to be taken care of.

Multiple deployments

In monolithic applications, developers only need to handle one deployment, unlike microservices where there can be multiple deployments. In some cases, this saves a significant amount of development time and effort.

 

In general, a monolithic architecture is the best choice for lightweight products that don't require a lot of business logic. Microservices, on the other hand, are the perfect choice for complex, evolving applications that are designed to scale. This is especially true for SaaS products, which may have 1,000 users today and 100,000 tomorrow, so they must be prepared to handle exponential growth as users often pay monthly and need a highly available service. All this is also the reason why developers prefer to build their products with Node.js.

Why exactly Node.js microservices?

As we mentioned above, microservices are programming language agnostic, which is one of the strongest advantages of microservice architecture. At the same time, the connection between Node.js and microservices is especially strong and deep. In fact, one of the ideas behind creating this framework was to make it easier and more efficient to build applications based on microservices. 

 

From a business perspective, leveraging the benefits of both technologies has a significant impact on the product, not only at the point of creation but also later on in maintenance and scaling. 

 

From practical experience, once a service went from PHP to Node.js and it became 70% faster. It also used up fewer resources. Another example: GoDaddy moved from .Net to Node.js and they loved it. Netflix has improved its app load times by 70%. Let's analyze more reasons to choose Node.js for your next microservice:

Better cost control

Node.js and microservices are built to scale. Especially in SaaS products, it is important to not only be able to handle growth but also to keep development and maintenance costs as low as possible. No monolithic architecture can provide the same level of flexibility.

Better performance and reliability

The argument above is also true when it comes to maintaining high performance: if one microservice goes down due to a bug or other problem, the whole application is not affected. The fact that Node.js is one of the most popular web technologies also matters: with easier access to talent and online communities, it's easier to get the best performance out of an application.

Enables full-stack web development 

The front end should definitely be in JavaScript. Of course, choosing a front-end framework or library can be a good discussion. With Node.js, the same JavaScript is executed on the server as well. If there are 5 developers in the team and they all write JavaScript it helps them a lot to be full-stack. Yes, developers need to learn backend and front end concepts, but they don't need to learn a whole new programming language.

Built-in web server for Node.js microservices

Node.js has a built-in web server. You don't have to argue with another Nginx or Apache. You can also happily say goodbye to things like FPM since Node.js is essentially single-threaded.

One of the best performance

Node.js effectively reduces the infrastructure (CPU, memory) requirements to serve the same number of requests, which ultimately reduces costs. With JavaScript, you can save time at the compilation stage as it is an interpreted language that ultimately helps improve performance.

 

In Node.js, a module is cached from the first instance. After that, every time you need a module, you will refer to the cached instance. Because Node.js comes with a standard streaming API, it provides the best performance and secure development for real-time applications such as chat or online games.

Fast learning curve

Node.js has a faster and easier learning curve compared to Java or .NET. Since Node is based on JavaScript, developers with JavaScript experience can quickly understand and start working on the Node.js ecosystem. People with experience in C#/Java/Python can easily learn Node.js as well.

Accelerated development, high performance, and scalability

Using Node.js reduces the number of lines of code by about 2-3 times compared to Java or .NET, which helps improve maintainability.

 

Because Node and UI Frameworks code is based on JavaScript, it helps improve productivity by bridging the gap between front-end and back-end developers. Also, developers don't need any explicit parsing of the data to use at the UI level since both use the JSON format for communication.

 

With fantastic non-blocking event-driven I/O for writing non-blocking code, Node.js is extremely fast for low CPU, I/O driven applications (database queries, API calls, etc.). It works well when integrated with NoSQL database architecture as both Node and NoSQL are good at parsing JSON data.

 

Node Package Manager (NPM) provides many reusable packages that make development easier. According to the latest statistics from Google, the number of available NPM modules is almost double compared to Java.

User-friendly: easy to set up, integrate and maintain

Node.js code is easy to set up and maintain compared to its counterparts such as Java/.NET/Python. It does not require complex installation configurations. With platforms like Express, Sail, and Hapi, Node.js enables rapid API development and customization.

 

Microservices communication can mainly be done in two ways - API calls and message brokers. Node.js provides easy and fast integration with most of the latest message brokers such as RabbitMQ and Kafka. In turn, Node.js is best suited for distributed systems. It also provides support for building full-stack applications - internal and external - using templating engines such as EJS, Jade, etc. As with microservices, we are also moving towards a serverless architecture - Node.js is best suited for Lambda (Serverless) due to less memory and lighter code, which ultimately helps during a cold start.

Challenges of using Node.js for microservices

Despite the many benefits of using Node.js to develop microservices, there are a few limitations:

Limited performance for CPU-intensive tasks

When it comes to dealing with CPU-intensive applications, Node.js blocks the application from making a request (which is CPU-intensive) and puts all incoming requests in a queue. With this nature, the application may become unresponsive.

Unstable Node API

The Node APIs are updated in the next releases. Sometimes these updates are not backward compatible. When this happens, it can cause an application built with Node.js to become unstable, as developers may need to modify the code to make sure it works with the latest versions of Node.js.

Inefficient with relational databases

Node obviously integrates well with the NoSQL database architecture since both have a JSON-based underlying structure. But when it comes to dealing with relational databases, Node has proven to be a bit inefficient and less performant.

Unverified/Deprecated NPM Packages

The number of available NPM packages in Node.js is almost double that of Java, C#, etc. Since many of them are unverified, they are usually substandard and provide immature tools.

When to use microservices in Node.js

Consider a scenario in which you are developing an enterprise application that must support the following characteristics:

  • Support for a variety of clients, including desktop browsers, mobile browsers, and native mobile apps.
  • Provide an API for use by third parties.
  • Integration with other applications via web services or message broker.
  • Run multiple instances of the application on multiple machines to meet NFR's scalability and availability requirements.
  • Implement a new technology stack.
  • The plan is to move on to setting up a continuous deployment pipeline for the application.

 

Based on the above requirements, you can say with confidence that the application is 100% suitable for the Node.js microservices architecture.

 

You must define an architecture that structures the application as a set of loosely coupled interacting services. Services can communicate using synchronous or asynchronous protocols. Services can be developed and deployed independently of each other. Each service has its own database to be separate from other services.

 

Let's look at some typical scenarios where you might want to consider using the microservice style of architecture:

  • Migration of monolithic applications due to required improvements in scalability, manageability, flexibility, or delivery speed.
  • Re-platform a legacy application by converting functions/modules to microservices.
  • Rewriting legacy applications to modern languages, technology stack to meet the needs of today's business.
  • Separate end-to-end services that are independent in nature. For example encryption services, authentication services, etc.
  • Independent business applications or services that are reused across multiple channels. For example, payment services, login services, flight search services, customer profile services, notification services, etc.
  • Frequently used corporate applications. For example, an application for tracking working hours.
  • Scenarios where the service provider provides the customer with computing resources and infrastructure management as needed. For example, forecasting services, pricing services, forecasting services, etc.
  • Back-end services for a responsive front-end web application where data can come from multiple channels or different data sources.
  • Very flexible applications or applications requiring speed of delivery or time to market, innovative pilot projects, etc.
  • Applications that have polyglot, multilingual, cloud application development.

How to approach building microservices in JavaScript: roles and resources 

In the era of the Internet and well-developed outsourcing services, there are still those who believe that it's ok to hire a one-size-fits-it-all developer. Such entrepreneurs strongly believe that it’s really possible to build a microservice with such a “team”.

 

However, as our experience shows, the microservices architecture offers many benefits, and when multiple developers work on multiple services, you complete tasks faster. It also divides the entire application into small independent services that help you a lot in terms of development, scalability, testing, and understanding of the application. 

 

So, let’s see what roles and resources are to be found:

Team structure

  • Software architect (SA)
  • Product team: product owner, product managers, and business analysts
  • Development team: Scrum Master, Developers, and QA Engineers
  • DevOps/infrastructure team
  • Database administrator (DBA)

Choose experts with the required skills

Skills required for a microservices developer when designing

  • DDD. To develop microservices, developers need to describe and design a conceptual model that solves specific domain problems. They can use a Domain-Driven Design (DDD) approach. They describe independent business areas as problems associated with individual microservices.

Skills useful with decoupling monolith

  • Again DDD. The recommended way to split the monolith is to use DDD, introduce well-defined bounded contexts, and implement asynchronous messaging.
  • Message Queues. One of the most popular asynchronous messaging tools used to build distributed systems is Apache Kafka.
  • Event Search. Decoupling is easier to achieve with event sources. This is a great alternative to the traditional CRUD architecture. The central concept is a constant stream of events that manages all changes in the reading model and runs any business logic. This pairs well with microservices as both approaches aim to make better and more efficient use of the available resources in the system.

Skills useful when scaling microservices

  • DevOps. To properly scale microservices, developers need to have at least a basic knowledge of DevOps. Experience with Docker containers is also valuable. DevOps is a must for the successful implementation of microservices.
  • Knowledge of cloud technologies. These DevOps tools allow you to cost-effectively scale your microservices applications. Containerized cloud application environments such as microservices force companies to look for engineers who have hands-on experience with Google Cloud Platform (GCP), Amazon Web Services (AWS), and various service proxy tools.
  • Knowledge of popular software frameworks. A microservice developer uses popular frameworks such as Spring Boot in Java or Lagom, an open-source framework for building reactive microservice systems in Java or Scala.

Software engineer skills helpful when deploying microservices

Each team can develop, deploy and scale their service independently. There is no need to outgrow the team, and the part for which one developer is responsible is understandable and digestible. Small and autonomous teams contribute to the growth of both the whole team and the individual. This requires trust and some people skills, mainly these two:

  • Curiosity. Curiosity and a “constant learning” approach are what make developers great. This simplifies the process of understanding business needs and translating them into software functionality. Surprisingly, asking questions, even the simplest ones, is the easiest and most effective way to learn about business goals.
  • Teamwork. Teamwork makes the dream come true. Good communication skills and a willingness to help others, as well as take personal responsibility when necessary, are what make a great team.

Automation tools for microservice developers

Continuous Integration

Always having green tests is great, but how do you achieve this in your project? A good software engineer should be able to design CI (continuous integration) pipelines so that new features and fixtures can be quickly tested. On the other hand, deployment requires knowledge of CD (continuous delivery) pipelines. Sounds like nothing out of the ordinary for any software development architecture.

Testing

What other tests, besides end-to-end testing, are important for creating reliable solutions? Don't skip unit tests as well as service/API tests to test your endpoints as thoroughly as possible.

Containers

However, microservices introduce an additional layer of operational complexity, so microservice developers need to have hands-on experience with automated deployment tools and Docker orchestration.

 

Summing up, when hiring a dedicated team of devs, make sure every one of them has all the required skills and experience using the above-mentioned tools.

Talent pool and language popularity

In the third quarter of 2020, according to Developer Economics, the number of software developers using JavaScript was 12.4 million. This means that 53% of all developers in the world have used JS at some point.

 

Microservices is a must-have skill for JavaScript developers, so it's unlikely that you'll struggle with the software development team. According to the Stack Overflow Developer Survey, JavaScript is the top-performing technology, with 68% of professional developers using the language.

 

However, talking about Node, there are not as many Node.js developers as there are JavaScript developers. The growing demand for Node.js remains unsatisfied due to developers' lack of professional experience with this relatively new programming technology.

 

Nevertheless, developer happiness is a subjective matter influenced by many factors. The 2018 Node.js User Survey Report states:

“Node.js continues to have a positive impact on users, especially in terms of productivity and developer satisfaction; when respondents are asked to describe Node.js, respondents use mostly positive terms such as "fast", "light", "cool", "powerful", "flexible" and even "fun".”

 

Hence, we can hope for a better performance of Node.js in terms of the talent pool.

Real-life examples of JavaScript Microservices with Node.js

To understand the growing trend, it's important to look at which companies are using Node.js microservices, what problems they've encountered, and how Node.js has helped them solve those problems. That's why we've selected the top 3 companies using Node.js and prepared a case-by-case guide to help you understand why you should move to Node.js as well.

#1. Netflix - reduces startup time with Node.js

Netflix is trying to improve the loading speed of the interface for a better user experience. Until 2015, it used a Java backend, which was useful for data management but offered users little latency. Because the JavaScript frontend could not communicate effectively with the Java backend, Netflix decided to move to Node.js to take advantage of its performance benefits of it.

 

Why Netflix moved to Node.js:

  • The monolithic design of the app made it difficult to scale the app with a growing user base.
  • The transition from the back-end to the front-end wasn't smooth, resulting in longer loading times and often causing latency at the end-user level.
  • Customizing the user interface to suit the user's needs was difficult due to synchronous loading.
  • The cumbersome Java build time slowed down development and deployment speed.

 

Benefits of Node.js for Netflix

  • Significant reduction in start-up time by 70%. The Netflix interface that used to take 5-10 seconds now takes just over 1 second.
  • 40 minute Java startup time reduced to 1 minute with Node.js.
  • The application has become microservices-oriented, making it easy to break the user interface into smaller segments rather than one big block.
  • Because Node is also JavaScript, the transition from the backend to the front end has been greatly improved.

“Node has proven so handy, that the company is expanding its use to other layers of the stack”, said Kim Trott, director of user interface engineering at Netflix.”

#2. NASA - improved database access time with Node.js.

NASA, a pioneer in aeronautics, has had difficulty consolidating its scattered legacy databases related to EVA suits. This has made it difficult for scientists to access databases for research purposes. Data access was slow and required rummaging through several places to get data for proper research.

 

Collin Estes, who designed the Node.js enterprise architecture for NASA, describes why the system needed an API-based architecture. When you ask which companies use Node.js, you don't expect NASA, but it's true for the following reasons.

 

Why NASA switched to Node.js:

  • The data recorded by the suits were scattered in various places.
  • Much of NASA's space mission data is stored in closed databases that are difficult to query and sort.
  • NASA was using on-premise data centers that weren't ready for the cloud.
  • Many of NASA's existing applications depended on JavaScript.

 

Benefits of Node.js for NASA (they have made several key transformations in terms of cloud readiness and data portability):

  • The time it takes to access the database is reduced by 300%, allowing users to get the data sets they need in seconds instead of hours.
  • The Node.js microservices architecture allowed legacy databases to be migrated to the cloud and made available to users via an API.
  • The old 28-step process for reading a database with Node.js has been reduced to 7 steps. Scientific research is done with much more ease and in much less time.
  • Seamlessly connect legacy Oracle and SQL Server databases to new cloud databases using data API modules.

 

Data sync, made possible by Node.js, helps everyone from astronauts to ground crew access NASA's vast databases quickly and securely.

#3. Linkedin - Improved app performance with Node.js

Linkedin, the world's largest professional network, has over 774 million users. It is also one of the largest applications that deploys Node.js to production.

 

LinkedIn ran Ruby on Rails for a long time before switching to Node.js. Want to see why such a decision was made? Check out this piece - Ruby on Rails vs JavaScript.

 

In short, this decision was primarily based on improving application performance and reducing resource usage. Using Node.js as the back-end, they have moved from synchronous to asynchronous request processing, resulting in much faster front-end loading speeds.

 

Why Linkedin moved to Node.js:

  • The server took on too much load whenever there was an increase in traffic.
  • Linkedin couldn't handle multiple concurrent requests with the Ruby implementation.
  • The Ruby application ran synchronously, making it difficult to load pages.

 

Benefits of Node.js for Linkedin (The Node.js app helped LinkedIn reduce resource usage and improve app performance):

  • LinkedIn has been able to reduce the number of computers used to host their app by a 10:1 ratio.
  • Both the client and the server ran in JavaScript mode, making it easy for development teams to interact with client servers.
  • The code has been simplified across the board, making it more modular and less dependent on the state.

“Node.js also enabled us to move to a model where the client makes a single request for a page. The code was simplified and we moved to stateless servers,” said Deepank Gupta - a Senior Software Engineer at LinkedIn on a Medium blog.

Wrap-up

Despite minor shortcomings, Node.js is still considered a suitable framework for building real-world JavaScript applications and microservices. A basic distributed microservice architecture system with Node.js shows how individual applications build communication between services. RESTful APIs process the data and support the code to deploy each microservice.

 

In the coming years, Node.js will be actively used to create mature open source tools and develop microservices for enterprise-grade software. In turn, Ideamotive will always be here to help you gather and manage your dedicated microservice development team.

 

Our Node.js experts will be only happy to discuss the best-suited microservices framework for Node.js (Koa is by far the best Node.js framework for microservices), explain the differences between Python vs Node.js, and show their recent case study.

 

Whatever path you choose, our tech talent marketplace is always ready to supplement your team with the specialists of the next profile:


Be sure, hiring with Ideamotive’s vast Talent Network is your best bet!

Dawid Karczewski

Dawid is a full stack developer experienced in creating Ruby on Rails and React Native apps from naught to implementation. Technological superhero, delivering amazing solutions for our clients and helping them grow.

View all author posts
im_ebook_cover_template 3

Javascript: The Definitive Guide For Entrepreneurs and Product Owners

Everything You Need To Know About JS Business Implementation In 2022

Read now
Nodejs Pillar big cover

Node.js Development Business Guide

Everything You Need to Know as a Product Owner and CxO

Read now