2008-09-25 17 views
89

¿Cuáles son las tecnologías y las decisiones de programación que hacen que Google pueda atender una consulta tan rápido?¿Cómo puede Google ser tan rápido?

Cada vez que busco algo (una de las varias veces al día) siempre me sorprende cómo sirven los resultados en cerca o menos de 1 segundo. ¿Qué tipo de configuración y algoritmos podrían tener implementados para lograr esto?

Nota al margen: Es un poco abrumador pensar que incluso si tuviera que poner una aplicación de escritorio y usarla en mi máquina probablemente no sería la mitad de rápido que Google. Sigue aprendiendo lo que digo.


Éstos son algunos de los grandes respuestas y punteros proporcionado:

Respuesta

1

Hardware.

Montones y montones de hardware. Usan clústeres masivos de PC básicas como su granja de servidores.

+0

Solo para aclarar 'massive': cientos de miles de servidores. Supongo que ninguno fuera de Google sabe el número real y debe estar cambiando todo el tiempo. –

+0

-1 No es tan simple ... –

1

TraumaPony tiene razón. Gran cantidad de servidores y arquitectura inteligente para equilibrar la carga/almacenamiento en caché y listo para ejecutar consultas en menos de 1 segundo. Hubo muchos artículos en la red que describen la arquitectura de servicios de google. Estoy seguro de que puedes encontrarlos a través de Google :)

0

Y algorithms que pueden aprovechar esa potencia de hardware. Como mapreduce por ejemplo.

+0

MapReduce no se utiliza para responder a las consultas. – MSalters

+0

MapReduce se ejecuta en un gran grupo de máquinas y es altamente escalable: un cálculo típico de MapReduce procesa muchos terabytes de datos en miles de máquinas. Cientos de programas de MapReduce se han implementado y más de mil trabajos de MapReduce se ejecutan diariamente en los clusters de Google. –

+0

MapReduce se usa casi con seguridad para indexar asincrónicamente los datos del rastreador. Me sorprendería mucho si estuviera en la ruta crítica para la búsqueda. Disparar un trabajo de MapReduce realmente mataría la latencia. – HenryR

4

Han implementado buenos algoritmos distribuidos que se ejecutan en una gran cantidad de hardware.

+1

-1, no me dijo nada –

3

Tienen una copia local de Internet almacenada en caché en miles de PC en sistemas de archivos personalizados.

+0

Golpear un sistema de archivos basado en disco costaría mucho en términos de latencia (Amazon encontró esto con Dynamo y sacrificó algo de resistencia por ello); Sospecho que todo en la ruta crítica se mantiene en la memoria. – HenryR

0

Si está interesado en obtener más información acerca de cómo funciona el clúster de Google, le sugiero esta implementación de código abierto de su HDFS.

Se basa en Mapreduce por google.

+0

HDFS es un sistema de archivos distribuidos. El clon de mapreduce se llama Hadoop y puede ejecutarse en HDFS o en su sistema de archivos local. – SquareCog

3

Google contrata lo mejor de lo mejor. Algunas de las personas más inteligentes en TI trabajan en google. Tienen dinero prácticamente infinito para tirar en hardware e ingenieros.

Utilizan mecanismos de almacenamiento altamente optimizados para las tareas que están realizando.

Tienen granjas de servidores situadas geográficamente.

4

Una de las demoras más importantes es que los servidores web obtienen su consulta al servidor web, y la respuesta vuelve. Esta latencia está limitada por la velocidad de la luz, que incluso Google debe obedecer. Sin embargo, tienen centros de datos en todo el mundo. Como resultado, la distancia promedio a cualquiera de ellos es menor. Esto mantiene la latencia baja. Claro, la diferencia se mide en milisegundos, pero importa si la respuesta debe llegar dentro de 1000 milisegundos.

47

Latencia se ve afectada por los accesos al disco. Por lo tanto, es razonable creer que todos los datos utilizados para responder consultas se mantienen en la memoria. Esto implica miles de servidores, cada uno replicando uno de muchos fragmentos. Por lo tanto, es poco probable que la ruta crítica para la búsqueda llegue a cualquiera de sus tecnologías emblemáticas de sistemas distribuidos GFS, MapReduce o BigTable. Estos se usarán para procesar los resultados del rastreador, crudamente.

Lo útil de la búsqueda es que no hay necesidad de tener resultados muy consistentes o datos completamente actualizados, por lo que no se impide que Google responda a una consulta porque un resultado de búsqueda más actualizado tiene volverse disponible.

Una arquitectura posible es bastante simple: los servidores frontales procesan la consulta, normalizándola (posiblemente eliminando palabras de parada, etc.) y luego distribuyéndola a cualquier subconjunto de réplicas que posea esa parte del espacio de consulta (una arquitectura alternativa es dividir los datos en páginas web, por lo que se debe contactar a cada conjunto de réplicas para cada consulta). Muchas, muchas réplicas son probablemente consultadas, y las respuestas más rápidas ganan. Cada réplica tiene consultas de mapeo de índice (o términos de consulta individuales) para documentos que pueden usar para buscar resultados en la memoria muy rápidamente. Si los resultados diferentes provienen de diferentes fuentes, el servidor de aplicaciones para el usuario puede clasificarlos a medida que escupe el html.

