Mạng bây giờ nhanh hơn đĩa?


126

Đây là một câu hỏi thiết kế phần mềm

Tôi đã từng làm việc theo quy tắc sau đây cho tốc độ

cache memory > memory > disk > network

Với mỗi bước gấp 5-10 lần bước trước (ví dụ: bộ nhớ đệm nhanh hơn 10 lần so với bộ nhớ chính).

Bây giờ, có vẻ như ethernet gigabit có độ trễ ít hơn đĩa cục bộ. Vì vậy, có thể các thao tác để đọc ra một DB trong bộ nhớ từ xa lớn nhanh hơn đọc đĩa cục bộ. Cảm giác này giống như dị giáo với một bộ đếm thời gian cũ như tôi. (Tôi chỉ dành một chút thời gian để xây dựng bộ đệm cục bộ trên đĩa để tránh phải thực hiện các chuyến đi vòng quanh mạng - vì vậy câu hỏi của tôi)

Có ai có bất kỳ kinh nghiệm / số / lời khuyên trong lĩnh vực này?

Và vâng tôi biết rằng cách thực sự duy nhất để tìm hiểu là xây dựng và đo lường, nhưng tôi đã tự hỏi về quy tắc chung.

chỉnh sửa :

Đây là dữ liệu thú vị từ câu trả lời hàng đầu:

  • Chuyến đi khứ hồi trong cùng một trung tâm dữ liệu 500.000 ns

  • Đĩa tìm kiếm 10.000.000 ns

Đây là một cú sốc đối với tôi; mô hình tinh thần của tôi là một chuyến đi vòng quanh mạng vốn đã chậm. Và nó không - nhanh gấp 10 lần so với đĩa 'khứ hồi'.

Jeff attwood đã đăng blog v tốt này về chủ đề http: //blog.codinghorror.com/the-infinite-space-b between-words /


11
Lúc có lúc không. Mạng gì? Đĩa gì?
John Gardeniers

1
Dữ liệu thú vị khác từ câu trả lời hàng đầu: 1 MB tuần tự đọc từ mạng so với đĩa. Tôi nghi ngờ thời gian "khứ hồi" bỏ qua mọi chuyển dữ liệu quan trọng.
Paul

Paul: Tôi phụ thuộc vào MTU của bạn, tôi chắc chắn. (1 MB MTU? Tuyệt vời!)
Matt Simmons

Tôi rất muốn thấy một số câu trả lời được xem xét lại dưới ánh sáng của thiết bị mạng 10Gbps đang được phổ biến rộng rãi.
gà con

mạng gigabit vs đột kích 5?
SoilSciGuy

Câu trả lời:


137

Dưới đây là một số con số mà bạn có thể đang tìm kiếm, được trích dẫn bởi Jeff Dean, thành viên Google:

Những con số mọi người nên biết

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

Đó là từ bài thuyết trình của ông có tiêu đề Thiết kế, Bài học và Lời khuyên từ Xây dựng Hệ thống phân tán lớn và bạn có thể lấy nó ở đây:

Cuộc nói chuyện đã được đưa ra tại Hệ thống phân tán và Middleware phân tán quy mô lớn (LADIS) 2009 .

Thông tin khác


Người ta nói rằng gcc -O4 gửi email mã của bạn cho Jeff Dean để viết lại.



+1 Rất thú vị!
9dan

1
Một số bài thuyết trình có các giá trị khác nhau được chỉ định trong ngoặc. Tôi cho rằng một trong khung là không chính xác và anh ấy đã cập nhật các giá trị.
David d C e Freitas

1
Đây có phải là tất cả thời đại tiền SSD? xem ở đây để biết thêm số cập nhật.
matt

Tôi thực sự đã sử dụng những con số này để xây dựng một bài thuyết trình cho thấy lý do tại sao các ổ SSD tự trả tiền , để thuyết phục người quản lý văn phòng của chúng tôi rằng có, chúng tôi cần các máy nhanh hơn để làm việc. Bao gồm các con số cho thông tin kỹ thuật nhưng hướng nó đến quản lý phi công nghệ càng nhiều càng tốt.
brichin

19

Có rất nhiều biến khi nói đến mạng so với đĩa, nhưng nói chung, đĩa nhanh hơn.

