Comience con un lenguaje rápido en el servidor, minimice el trabajo que el servidor necesita hacer y diseñe una infraestructura fácilmente escalable.
Si el escalado es una preocupación importante, pero comienzas tu código en PHP o Ruby, lo siento, pero lo estás haciendo mal. Y sí, mucha gente predica lo que considero la respuesta incorrecta aquí. También creo que la escritura estática es crucial para el código sólido. [1] Parte de esto viene de intentar las cosas de otra manera. Llevo 30 años desarrollando software. He intentado muchos enfoques y me he encontrado con muchos problemas. Esta es mi sabiduría actual sobre el tema, en resumen.
Sí, puede escalar horizontalmente idiomas más lentos, pero eso puede ser difícil de hacer bien, y tiende a dar a algunos usuarios una experiencia deficiente (latencia incorrecta, tal vez incluso errores, mientras aumenta la capacidad). Cuando cada servidor puede manejar 40 veces más clientes o más, el escalado puede ocurrir con mucha menos frecuencia, y si implementa el escalado automático, hay mucho más búfer entre un servidor que está medio lleno y saturado.
- ¿Este sitio web cambia su opinión sobre Hillary Clinton?
- ¿Cómo puedo asegurar mi sitio de WordPress?
- ¿Qué marco debo usar para una plataforma colaborativa de equipo que usa Java?
- ¿Cómo se pueden lograr aplicaciones web en tiempo real con PHP?
- ¿Cuál es la mejor manera de aplicar CSS en un árbol HTML?
Mira a Quora. Han estado luchando una batalla con la escala durante meses. Periódicamente no puedo guardar un comentario o respuesta porque sus servidores no responden. Escuché que su parte trasera es Python. Claramente tiene problemas recurrentes. Algo de eso podría ser la capa de base de datos, que también debe ser escalable.
Para el lenguaje que maneja su lógica de back-end, llegar a un millón de “usuarios”, Go es probablemente su mejor opción. Dependiendo de los patrones de uso, podría manejar tantos en un servidor. Si te refieres a un millón todos conectados a la vez , probablemente necesites un poco de escala horizontal.
Go probablemente puede proporcionar respuestas de 10–40k por segundo para la lógica de servidor típica en un buen hardware. Si sus millones de usuarios se conectan en el transcurso de unos minutos, incluso el extremo inferior de ese rango podría manejar a un millón de usuarios, incluso si fuera una carga, pero la carga de Internet tiende a ser fractal, por lo que probablemente querría más capacidad si está inactivo la mayor parte del tiempo para manejar cargas máximas.
Reducir su necesidad de servidores de back-end es otra estrategia para llevar a la mesa. Haga todo el trabajo posible en el cliente. Use un marco de cliente como Angular, React o Vue.js, para que el navegador esté haciendo el trabajo de la plantilla. Y por amor a todo lo bueno, coloque archivos estáticos en un CDN. Sí, Go puede servir muchos archivos de un sistema, pero realmente desea utilizar su capacidad y ancho de banda para algo que una CDN no puede hacer mejor.
Si tiene una tarea de servidor que requiere una cantidad considerable de tiempo de procesamiento (conversión de imágenes o algo), entonces probablemente quiera usar un enfoque “sin servidor” como Amazon lambda. Entonces Amazon puede manejar la escala por usted.
En cuanto a las bases de datos: algunas escalan horizontalmente mejor que otras. Haga su tarea y descubra qué base de datos maneja los patrones de acceso que necesita. [2] Cambie la escala de sus servidores de bases de datos al nivel en que puedan admitir los patrones de acceso que necesita. El escalado automático de grandes bases de datos lleva tiempo, así que no esperes poder aumentar más la capacidad en un abrir y cerrar de ojos.
O Google Cloud Storage [3] puede ser adecuado para usted; deja que Google se encargue del escalado, y solo pagas por la capacidad y el ancho de banda.
Buena suerte.
Notas al pie
[1] Tipos estáticos considerados útiles · RealMensch
[2] Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Couchbase vs Hypertable vs ElasticSearch vs Accumulo vs VoltDB vs Scalaris comparación
[3] Almacenamiento en la nube: almacenamiento de datos en línea | Google Cloud Platform