Google จะเร็วขนาดนี้ได้อย่างไร


89

อะไรคือเทคโนโลยีและการตัดสินใจในการเขียนโปรแกรมที่ทำให้ Google สามารถตอบคำถามได้อย่างรวดเร็ว

ทุกครั้งที่ฉันค้นหาบางสิ่ง (หนึ่งในหลาย ๆ ครั้งต่อวัน) มันทำให้ฉันประหลาดใจเสมอว่าพวกเขาให้ผลลัพธ์ในเวลาใกล้หรือน้อยกว่า 1 วินาที การกำหนดค่าและอัลกอริทึมประเภทใดที่สามารถใช้งานได้

หมายเหตุด้านข้าง:เป็นความคิดที่ท่วมท้นแม้ว่าฉันจะใส่แอปพลิเคชันบนเดสก์ท็อปและใช้งานบนเครื่องของฉันอาจจะไม่เร็วกว่า Google ถึงครึ่งหนึ่ง เรียนรู้ต่อไปฉันพูด


นี่คือคำตอบและคำแนะนำที่ยอดเยี่ยมบางส่วนที่มีให้:

คำตอบ:


47

เวลาแฝงถูกฆ่าโดยการเข้าถึงดิสก์ ดังนั้นจึงมีเหตุผลที่จะเชื่อว่าข้อมูลทั้งหมดที่ใช้ในการตอบคำถามจะถูกเก็บไว้ในหน่วยความจำ นี่หมายถึงเซิร์ฟเวอร์หลายพันเครื่องซึ่งแต่ละเซิร์ฟเวอร์จะจำลองเศษหนึ่งในหลาย ๆ ส่วน ดังนั้นเส้นทางที่สำคัญสำหรับการค้นหาจึงไม่น่าจะกระทบกับเทคโนโลยีระบบกระจายเรือธงของพวกเขา GFS, MapReduce หรือ BigTable สิ่งเหล่านี้จะถูกใช้เพื่อประมวลผลผลลัพธ์ของโปรแกรมรวบรวมข้อมูลอย่างหยาบ

สิ่งที่มีประโยชน์เกี่ยวกับการค้นหาก็คือไม่จำเป็นต้องมีผลลัพธ์ที่สอดคล้องกันอย่างมากหรือข้อมูลที่เป็นปัจจุบันทั้งหมดดังนั้น Google จึงไม่ได้รับการป้องกันจากการตอบสนองต่อข้อความค้นหาเนื่องจากมีผลการค้นหาที่เป็นปัจจุบันมากขึ้น

ดังนั้นสถาปัตยกรรมที่เป็นไปได้จึงค่อนข้างง่าย: เซิร์ฟเวอร์ส่วนหน้าประมวลผลการสืบค้นทำให้เป็นมาตรฐาน (อาจจะโดยการขีดฆ่าคำหยุด ฯลฯ ) จากนั้นกระจายไปยังชุดย่อยใด ๆ ของแบบจำลองที่เป็นเจ้าของส่วนหนึ่งของพื้นที่การสืบค้น (สถาปัตยกรรมทางเลือกคือการแบ่ง ข้อมูลโดยหน้าเว็บเพื่อให้ทุกชุดข้อมูลจำลองต้องได้รับการติดต่อสำหรับทุกการสืบค้น) อาจมีการสอบถามข้อมูลจำลองจำนวนมากและคำตอบที่เร็วที่สุดจะชนะ แบบจำลองแต่ละรายการมีแบบสอบถามการแมปดัชนี (หรือคำค้นหาแต่ละคำ) ไปยังเอกสารที่สามารถใช้เพื่อค้นหาผลลัพธ์ในหน่วยความจำได้อย่างรวดเร็ว หากผลลัพธ์ที่แตกต่างกันกลับมาจากแหล่งที่มาที่แตกต่างกันเซิร์ฟเวอร์ส่วนหน้าสามารถจัดอันดับได้เมื่อมันพ่น html ออกมา

