¿Por qué es Ruby on Rails menos escalable que otros lenguajes / frameworks de programación?

Es erróneo decir que el marco es escalable o no, más bien la arquitectura del sistema del servidor.

Ruby on Rails es un gran marco para las startups, pero Twitter cambió a Scala y aparecieron muchas discusiones sobre “Rails no es escalable”.

Tenemos dos formas de escalar aplicaciones Rails: escalabilidad vertical y horizontal.

La escalabilidad vertical significa agregar más RAM o actualizar el procesador del servidor para darle más potencia a la computadora del servidor, pero solo tiene un efecto positivo en la etapa inicial. En algún momento, aumentar el tráfico hará que la actualización del procesador sea técnicamente imposible.

La escalabilidad horizontal significa convertir la arquitectura de servidor único de su aplicación a una arquitectura de tres niveles, donde el servidor y el equilibrador de carga (Nginx), las instancias de la aplicación Rails y las instancias de la base de datos se encuentran en diferentes servidores. De tal manera, asignamos cargas iguales entre máquinas.

Nginx se implementa en una sola máquina para servir como equilibrador de carga y proxy inverso, y para distribuir la carga entre varios servidores. Este servidor envía solicitudes una por una a la primera y segunda máquinas por turno.

Las instancias de la aplicación Rails deben ejecutarse por separado del servidor Nginx. Hay muchos servidores de aplicaciones para la comunicación entre la aplicación Rails y Nginx: Unicorn, Phusion Passenger y Puma. Los servidores de aplicaciones son responsables de la entrada-salida, lo que permite que la aplicación Rails se encargue de las solicitudes de los usuarios.

Las instancias de la base de datos también deben separarse de otros servidores para crear una arquitectura tolerante a fallas: cuando una base de datos recibe demasiadas solicitudes, otras instancias de la base de datos en el nivel de datos pueden acomodar esta carga.

También quiero agregar que debe conocer las características de su aplicación particular para superar limitaciones específicas. Shopify dijo hace varios años: “No hay ninguna fórmula mágica para escalar una aplicación Rails”.

Para obtener más información sobre este tema, puede leer el artículo “¿Qué pasa si le digo que Ruby on Rails es escalable” en el blog de RubyGarage https://rubygarage.org/blog/ruby …

Atribuiría este problema a Rails, no al propio Ruby. Rails es ideal para la creación rápida de prototipos y la creación de aplicaciones CRUD, pero la estructura es muy limitada. Descubrí que seguir los patrones de diseño comunes de Ruby on Rails funciona bien, pero tratar de hacer algo que no se ajuste a su paradigma rápidamente se vuelve difícil de diseñar y, a menudo, se convierte en una pesadilla de mantenimiento.

Esto significa que a medida que las aplicaciones crecen y se vuelven más complejas, se hace cada vez más difícil crear y administrar la creación de nuevas funciones y el mantenimiento de las antiguas.

Por otro lado, algunos marcos simplemente proporcionan su método sugerido para agregar nuevas funcionalidades y organizar grandes aplicaciones, pero aún permiten una amplia gama de paradigmas de desarrollo. Por ejemplo, diría que las bibliotecas de JavaScript Express JS (lado del servidor) y AngularJS (lado del cliente MVC) proporcionan una buena combinación de estructura predeterminada y libertad para desarrollar lo que desee. Ambos explican los patrones de diseño comunes en su documentación, pero hay muchas oportunidades para crear aplicaciones, sin embargo, puede elegir.

La razón es que una aplicación Rails es un monolito: es una gran cosa. No puede dividir fácilmente los componentes / capas y colocarlos en diferentes servidores cuando crezca. Es difícil de mantener, porque siempre tienes que implementarlo como esta única cosa y más y más equipos trabajarán en esta única cosa. También a menudo tendrá aplicaciones móviles, por lo que su aplicación rails servirá a los puntos finales web y REST y quizás a la API interna

Ejemplos de empresas que se enfrentan a esos problemas:
Tratando con el Monolito – Desarrolladores de SoundCloud
Página en sourcegraph.com

Tome estos puntos de referencia como ejemplo: TechEmpower Web Framework Comparación de rendimiento

De acuerdo con TechEmpower, el mejor framework web de Ruby (Sinatra) tiene un rendimiento de aproximadamente 5.5% en comparación con C ++, Java y PHP sin procesar (100%, 73% y 40% respectivamente). La prueba examina el rendimiento de tareas fundamentales como la serialización JSON, el acceso a la base de datos y la composición de plantillas del lado del servidor en los servidores Amazon EC2.

Esto significa que, con Ruby, solo puede manejar tanto tráfico antes de que el rendimiento tenga un gran éxito. Si desea manejar más tráfico, debe invertir en más recursos (hardware). Esto dificulta escalar Ruby. Sin embargo, otros idiomas tienen compensaciones y también tienen sus propios problemas de escala.

– ninguno de los otros marcos alcanza el mismo nivel de funcionalidades que Rails.
Y ese es el problema de los rieles, demasiadas cosas. Esto se puede ajustar y las cosas se pueden desactivar y, al final del día, puede alcanzar la misma velocidad de rango que otros framework con funcionalidades equivalentes.

Este motivo es el costo. Cada langugae puede escalar bien, si tiene suficiente presupuesto para comprar / alquilar suficientes cálculos. Para un sitio web grande, si necesita 100 servidores usando Ruby, entonces solo puede necesitar 10 servidores usando Golang o Java.