Độ trễ trong một trung tâm dữ liệu là gì? Tôi hỏi điều này giả sử có những đơn đặt hàng có độ lớn khác nhau


17

Tôi đang cố gắng tìm ra điều gì đó mà tôi không thể tìm được câu trả lời hay.

Nếu tôi nói rằng bộ đệm REDIS (hoặc một số bộ đệm trong bộ nhớ ngoài) đang ngồi trong một trung tâm dữ liệu và một máy chủ ứng dụng ngồi trong cùng một trung tâm dữ liệu, tốc độ của kết nối mạng (độ trễ, thông lượng) sẽ là bao nhiêu để đọc dữ liệu Giữa hai máy này?

Chẳng hạn, "tốc độ" của mạng sẽ vẫn ít nhất là một thứ tự cường độ cao hơn tốc độ của RAM đang tìm kiếm dữ liệu của tôi ra khỏi bộ đệm trên REDIS?

Câu hỏi cuối cùng của tôi là - liệu tất cả có nằm trong bộ nhớ trên REDIS thực sự cung cấp bất kỳ tiện ích nào không? Trái ngược với việc liệu REDIS có lưu tất cả bộ nhớ cache này vào ổ SSD không? Bộ nhớ là đắt tiền. Nếu mạng thực sự không phải là nút cổ chai TRONG trung tâm dữ liệu, thì bộ nhớ có giá trị. Mặt khác, nó không.

Tôi đoán câu hỏi chung của tôi là mặc dù có nhiều ẩn số trong các trung tâm dữ liệu và không có khả năng khái quát hóa cũng như phương sai, chúng ta có nói đủ các mức độ lớn giữa độ trễ bộ nhớ trong hệ thống máy tính và thậm chí cả mạng tốt nhất bên trong DC mà bộ nhớ độ trễ giảm không cung cấp một cải thiện hiệu suất đáng kể? Tôi hiểu rằng có nhiều biến số, nhưng nó gần đến mức nào? Có gần đến mức các biến này có vấn đề? Ví dụ: hãy có lập trường cường điệu về nó, ổ băng từ chậm hơn mạng, vì vậy băng không lý tưởng cho bộ đệm.


1
Nó cũng phụ thuộc vào số lượng vòng tròn trên mỗi giao dịch, đây thường là vấn đề thực sự mà bạn phải tuần tự hóa trong một chuỗi các truy vấn. Một giao diện truy vấn phức tạp hơn, một thủ tục phía máy chủ hoặc bộ đệm ẩn không bình thường có thể làm giảm tác động.
eckes

Câu trả lời:


19

Có một số phiên bản của "biểu đồ độ trễ mà mọi người nên biết", chẳng hạn như:

Điều này là, trong thực tế, có nhiều hơn chỉ là độ trễ. Đó là sự kết hợp của các yếu tố.

Vì vậy, độ trễ mạng trong một trung tâm dữ liệu là gì? Độ trễ, tôi sẽ nói nó "luôn luôn" dưới 1ms. Có nhanh hơn RAM không? Không. Nó có gần với RAM không? Tôi không nghĩ vậy.

Nhưng câu hỏi vẫn còn, nó có liên quan. Đó có phải là mốc thời gian bạn cần biết? Câu hỏi của bạn có ý nghĩa với tôi. Vì mọi thứ đều có chi phí, bạn nên có thêm RAM để tất cả dữ liệu có thể ở trong RAM hoặc thỉnh thoảng bạn có thể đọc từ đĩa.

"Giả định" của bạn là nếu độ trễ của mạng cao hơn (chậm hơn) so với tốc độ của SSD, bạn sẽ không đạt được bằng cách có tất cả dữ liệu trong RAM vì bạn sẽ có mạng chậm.

Và nó sẽ xuất hiện như vậy. Nhưng, bạn cũng phải tính đến sự tương tranh. Nếu bạn nhận được 1.000 yêu cầu cho dữ liệu cùng một lúc, đĩa có thể thực hiện 1.000 yêu cầu đồng thời không? Tất nhiên là không, vậy sẽ mất bao lâu để phục vụ 1.000 yêu cầu đó? So với RAM?

Thật khó để đun sôi nó xuống một yếu tố duy nhất như tải nặng. Nhưng có, nếu bạn đã có một hoạt động duy nhất, độ trễ của mạng là do bạn có thể sẽ không nhận thấy sự khác biệt của SSD so với RAM.

Giống như cho đến khi đĩa 12Gbps xuất hiện trên thị trường, liên kết mạng 10Gbps sẽ không bị quá tải bởi một luồng vì đĩa là nút cổ chai.

