¿Cuáles son las características / requisitos comunes de las aplicaciones web escalables (referencias, por favor: D)?

No te daré ninguna referencia. Sin embargo, te daré algo por experiencia.

Para ser escalable, el estado de la aplicación debe poder replicarse para proporcionar alta disponibilidad. Probablemente haya al menos un almacén primario (escritura permitida) por partición, pero muchas réplicas de solo lectura.

Hay muchas particiones. En una implementación muy ingenua de una partición, cada nombre de usuario que comienza con una ‘a’ irá a la partición 0, mientras que todos los que comiencen con una ‘b’ irán a la partición 1. En la vida real, desea hacer estas particiones de la misma manera se extendió lo más posible, por lo que usaría algún tipo de función de hashing.

La forma de calcular particiones y réplicas es decidiendo dos cosas:

  1. Cuán importante es un dato (influye en las réplicas)
  2. Cuántos fragmentos de esos datos tendrá (influye en las particiones)

Idealmente, encontrará una manera de almacenar una partición completa de un conjunto de datos determinado en la RAM. Si una fila de usuario en una base de datos es de 16 kb y espera tener 1 millón de usuarios, esperaría que el tamaño total sea de alrededor de 15 gb.

Como no podemos esperar que un nodo pueda manejar 15 gb en RAM, dividimos los datos en, digamos, 20 particiones. Como es importante que una falla de nodo no derribe la aplicación, le damos 6 réplicas por partición.

La matemática sale a (16kb * 1000000) / 20 para obtener los requisitos mínimos de RAM por nodo.
Y (20 * 6) para obtener el número de nodos (quizás un par adicional por si acaso) necesitamos proporcionar ese SLA.

La escala es divertida, pero espero haber respondido a su pregunta explicando particiones y réplicas.