โปรดทราบว่านี่อาจเป็นวิธีที่แตกต่างจากสิ่งที่ Google ทำจริง ๆ - พวกเขาจะออกแบบชีวิตออกจากระบบนี้ดังนั้นอาจมีแคชมากขึ้นในพื้นที่แปลก ๆ ดัชนีแปลก ๆ และรูปแบบการจัดสรรภาระงานที่ขี้ขลาดท่ามกลางความแตกต่างที่เป็นไปได้อื่น ๆ .



22

ความจริงอย่างหนึ่งที่ฉันรู้สึกตลกคือ Google ดำเนินการโดยชีวสารสนเทศศาสตร์ ('เคย์ฉันคิดว่ามันตลกเพราะฉันเป็นไบโออิน ... ให้ฉันอธิบาย

ชีวสารสนเทศศาสตร์ในช่วงต้นมีความท้าทายในการค้นหาข้อความขนาดเล็กในสายขนาดมหึมาอย่างรวดเร็ว สำหรับเราแล้ว“ สายอักขระขนาดมหึมา” คือดีเอ็นเอ มักไม่ใช่ DNA เดียว แต่เป็นฐานข้อมูลของ DNA หลายชนิดจากสายพันธุ์ / บุคคลที่แตกต่างกัน ข้อความเล็ก ๆ คือโปรตีนหรือพันธุกรรมของยีน งานชิ้นแรกของนักชีววิทยาเชิงคำนวณส่วนใหญ่ถูก จำกัด ให้ค้นหา homologies ระหว่างยีน สิ่งนี้ทำเพื่อสร้างการทำงานของยีนที่พบใหม่โดยสังเกตความคล้ายคลึงกับยีนที่รู้จักกันดีอยู่แล้ว

ตอนนี้สาย DNA เหล่านี้มีขนาดใหญ่มากและการค้นหา (lossy!) จะต้องทำได้อย่างมีประสิทธิภาพมาก ดังนั้นทฤษฎีการค้นหาสตริงสมัยใหม่ส่วนใหญ่จึงได้รับการพัฒนาในบริบทของชีววิทยาเชิงคำนวณ

อย่างไรก็ตามเมื่อไม่นานมานี้การค้นหาข้อความแบบเดิมก็หมดลง จำเป็นต้องมีแนวทางใหม่ที่อนุญาตให้ค้นหาสตริงขนาดใหญ่ในช่วงเวลาย่อยนั่นคือโดยไม่ต้องดูอักขระเดี่ยวแต่ละตัว พบว่าสิ่งนี้สามารถแก้ไขได้โดยการประมวลผลสตริงขนาดใหญ่ล่วงหน้าและสร้างโครงสร้างข้อมูลดัชนีพิเศษทับ มีการเสนอโครงสร้างข้อมูลที่แตกต่างกันจำนวนมาก แต่ละคนมีจุดแข็งและจุดอ่อน แต่มีสิ่งที่น่าทึ่งเป็นพิเศษเพราะช่วยให้สามารถค้นหาได้ตลอดเวลา ตอนนี้ตามลำดับความสำคัญที่ Google ดำเนินการสิ่งนี้ไม่เป็นความจริงอย่างเคร่งครัดอีกต่อไปเนื่องจากการจัดสรรภาระงานข้ามเซิร์ฟเวอร์การประมวลผลล่วงหน้าและสิ่งที่ซับซ้อนอื่น ๆ จะต้องถูกนำมาพิจารณา

แต่ในสาระสำคัญดัชนี q-gram ที่เรียกว่าช่วยให้สามารถค้นหาได้ในเวลาคงที่ ข้อเสียเพียงอย่างเดียว: โครงสร้างข้อมูลมีขนาดใหญ่มาก โดยพื้นฐานแล้วเพื่อให้สามารถค้นหาสตริงที่มีอักขระได้ไม่เกินq (ดังนั้นชื่อ) จำเป็นต้องมีตารางที่มีหนึ่งฟิลด์สำหรับการรวมกันของตัวอักษรq ที่เป็นไปได้แต่ละตัว (นั่นคือq Sโดยที่Sคือขนาดของตัวอักษร , พูด 36 (= 26 + 10)) นอกจากนี้ต้องมีหนึ่งฟิลด์สำหรับตำแหน่งตัวอักษรแต่ละตำแหน่งในสตริงที่ถูกสร้างดัชนี (หรือในกรณีของ Google สำหรับแต่ละเว็บไซต์)

เพื่อลดขนาดที่แท้จริง Google อาจใช้ดัชนีหลายตัว (อันที่จริงพวกเขาทำเพื่อให้บริการเช่นการแก้ไขการสะกดคำ) อันดับสูงสุดจะไม่สามารถใช้ได้กับระดับอักขระ แต่ใช้ในระดับคำแทน สิ่งนี้ช่วยลดqแต่ทำให้Sใหญ่ขึ้นอย่างไม่ จำกัด ดังนั้นพวกเขาจึงต้องใช้ตารางการแฮชและการชนกันเพื่อรับมือกับจำนวนคำที่แตกต่างกันไม่สิ้นสุด

ในระดับถัดไปคำที่แฮชเหล่านี้จะชี้ไปที่โครงสร้างข้อมูลดัชนีอื่น ๆ ซึ่งในทางกลับกันจะมีอักขระแฮชที่ชี้ไปยังเว็บไซต์

เรื่องสั้นสั้นโครงสร้างข้อมูลดัชนีq -gram เหล่านี้ถือเป็นส่วนสำคัญที่สุดของอัลกอริทึมการค้นหาของ Google น่าเสียดายที่ไม่มีเอกสารทางเทคนิคที่ดีที่อธิบายว่าดัชนีq -gram ทำงานอย่างไร เพียงสิ่งพิมพ์ที่ฉันรู้ว่ามีคำอธิบายของวิธีการทำงานเช่นดัชนีคือ ... อนิจจาฉันวิทยานิพนธ์ปริญญาตรี


4
ฉันอยู่ในชีวสารสนเทศศาสตร์เป็นเวลา 5 ปีและเสิร์ชเอนจิ้นหลังจากนั้น q-gram ก็ไม่สำคัญเท่าที่คุณคิด โครงสร้างข้อมูลพื้นฐานสำหรับประเภทการค้นหาที่ Google ทำ (ในระดับพื้นฐานมาก) คือดัชนีกลับหัว
SquareCog

ดูเหมือนจะผิด Google กำลังทำงานหรือกำลังทำงานโดยใช้ดัชนีกลับหัว q-gram จะมีประโยชน์สำหรับวลี แต่ไม่ใช่โดยทั่วไป
Stefan Savev

@Stefan: SquareCog มีความคิดเห็นเดียวกันแล้ว - และฉันไม่ปฏิเสธว่าดัชนีกลับหัวมีบทบาทใหญ่ (และอาจใหญ่กว่าดัชนี n-gram มาก) ฉันเลือกใช้เทคโนโลยีนี้เนื่องจาก n-gram เป็นโครงสร้างข้อมูลสัตว์เลี้ยงของฉันและฉันคิดว่าข้อมูลเชิงลึกที่สำคัญ - Google นั้นรวดเร็วเพราะไม่จำเป็นต้อง "ค้นหา" แต่สามารถทำการค้นหาโดยตรงได้มากขึ้นหรือน้อยลง - ขึ้นอยู่กับดัชนีดังกล่าว (nb: อาจทำได้ผ่านการแฮช แต่ยังคงเป็นดัชนี n-gram) การที่ดัชนีนี้เกิดการกลับด้านนั้นบังเอิญกับประเด็นของฉัน (แม้ว่าอาจไม่ใช่สำหรับ Google ก็ตาม ;-))
Konrad Rudolph

