¿Cuál es una pila de tecnología buena o probada para construir una startup basada en la web hoy?

Esta pregunta debe dividirse en diferentes componentes que pueden mezclarse más o menos. Algunas características que debe considerar son: facilidad de configuración / mantenimiento, soporte para desarrolladores y la complejidad de su aplicación.

Servidor HTTP: nginx
El servidor http servirá todas sus páginas e imágenes estáticas. También puede usar nginx como equilibrador de carga. Prefiero nginx sobre apache debido al menor uso de memoria y la facilidad de configuración. Algunos dicen que Apache ofrece más módulos personalizados, pero encontré que nginx es suficiente.

Base de datos: MongoDB
Prefiero MongoDB porque su formato y modelado de datos (JSON binario) son más similares a los datos web. Como Paul mencionó, agregar columnas a un almacén SQL bajo carga es difícil. MongoDB tiene un diseño sin esquema y no sufre este defecto.
Utilizado por: Foursquare. Lista completa: http://www.mongodb.org/display/D…

El marco de aplicaciones y el servidor de aplicaciones dependerán de la elección del idioma de su computadora:
Ruby : Pasajero / Ruby on Rails (o sinatra).
Si bien el pasajero no es el servidor de aplicaciones más eficiente para Ruby, es el más fácil de configurar y mantener. Ruby y su ecosistema (especialmente rubygems) hacen que la codificación sea extremadamente rápida.
Utilizado por: Twitter, YP.com, Scribd, 37signals, Groupon.

Scala : Embarcadero / Ascensor (o scalatra)
Scala / Lift hace algunas cosas increíblemente bien, incluido el soporte integrado ajax / comet. Creo que Scala es mejor para el modelado de datos complejos debido a la escritura estática y la composición de objetos.
Utilizado por: Foursquare, Twitter (solo backend).

Python: Django o Pilones
No puedo decir mucho más ya que no he usado Python en una configuración de producción.
Utilizado por: Quora.

PHP: mantente alejado 🙂
“PHP estaba fuera de discusión. Facebook está estancado en eso por razones heredadas, no porque sea la mejor opción en este momento”. – fundador de quora
¿Por qué Quora eligió Python para su desarrollo? ¿Qué desafíos tecnológicos enfrentaron los fundadores antes de decidirse por Python en lugar de PHP?
La mayoría de las aplicaciones PHP que he visto comienzan como pequeños scripts y crecen hasta convertirse en su propio marco de aplicaciones.

Es posible que necesite un sistema de colas si su aplicación necesita admitir procesos de larga ejecución. es decir. codificando un video.

En cualquier caso, elija tecnologías de código abierto para que pueda encontrar fácilmente desarrolladores y soporte de la comunidad.

Apégate a lo que mejor sabes. No se trata de qué tipo de tecnología está utilizando, sino de la ejecución de su producto. Piense en términos de componentes discretos y use la mejor tecnología para la solución. Usamos PHP como una capa web delgada que atiende solicitudes de API con varios servicios que se ejecutan en la parte posterior para servir varias funciones. Por ejemplo, Solr (java) para búsqueda, ejabberd (erlang) para XMPP, varios demonios de python, etc. MySQL para la mayoría de nuestra base de datos y MongoDB para tareas no críticas como el registro, análisis, etc.

En cuanto a otras partes del sistema, utilizamos Lighttpd para servidores web, pero es posible que nos traslademos a NGINX debido a problemas de memoria con Lighttpd.

Otras partes incluyen Memcached, Node.js, etc. El punto es, use lo que sea mejor / más rápido para desarrollar para su propósito. Siempre puede optimizarlo en el futuro.

Si bien no es una startup, nuestro equipo en Mozilla puede lanzar rápidamente proyectos usando Linux + Apache WSGI + Django en un tiempo bastante corto. Principalmente usamos MySQL para nuestro almacenamiento de datos, Sphinx Search for Search Engine y REDIS para el almacenamiento en caché.

También usamos Celery con tecnología de RabbitMQ para poner en cola las tareas fuera de línea. Esto es algo en lo que puede crecer más tarde, pero es muy fácil de implementar.

Lo que nos diferencia de las startups es que utilizamos Zeus para equilibrar la carga. Si fuera bootstrapping, usaría nginx en su lugar como un proxy inverso / equilibrador de carga. Este tipo de cosas son intercambiables.

Una cosa que ayuda es la prueba automatizada y la integración continua, para eso utilizamos Hudson. Al ritmo que necesita para moverse como una startup, vale la pena dedicar un tiempo a poner esas cosas en su lugar.