¿Cómo funciona el algoritmo de acortador de URL?

Enfoque de 5 pasos para resolver problemas de diseño:

  1. Generación de casos de uso : reúna todos los casos de uso posibles
  2. Restricciones y análisis : cuántos usuarios, cuántos datos, etc.
  3. Diseño básico : diseño más básico. Pocos usuarios-caso.
  4. Cuellos de botella : encuentre los cuellos de botella y resuélvalos.
  5. Escalabilidad : gran cantidad de usuarios. 4 y 5 steploop. entrará hasta que obtengamos una respuesta satisfactoria

Diseña un servicio de acortamiento como Bitly

Caso de uso

Caso de uso básico:

1. El acortamiento toma una URL y devuelve una URL corta.

2. La redirección toma una URL corta y redirige a la URL original.

3. URL personalizada.

4. Alta disponibilidad del sistema.

Casos de uso adicionales:

1. Analytics

2. Caducidad automática del enlace.

3. Eliminación manual de enlaces.

4. URL específica de la empresa.

5. UI o solo API

Análisis de requisitos / Matemáticas

Primero, necesitamos encontrar el patrón de uso.

Puede solicitar directamente estos datos al entrevistador o puede obtenerlos utilizando algunos datos que el entrevistador proporciona. Supongamos que el entrevistador dice que habrá mil millones de solicitudes por mes. Además, de estas 10% de veces, es una nueva solicitud y el 90% de las veces, es una redirección de la URL ya acortada. Anotemos los datos que obtenemos.

1. 1BN solicitudes por mes

2. 10% son para URL / acortamiento nuevos y 90% son para redireccionamiento.

3. Nuevas URL por mes es 100MLN

4. Solicitudes por segundo 1BN / (30 * 24 * 3600) = 385. Aproximadamente, puede asumir que 400 solicitudes por segundo.

5. Número total de URL almacenadas en 5 años. 5 * 12 * 100 MLN = URL 6BN en 5 años.

6. Supongamos que el espacio requerido por cada URL es de 500bytes.

7. Supongamos que el espacio requerido por cada código Hash para las URL correspondientes es de 6bytes de longitud.

8. Datos totales que necesitamos almacenar en cinco años. 3 TB para todas las URL y 36 gb para hashes

6,000,000,000 * 500 bytes = 3 terabytes

6,000,000,000 * 6 bytes = 36 gigabytes

9. Nuevas solicitudes de escritura de datos por segundo: 40 * (500 + 6): 20k

Diseño básico

Servidor web: proporcione el sitio web para el servicio Bitly donde los usuarios pueden generar la URL corta.

Servidor de aplicaciones: proporciona los siguientes servicios:

1. Servicio de acortamiento

2. Servicio de redireccionamiento

3. Clave = Función hash (URL)

Servidor de base de datos:

1. Realice un seguimiento de la asignación de hash a URL.

2. Funciona como una enorme Hash-Table almacena la nueva asignación y recupera la clave dada de asignación anterior.

Embotellamiento

1. El tráfico no es mucho

2. El almacenamiento de datos puede ser un problema.

Escalabilidad

Servidor de aplicaciones:

1. Comience con la máquina individual.

2. Pruebe hasta dónde llega.

3. Hacemos una escala vertical por algún tiempo.

4.Agregue balanceador de carga y un grupo de máquinas para manejar picos y aumentar la disponibilidad.

Almacenamiento de datos:

1. miles de millones de objetos

2. Cada objeto es pequeño

3. No hay relación entre los objetos.

4. son más que escribir.

5. 3 TB de URL y 36 GB de hash.

MySQL:

1.Ampliamente utilizado

2. Una tecnología madura

3. paradigmas de escala limpia (maestro / esclavo, maestro / maestro)

4.Utilizado por Facebook, Google, Twitter, etc.

5. La búsqueda de índice es muy rápida.

Mapeos:

1. Use solo la tabla MySQL con dos campos.

2. Cree un índice único en el hash que queremos mantener en la memoria para acelerar las búsquedas.

3. Escalado vertical de MySQL por un tiempo

4. Partición de datos en muchas particiones.

5. Maestro-esclavo (leer del esclavo y escribir al maestro).

6. Finalmente, particione los datos tomando el primer carácter del hash mod el número de particiones

Resolución de problemas en estructuras de datos y algoritmos “, escrito en varios lenguajes como C, C ++, Java, C #, Python, etc. Número de diagramas para explicar varios conceptos. También contiene un capítulo de Diseño del sistema al final que brindará un enfoque sistemático para resolver los problemas de diseño en una Entrevista.

Algunos problemas que había discutido en el último capítulo son:

  1. ¿Cómo diseñarías Facebook? ¿Cómo diseñarías un poco? etc.
  2. También se discute cómo diseñaría un sistema de ascensor o un sistema de restaurante, etc.

Los enlaces de los libros en Amazon están abajo:

