Skip to content

Instantly share code, notes, and snippets.

@stellamiranda
Last active November 13, 2020 06:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stellamiranda/1b9d8eeae4c624062fcf66736a7b760f to your computer and use it in GitHub Desktop.
Save stellamiranda/1b9d8eeae4c624062fcf66736a7b760f to your computer and use it in GitHub Desktop.
Actividad en clase

Diseñando Twitter

Diseñemos un servicio de redes sociales similar a Twitter. Los usuarios del servicio podrán publicar tweets, seguir a otras personas y favoritos tweets.

Requerimientos funcionales

  1. Los usuarios deberían poder publicar nuevos tweets.
  2. Un usuario debería poder seguir a otros usuarios.
  3. Los usuarios deberían poder marcar los tweets como favoritos.
  4. El servicio debe poder crear y mostrar la línea de tiempo de un usuario que consta de los tweets principales de todas las personas que sigue el usuario.
  5. Los tweets pueden contener fotos y videos.

Requerimientos no funcionales

  1. Nuestro servicio debe estar altamente disponible.
  2. La latencia aceptable del sistema es de 200 ms para la generación de línea de tiempo.
  3. La coherencia puede verse afectada (en aras de la disponibilidad); si un usuario no ve un tweet durante un tiempo, debería estar bien.

Requisitos extendidos

  1. Buscar tweets.
  2. Responder a un tweet.
  3. Temas de tendencia: temas / búsquedas de actualidad.
  4. Etiquetado de otros usuarios.
  5. Notificación de tweet.
  6. ¿A quién seguir? Sugerencias
  7. Momentos.

Estimación de capacidad y restricciones

Supongamos que tenemos mil millones de usuarios totales con 200 millones de usuarios activos diarios (DAU). Supongamos también que tenemos 100 millones de tweets nuevos todos los días y que, en promedio, cada usuario sigue a 200 personas.

¿Cuántos favoritos por día?

Si, en promedio, cada usuario marca cinco tweets por día como favoritos, tendremos:

200 millones de usuarios * 5 favoritos => 1 billón de favoritos

¿Cuántas vistas totales de tweets generará nuestro sistema?

Supongamos que, en promedio, un usuario visita su cronología dos veces al día y visita las páginas de otras cinco personas. En cada página, si un usuario ve 20 tweets, nuestro sistema generará un total de 28.000 millones de vistas de tweets / día:

200M DAU * ((2 + 5) * 20 tweets) => 28B / día

Estimaciones de almacenamiento

Supongamos que cada tweet tiene 140 caracteres y necesitamos dos bytes para almacenar un carácter sin compresión. Supongamos que necesitamos 30 bytes para almacenar metadatos con cada tweet (como ID, marca de tiempo, ID de usuario, etc.). Almacenamiento total que necesitaríamos:

100 M * (280 + 30) bytes => 30 GB / día ¿Cuáles serían nuestras necesidades de almacenamiento durante cinco años? ¿Cuánto almacenamiento necesitaríamos para los datos de los usuarios, a continuación, favoritos? Dejaremos esto para el ejercicio.

No todos los tweets tendrán medios, supongamos que, en promedio, cada quinto tweet tiene una foto y cada décimo tiene un video. Supongamos también que, en promedio, una foto tiene 200 KB y un video 2 MB. Esto nos llevará a tener 24 TB de nuevos medios todos los días.

(100 millones / 5 fotos * 200 KB) + (100 millones / 10 videos * 2 MB) ~ = 24 TB / día Estimaciones de ancho de banda Dado que el ingreso total es de 24 TB por día, esto se traduciría en 290 MB / seg.

Recuerde que tenemos 28 mil millones de visitas de tweets por día. Debemos mostrar la foto de cada tweet (si tiene una foto), pero supongamos que los usuarios ven cada tercer video que ven en su línea de tiempo. Entonces, la salida total será:

+ (28B / 5 * 200KB) / 86400s de fotos => 13GB / S
+ (28B / 10/3 * 2 MB) / 86400 s de videos => 22 GB / s
Total ~ = 35 GB / s```
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment