it-swarm.asia

Google Arama’yı nasıl uygularsınız?

"Google Arama'yı nasıl uygularsınız?" Böyle bir soruyu nasıl cevaplarsın? Google'daki bazı parçaların nasıl uygulandığını açıklayan kaynaklar olabilir (BigTable, MapReduce, PageRank, ...), ancak bu bir röportaja tam olarak uymuyor.

Hangi genel mimariyi kullanırdınız ve bunu 15-30 dakikalık bir sürede nasıl açıklarsınız?

~ 100 bin belgeyi işleyen bir arama motorunun nasıl oluşturulacağını açıklamakla başlarım, daha sonra bunu yaklaşık 50 milyon dokümana, ardından belki de başka bir mimari/teknik sıçrayarak genişletebilirsiniz.

Bu 20.000 fitlik manzara. İstediğim detaylar - bir röportajda buna nasıl cevap vereceğiniz. Hangi veri yapılarını kullanırsınız. Mimarinizin hangi hizmetlerden/makinelerden oluştuğu. Tipik bir sorgu gecikmesi ne olurdu? Yük devretme/bölünmüş beyin sorunları ne olacak? Vb...

47
ripper234

Quora'daki yazı , Sergey Brin ve Larry Page tarafından yayınlanan orijinal makale yayınlandı verdi. Bu tür bir soru için mükemmel bir referans gibi görünüyor.

Google Architecture

19
ripper234

Meta noktayı düşünün: görüşmeci ne arıyor?

Bunun gibi mamut bir soru, PageRank tipi bir algoritmanın uygulanmasının veya dağıtılmış indekslemenin nasıl yapıldığına dair zamanınızı boşa harcamanızı istemiyor. Bunun yerine, ne alacağına dair tam resme odaklanın. Tüm büyük parçaları (BigTable, PageRank, Harita/Küçült) zaten biliyormuşsunuz gibi geliyor. Öyleyse soru şu, onları nasıl birbirine bağlıyorsunuz?

İşte benim bıçakım.

Aşama 1: Altyapıyı Dizine Ekleme (açıklamak için 5 dakika harcayın)

Google'ı (veya herhangi bir arama motorunu) uygulamanın ilk aşaması bir dizin oluşturucu oluşturmaktır. Bu, veri topluluğunu tarayan ve sonuçları okuma yapmak için daha verimli bir veri yapısında üreten bir yazılım parçasıdır.

Bunu uygulamak için iki bölüm düşünün: bir tarayıcı ve dizin oluşturucu.

Web tarayıcısının işi, örümcek ağı sayfa bağlantılarını örterek bir kümeye dökmektir. Buradaki en önemli adım, sonsuz döngüye veya sonsuz oluşturulan içeriğe yakalanmaktan kaçınmaktır. Bu bağlantıların her birini büyük bir metin dosyasına yerleştirin (şimdilik).

İkinci olarak, dizin oluşturucu bir Harita/Küçült işinin bir parçası olarak çalışır. (Bir işlevi girişteki her öğeyle eşleyin ve ardından sonuçları tek bir 'şey' olarak azaltın.) Dizinleyici tek bir web bağlantısı alacak, web sitesini alacak ve bir dizin dosyasına dönüştürecektir. (Daha sonra ele alınacaktır.) İndirgeme adımı, tüm bu dizin dosyalarını tek bir birimde toplayacaktır. (Milyonlarca gevşek dosya yerine.) Dizin oluşturma adımları paralel olarak yapılabileceğinden, bu Harita/İş azaltma işini rastgele büyük bir veri merkezinde gruplandırabilirsiniz.

Aşama 2: Endeksleme Algoritmalarının Özellikleri (açıklamak için 10 dakika harcayın)

Web sayfalarını nasıl işleyeceğinizi belirledikten sonra, bir sonraki bölüm anlamlı sonuçları nasıl hesaplayabileceğinizi açıklıyor. Buradaki kısa cevap 'çok daha fazla Harita/İndirgeme', ancak yapabileceğiniz şeyleri göz önünde bulundurun:

  • Her web sitesi için, gelen bağlantı sayısını sayın. (Sayfalara daha fazla bağlı olan 'daha iyi' olmalıdır.)
  • Her web sitesi için bağlantının nasıl sunulduğuna bakın. (<H1> veya <b> 'deki bağlantılar, <h3> içine gömülmüş olanlardan daha önemli olmalıdır.)
  • Her web sitesi için giden bağlantıların sayısına bakın. (Kimse spam gönderenleri sevmez.)
  • Her web sitesi için kullanılan kelime türlerine bakın. Örneğin, 'karma' ve 'tablo' muhtemelen web sitesinin Bilgisayar Bilimi ile ilgili olduğu anlamına gelir. 'hash' ve 'brownies' ise sitenin çok farklı bir şey olduğunu ima ederdi.

Ne yazık ki, verileri analiz etmek ve işlemek için süper yararlı olma yollarını bilmiyorum. Ancak genel fikir verilerinizi analiz etmek için ölçeklenebilir yollardır .

. Aşama: Sunum Sonuçları (açıklamak için 10 dakika harcayın)

Son aşama aslında sonuçlara hizmet etmektir. Umarım web sayfası verilerinin nasıl analiz edileceğine dair bazı ilginç bilgiler paylaşmış olursunuz, ancak soru aslında bunu nasıl sorguladığınızdır? Her gün Google arama sorgularının% 10'u daha önce hiç görülmemiştir. Bu, önceki sonuçları önbelleğe alamayacağınız anlamına gelir.

Web dizinlerinizden tek bir 'arama' yapamazsınız, hangisini denerdiniz? Farklı dizinlere nasıl bakarsınız? (Belki sonuçları birleştirmek - belki de 'stackoverflow' anahtar kelimesi birden fazla dizinde büyük bir artış gösterdi.)

Ayrıca, nasıl olur da bakardın? çok büyük miktarda bilgiyi hızlı bir şekilde okumak için ne tür yaklaşımlar kullanabilirsiniz? (En sevdiğiniz NoSQL veritabanınızı burada adlandırmaktan ve/veya Google'ın BigTable'ının neyle ilgili olduğuna bakmaktan çekinmeyin.) Son derece hassas olan harika bir dizine sahip olsanız bile, hızlı bir şekilde veri bulmanın bir yoluna ihtiyacınız vardır. (Örneğin, 200 GB'lık bir dosyanın içindeki 'stackoverflow.com' için sıralama numarasını bulun.)

Rastgele Sorunlar (kalan süre)

Arama motorunuzun 'kemiklerini' kapladıktan sonra, özellikle bilgili olduğunuz herhangi bir konuda sıçan deliği çekinmeyin.

  • Web sitesi ön ucunun performansı
  • Harita/İşleri azaltma için veri merkezini yönetme
  • A/B testi arama motoru geliştirmeleri
  • Önceki arama hacmini/eğilimlerini dizine ekleme. (Ör., Ön uç sunucu yüklerinin 9-5 yükselmesini ve sabahın erken saatlerinde ölmesini beklemek.)

Burada tartışmak için 15 dakikadan fazla malzeme var, ancak umarım başlamanız yeterli.

46
Chris Smith