Tenga en cuenta que esto es probablemente muy diferente de lo que Google realmente hace: habrán diseñado la vida útil de este sistema para que haya más cachés en áreas extrañas, índices extraños y algún tipo de esquema funky de equilibrio de carga entre otras posibles diferencias.

+1

Muchas buenas ideas sobre esta respuesta @HenryR. –

22

Un hecho que siempre he encontrado gracioso es que Google está dirigido por la bioinformática ('kay, me parece gracioso porque soy un bioinf ... cosita). Dejame explicar.

La bioinformática desde el principio tuvo el desafío de buscar textos pequeños en cadenas gigantescas muy rápido. Para nosotros, la "cuerda gigantesca" es, por supuesto, ADN. A menudo no es un solo ADN sino una base de datos de varios ADN de diferentes especies/individuos. Los textos pequeños son proteínas o su contraparte genética, un gen. La mayor parte del primer trabajo de biólogos computacionales se restringió para encontrar homologías entre los genes. Esto se hace para establecer la función de genes recién encontrados al observar similitudes con genes que ya se conocen.

Ahora, estas cadenas de ADN se hacen muy grandes y la búsqueda (con pérdidas) tiene que hacerse de manera extremadamente eficiente. La mayor parte de la teoría moderna de la búsqueda de cadenas se desarrolló así en el contexto de la biología computacional.

Sin embargo, hace bastante tiempo, se agotó la búsqueda de texto convencional. Se necesitaba un nuevo enfoque que permitiera buscar cadenas grandes en tiempo sublineal, es decir, sin mirar cada carácter individual. Se descubrió que esto se puede resolver preprocesando la cadena grande y construyendo una estructura de datos de índice especial sobre ella. Se han propuesto muchas estructuras de datos diferentes. Cada uno tiene sus fortalezas y debilidades, pero hay uno que es especialmente notable porque permite una búsqueda en tiempo constante.Ahora, en los órdenes de magnitud en los que opera Google, esto ya no es estrictamente cierto porque debe tenerse en cuenta el equilibrio de carga en los servidores, el preprocesamiento y algunas otras cosas sofisticadas.

Pero en esencia, el llamado q-gram index permite una búsqueda en tiempo constante. La única desventaja: la estructura de datos se vuelve ridículamente grande. Esencialmente, para permitir una búsqueda de cadenas con hasta q caracteres (de ahí el nombre), se requiere una tabla que tiene un campo para cada combinación posible de q letras (es decir, qS, donde S es del tamaño del alfabeto, digamos 36 (= 26 + 10)). Además, debe haber un campo para cada posición de letra en la cadena indexada (o en el caso de google, para cada sitio web).

Para mitigar el tamaño, Google probablemente use múltiples índices (de hecho, do, para ofrecer servicios como la corrección ortográfica). Los más altos no funcionarán en el nivel de personaje sino en el nivel de palabra. Esto reduce q pero hace que S sea infinitamente más grande, así que tendrán que usar hashing y tablas de colisión para hacer frente al infinito número de palabras diferentes.

En el siguiente nivel, estas palabras hash apuntarán a otras estructuras de datos de índice que, a su vez, tendrán caracteres hash que apuntan a sitios web.

En pocas palabras, estas q -las estructuras de datos de índice de gráficos son sin duda la parte más central del algoritmo de búsqueda de Google. Lamentablemente, no hay buenos documentos no técnicos que expliquen cómo funcionan los q -gram índices. La única publicación que sé que contiene una descripción de cómo funciona dicho índice es ... ay, mi bachelor thesis.

+4

Estuve en bioinformática durante 5 años, y los motores de búsqueda después de eso, y los q-grams no son tan importantes como crees que son. La estructura de datos fundamental para el tipo de búsqueda que hace Google (en un nivel muy, muy básico) es el índice invertido. – SquareCog

+1

Bioinformático? –

+0

Eso parece incorrecto.Google se está ejecutando o se estaba ejecutando en un índice invertido. q-gram será útil para frases, pero no en general –

0
  1. múltiples etapas de datos de almacenamiento, procesamiento y recuperación

  2. distribución eficiente (100 de los 1000 de máquinas) de las tareas anteriores

  3. buen marco para almacenar los datos en bruto y los resultados procesados ​​

  4. buen marco para recuperar los resultados

Cómo se hacen todos estos se resume en todos los enlaces que tiene en el resumen de la pregunta

3

Una tentativa en una lista generalizada (que no depende de que tenga acceso a las herramientas internas de Google):

  1. Parellelize solicitudes (por ejemplo,disolver una única solicitud para conjuntos más pequeños)
  2. asíncrono (hacer tanto asynchronious como sea posible, por ejemplo, no bloqueará la petición del usuario)
  3. memoria/cache (/ S de disco es lento, mantener tanto como sea posible en la memoria)
  4. Pre-cálculo (hacer tanto trabajo como sea posible antes de la mano, no espere a que un usuario de pedir datos/procesamiento)
  5. se preocupan por su front-end HTML (consulte Yslow y sus amigos)
4

¡Todo el mundo sabe que es porque they use pigeons, por supuesto!

Oh sí, eso y Mapreduce.

+0

Si ellos también consiguen que las ratas trabajen para ellos, dos de las criaturas más inútiles y molestas tendrían un trabajo ... – Xn0vv3r

+0

Me río mucho con este jaja – victrnava

+2

Así que esa es la razón por la cual los resultados siempre están tan llenos de mierda. – slacker

Cuestiones relacionadas