contextopedia El poder de las redes De las naciones a las redes
« El móvil del presidente « Portada » Tesis sobre los rankings y el rankismo en la blogsfera »

Miércoles, 18 de Abril de 2007

Ruby y la burbuja

El modelo basado en programar rápido, crecer aún más rapidamente en usuarios y vender antes de generar un modelo de negocio, parece estar en crisis. Los actuales problemas de escalabilidad de Ruby, la herramienta por excelencia de la programación rápida y bonita, hacen que el modelo sea viable sólo para aquellos… que se supone han de comprar

Gestionar aplicaciones web fuertes con Ruby on Rails tiene sus problemas. Mucho están sonando estos días los que sufre twitter y parece que hay un cierto consenso sobre los límites de la escalabilidad que bajo ciertos supuestos tienen este tipo de aplicaciones.

En las Indias, merced a feevy, las conocemos bien y por desgracia, en más de una ocasión, no hemos podido evitar que nuestros usuarios también las descubran.

Ciertamente resulta frustrante encontrarte con problemas de escala con tan poquitos usuarios como hoy tienen feevy (1643 que hacen sus feevies con unas 7500 fuentes distintas) o el mucho más ligero twitter (unos 100.000). Pero existe una solución bien conocida: distribuir el peso del proceso entre distintas máquinas. Eso hicimos con el parseo de las feeds que estamos procesando en este momento y éso hemos empezado a hacer con las bases de datos.

Si quieres programar en Ruby un servicio web 2.1 ágil y robusto no tienes más remedio que montarte una red. Sólo así, escalando la red, podrás ofrecerlo con una cierta estabilidad a una comunidad creciente.

Es verdad que para parte de lo que distribuyas no te harán falta servidores dedicados. En feevy, el parseo -que no requiere ningún tipo de info personal- recae sobre los ordenadores de trabajo y las laptops de los indianos, al mejor estilo seti@home. Pero las bases de datos de los feevies, dónde está la info de las preferencias de tus usuarios no puede salir de servidores seguros. Y éso implica más máquinas y más gasto para tener una estructura distribuida interna y segura.

Es decir, hacer de mumi, si tienes éxito, no sale barato… y con Ruby menos. Y éso quiere decir que a más de uno le tocará replantear sus planes de negocio. O el lenguaje de programación.

El modelo del “programo rápido y bonito”, “crezco rápido en usuarios” y “vendo caro antes de tener que plantearme si mi comunidad de usuarios es rentable”, parece estar en crisis. Los actuales problemas de escalabilidad de Ruby, la herramienta por excelencia del “programo rápido y bonito” hacen que el modelo sea viable sólo para aquellos… que, se supone, han de comprar (Google, Yahoo!, etc.).

Actualización: Fajro me manda un post de Ricardo Galli que apunta en el mismo sentido. Me llama la atención por cuanto tengo entendido que Menéame, al igual que feevy, no fue pensada como start up sino como ciberactivismo en forma de software o como dice en nuestra web, como un “regalo a la comunidad“. Algo me dice que final del día, seguramente los que no fueron creados como negocio serán los que sobrevivan.

Guardado por David de Ugarte en como destacado
a las 9:05 pm

En otros blogs este post recibió las siguientes referencias (URI de Trackback)

  1. Escalabilidad: PHP versus Ruby | DESARROLLO DE SOFTWARE

    [...] parecer están experimentando muchos problemas a la hora de escalar Twitter (la aplicacion de moda) y feevy (una gran idea) a miles de usuarios porque están hechos en Ruby y [...]

  2. ¿Ruby on Rails está muerto? | jRuby

    [...] Feevy experimental problemas de escalabilidad al estar hecho en RoR [...]

  3. despuesdegoogle » Blog Archive » Twitter sin Ruby

    [...] de los problemas que de vez en cuando han afectado a Twitter pueden estar relacionados con problemas de escalabilidad de Ruby on Rails. Al menos este es un tópico que circula libremente en la Red casi desde la presentación de [...]


