Come può Google essere così veloce?


89

Quali sono le tecnologie e le decisioni di programmazione che rendono Google in grado di servire una query così velocemente?

Ogni volta che cerco qualcosa (una delle numerose volte al giorno) mi stupisce sempre come vengono forniti i risultati in quasi o meno di 1 secondo. Che tipo di configurazione e algoritmi potrebbero avere in atto per ottenere questo risultato?

Nota a margine: è un po 'travolgente pensare che anche se dovessi mettere un'applicazione desktop e usarla sulla mia macchina probabilmente non sarebbe veloce la metà di Google. Continua ad imparare, dico.


Ecco alcune delle ottime risposte e dei suggerimenti forniti:

Risposte:


47

La latenza viene interrotta dagli accessi al disco. Quindi è ragionevole credere che tutti i dati utilizzati per rispondere alle domande siano conservati in memoria. Ciò implica migliaia di server, ognuno dei quali replica uno dei tanti frammenti. Pertanto è improbabile che il percorso critico per la ricerca raggiunga nessuna delle loro tecnologie di sistemi distribuiti di punta GFS, MapReduce o BigTable. Questi verranno utilizzati per elaborare i risultati del crawler, in modo grossolano.

La cosa utile della ricerca è che non è necessario disporre di risultati fortemente coerenti o di dati completamente aggiornati, quindi a Google non viene impedito di rispondere a una query perché è diventato disponibile un risultato di ricerca più aggiornato.

Quindi un'architettura possibile è abbastanza semplice: i server front-end elaborano la query, normalizzandola (possibilmente eliminando le parole di arresto ecc.) Quindi distribuendola a qualsiasi sottoinsieme di repliche possieda quella parte dello spazio della query (un'architettura alternativa è dividere il dati dalle pagine web, in modo che uno di ogni set di repliche debba essere contattato per ogni query). Molte, molte repliche vengono probabilmente interrogate e le risposte più rapide vincono. Ogni replica ha un indice di mappatura delle query (o dei singoli termini della query) sui documenti che possono essere utilizzati per cercare i risultati in memoria molto rapidamente. Se risultati diversi vengono restituiti da fonti diverse, il server front-end può classificarli mentre sputa l'html.

Nota che questo è probabilmente molto diverso da ciò che Google fa effettivamente: avranno progettato la vita di questo sistema, quindi potrebbero esserci più cache in aree strane, indici strani e una sorta di schema di bilanciamento del carico funky tra le altre possibili differenze .



22

Un fatto che ho trovato divertente è che Google è in realtà gestito da bioinformatica ("kay, lo trovo divertente perché sono un bioinf ... cosa). Lasciatemi spiegare.

La bioinformatica all'inizio ha avuto la sfida di cercare piccoli testi in stringhe gigantesche molto velocemente. Per noi, la "stringa gigantesca" è ovviamente il DNA. Spesso non un singolo DNA ma un database di diversi DNA di diverse specie / individui. I piccoli testi sono proteine ​​o la loro controparte genetica, un gene. La maggior parte del primo lavoro dei biologi computazionali si è limitato a trovare omologie tra i geni. Questo viene fatto per stabilire la funzione dei geni ritrovati di recente rilevando somiglianze con geni già noti.

Ora, queste stringhe di DNA diventano davvero molto grandi e la ricerca (con perdita!) Deve essere eseguita in modo estremamente efficiente. La maggior parte della moderna teoria della ricerca di stringhe è stata quindi sviluppata nel contesto della biologia computazionale.

Tuttavia, molto tempo fa, la ricerca di testo convenzionale era esaurita. Era necessario un nuovo approccio che permettesse di cercare grandi stringhe in tempo sublineare, cioè senza guardare ogni singolo carattere. Si è scoperto che questo può essere risolto pre-elaborando la stringa di grandi dimensioni e costruendo su di essa una speciale struttura di dati di indice. Sono state proposte molte strutture di dati di questo tipo. Ognuno ha i suoi punti di forza e di debolezza, ma ce n'è uno particolarmente notevole perché consente una ricerca in tempo costante. Ora, negli ordini di grandezza in cui opera Google, questo non è più strettamente vero perché è necessario tenere in considerazione il bilanciamento del carico tra i server, la preelaborazione e alcune altre cose sofisticate.

Ma in sostanza, il cosiddetto indice q-gram consente una ricerca in tempo costante. L'unico svantaggio: la struttura dei dati diventa ridicolmente grande. In sostanza, per consentire una ricerca di stringhe con un massimo di q caratteri (da cui il nome), richiede una tabella che abbia un campo per ogni possibile combinazione di q lettere (cioè, q S , dove S è la dimensione dell'alfabeto , diciamo 36 (= 26 + 10)). Inoltre, deve esserci un campo per ogni posizione della lettera nella stringa che è stata indicizzata (o, nel caso di google, per ogni sito web).

