Pregunta

Acabo de ver la hilarante "El Ascenso y la Caída de Twitter" lo que me hizo pensar:

si usted ha de twitter, ¿qué haría diferente?

¿Qué tecnologías se utilizan?¿En qué idiomas?

¿Cómo asegurarse de que el servicio es escalable?

¿Qué más te gustaría cambiar?

¿Fue útil?

Solución

Hubiera implementado en GAE, así:

Cada usuario tendrá una tabla que contiene los tweets de la gente a la que seguir.Esta tabla será cerrado por (usuario, fecha y hora descendente).

Cada usuario también tiene un follower_ranges tabla, que asigna un usuario a un conjunto contiguo de seguidor de identificación de rangos.Para la mayoría de los usuarios, que tienen sólo un par de miles de seguidores de esta tabla tienen una sola entrada (-inf..+inf);este será el implícita por defecto.Para los usuarios con más seguidores, cada rango en la tabla tendrá un par de miles de usuarios.Los rangos será equilibrado a lo largo del tiempo para mantener el número de usuarios en cada una dentro de un intervalo, por ejemplo,mayor que 1000, menor que 10000.La unión de todos los rangos se incluyen todos los id de usuario.

Cada vez que un usuario -> seguidor de operación se crea, que se codifica como una acción y se añade a una cola.Cada elemento de la cola es un (remitente, la acción, la carga útil, seguidor subrango) tupla.La cola de los trabajadores de tomar un elemento, encontrar todos los seguidores en el subrango, y aplicar la acción a cada uno de ellos.(Tenga en cuenta que la acción puede ser "agregar un tweet", "eliminar un tweet," "editar un tweet," etc.Básicamente, todo lo que se necesita para ser aplicado a todos los seguidores.)

La aplicación de la acción de la cola a cada seguidor implicará la emisión de la correspondiente escribe y borra a cada usuario del tweet de la tabla.La barrera de la cola significa que escribe no aparecen al instante, pero se debe posible para mantener la demora por debajo de unos pocos segundos.

Mostrar al usuario sus tweets será una operación barata:"SELECT * FROM tweets DONDE user_id = :user_id ORDEN (created_at DESC) LÍMITE :max_per_page".Este va a escanear una sola tabla, y ser una operación muy rápida.(Mantenimiento de usuario de bloqueo de la latencia de abajo es bueno!)

Creo que este diseño de la escala bastante bien inicialmente.Cada componente del sistema puede ampliarse fácilmente:

  • La cola de almacenamiento puede ser respaldado por GAE, y la escala como por cualquier Almacén de datos de la tabla
  • Las interfaces se pueden escalar de manera natural, y no hay necesidad de stickyness
  • Más de la cola de los procesadores puede ser añadido en cualquier momento
  • El almacenamiento real de las mesas de crecer de forma natural, y debe escala fina en el Almacén de datos.

Dicho esto, no puedo pensar en un par de mejoras en el futuro me gustaría ver en de inmediato:

  • Reducir el almacenamiento de rara vez-muestra de datos.Este diseño denormalizes cada tweet en una per-seguidor de copia.Sin embargo, sólo los más recientes tweets se accede.Mediante la eliminación de la de cada usuario copia de tweets después de N días de edad, se puede recuperar una gran cantidad de almacenamiento.Si un usuario intenta ver algo de la historia antigua, lo podemos recuperar los datos de organizar las mesas.Esto será más lento, pero no va a ocurrir demasiado a menudo, y el ahorro será significativo.El ahorro de almacenamiento:(#avg_followers - 1) / #avg_followers
  • La escritura patrón no es óptima.A través de múltiples elementos de la cola, cada cola trabajador tendrá que ser escrito a cada usuario de los mensajes de la tabla, por lo tanto la localidad de escrituras no será muy buena.(Peor de los casos, tendremos #procesador * #de almacenamiento de servidor de conexiones). Esto puede ser corregido mediante la aplicación de varias actualizaciones a cada uno de los usuarios.Por ejemplo, si dos acciones a y B son para ser aplicadas a un intervalo [0, 10000), entonces tienen una sola cola de procesador de aplicar esas dos acciones a la vez.

Otros consejos

Es que ya se está haciendo: Laconica

  1. Es que ya se hace en la Parte II - La Venganza: identi.ca (que es en la parte superior de Laconica)
  2. Es que ya se hace en la Parte III - el Lado Oscuro: yammer

La VBG!(-:

Voy a empezar a partir de la premisa de volver a hacerlo todo de nuevo:¿qué haría de manera diferente, yo en twitter en ese entonces?

No una cosa.

Twitter mantiene el foco en lo que importa:la prestación de un servicio que la gente en realidad quiero para usar.

Me encantaría trabajar en un producto que se hizo tan popular en un período tan corto de tiempo que su mayor amenaza a la que se convirtió en su propia escalabilidad.Eso significa que usted ha ganado.Con el éxito proviene de los recursos y la atención a capitalizar el éxito.

Me gustaría diseño escalable como el infierno justo desde el principio.

Mi elección sería la Plataforma de Microsoft, C#, IIS, SQL Server, Memcached (o de la Velocidad si es la definitiva, y funciona bien cuando puedo empezar ;-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top