5

นี่คือคำตอบและคำแนะนำที่ยอดเยี่ยมบางส่วนที่มีให้:


4

พวกเขาได้ใช้อัลกอริทึมที่ดีแจกจ่ายและทำงานบนฮาร์ดแวร์จำนวนมาก


4

ความล่าช้าที่สำคัญที่สุดอย่างหนึ่งคือเว็บเซิร์ฟเวอร์กำลังส่งข้อความค้นหาของคุณไปยังเว็บเซิร์ฟเวอร์และการตอบกลับ เวลาแฝงนี้ถูก จำกัด ด้วยความเร็วแสงซึ่งแม้แต่ Google ก็ยังต้องปฏิบัติตาม อย่างไรก็ตามพวกเขามีศูนย์ข้อมูลอยู่ทั่วโลก เป็นผลให้ระยะทางเฉลี่ยไปยังจุดใดจุดหนึ่งต่ำลง ซึ่งจะช่วยลดเวลาในการตอบสนอง แน่นอนว่าความแตกต่างนั้นวัดได้เป็นมิลลิวินาที แต่จะสำคัญถ้าการตอบสนองต้องมาถึงภายใน 1,000 มิลลิวินาที


4

ใคร ๆ ก็รู้ว่าเป็นเพราะพวกมันใช้นกพิราบแน่นอน!

