เครือข่ายเร็วกว่าดิสก์หรือไม่?


126

นี่เป็นคำถามการออกแบบซอฟต์แวร์

ฉันเคยทำงานกับกฎต่อไปนี้เพื่อความเร็ว

cache memory > memory > disk > network

ในแต่ละขั้นตอนจะมี 5-10 เท่าของขั้นตอนก่อนหน้า (เช่นหน่วยความจำแคชเร็วกว่าหน่วยความจำหลัก 10 เท่า)

ตอนนี้ดูเหมือนว่ากิกะบิตอีเธอร์เน็ตมีเวลาแฝงน้อยกว่าดิสก์ในเครื่อง ดังนั้นการดำเนินการอ่านฐานข้อมูลในหน่วยความจำระยะไกลขนาดใหญ่อาจเร็วกว่าการอ่านดิสก์ในเครื่อง มันให้ความรู้สึกเหมือนบาปกับตัวจับเวลาเก่าอย่างฉัน (ฉันเพิ่งใช้เวลาสร้างแคชบนดิสก์เพื่อหลีกเลี่ยงการเดินทางไปกลับเครือข่าย - ดังนั้นคำถามของฉัน)

ใครบ้างมีประสบการณ์ / หมายเลข / คำแนะนำในพื้นที่นี้

และใช่ฉันรู้ว่าวิธีที่แท้จริงที่จะค้นพบคือการสร้างและวัด แต่ฉันก็สงสัยเกี่ยวกับกฎทั่วไป

แก้ไข :

นี่คือข้อมูลที่น่าสนใจจากคำตอบยอดนิยม:

  • ไปกลับภายในดาต้าเซ็นเตอร์เดียวกัน 500,000 ns

  • ดิสก์ค้นหา 10,000,000 ns

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

Jeff attwood โพสต์บล็อกนี้ดี v ในหัวข้อhttp://blog.codinghorror.com/the-infinite-space-between-words/


11
บางครั้งใช่บางครั้งไม่ เครือข่ายอะไร ดิสก์อะไร
John Gardeniers

1
ข้อมูลที่น่าสนใจอื่น ๆ จากคำตอบยอดนิยม: ลำดับ 1 MB อ่านจากเครือข่ายกับดิสก์ ฉันสงสัยว่า "เวลาไปกลับ" จะไม่ถ่ายโอนข้อมูลที่สำคัญ
พอล

Paul: ขึ้นอยู่กับ MTU ของคุณฉันแน่ใจ (1MB MTU ดีมาก!)
Matt Simmons

ฉันชอบที่จะเห็นคำตอบบางส่วนที่พิจารณาใหม่ในแง่ของเครือข่ายเกียร์ 10Gbps ที่มีอยู่อย่างกว้างขวาง
ลูกไก่

เครือข่ายกิกะบิตเทียบกับการโจมตี 5?
SoilSciGuy

คำตอบ:


137

นี่คือตัวเลขบางส่วนที่คุณอาจมองหาตามที่อ้างโดย Jeff Dean, Google Fellow:

ตัวเลขทุกคนควรรู้

L1 cache reference                             0.5 ns
Branch mispredict                              5 ns
L2 cache reference                             7 ns
Mutex lock/unlock                            100 ns (25)
Main memory reference                        100 ns
Compress 1K bytes with Zippy              10,000 ns (3,000)
Send 2K bytes over 1 Gbps network         20,000 ns
Read 1 MB sequentially from memory       250,000 ns
Round trip within same datacenter        500,000 ns
Disk seek                             10,000,000 ns
Read 1 MB sequentially from network   10,000,000 ns
Read 1 MB sequentially from disk      30,000,000 ns (20,000,000)
Send packet CA->Netherlands->CA      150,000,000 ns

มันมาจากการนำเสนอของเขาชื่อการออกแบบบทเรียนและคำแนะนำจากการสร้างระบบการกระจายขนาดใหญ่และคุณสามารถรับได้ที่นี่:

พูดคุยได้รับในขนาดใหญ่ระบบและมิดเดิ้ล (Ladis) กระจาย 2009

ข้อมูลอื่น ๆ


มีคำกล่าวว่า gcc -O4 ส่งอีเมลรหัสของคุณถึง Jeff Dean เพื่อเขียนใหม่



+1 น่าสนใจมาก!
9

1
การนำเสนอบางอย่างมีค่าแตกต่างกันที่ระบุไว้ในวงเล็บ ฉันคิดว่าคนที่อยู่ในวงเล็บปีกกาไม่ถูกต้องและเขาอัพเดทค่าต่างๆ
David d C e Freitas

1
นี่คือยุค pre-SSD ทั้งหมดหรือไม่ ดูที่นี่สำหรับตัวเลขที่ทันสมัย
แมตต์

จริง ๆ แล้วฉันใช้ตัวเลขเหล่านี้เพื่อสร้างงานนำเสนอแสดงให้เห็นว่าทำไมไดรฟ์ SSD จ่ายให้กับตัวเองเพื่อโน้มน้าวผู้จัดการสำนักงานของเราว่าใช่เราต้องการเครื่องที่เร็วกว่าในการทำงาน รวมตัวเลขสำหรับข้อมูลทางเทคนิค แต่มุ่งเน้นที่การจัดการที่ไม่ใช่เทคโนโลยีให้มากที่สุด
brichins