Nhưng hãy nhớ rằng đĩa của bạn đang làm nhiều thứ khác, quy trình của bạn không phải là quy trình duy nhất trên máy, mạng của bạn có thể mang những thứ khác nhau, v.v.

Ngoài ra, không phải tất cả các hoạt động đĩa có nghĩa là lưu lượng mạng. Truy vấn cơ sở dữ liệu đến từ một ứng dụng đến máy chủ cơ sở dữ liệu chỉ có lưu lượng mạng rất nhỏ. Phản hồi từ máy chủ cơ sở dữ liệu có thể rất nhỏ (một số) hoặc rất lớn (hàng nghìn hàng có nhiều trường). Để thực hiện thao tác, một máy chủ (máy chủ cơ sở dữ liệu hoặc không) có thể cần thực hiện nhiều lần tìm kiếm đĩa, đọc và ghi nhưng chỉ gửi một bit rất nhỏ qua mạng. Đó chắc chắn không phải là RAM một đĩa một.


Cho đến nay tôi đã tránh một số chi tiết về câu hỏi của bạn - cụ thể là phần Redis.

Redis là một mã nguồn mở (BSD được cấp phép), lưu trữ cấu trúc dữ liệu trong bộ nhớ, được sử dụng làm cơ sở dữ liệu, bộ đệm và môi giới tin nhắn. - https://redis.io/

OK, điều đó có nghĩa là mọi thứ đều nằm trong bộ nhớ. Xin lỗi, ổ SSD nhanh này sẽ không giúp bạn ở đây. Redis có thể lưu dữ liệu vào đĩa, vì vậy nó có thể được tải vào RAM sau khi khởi động lại. Điều đó chỉ để không "mất" dữ liệu hoặc phải sao lưu bộ đệm lạnh sau khi khởi động lại. Vì vậy, trong trường hợp này, bạn sẽ phải sử dụng RAM, bất kể điều gì. Bạn sẽ phải có đủ RAM để chứa tập dữ liệu của bạn. Không đủ RAM và tôi đoán hệ điều hành của bạn sẽ sử dụng swap- có lẽ không phải là một ý tưởng tốt.


Cảm ơn. Điều này thực sự hữu ích. Thực sự có nhiều phương sai theo ngữ cảnh ở đây có liên quan đến điều này. Nếu chúng tôi bỏ qua tải nặng trong giây lát, có vẻ như câu trả lời của bạn thực sự, độ trễ mạng là nút cổ chai, do đó độ trễ bổ sung của SSD so với RAM là không đủ quan trọng. Nhưng bây giờ, nếu chúng ta tính đến các tải nặng, sự khác biệt về độ trễ của SSD so với RAM bắt đầu bị gộp lại, và bây giờ, RAM sẽ tỏa sáng. Đây có phải là những gì nó đi xuống sau đó?
Neeraj Murarka

1
Thật khó để đun sôi nó xuống một yếu tố duy nhất của tải nặng. Nhưng có, nếu bạn đã có một hoạt động duy nhất, độ trễ của mạng là do bạn có thể sẽ không nhận thấy sự khác biệt của SSD so với RAM. Giống như cho đến khi đĩa 12Gbps xuất hiện trên thị trường, liên kết mạng 10Gbps sẽ không bị quá tải bởi một luồng vì đĩa là nút cổ chai. Nhưng hãy nhớ rằng đĩa của bạn đang làm nhiều việc khác, quy trình của bạn không phải là quy trình duy nhất trên máy, v.v.
ETL

1
Cũng lưu ý rằng có nhiều yếu tố khác cần xem xét ngoài độ trễ, đặc biệt là hầu hết các dịch vụ thực tế cần chạy nhiều phiên bản chương trình máy chủ trên các máy khác nhau, vì vậy "mọi thứ trong RAM cục bộ" thường không phải là một lựa chọn thực tế.
chrylis -on đình công-

Nhưng một liên kết mạng 10g là cấp thấp. Các máy chủ của tôi được kết nối với xương sống của tôi với 200gigabit (có, liên kết 2x100g).
TomTom

3

Có nhiều lớp bộ đệm trong hệ thống máy tính. Chèn một lớp ở lớp ứng dụng có thể có ích, lưu bộ đệm API và truy vấn cơ sở dữ liệu. Và có thể dữ liệu tạm thời như phiên người dùng.

