Where to Host Your Node.js Application
In this post, we take a comparative look at several hosting solutions that work well as a place to house and build Node.js applications.
Join the DZone community and get the full member experience.
Join For FreeA recent surge has taken over the internet: Node.js. Suddenly, every app developer is starting to either build their apps with it or switch them to it via updates.
It’s become so popular that many big players have adopted Node in their applications too; these include Netflix, PayPal, Trello, LinkedIn, Uber, NASA, and many more. It shouldn’t be too surprising though, given its numerous benefits over other platforms, not least being the versatility and adaptability it brings by merging the backend with a front-end language (JavaScript).
But, I’m not going to focus on such benefits, for many developers ought to be already aware of them. As a developer acquainted with its many advantages, you’ve probably already installed Node, and have started writing and testing your code.
Then, however, comes the most significant decision of that stage: how to get your app out to the world? In other words, where should you host your Node.js app?
Although certain things must be kept in mind no matter the environment you’ve chosen for your app, certain aspects do stand out when considering Node in particular. When you use node, for instance, you’ll always need direct root access to your server, without which you cannot install your node packages, nor run some necessary commands.
That might perhaps already indicate that you’d need a virtual private server, or at least a server dedicated to it, with root privileges. Other factors that you must keep in mind are: the server’s certificate status, how they deliver content (its content delivery network), average waiting times, etc.
Let’s look at a few popular options:
Amazon Web Services
One of the most reputable hosting services is Amazon Web Services. Many big players use AWS for its reliability, scalability, and performance.
AWS offers you the chance to deploy a high-availability Node.js web application via its Elastic Beanstalk Service. This deployment service also allows and makes it easy for a developer to release packaged applications as PaaS to AWS.
The other option, for a more seasoned developer who desires more ‘freedom,’ is to use Amazon’s Elastic Compute Cloud (EC2). This will allow building a server (or instances) in the Amazon Cloud. The developer, then, will have complete freedom over it. He only pays by the hour, and only by what he uses.
Further to our concerns about access, the amount of control that AWS provides is nothing short of remarkable; you can fully control and customize the server on which your Node.js application is run. Furthermore, you can run multiple applications on the server without increasing your costs.
AWS offers a range of plans and prices, depending on your needs, wants, and the app’s requirements. Most people find AWS much more affordable than its rivals, thanks to its sheer size and significant economies of scale.
Further, AWS offers great support services in case you need further information or help of any kind. These exist in the forms of a wide series of manuals and documentation, and a rather active and supportive forum.
Yet, some people could find AWS a little more challenging than its competitors, particularly the people with no experience in or with it. AWS also has a reputation for boasting quite a steep learning curve; this shouldn’t come off as too surprising, for many demanding courses exist that aim to teach AWS. Further, AWS can be even more challenging for those without any experience whatsoever with running or administrating their own servers or other private servers.
Pros:
- Reliable and scalable.
- Complete freedom and control over “instances.”
- A broad range of plans and prices.
- Great support services.
Cons:
- Has a steep learning curve.
- Can be difficult for inexperienced people.
Heroku
Heroku is also quite popular with developers, and most of its users fiercely advocate for it. Heroku started off only supporting Ruby on Rails, but due to the growing popularity and acceptance of other coding languages, frameworks, and environments, it has adopted Perl, PHP, Python, Java, and, most recently, Node.js.
One of the best features of Heroku is its potential to integrate with many major third-party services like SendGrid and Redis (which shouldn’t come as too big of a surprise as it’s owned by Salesforce). Further, it supports deployment across multiple regions, especially useful for some types of apps.
Unlike AWS, which could be a little challenging to learn, Heroku is typically quick, simple, and easy to grasp, even for the most novice of developers.
It offers a good and supportive free tier, with a few limitations and restraints. But, it comes with a series of support pages and documents that cover almost every question one could have. Further, it comes with an extensive collection of helpful resources, and instantly accessible plugins and services, which many developers refer to as ‘lifesavers.’
The only major drawback that comes to my mind is its pricing structure. As soon as you begin leaving its free tier, the costs start escalating fairly quickly. This may be a put off for new developers with limited resources, or those reluctant to spend a rather large portion of their budget on a hosting service. Additionally, if you intend to build very large applications, Heroku could slow you down significantly when you reach the deployment stage.
Pros:
- Quick, simple, and easy to learn/use.
- Can integrate with many third-party services.
- Deployment across multiple regions.
Cons:
- Can get very expensive after the free tier.
- Free tier is very limited and mostly useful for testing.
- Deployment can be very slow for large apps.
Google Cloud Platform
Google Cloud Platform (GCP) might not be the first choice that comes to your mind when thinking about hosting, perhaps because Heroku is the “easy” option, and Amazon is the “popular” option. Yet, GCP does offer some unique tools that might be worth exploring.
GCP’s offerings mostly center around IaaS and PaaS services. Google App Engine (its PaaS offering) was the first service ever launched in GCP. And its IaaS service, Google Compute Engine (GCE), has given Amazon’s EC2 its biggest competition yet.
GCE takes a lot of pride in its Load Balancers. Many developers claim that its auto-scaling feature even beats Amazon’s, for AWS’s Load Balancers need a sort of initialization or “pre-warming.” Google, with great emphasis, claims that the GCE Load Balancers can scale instantly as soon as they notice a sudden traffic spike; there’s no need for a pre-warming.
When it comes to pricing, Google takes the “pay per use” concept to the extreme, for, rather than hours, it bills in minute-level increments. Due to that, GCP offers one of, if not the, best pricing schemes in the field. Further its “servers” or “instances” are fully configurable, so, for example, you can order 1 CPU and 3GB RAM, or 4.5GB, or 2.5GB.
Compared with its rivals, GCP’s regional distribution is quite limited, covering only three regions over the world (US, Europe, and Asia). Unfortunately, this can deter many developers.
Further, many might feel that despite Google’s reputation for excellent support documentation, its cloud platform lacks the usual clarity.
Also, bear in mind that many of GCP’s latest features are in alpha or beta stage, so their behaviors and APIs are prone to change. This can cause a significant impact on long-term projects started with them.
Pros:
- Its load balancers offer the best auto-scaling feature.
- Most affordable, as it bills by the minute.
Cons:
- Limited geographical distribution.
- Want of clarity in its support docs.
- Many features are still in alpha/beta stage.
Digital Ocean
With great pricing options, the control configuration of the server, and more control over deployment, Digital Ocean has a lot going for it. Further, it takes great pride in being a simple cloud hosting provider; hence it doesn’t offer some features like load balancing, hosted databases, and Hadoop clusters.
Yet, it remains one of the most highly-performant virtual machines that many businesses love to partner with. Its servers come with high-performance Solid State Disks, giving developers unmatched speed, and performance for their sites and apps.
Further, it doesn’t challenge its user with a steep learning curve. Most people find it easy to use; it allows for quick and easy configuration of its cloud servers and development frameworks.
Its support services are also outstanding: it has an active community of developers that update their pages regularly and moderates them constantly. All necessary information, FAQs, and tutorials are in easy reach.
One drawback that comes to my mind is that more experienced developers may find its simplicity and straight-forwardness too restrictive. Where it may attract beginners and new players, it may dissuade the seasoned ones.
Pros:
- Great pricing.
- Quick and easy to use.
- Extensive control configuration.
- More control over deployment.
- High-performance virtual machines with robust SSDs.
- Helpful support services.
Cons:
- Limited service offerings.
- Slow customer support.
- Poor Documentation.
Microsoft Azure
Azure is Microsoft’s cloud-based platform that allows for rapid building, deploying, and managing powerful and high-powered websites and web apps. And, it’s supported on both Windows and Linux machines, offering real-time monitoring for all your Node.js applications hosted on Azure.
Most users would agree that this is a very reliable platform, that offers great flexibility and the highest availability across regions all over the world. It also supports automatic scalability, reducing a lot of manual chore-like tasks.
Further, the free plan it offers is broader and much more extensive than others. It allows for hosting up to 10 apps in each data center. Additionally, scaling your Node app in either direction (up or down) is very, very simple. It even boasts an amazing autoscale feature that lets Azure decide how much and when to scale, with respect to traffic.
However, just like with Heroku, deployments can be painfully slow at times, particularly for large applications.
Azure has one fatal flaw to speak of: no deployment support for Azure cloud services on Apple’s Mac. This alone puts many developers off of Azure. Still, I place it on this list, because if you happen to be a Windows user, Azure could be the perfect fit for you.
Pros:
- Reliable and flexible.
- Supports automatic scaling.
- Its free plan is broader and more inclusive than others.
- Highest regional availability.
Cons:
- Slow Deployments for large apps.
- No support for Azure cloud services on Mac.
RedHat OpenShift
This firm remains extremely popular with first-time developers and those with tight budgets, particularly because OpenShift offers Node.js hosting absolutely free, forever, no strings attached! There’s no hassle with free plans or trial periods, it’s just free!
It also boasts a Platform as a Service option, that allows you to focus solely on application’s features and on how you can improve it. Through this, it eliminates the otherwise constant worries of minute details common with cloud hosting, thereby giving a no-fuss experience to the developer.
Further, like with Microsoft’s Azure, OpenShift features automatic scaling. So any fears about a free hosting service collapsing if or when your app starts gaining traction should disappear completely. It even provides support across multiple regions and gives you access to its built-in, private databases.
From what I’ve seen, there’s only one major flaw to speak of: although Openshift is completely free and doesn’t bait-and-switch, it is limited to three applications. But, hey, if you’re getting so much for free, something’s gotta give!
Pros:
- Includes a completely free plan.
- Automatic scaling.
- Support across multiple regions.
Cons:
- Poor customer support.
- The free plan is limited to 3 applications.
- Paid plans more expensive than others.
EngineYard
EngineYard, while most famous for Ruby on Rails, is also a great hosting service for Node.js applications. It’s a Platform as a Service company that allows you to bring your AWS credentials with you and provides support for AWS services.
It is distinctly famous for its round-the-clock support. Even its most critical customers compliment its excellent support services. Most would argue that it is EngineYard’s USP.
It includes everything you could possibly need in miscellaneous forms: great documentation and manuals (covering almost everything), brilliantly answered FAQs, walkthroughs, tutorials, etc. There’s quick and responsive email support for any questions out-of-the-box, and even specialized service teams dedicated to customers choosing that additional option in their tier.
Moving on from its amazing support services, EngineYard also offers simple deployment and is considered powerful by many parameters and its user-base.
Many would argue, however, that despite its various advantages, it lacks flexibility as it doesn’t offer the ability to individually define instance roles. Further, if you go with EngineYard, then (depending on your needs), you may find your database options somewhat limited.
I’d suggest checking it out briefly to understand exactly what I mean.
Pros:
- Supports AWS credentials and services.
- Round-the-clock support.
- Simple and powerful deployment.
Cons:
- Lacks flexibility to individually defined “instance” roles.
- Limited database options.
Joyent’s Triton
Joyent is one of the corporate sponsors of Node.js. Triton is Joyent’s hosting unit.
Triton was first launched by Joyent with the aim to directly compete with Amazon’s EC2. It offers Infrastructure as a Service (IaaS) and Platform as a Service (PaaS) solutions. It’s extremely popular with online social network gaming applications. One of the most esteemed features of Triton is its container-native infrastructure.
Joyent is very well suited for large enterprises; it works with many Fortune 100 firms. For Node.js apps, it can assist developers in all areas: designing, deploying, and debugging.
If you compare Joyent’s “container native” approach and its Docker API compatibility with Amazon’s EC2, you’ll soon realize that Joyent wins hands-down for quickly defining, running, and inspecting containers. Further, its security for its containers is remarkable; “full isolation per container in a multi-tenant environment” is very hard to achieve, but Joyent delivers.
Its “container-native” infrastructure comes with a container-based pricing. So, even after you finish your free-trial, it offers a per minute pay-as-you-go pricing scheme; this ensures you only pay for what you use. In addition, its container-native infrastructure means you’ll need as much as 50% less compute capacity.
At first glance, Joyent may seem a little pricier than its rivals. But a deeper look should reveal that this isn’t comparing apples-to-apples. Joyent offers way better performance out of each of its containers.
Joyent offers various supporting documentation. It’s informative and useful, but many might say it’s not as extensive as others. I’d tend to agree; but, I think what it misses in terms of documentation, it makes up for with quick and extremely helpful support service.
One major drawback for Joyent would be that it might not be the ideal choice for a first-timer or a small player. Its pricing structure and innovative technologies may dissuade small players and novice developers.
Pros:
- Innovative and highly secure “container-native” infrastructure.
- Well suited for large enterprises.
- Includes a “container-based” pricing model with a minute-based structure.
Cons:
- Limited Support Documentation.
- Innovative features could be difficult to use for some.
Conclusion
If you’re just starting out, the free service may sound like the ideal plan, but when your website or app grows, the free ones won’t cut it. There are various parameters to judge a hosting service, like price, data plans, support services, limitations, etc. I tried to evaluate each of the five services along with such parameters through this post. There isn’t one best option, as each service comes with its distinct advantages.
So, first, evaluate your true needs and resources, then choose a service that best fits them. Hopefully, you’ll find this article helpful in your selection. If you have any experience with these or other Node.js hosting services, I’d love to hear from you. Do comment and share!
Published at DZone with permission of Dhananjay Goel. See the original article here.
Opinions expressed by DZone contributors are their own.
Comments