19

มีตัวแปรมากมายเมื่อพูดถึงเน็ตเวิร์กกับดิสก์ แต่โดยทั่วไปแล้วดิสก์จะเร็วกว่า

รถบัส SATA 3.0 และ SAS คือ 6 Gbps เทียบกับเครือข่าย 1Gbps ลบค่าใช้จ่ายโปรโตคอล ด้วย RAID-10 15k SAS เครือข่ายจะดูช้าลง นอกจากนี้คุณมีดิสก์แคชและความเป็นไปได้ของโซลิดสเตตฮาร์ดไดรฟ์ซึ่งขึ้นอยู่กับสถานการณ์นั้นอาจเพิ่มความเร็ว การเข้าถึงแบบสุ่มเทียบกับการเข้าถึงข้อมูลแบบต่อเนื่องจะเป็นปัจจัยหนึ่งรวมถึงขนาดบล็อกที่ข้อมูลถูกถ่ายโอน ทุกอย่างขึ้นอยู่กับแอปพลิเคชันที่ใช้ในการเข้าถึงดิสก์

ตอนนี้ฉันยังไม่ได้สัมผัสกับความจริงที่ว่าสิ่งที่คุณกำลังขนส่งผ่านเครือข่ายกำลังจะไปหรือมาจากดิสก์ต่อไป ... ดังนั้น ....... อีกครั้งดิสก์เร็วขึ้น


1
คะแนนสำหรับการกล่าวถึง RAID ที่ให้คุณอ่านแบบขนานสิ่งที่คุณไม่น่าจะได้รับในเครือข่ายทุกเวลาเร็ว ๆ นี้ แน่นอนถ้าเรากำลังพูดถึงฮาร์ดไดรฟ์แล็ปท็อปในท้องถิ่นคำสั่งผสมของ fast SAN และเครือข่ายที่รวดเร็วอาจจะเร็วกว่า โดยเฉพาะอย่างยิ่งกับ SSD ใน SAN นั้น
Michael Dillon

10
เครือข่ายนั้นขนานกันโดยเนื้อแท้ - คุณกำลังพูดถึงอะไร? การอ่านจากหลาย ๆ ระบบบนเครือข่ายเป็นเรื่องที่ไม่น่าเชื่ออย่างมาก นี่คือจุดทั้งหมดที่อยู่เบื้องหลังระบบเช่น Hadoop และ MPI ไม่ต้องพูดถึง BitTorrent ที่ชัดเจน
jgoldschrafe

2
ด้วย SONET / SDH คุณสามารถมี 38Gbps เร็วกว่า SAS และการรวมเครือข่ายสามารถทำได้ด้วยบางสิ่งเช่นen.wikipedia.org/wiki/Link_aggregation
Mircea Vutcovici

10
@ เจคเมื่อพูดถึง 6 Gbps คุณอาจต้องการแยกความแตกต่างที่ชัดเจนระหว่างแบนด์วิดธ์ของอินเตอร์เฟสและอัตราที่ดิสก์สามารถให้ข้อมูลได้จริง
NPE

4
ฉันพูดในคำถามของฉันที่ฉันพูดคุยเกี่ยวกับระยะไกลในฐานข้อมูลหน่วยความจำเมื่อเทียบกับท้องถิ่นในดิสก์แคช
pm100

10

ขึ้นอยู่กับว่าทรัพยากรเครือข่ายมีข้อมูลที่คุณร้องขอพร้อมใช้งาน (ในหน่วยความจำหรือคล้ายกัน) หรือว่าในทางกลับกันอ่านจากดิสก์

ไม่ว่าในกรณีใดปริมาณงานอาจสูงขึ้นในบางกรณี แต่ฉันเชื่อว่าความล่าช้าจะสูงกว่า


คุณหมายถึงการหาเวลาบนดิสก์มากกว่า 10Gbit / s หรือไม่?
Mircea Vutcovici

1
@ Mircea เขาหมายความว่าเครือข่าย 10Gbit ต้องได้รับข้อมูลจากที่อื่นดังนั้นมันจะถูก จำกัด ตามเวลาแฝงของแหล่งที่มานั้นรวมถึงเวลาแฝงของเครือข่ายด้วย
Chris S

ที่เก็บข้อมูลอาจเป็นดิสก์ RAM ดู: en.wikipedia.org/wiki/Solid-state_drive#DRAM-based
Mircea Vutcovici

2

IMX ดิสก์ยังเร็วกว่า อัตราการถ่ายโอนทางทฤษฎีของเครือข่ายนั้นสูง แต่ในทางปฏิบัติคุณไม่ได้เข้าใกล้