โอ้ใช่นั่นและ Mapreduce


ถ้าพวกมันให้หนูทำงานแทนพวกมันสิ่งมีชีวิตที่ไร้ประโยชน์และน่ารำคาญที่สุดสองตัวก็จะมีงานทำ ...
Xn0vv3r

ฉันขำมากกับคนนี้ฮ่า ๆ
victrnava

3

พวกเขามีสำเนาอินเทอร์เน็ตในเครื่องที่แคชไว้บนพีซีหลายพันเครื่องบนระบบไฟล์ที่กำหนดเอง


การกดปุ่มระบบไฟล์ที่ใช้ดิสก์จะมีค่าใช้จ่ายมากในแง่ของเวลาแฝง (Amazon พบสิ่งนี้ด้วย Dynamo และยอมเสียสละความยืดหยุ่นไปบ้าง) ฉันสงสัยว่าทุกอย่างบนเส้นทางวิกฤตจะถูกเก็บไว้ในความทรงจำ
HenryR

3

Google ว่าจ้างสิ่งที่ดีที่สุด คนที่ฉลาดที่สุดในด้านไอทีทำงานที่ Google พวกเขามีเงินเหลือเฟือที่จะทุ่มให้กับฮาร์ดแวร์และวิศวกร

พวกเขาใช้กลไกการจัดเก็บที่เหมาะสมที่สุดสำหรับงานที่กำลังดำเนินการ

พวกเขามีฟาร์มเซิร์ฟเวอร์ที่ตั้งอยู่ทางภูมิศาสตร์


3

ความพยายามในรายการทั่วไป (ซึ่งไม่ได้ขึ้นอยู่กับว่าคุณมีสิทธิ์เข้าถึงเครื่องมือภายในของ Google):

  1. คำขอParellelize (เช่นแยกคำขอเดียวเป็นชุดเล็ก ๆ )
  2. Async (ทำให้อะซิงโครนัสมากที่สุดเท่าที่จะทำได้เช่นจะไม่บล็อกคำขอของผู้ใช้)
  3. หน่วยความจำ / แคช (Disk I / O ช้าเก็บไว้ในหน่วยความจำให้มากที่สุด)
  4. Pre-compute (ทำงานให้มากที่สุดเท่าที่จะทำได้ก่อนส่งอย่ารอให้ผู้ใช้ถามข้อมูล / ประมวลผล)
  5. ดูแลHTML ส่วนหน้าของคุณ(ดู Yslow และเพื่อน ๆ )

2

คุณสามารถค้นหาคำแนะนำบางส่วนเกี่ยวกับเอกสารการวิจัยที่เขียนโดยคนของ Google ได้ในหน้าแรกของการวิจัยของ Google คุณควรเริ่มต้นด้วยคำอธิบายของระบบไฟล์ googleและอัลกอริทึมแผนที่ / ลดเพื่อพยายามทำความเข้าใจว่าเกิดอะไรขึ้นหลังหน้า Google