Các bus SATA 3.0 và SAS là 6 Gbps, so với mạng 1Gbps trừ đi chi phí giao thức. Với RAID-10 15k SAS, mạng sẽ có vẻ chậm. Ngoài ra, bạn có bộ đệm đĩa và khả năng ổ cứng trạng thái rắn, tùy thuộc vào kịch bản, cũng có thể tăng tốc độ. Truy cập dữ liệu ngẫu nhiên và tuần tự đóng một yếu tố, cũng như kích thước khối trong đó dữ liệu được truyền. Tất cả phụ thuộc vào ứng dụng đang được sử dụng để truy cập đĩa.

Bây giờ, tôi thậm chí không chạm vào thực tế là bất cứ điều gì bạn đang vận chuyển qua mạng sẽ đến hoặc đến từ đĩa ... vì vậy ....... một lần nữa, đĩa nhanh hơn.


1
Những điểm cần đề cập đến RAID mang đến cho bạn khả năng đọc song song, một điều mà bạn không thể truy cập mạng sớm. Tất nhiên, nếu chúng ta đang nói về ổ cứng máy tính xách tay cục bộ, thì sự kết hợp giữa SAN nhanh và mạng nhanh có thể sẽ nhanh hơn. Đặc biệt với các ổ SSD trong SAN đó.
Michael Dillon

10
Mạng vốn đã song song - bạn đang nói về cái gì? Việc đọc từ nhiều hệ thống trên một mạng tổng hợp là vô cùng tầm thường; đây là toàn bộ điểm phía sau các hệ thống như Hadoop và MPI, chưa kể đến BitTorrent rõ ràng.
jgoldschrafe

2
Với SONET / SDH, bạn có thể có tốc độ 38Gbps nhanh hơn so với SAS. Và tập hợp mạng có thể được thực hiện với một cái gì đó như en.wikipedia.org/wiki/Link_aggregation
Mircea Vutcovici

10
@Jake Khi nói về 6 Gbps, bạn có thể muốn phân biệt rõ ràng giữa băng thông giao diện và tốc độ mà một đĩa thực sự có thể cung cấp dữ liệu.
NPE

4
Tôi đã nói trong câu hỏi của mình rằng tôi đã nói về một điều khiển từ xa trong cơ sở dữ liệu bộ nhớ so với cục bộ trên bộ đệm đĩa
pm100

10

Chà, điều đó phụ thuộc vào việc tài nguyên mạng có dữ liệu bạn yêu cầu có sẵn (trong bộ nhớ hoặc tương tự) hay không, nếu đến lượt nó, hãy đọc nó từ đĩa.

Trong mọi trường hợp, thông lượng có thể cao hơn trong một số trường hợp nhưng tôi tin độ trễ sẽ cao hơn.


Bạn có nghĩa là thời gian tìm kiếm trên đĩa lớn hơn yêu cầu 10Gbit / s?
Mircea Vutcovici

1
@Mircea, ông có nghĩa là mạng 10Gbit phải lấy dữ liệu từ một nơi nào đó, vì vậy nó sẽ bị giới hạn ở độ trễ của nguồn đó, cộng với độ trễ của mạng.
Chris S

Bộ lưu trữ có thể là một đĩa RAM. Xem: vi.wikipedia.org/wiki/Solid-state_drive#DRAM-basing
Mircea Vutcovici

2

IMX đĩa vẫn nhanh hơn. Tốc độ truyền lý thuyết của mạng cao, nhưng trên thực tế, bạn không tiến gần đến mức đó.

Khoảng hai năm trước, tôi gặp sự cố ổ cứng trên máy tính xách tay của mình và DMA đã bị hỏng. Điều này làm cho ổ cứng chậm hơn đáng kể và đặc biệt chậm hơn mạng. Nhưng khi tôi chuyển sang một máy tính khác, tôi đã trở lại trạng thái ban đầu của ổ cứng nhanh hơn Internet.


2

Kinh nghiệm của tôi với các mạng gigabit là, được cung cấp đúng máy chủ, rằng bạn có thể đánh bại hiệu suất cục bộ về thông lượng và độ trễ. Xem Kiểm tra mạng: Chúng ta có đạt được hiệu suất Gigabit không?

Đối với tất cả các mục đích thực tế, tôi khuyên bạn nên coi lưu trữ mạng & cục bộ là tương đương và chỉ sử dụng bộ nhớ đệm.

Thông báo trước như bạn đã đề cập là đúng ở chỗ không có quy tắc chung; và thực tế là hầu hết thời gian người ta nên làm việc với các máy chủ được cấu hình tốt và sử dụng các số liệu để đánh giá phương pháp truyền dữ liệu tốt nhất.