ประมาณสองปีที่แล้วฉันมีปัญหาฮาร์ดไดรฟ์บนแล็ปท็อปของฉันและ DMA ก็ออกไป สิ่งนี้ทำให้ฮาร์ดไดรฟ์ช้าลงอย่างมากและโดยเฉพาะอย่างยิ่งช้ากว่าเครือข่าย แต่เมื่อฉันเปลี่ยนไปใช้คอมพิวเตอร์เครื่องอื่นฉันก็กลับสู่สถานะเดิมของ HDD เร็วกว่าอินเทอร์เน็ต


2

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

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

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

หากคุณใช้เครื่องต่ำที่มีฮาร์ดไดรฟ์ช้าคุณจะสามารถใช้การเชื่อมต่อเครือข่ายกิกะบิตกับเซิร์ฟเวอร์ที่มีอาร์เรย์จัดเก็บข้อมูลที่รวดเร็วได้อย่างรวดเร็ว

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


2

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

ฉันทำงานกับระบบคลังข้อมูลและแบบสอบถาม canonical DW คือการสแกนตาราง หากการสืบค้นของคุณมีผลกระทบมากกว่าสองสามเปอร์เซ็นต์ของแถวในตารางข้อเท็จจริง (หรือพาร์ติชัน) การสแกนตารางหรือพาร์ติชันโดยใช้ I / O ตามลำดับจะมีประสิทธิภาพมากกว่าแผนแบบสอบถามการเข้าถึงแบบสุ่มโดยใช้การค้นหาดัชนีและค้นหา

ที่จัดเก็บข้อมูลเครือข่าย (เช่น SAN) มีแนวโน้มที่จะทำงานได้ไม่ดีในการสตรีมเวิร์กโหลดเว้นแต่ว่าจะได้รับการปรับอย่างเหมาะสม ถ้า SAN กำลังถูกใช้สำหรับสภาพแวดล้อมการรวมจุดประสงค์ทั่วไปมันจะถูกปรับให้เหมาะสำหรับการสตรีม, โหลดที่แหลมคมเหมือนคลังข้อมูล ฉันเคยเห็นกระดาษสีขาวของผู้ขายแนะนำว่าคุณต้องการประมาณ 3 เท่าของจำนวนดิสก์เพื่อให้ได้ปริมาณงานเท่ากันใน SAN ที่ไม่ได้ปรับแต่งสำหรับการสตรีม I / O เหมือนกับที่เป็นอยู่

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

เครือข่ายที่เก็บข้อมูลอย่างน้อยหนึ่งลำดับความสำคัญมีราคาแพงกว่าต่อ IOPS มากกว่าที่เก็บข้อมูลแบบแนบโดยตรงสำหรับปริมาณงานที่เข้าถึงแบบสุ่ม


1

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


1
เว้นแต่ดิสก์ยังเป็นคอขวดในด้านอื่น ๆ ของการเชื่อมต่อเครือข่าย ...

@Argote: จริง แต่ถ้าซอฟต์แวร์เซิร์ฟเวอร์ถูกเขียนอย่างถูกต้องมันจะบัฟเฟอร์ลงในหน่วยความจำก่อนที่จะเขียนลงดิสก์
แอมเฟตามาจิน

1

โดยทั่วไปแล้วเครือข่ายจะเร็วกว่าฮาร์ดไดรฟ์ แต่สิ่งนี้อาจเปลี่ยนแปลงตลอดเวลา

ฉันคิดว่าดังนั้นฉัน

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

ฉันชอบดูสิ่งนี้ในแง่ของการแลกเปลี่ยนมากกว่าผู้ที่แข็งแกร่งที่สุด ...


4
ฉันสงสัยดังนั้นฉันอาจจะ
John Gardeniers

1

คุณต้องอธิบายกรณีการใช้งานที่แน่นอนสำหรับการเปรียบเทียบนี้ ฮาร์ดไดรฟ์หาเวลา + อัตราการถ่ายโอนและแคช เครือข่ายมีความหน่วงแฝงอัตราการถ่ายโอนและโอเวอร์เฮดของโปรโตคอล ...

ฉันคิดว่าแคชหน่วยความจำดั้งเดิมของคุณ> หน่วยความจำ> ดิสก์> เครือข่ายยังคงเป็นจริงโดยทั่วไปแม้ว่า


0

ดิสก์เชื่อมต่อกับ CPU ผ่าน SCSI, SAS หรือ IDE บัส ซึ่งเป็นเครือข่ายภายในที่ใช้โปรโตคอลเฉพาะ - SCSI หรือ ATAPI อีเธอร์เน็ตถูกออกแบบมาเพื่อทำงานในระยะทางไกลกว่าและช้ากว่า SAS / SCSI / IDE มาก ดังนั้นสิ่งใดที่เร็วกว่านั้นขึ้นอยู่กับเทคโนโลยีที่คุณเปรียบเทียบ หากคุณเปรียบเทียบ HDD แล็ปท็อปอายุ 20 ปีกับพื้นที่เก็บข้อมูล RAM 10Gbps ผู้ชนะจะเป็นเครือข่ายเสมอ และเมื่อคุณซื้อที่เก็บข้อมูลคุณจะต้องเปรียบเทียบกับราคาและความสามารถในการจัดการ


0

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


0

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

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

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


0

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

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

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