1

ฮาร์ดแวร์.

ฮาร์ดแวร์มากมาย พวกเขาใช้พีซีสินค้าโภคภัณฑ์เป็นกลุ่มใหญ่เป็นเซิร์ฟเวอร์ฟาร์ม


เพียงเพื่อชี้แจง 'ใหญ่โต': เซิร์ฟเวอร์หลายแสนเครื่อง ฉันเดาว่าไม่มีใครนอก Google รู้จำนวนจริงและต้องมีการเปลี่ยนแปลงตลอดเวลา
Sergio Acosta

1

TraumaPony อยู่พอดี เซิร์ฟเวอร์และสถาปัตยกรรมอัจฉริยะจำนวนมากสำหรับการทำโหลดบาลานซ์ / แคชและ voila คุณสามารถเรียกใช้การสืบค้นได้ภายใน 1 วินาที มีบทความมากมายในเน็ตที่อธิบายถึงสถาปัตยกรรมบริการของ Google ฉันแน่ใจว่าคุณสามารถหาได้จาก Google :)


1

HenryR น่าจะถูกต้อง

แผนที่ลดไม่ได้มีบทบาทสำหรับการค้นหา แต่ใช้สำหรับการจัดทำดัชนีเท่านั้น ตรวจสอบวิดีโอสัมภาษณ์นี้กับแผนที่ลดประดิษฐ์



0

และอัลกอริทึมที่สามารถควบคุมพลังฮาร์ดแวร์นั้นได้ เช่นmapreduceเป็นต้น


MapReduce ไม่ได้ใช้เพื่อตอบสนองต่อการสืบค้น
MSalters

MapReduce ทำงานบนเครื่องคลัสเตอร์ขนาดใหญ่และปรับขนาดได้สูง: การคำนวณ MapReduce ทั่วไปจะประมวลผลข้อมูลหลายเทราไบต์บนเครื่องหลายพันเครื่อง มีการใช้โปรแกรม MapReduce หลายร้อยรายการและงาน MapReduce มากกว่าหนึ่งพันรายการถูกดำเนินการในคลัสเตอร์ของ Google ทุกวัน
Vinko Vrsalovic

MapReduce ใช้ในการจัดทำดัชนีข้อมูลโปรแกรมรวบรวมข้อมูลแบบอะซิงโครนัส ฉันจะแปลกใจมากถ้ามันอยู่ในเส้นทางที่สำคัญสำหรับการค้นหา การปิดงาน MapReduce จะฆ่าเวลาแฝงจริงๆ
HenryR

Henry - พวกเขาอาจใช้เพื่อกำหนดเส้นทางในเส้นทาง / แผนที่ แต่ใช่สำหรับกรณีทั่วไป คุณไม่ต้องการให้เกิดการคำนวณแบบไม่ยอมใครง่ายๆเพื่อตอบสนองต่อข้อความค้นหาของผู้ใช้ทั่วไป
SquareCog

0

หากคุณสนใจรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงานของคลัสเตอร์ของ Google ฉันจะแนะนำการใช้งานHDFSแบบโอเพนซอร์สนี้

อ้างอิงจากMapreduceโดย Google


HDFS เป็นระบบไฟล์แบบกระจาย โคลน mapreduce เรียกว่า Hadoop และสามารถรันบน HDFS หรือระบบไฟล์ในเครื่องของคุณ
SquareCog

0
  1. การจัดเก็บข้อมูลการประมวลผลและการดึงข้อมูลแบบหลายขั้นตอน

  2. การกระจายประสิทธิภาพ (100 จาก 1,000 เครื่อง) ของงานข้างต้น

  3. กรอบที่ดีในการจัดเก็บข้อมูลดิบและผลลัพธ์ที่ประมวลผล

  4. กรอบที่ดีในการดึงผลลัพธ์

วิธีการสรุปสิ่งเหล่านี้โดยลิงก์ทั้งหมดที่คุณมีในสรุปคำถาม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.