Comentarios

  1. Fajro el 18/04/07 a las 10:09 pm

    Tal vez deberían reescribir todo el código de Feevy en PHP. :P

  2. Luis el 18/04/07 a las 10:20 pm

    Y cual sería en tu opinión David el lenguaje ideal para programar aplicaciones escalables? (es por satifacer mi curiosidad ignorante)

  3. Cristian Sepúlveda el 19/04/07 a las 5:42 am

    David,

    Si quieres una aplicación realmente escalable tienes que usar J2EE, que separa la arquitectura en tres capas, la capa de los datos, la de lógica del negocio y la de presentación. Las cuales tienen distintos tipos carga, algunas aplicaciones son intensivas en consulta a Bases de Datos, otras intensivas en cálculos y otras intensivas en grafica. Al estar separadas, puedes detectar donde está la sobrecarga y dimensionar acorde a la carga, así se optimizan los recursos, ya que ahí detectas si necesitas más procesador, más ram, más disco duro o más ancho de banda. No es fácil de encontrar buenos desarrolladores J2EE, pero es como un camión, parte muy lento, pero cuando vas a 120K/H no te para nadie…

    PHP fusiona la capa de lógica de negocios con la de presentación, separándose de la de los datos, quizás este tiene la mejor relación TiempoDesarrolo-Complejidad-Escalabilidad, pero tener en un mismo archivo .php el layout de la interfase de un sitio y la lógica de cálculos no es conveniente, es un tremendo enredo y es ineficiente, por ejemplo, php no es muy bueno para cálculos numéricos y muchas iteraciones, en eso generalmente lo mejor es C++.

    Cuando ejecutas un .PHP todo el código se carga en memoria, la lógica de negocio generalmente incluye muchos IF, Entonces cada vez que ejecutas un archivo .php, cargas en memoria la rama que si entra en el IF y la que no entra en el IF, lo cual es ineficiente, hay casos en que el IF se ejecuta muy pocas veces, entonces cargarlo en memoria cada vez que despliegas la interfase en totalmente ineficiente.

    No conozco en profundidad Ruby, pero lo que he visto me parece que es muy bueno para prototipar, pero no me extrañan los problemas de crecimiento, ya que están las capas mezcladas, entonces cuando quieres crecer te obliga a la duplicación exacta, en cambio J2EE o PHP no es necesario duplicar el hardware para duplicar la capacidad.

    a mi parecer, Feevy tiene una altísima carga en la capa de lógica, ya que debe hacer “cálculos” para cada uno de los sitios con feevy, de tal manera de decidir que post se publica y cual primero o segundo, me imagino que si está completamente hecho en Ruby, ese algoritmo debe ser muy ineficiente, a veces basta con sacarlo y hacer que otra aplicación con otro lenguaje lo ejecute. Otra manera mas fácil es no hacer esos cálculos on the fly, si no que hacerlos una vez cada cierto tiempo y guardar el resultado en la base de datos, entonces cada vez que se consulta un feevy, no se hacen cálculos, sino que solo se despliega lo guardado en la Base de datos.

    Bueno, ojala no esté muy equivocado, Saludos desde Chile.

  4. Javier Cañada el 19/04/07 a las 8:01 am

    David, la gente de La Coctelera, a quienes conozco bien y quienes más saben de Ruby en España, han dado respuesta a todas esas incertidumbres sobre RoR en un interesante artículo:

    http://www.lacoctelera.com/porras/post/2007/04/17/la-polemica-sobre-escalabilidad-rails

    Ellos, que ya han pasado por ahí exitosamente y que tienen un servicio bajo rails con millones de visitas y cerca de 100.000 blogs, son autoridad indiscutible cuando dicen que el problema no es tal.

  5. janzo el 19/04/07 a las 11:25 am

    Yo lo que no entiendo es cómo después de haber solucionado/parcheado (deprisa, corriendo y málamente) los errores de twitter, una vez la cosa volvía a ser estable, no han pensado en reprogramar desde cero la aplicación utilizando por ejemplo PHP. Realmente twitter no parece una aplicación compleja.

  6. Jaime Soriano el 19/04/07 a las 12:09 pm

    J2EE no tiene la exclusiva de las arquitecturas en tres capas. Uno de los principios de RoR es precisamente ese, la separación de los datos, la la presentación y la lógica (Modelo, Vista, Controlador).

    He podido participar recientemente en varios proyectos en los que se utiliza Rails y no era raro ver como era imprescindible utilizar otros lenguajes para integrarlo con componentes antiguos o para desplegar otras aplicaciones web. En ningún caso esto ha supuesto un problema. Existen numerosas posibilidades para trabajar con múltiples lenguajes y más en una arquitectura en la que se separa la lógica del resto de la aplicación.

    La abstracción del modelo de datos permite que las bases de datos subyacientes nos ofrezcan todas sus posibilidades en cuanto a balanceo de carga.

    A todo esto hay que unirle que es una plataforma muy bien documentada, que resulta muy fácil de aprender y en la que es agradable programar.

    La principal diferencia la veo en que entornos complejos, como J2EE, están pensados para aplicaciones grandes desde el principio, entonces todos los problemas de escalabilidad ya se plantean en las primeras fases. El que en otras plataformas se tenga que plantear más adelante no lo veo un inconveniente, de hecho puede ser un beneficio si te ahorras enormes gastos iniciales de una aplicación que quizá luego no tenga el éxito esperado.

  7. David de Ugarte el 19/04/07 a las 1:45 pm

    Gracias a todos por los comentarios.

    Javier: Conocía el post de los de La Coctelera y como tú, pienso que son los mejores en estas cosas, con una experiencia estupenda y muchísima cabeza. De todas formas, su solución no es necesariamente universal… Vamos, que no es el único problema de escalabilidad que te encuentras con Ruby.

    Por otro lado no digo que una aplicación hecha con Ruby no sea escalable, sólo que es escalable a mayor coste que otras aplicaciones hechas con otros lenguajes.

    El regalo que supone la existencia y mantenimiento de la coctelera por ej debería compararse, por ejemplo, con Bligoo.

    Y estoy de acuerdo con Jaime en que el secreto está no sólo en la distribución sino en la combinación de lenguajes y capas. Por ahí vamos! (Y creo que con eso respondo a Luis y a Fajro
    :-)