1. Resolución de problemas en estructuras de datos y algoritmos utilizando C

2. Resolución de problemas en estructuras de datos y algoritmos usando C ++

3. Resolución de problemas en estructuras de datos y algoritmos utilizando Java

4. Resolución de problemas en estructuras de datos y algoritmos con C #

5. Resolución de problemas en estructuras de datos y algoritmos usando Python

Eche un vistazo al diseño de un servicio de acortamiento de URL como TinyURL.

El acortamiento de URL se utiliza para crear alias más cortos para URL largas. Los usuarios son redirigidos a la URL original cuando tocan estos alias.

El problema del acortamiento de URL se trata de generar una clave corta y única (alias) para la URL dada y cada vez que el usuario golpea el alias, será redirigido a la URL real.

Podría haber al menos dos soluciones:

  1. Codificación de URL real: podemos calcular un hash único (por ejemplo, MD5 o SHA256, etc.) de la URL dada. El hash se puede codificar para mostrar. Esta codificación podría ser base36 ([az, 0-9]) o base62 ([AZ, az, 0-9]) y si agregamos ‘-‘ y ‘.’, Podemos usar la codificación base64.
  2. Generación de claves sin conexión: podemos tener un Servicio de generación de claves (KGS) independiente que genera cadenas de seis letras aleatorias de antemano y las almacena en una base de datos. Siempre que queramos acortar una URL, solo tomaremos una de las claves ya generadas y la usaremos. Este enfoque hará las cosas bastante simples y rápidas ya que no codificaremos la URL ni nos preocuparemos por duplicaciones o colisiones. KGS se asegurará de que todas las claves insertadas en nuestra base de datos de claves sean únicas.

Grokking the System Design Interview también ha discutido algunos otros buenos problemas de diseño:

  • Diseñando Instagram
  • Diseñando Twitter
  • Diseñando Youtube
  • Diseñando Facebook Messenger
  • Diseñando Dropbox
  • Diseño de sugerencia Typeahead
  • Diseño de la fuente de noticias de Facebook
  • Diseñando Yelp
  • Diseñando Uber

El acortador de URL no es más que una tabla con la columna de número automático `Id` y la URL de texto correspondiente. El ID generado se convierte luego a la codificación base32 que permite un número mínimo de caracteres de texto para representar números grandes.


Entonces, la lógica es simple, agregue una nueva URL a la tabla, use el número generado y conviértalo a base32. Ejemplo, 12132 se convertirá a BR4. Y use esto como referencia a su url. Entonces, cuando alguien solicita una URL con BR4, emite una redirección a la URL completa almacenada en la tabla de la base de datos con el ID convertido de nuevo a base10 desde base32.


Al emitir redireccionamiento http, simplemente puede almacenar sus estadísticas en una tabla diferente para analizarlas más adelante.

El acortador de URL puede marcar su dominio y rastrear automáticamente de dónde y cuándo proviene su clic. Simplemente pruebe Ziplr, y luego podrá ver sus poderosas habilidades analíticas.

More Interesting

Cómo verificar si existe una ruta simple entre los nodos a y b de modo que pase a través del nodo c

Cómo escribir un código para fusionar dos listas vinculadas ordenadas

En la programación en C, dada una matriz de tamaño n, ¿cómo encuentras la suma de todas las combinaciones posibles de sus números?

¿Qué es mejor si necesito elegir un camino para mi carrera, algoritmos y estructuras de datos, o tecnologías de big data, en las que estoy trabajando actualmente?

¿Cuál es el número más pequeño [matemática] N [/ matemática] tal que [matemática] N \ equiv 2 \ mod 3, [/ matemática] [matemática] N \ equiv 1 \ mod 5, [/ matemática] [matemática] N \ equiv 4 \ mod 7 [/ matemáticas]?

He estado tratando de aprender el análisis de algoritmos usando el libro CLRS, sin embargo, encuentro que ese libro es difícil de entender. ¿Soy el único?

Juez en línea de Esfera (SPOJ): ¿Por qué el siguiente código da como resultado TLE? Quiero saber cómo se puede optimizar mi código para evitarlo.

¿Cuál es la forma más fácil de eliminar elementos duplicados de una matriz de derecha a izquierda?

¿Cuánto tiempo te lleva programar un algoritmo razonablemente complicado?

Soy completamente nuevo en algoritmos. ¿Cuál es el mejor libro / curso / método para realmente entrar en ellos?

Funciones hash: ¿Cuál es una explicación intuitiva de los diversos algoritmos SHA? ¿Cuáles son las mejoras clave entre cada familia?

¿Los algoritmos de aprendizaje y las estructuras de datos son muy importantes para la informática y la programación?

¿Por qué es 5n + 8n ^ 2 + 100n ^ 3 = O (n ^ 4)?

¿Qué tan difícil es aprender por sí mismo cómo codificar algoritmos eficientes?

¿Cómo se calculan los puntos de clasificación para un desafío en CodeEval?