Nếu bạn đang sử dụng máy cấp thấp có ổ cứng chậm thì gần như chắc chắn sẽ nhanh hơn khi sử dụng kết nối mạng gigabit đến máy chủ có mảng lưu trữ nhanh.

Tương tự, nếu bạn đang làm việc với hai máy có phần cứng gần giống nhau thì độ trễ và phí mạng sẽ giúp việc lưu trữ cục bộ nhanh hơn; đó là lẽ thường tình.


2

Nó phụ thuộc. Nếu I / O của bạn chủ yếu là truy cập ngẫu nhiên thì thông lượng phẳng của nó có thể không lớn so với băng thông mạng có thể có sẵn. Tuy nhiên, hầu hết lưu lượng mạng cuối cùng được tạo bởi các quá trình liên quan đến I / O. Nếu tập hợp hoạt động của bất kỳ quy trình nào đang tạo ra lưu lượng truy cập mạng phù hợp với bộ đệm thì nó sẽ không bị hạn chế bởi băng thông đĩa. Nếu nó đập bộ đệm thì đĩa sẽ trở thành nút cổ chai.

Tôi làm việc trên các hệ thống kho dữ liệu và truy vấn DW chuẩn là quét bảng. Nếu truy vấn của bạn đạt hơn một vài phần trăm các hàng trong bảng thực tế (hoặc phân vùng) thì quét bảng hoặc phân vùng bằng I / O tuần tự sẽ hiệu quả hơn so với kế hoạch truy vấn ngẫu nhiên bằng cách sử dụng tra cứu chỉ mục và tìm kiếm.

Lưu trữ được nối mạng (ví dụ SAN) có xu hướng không hoạt động tốt trên khối lượng công việc truyền phát trừ khi nó được điều chỉnh phù hợp. Nếu SAN đang được sử dụng cho môi trường hợp nhất cho mục đích chung, gần như chắc chắn nó sẽ được điều chỉnh khá tối ưu cho việc truyền phát, tải nhọn như một kho dữ liệu. Tôi đã thấy một tờ giấy trắng của nhà cung cấp đề nghị rằng bạn cần khoảng gấp 3 số lượng đĩa để có cùng thông lượng trên SAN mà không được điều chỉnh để phát trực tuyến I / O như đối với một đĩa.

Kinh nghiệm của tôi với điều đó. Trên thực tế, tôi chưa bao giờ triển khai kho dữ liệu vào môi trường hợp nhất nơi tôi không thể chạy cùng một quy trình ETL nhanh hơn đáng kể trên máy tính để bàn của mình. Tôi cũng đã có đại diện bán hàng từ một nhà cung cấp thiết bị SAN lớn nói rằng nhiều khách hàng của họ sử dụng bộ lưu trữ đính kèm trực tiếp cho hệ thống DW vì SAN không đủ nhanh.

Lưu trữ được nối mạng ít nhất là một đơn hàng đắt hơn cho mỗi IOPS so với lưu trữ đính kèm trực tiếp cho khối lượng công việc truy cập ngẫu nhiên và gần hơn với hai đơn hàng có cường độ đắt hơn để phát trực tuyến.


1

Kinh nghiệm tôi có với điều này là khi bạn đang kết nối 1Gbit và bạn cố tải xuống một tệp, ổ cứng của bạn thường là nút cổ chai. Một điều bạn phải ghi nhớ là bạn phải thiết lập kết nối trước, điều này cũng mất thời gian. Vì vậy, để gửi các khối lớn của mạng dữ liệu thực sự có thể nhanh hơn đĩa.


1
Trừ khi đĩa cũng là nút cổ chai ở phía bên kia của kết nối mạng ...

@Argote: Đúng, nhưng nếu phần mềm máy chủ được viết chính xác, nó sẽ đệm vào bộ nhớ trước khi ghi vào đĩa.
amphetamachine

1

Vâng, nói chung, các mạng hiện đang nhanh hơn ổ cứng, nhưng điều này có thể bị gián đoạn theo thời gian.

Tôi nghĩ, vì vậy tôi là

Khi một ứng dụng đang chạy, điều đó có nghĩa là máy chủ đang hoạt động, trong khi làm việc qua mạng cần một giao thức chung, kiểm tra tính khả dụng ngang hàng, bảo mật kênh ... và nếu các máy ngang hàng sử dụng các nền tảng khác nhau, sẽ khó đạt được những gì bạn có thể làm trên máy đơn.

Tôi thích xem xét điều này về mặt đánh đổi hơn là ai mạnh nhất ...


4
Tôi nghi ngờ, do đó tôi có thể.
John Gardeniers

