Ruby on Rails Scalability Issues

Ruby on Rails Scalability Issues

Ruby on Rails is one of the most advanced and most popular MVC platforms among developers. It was created back in 2004 and has remained a major player in its field over the years.

This development environment was used as a foundation for such websites as Shopify, GitHub, Airbnb, Twitter, Groupon, and many more. Nevertheless, practically every mentioned resource alongside some other renowned web services (LinkedIn and PayPal), eventually, had to migrate to other more convenient platforms (Node.js, in particular) due to expansions and ruby on rails scalability issues.

It’s interesting to notice that Ruby itself – a basic programming language of Ruby on Rails – is also considered one of the slowest (!!!) languages out there. Check the diagram with performance test results below to see for yourself:

 

 

On the other hand, RoR is simply perfect for the painless creation of large-scale projects with complex business logic. Due to its utterly simple integration with external databases, which calls for minimum effort in defining connections with external sources, you can create computational power-intensive solutions quickly and easily.

So where’s the ultimate truth – does rails scale or, still, is it better to start looking for another more fitting development environment? Let’s tell you why it’s worth using Rails as a foundation for your software if you’re planning to increase stress loads.

 

What does ‘scalability’ mean in RoR-based software?

For starters, let’s define the term of scalability in the development of software based on web technologies.

The application scalability basically means its susceptibility to simultaneous processing of a number of user requests much larger than was anticipated initially. The software’s performance cannot be negatively affected by that.

Obviously, the initial structure of the app’s server part cannot maintain stable performance without additional interference in this case. The software transformation is a responsibility of the framework it is based on. Particularly, try clarifying the following questions:

  • Does the chosen framework have the necessary tools for scaling?
  • What desired volume of users should the app be able to process per minute?
  • How accessible will the integration with a new database be?

That will help you ultimately decide which environment to choose at the start of your web app development.

Generally speaking, Ruby on Rails fits all those questions pretty well – it allows modular code to be written that is easily integrated with popular Database Management Systems, it employs the load balancer, and is able to provide quite a sufficient performance level during the processing of increased request loads with proper optimization.

 

How to scale an RoR app with minimum resource expenses

Now, for the main part – how resource-intensive is the establishment of rails scalability? Check out some life hacks that will help you keep your ruby on rails performance stable.

Simplify the code as much as possible

Never ignore refactoring! The process requires a lot of effort and resources, it’s a fact, but it also helps in solving many serious performance optimization issues in the long run. Alternatively, you can write tasks that require increased computational power in some simpler languages (see the diagram below) – you’ll be able to integrate RoR with more accessible modules without excessive effort.

Use modular software coding approach

The Ruby on Rails motto is ‘Don’t repeat yourself’. A modular approach to software creation in accordance with service-oriented architecture will help optimize load distribution processes in the future.

Save the app state on the client side

When the saved state remains on the server, the further optimization of code for horizontal scaling (we’ll discuss the term below) can become more cumbersome. Save the current state on the client side to avoid optimization issues.

 

 

Vertical and horizontal scaling

Vertical scaling basically means the increase of server power – expansion of RAM, switch to a more powerful processor, etc. Unfortunately, this approach isn’t open-ended – memory cards and processors may become obsolete for handling your software with time.

Horizontal scaling solves this question. It helps distribute all computations required for your application performance between several server machines. This way, you can increase the number of servers providing working capacities for backend as much as you wish. Moreover, you can employ servers with different performance specifications for different app modules.

During the horizontal scaling, all software is switched from standard server architecture to a 3-tier architecture, which includes the following levels:

  • Server with the load balancer
  • Web app instances
  • Database instances

Let’s take a closer look at each component.

Load balancer

RoR uses Nginx as a load balancer, which executes intellectual distribution of computational tasks between servers. The processing of user requests with the involvement of the load balancer is subsequent, server-by-server.

App instances

In order to establish the interconnection with the app on this level of 3-tier architecture, special app servers are used – each is connected to a separate app instance for further processing of user requests (they are, basically, responsible for the I/O of the operation; the asynchronous style of programming can additionally accelerate the processing). The most popular app servers currently are Unicorn, Puma, and Phusion Passenger.

Database instances

Working with database instances is the next step in the creation of the scalable architecture. This allows you to make your software more fail-safe and accelerate its performance.

The most typical format of interaction between separate replicas of the same database is the master-master replication. Being customized in any way, one instance sends signals about changes to other instances, synchronizing the performance of the whole application with minimum performance losses. You can use caching to additionally decrease any lags – it significantly lowers the server processor stress load (according to a presentation by the developers from the Silicon Valley-based Twitter team, about 90% of API requests can be cached).

As for scalable databases, it is much more rational to use PostgreSQL and MongoDB instead of the standard MySQL – they are more receptive to the horizontal scaling.

 

Conclusion

In this article, we tried to answer the question ‘Can rails scale?’. As you can see, it isn’t true that applications built on RoR are not scalable. On the other hand, there is no secret, universal tool to really influence the ruby on rails scalability. Thus, if you follow the above-mentioned recommendations, you will be able to build an app with architecture that is easy to change.

If you do not have sufficient experience in working with Ruby on Rails, but your project still must be built on this framework, turn to professional help. The team of developers at Sloboda Studio have implemented dozens of high-quality RoR-based solutions, let’s make yours together, too!

Alex Morgunov

Alex Morgunov

Project Lead

Join our Newsletter