Per mitigare le dimensioni, Google probabilmente utilizzerà più indici (in effetti, lo fanno , per offrire servizi come la correzione dell'ortografia). Quelle più in alto non funzioneranno a livello di personaggio ma a livello di parola. Questo riduce q ma rende S infinitamente più grande, quindi dovranno usare hashing e tabelle di collisione per far fronte al numero infinito di parole diverse.

Al livello successivo, queste parole con hash punteranno ad altre strutture di dati di indice che, a loro volta, indicheranno caratteri hash che rimandano a siti web.

Per farla breve, queste strutture di dati dell'indice q -gram sono senza dubbio la parte più centrale dell'algoritmo di ricerca di Google. Sfortunatamente, non ci sono buoni documenti non tecnici che spieghino come funzionano gli indici q -gram. L'unica pubblicazione che conosco che contiene una descrizione di come funziona un tale indice è ... ahimè, la mia tesi di laurea .


4
Sono stato in bioinformatica per 5 anni, dopodiché i motori di ricerca - e i q-grammi non sono così importanti come pensi. La struttura di dati fondamentale per il tipo di ricerca che fa Google (a un livello molto, molto elementare) è l'indice invertito.
SquareCog

Sembra sbagliato. Google è in esecuzione o era in esecuzione su un indice invertito. q-gram sarà utile per le frasi ma non in generale
Stefan Savev

@Stefan: Lo stesso commento è stato già fatto da SquareCog - e non nego che gli indici invertiti giocano un ruolo importante (e probabilmente molto più grande degli indici n-gram). Ho scelto questa tecnologia perché gli n-grammi sono una mia struttura di dati per animali domestici, e penso che l'intuizione chiave - Google è veloce perché in realtà non deve "cercare", può fare una ricerca più o meno diretta - dipende da un tale indice (nb: questo è probabilmente fatto tramite hashing ma questo è ancora un indice di n-grammi). Il fatto che anche questo indice sia invertito è secondario al mio punto (anche se probabilmente non per Google ;-)).
Konrad Rudolph


4

Hanno implementato algoritmi validi e distribuiti in esecuzione su una vasta quantità di hardware.


4

Uno dei ritardi più importanti è che i server web stanno riportando la tua query al server web e la risposta indietro. Questa latenza è vincolata dalla velocità della luce, a cui anche Google deve obbedire. Tuttavia, hanno data center in tutto il mondo. Di conseguenza, la distanza media da ognuno di essi è inferiore. Ciò mantiene bassa la latenza. Certo, la differenza si misura in millisecondi, ma è importante se la risposta deve arrivare entro 1000 millisecondi.


4

Tutti sanno che è perché usano i piccioni , ovviamente!

Oh sì, quello e Mapreduce.


Se riescono a convincere i topi a lavorare anche per loro, due delle creature più inutili e fastidiose avrebbero un lavoro ...
Xn0vv3r

Rido molto con questo haha
victrnava

3

Hanno praticamente una copia locale di Internet memorizzata nella cache su migliaia di PC su file system personalizzati.


Raggiungere un filesystem basato su disco costerebbe molto in termini di latenza (Amazon lo ha trovato con Dynamo e ha sacrificato un po 'di resilienza per questo); Sospetto che tutto ciò che si trova sul percorso critico sia tenuto in memoria.
HenryR

3

Google assume il meglio del meglio. Alcune delle persone più intelligenti nell'IT lavorano in Google. Hanno soldi praticamente infiniti da spendere per hardware e ingegneri.

Usano meccanismi di archiviazione altamente ottimizzati per le attività che stanno eseguendo.

Hanno server farm dislocate geograficamente.


3

Un tentativo di creare un elenco generalizzato (che non dipende dal fatto che tu abbia accesso agli strumenti interni di Google):

  1. Parellelizzare le richieste (ad esempio suddividere una singola richiesta in insiemi più piccoli)
  2. Async (rendi il più asincrono possibile, ad es. Non bloccherà la richiesta dell'utente)
  3. Memoria / cache (l'I / O del disco è lento, mantieni il più possibile in memoria)
  4. Pre-calcolo (fai quanto più lavoro possibile in anticipo, non aspettare che un utente chieda dati / elaborazione)
  5. Prenditi cura del tuo HTML front-end (vedi Yslow e amici)



1

Hardware.

Molto, molto hardware. Usano enormi cluster di PC commerciali come server farm.


Giusto per chiarire "massiccio": centinaia di migliaia di server. Immagino che nessuno al di fuori di Google conosca il numero reale e deve cambiare continuamente.
Sergio Acosta

1

TraumaPony ha ragione. Tantissimi server e architettura intelligente per il bilanciamento del carico / caching e voilà puoi eseguire query in meno di 1 secondo. C'erano molti articoli in rete che descrivevano l'architettura dei servizi di Google. Sono sicuro che puoi trovarli tramite Google :)




0

E algoritmi in grado di sfruttare quella potenza hardware. Come mapreduce per esempio.


MapReduce non viene utilizzato per rispondere alle domande.
MSalters

MapReduce viene eseguito su un grande cluster di macchine ed è altamente scalabile: un tipico calcolo di MapReduce elabora molti terabyte di dati su migliaia di macchine. Sono stati implementati centinaia di programmi MapReduce e più di mille lavori MapReduce vengono eseguiti ogni giorno sui cluster di Google
Vinko Vrsalovic,

MapReduce è quasi certamente utilizzato per indicizzare in modo asincrono i dati del crawler. Sarei molto sorpreso se fosse sul percorso critico per la ricerca. Lanciare un lavoro MapReduce ucciderebbe davvero la latenza.
HenryR

Henry: potrebbero usarlo per il routing in direzioni / mappe. Ma sì, al caso generale. Non vuoi che avvenga alcun calcolo hardcore per rispondere a una normale query dell'utente.
SquareCog

0

Se sei interessato a maggiori dettagli su come funziona il cluster di Google, ti suggerirò questa implementazione open source del loro HDFS .

È basato su Mapreduce di Google.


HDFS è un file system distribuito. Il clone di mapreduce si chiama Hadoop e può essere eseguito su HDFS o sul file system locale.
SquareCog

0
  1. Archiviazione, elaborazione e recupero dei dati in più fasi

  2. Distribuzione EFFICIENTE (centinaia di migliaia di macchine) delle attività di cui sopra

  3. Buon framework per memorizzare i dati grezzi e i risultati elaborati

  4. Buon quadro per recuperare i risultati

Il modo esatto in cui vengono eseguite tutte queste operazioni è riassunto da tutti i collegamenti presenti nel riepilogo della domanda

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.