Các cửa hàng dữ liệu như Redis cung cấp dịch vụ như vậy qua mạng (nhanh) hoặc ổ cắm UNIX (thậm chí nhanh hơn), giống như bạn sẽ sử dụng cơ sở dữ liệu.

Bạn cần đo lường cách ứng dụng của bạn thực sự hoạt động, nhưng hãy tạo một ví dụ. Giả sử một yêu cầu người dùng phổ biến thực hiện 5 truy vấn API mất 50 ms mỗi truy vấn. 250 ms là độ trễ phát hiện người dùng. Tương phản với bộ nhớ đệm kết quả. Ngay cả khi bộ đệm nằm trong vùng khả dụng khác nhau trên toàn thị trấn (không tối ưu), số lần truy cập có thể cao nhất là 10 ms. Đó sẽ là một tăng tốc 5x.

Trong thực tế, cơ sở dữ liệu và hệ thống lưu trữ cũng có bộ nhớ riêng. Tuy nhiên, thông thường sẽ nhanh hơn để có được kết quả tìm nạp trước hơn là đi qua lớp cơ sở dữ liệu và các lớp hệ thống lưu trữ một lần nữa. Ngoài ra, lớp bộ đệm có thể giảm tải đáng kể cơ sở dữ liệu đằng sau nó.

Đối với một ví dụ về bộ đệm như vậy trong sản xuất, không có gì khác ngoài blog cơ sở hạ tầng Stack Overflow về kiến ​​trúc . Hàng trăm ngàn yêu cầu HTTP tạo ra hàng tỷ lượt truy cập Redis là khá quan trọng.

Bộ nhớ là đắt tiền.

DRAM ở thời gian truy cập 100 ns nhanh hơn khoảng 100 lần so với lưu trữ vĩnh viễn ở trạng thái rắn. Nó là tương đối rẻ tiền cho hiệu suất này. Đối với nhiều ứng dụng, RAM nhiều hơn một chút mua tốc độ và thời gian đáp ứng có giá trị.


Bạn có thể vui lòng làm rõ cách bạn tính toán rằng mỗi trong số 5 truy vấn API đó mất 50 ms mỗi truy vấn không? Có phải dưới vỏ bọc của ứng dụng đánh vào cơ sở dữ liệu và thực hiện truy vấn và tính toán tập kết quả, so với việc chỉ lưu một bộ đệm trong thị trấn mà đã tự lưu trữ chuỗi truy vấn làm khóa và có một bản sao được lưu trong bộ nhớ cache của kết quả đó bộ?
Neeraj Murarka

1
Tôi đã làm cho những con số lên, nhưng có. Thực hiện một truy vấn và tính toán lại một kết quả có thể sẽ chậm hơn so với kết quả được tính toán trước đó. Các triển khai như Redis có xu hướng trong bộ nhớ vì đơn giản và tốc độ. Truyền qua mạng IP hoặc vận chuyển ổ cắm UNIX cũng có thể khá nhanh. Tất cả những gì đã nói, công cụ lưu trữ này là không cần thiết cho mọi thiết kế.
John Mahowald

Hiểu. Tôi nghĩ rằng tôi ít nhiều hiểu Có vẻ như trong rất nhiều trường hợp, nhưng không phải lúc nào cũng vậy, thậm chí di chuyển ra khỏi trung tâm dữ liệu đến bộ đệm gần đó có thể ở cùng một tiểu bang Hoa Kỳ (hoặc tỉnh Canada, v.v.) (có thể khu vực là một ngữ nghĩa tốt) thường có thể là một lợi thế lớn trong quá trình cố gắng tính toán lại giá trị theo thuật toán từ cơ sở dữ liệu cục bộ của chính nó, nếu thực tế nó dẫn đến một lần nhấn bộ đệm. Nhưng sau đó, bộ đệm có thể đang ở xa không cung cấp nhiều giá trị bằng cách nằm trong bộ nhớ. Nó cũng có thể dựa trên SSD.
Neeraj Murarka

1
Trung tâm dữ liệu từ xa là trường hợp xấu nhất, lý tưởng là lớp bộ đệm nằm dưới 1 ms từ các máy khách của nó. Có lẽ cùng một khu vực sẵn có, hoặc thậm chí trên cùng một máy chủ. Bạn có thể lưu trữ vào một bộ lưu trữ liên tục nếu bạn muốn. Hoặc, bạn có thể sử dụng bộ lưu trữ trạng thái rắn đó cho cơ sở dữ liệu chính, tăng tốc tất cả các truy vấn và có thể không cần một lớp bộ đệm. Có nhiều thiết kế có thể.
John Mahowald
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.