No espero notas en relación con este post. Los comentarios se cierran automáticamente a los tres días de la publicación del post.

Tout ce qui n'est point nouveau dans un temps d'innovation est pernicieux ~ Saint Just

« El móvil del presidente « Portada » Tesis sobre los rankings y el rankismo en la blogsfera »
Dominio público
Salvo indicación o advertencia en contrario, el autor de todas las entradas de este blog es David de Ugarte, quien las escribe y hace devolución expresa de ellas al Dominio Público

David de Ugarte: biografía y contacto

Básica, completa, podcast, videocast, miniposts [+feeds]
2008 BBVA blogsfera brasil ciberactivismo ciberpunk Devolución el poder de las redes fabbing feevy google lasindias libro electrónico nacionalismo neovenecianismo planta29 plurarquía redes distribuidas RMD sionismo digital web 2.0 web 2.1 wordpress
Creandote un usuario en un servidor OpenID podrás enviar comentarios y miniposts logueándote en el blog con tu OpenID
Puedes ver los 23 posts más actualizados de mi feevy un poco más abajo o jugar con el portal feevy interactivo. Si te gusta puedes personalizar esta plantilla y convertir tu propio feevy en un portal interactivo de todas tus fuentes.
Puedes ver las estadísticas de este blog -entre otros- en el servidor Urchin de Exploradores Electrónicos conectándote con el usuario abierto y la contraseña abierto123.

RMD es una alternativa distribuida y bloguera al microposting centralizado. Logueáte y envía desde este blog tus miniposts a la red usando tu identidad OpenID
Si quieres superar tu dependencia de Flickr, YouTube y otros servicios, consulta mi caja de herramientas