1

Bạn phải mô tả một trường hợp sử dụng chính xác cho so sánh này. Ổ cứng đã tìm kiếm thời gian + tốc độ truyền và bộ đệm. Mạng có độ trễ, tốc độ truyền và phí giao thức ...

Tôi nghĩ rằng bộ nhớ cache ban đầu của bạn> bộ nhớ> đĩa> mạng nói chung vẫn đúng


0

Đĩa được kết nối với CPU thông qua bus SCSI, SAS hoặc IDE. Đó là một mạng nội bộ chạy một giao thức cụ thể - SCSI hoặc ATAPI. Ethernet được thiết kế để hoạt động trên khoảng cách xa hơn và có thể chậm hơn nhiều so với SAS / SCSI / IDE. Vì vậy, cái nào nhanh hơn, phụ thuộc vào công nghệ mà bạn đang so sánh. Nếu bạn so sánh ổ cứng laptop 20 năm tuổi với bộ nhớ RAM 10Gbps, người chiến thắng sẽ luôn là mạng. Và khi bạn mua một bộ lưu trữ, bạn phải so sánh nó với giá cả và khả năng quản lý.


0

Chà, có Light Peak đang nhắm tới tốc độ mạng 100 GB / giây, gần bằng tốc độ RAM. Tất nhiên, mạng chỉ có thể truyền dữ liệu nhanh như người gửi có thể tạo dữ liệu, tức là nếu người gửi đang đọc dữ liệu từ đĩa cứng thì người nhận sẽ chỉ nhận được dữ liệu ở cùng tốc độ với đĩa đọc, ngay cả với một mạng cực nhanh.


0

Một điều cần lưu ý là nó phụ thuộc vào mạng. Ví dụ, giả sử bạn chịu trách nhiệm về hiệu suất trên một trang web. Trang web này tất nhiên được kết nối với một máy chủ cơ sở dữ liệu qua mạng cục bộ và cũng được kết nối với những người lướt web qua internet, đây cũng là một loại mạng.

Trong nhiều trường hợp, một liên kết chuyên dụng có thể được thiết lập giữa máy chủ web và máy chủ cơ sở dữ liệu thông qua IP tĩnh và cáp chéo hoặc automdx để giảm độ trễ và cung cấp liên kết chuyên dụng cho lưu lượng truy cập, vì bạn muốn nó rất nhanh. Máy chủ cơ sở dữ liệu thực hiện tất cả các loại công việc để giữ càng nhiều db càng tốt trong bộ nhớ và trong nhiều trường hợp thường thành công cho toàn bộ nội dung cộng với một vài chỉ mục. Các truy vấn đến cơ sở dữ liệu này sẽ nhanh hoặc thậm chí nhanh hơn các truy vấn vào đĩa.

Mặt khác, một số công nghệ web nhất định (asp.net webforms viewstate, tôi đang nhìn bạn) muốn đẩy nhiều thông tin đến và từ trình duyệt web của máy khách dưới dạng bộ đệm (loại). Nếu đây là kết nối lan cục bộ (và trong phần bảo vệ của biểu mẫu web asp.net thì điều này rất đúng), nó không tệ lắm, nhưng trên internet công cộng, điều này hoàn toàn có thể giết chết hiệu suất, vì vậy bạn thường đẩy mạnh việc này hơn thay vào đó là một cơ sở dữ liệu hoặc đĩa cục bộ.


0

Cá nhân, tôi nghĩ rằng có một số yếu tố để xem xét. Chẳng hạn, bộ nhớ hoặc đĩa bạn đang truy cập cục bộ nhanh như thế nào so với bộ nhớ bạn sẽ truy cập qua mạng? Nếu dữ liệu từ xa trên SSD rất nhanh và nhanh hơn mạng gigabit được cài đặt từ đầu đến cuối, thì điều khiển từ xa có thể nhanh hơn đối với các tệp phát trực tuyến lớn.

Tuy nhiên, nếu bạn đang truy cập ngẫu nhiên các đơn vị dữ liệu nhỏ và mạng không hoàn hảo hoặc có nhiều bước nhảy và hơn cả việc bạn truy cập vào nó, tôi cá rằng bộ đệm cục bộ sẽ nhanh hơn ngay cả trên ổ đĩa cơ gần như 100 % thời gian Nhưng bạn đưa ra một điểm thú vị và sẽ cần bao lâu để lưu trữ cục bộ bất cứ thứ gì nếu tốc độ mạng tiếp tục tăng?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.