2013-09-03 30 views
5

Dịch vụ đám mây Azure của tôi đọc và ghi lên các đốm màu bằng cách sử dụng thư viện lưu trữ .Net (1.7). Các đốm màu nằm trong cùng một trung tâm dữ liệu với dịch vụ. Trong container đầu tiên của tôi, hoạt động rất nhanh (thứ tự 10ms). Trong container thứ hai của chúng, chúng rất chậm (thường là khoảng 2s hoặc 14s, không nhiều ở giữa). Cả hai đều chuyển dữ liệu bằng cách sử dụng CloudBlob.DownloadToStream() vào một MemoryStream. Kích thước tệp thường nhỏ hơn 100kB.Tại sao lưu trữ Azure blob không thường xuyên truy cập chậm?

Bây giờ tôi thừa nhận tôi chưa thiết lập một bài kiểm tra thích hợp để có thể chứng minh tất cả những điều trên - tôi chỉ đọc các tệp nhật ký của mình, vì vậy có thể có một số khác biệt tinh tế trong cách tôi truy cập các đốm màu . Xin lỗi nếu điều này hóa ra là trường hợp.

Dù sao, sự khác biệt có liên quan duy nhất giữa hai container này có vẻ là:

  • container nhanh chóng được truy cập thường xuyên (hàng chục ngàn yêu cầu mỗi ngày), và container chậm khá thường xuyên (cách đây khoảng 200 yêu cầu mỗi ngày).
  • Vùng chứa nhanh thường lưu trữ các mục được tìm nạp ngay sau đó. Vùng chứa chậm thường tải những thứ có thể đã được lưu trữ cách đây vài ngày.

Câu hỏi: Yếu tố nào ảnh hưởng đến hiệu suất blob cho các đốm màu không thường xuyên truy cập? Tôi có thể làm gì để làm cho nó nhanh hơn?

(Tôi không biết lưu trữ Azure blob được thực hiện như thế nào, nhưng dựa trên ở trên tôi sẽ đoán dữ liệu được lưu vào mảng lưu trữ và được truy cập thông qua bộ sưu tập VM động, mỗi bộ Vì vậy, sự chậm trễ ~ 14s xảy ra khi Azure tìm thấy nó cần phải quay lên máy ảo.Thời gian trễ ~ 2s xảy ra khi một máy ảo có sẵn, nhưng nó cần phải săn lùng dữ liệu trên một đĩa vật lý (có vẻ như khá chậm) và độ trễ 10ms xảy ra khi mục được lưu trữ trong bộ nhớ cache trong bộ nhớ hoặc một cái gì đó tương tự.)

+0

Tương tự ở đây, vào năm 2015. Giống như 2 hoặc 14, và đôi khi xuống đến 45 giây. Nhưng tôi đã không có mối tương quan với bất cứ điều gì. –

Trả lời

5

Windows Azure Storage không được cấu trúc cách bạn mô tả (với số lượng bộ nhớ cache mở rộng) , vì vậy sẽ không có tác động của một số dữ liệu được lưu trữ và dữ liệu khác không được lưu trữ trên Azure lưu trữ serv er bên. Xem Windows Azure Storage Architecture Overview để có tổng quan tốt hoặc SOSP Paper - Windows Azure Storage: A Highly Available Cloud Storage Service with Strong Consistency để có cái nhìn sâu sắc hơn.

Để xác định lý do yêu cầu blob của bạn chậm hơn, điều đầu tiên cần làm là xác định xem hiệu suất chậm có phải là phía máy chủ hoặc phía máy khách hay không. May mắn thay Azure lưu trữ làm cho điều này dễ dàng thông qua Storage Analytics (Windows Azure Storage Logging: Using Logs to Track Storage Requests) - chỉ cần so sánh độ trễ End to End và độ trễ Server. Tôi nghi ngờ bạn sẽ thấy một trong hai điều sau:

  1. Máy chủ E2E thấp và thấp. Điều này sẽ cho biết rằng yêu cầu bị trì hoãn đang được gửi từ máy khách (ví dụ: không đủ chuỗi công việc) hoặc việc ghi nhật ký của bạn đang cung cấp dữ liệu không chính xác.
  2. Máy chủ cao E2E và thấp. Điều này sẽ chỉ ra một vấn đề ở phía máy khách trong việc xử lý yêu cầu (không đủ các luồng công nhân để xử lý Phản hồi, xử lý chậm dòng bộ nhớ, vv).
+0

Việc ghi nhật ký cho thấy E2E thấp (từ đầu đến cuối, bao gồm thời gian mạng) và thời gian máy chủ thấp. Vì vậy, tôi cần phải nhìn vào mã của tôi. Tôi đã sử dụng công cụ của smarx (http://storageanalytics.cloudapp.net/) để bật ghi nhật ký mà không cần xây dựng một chương trình mới. –

+1

Oliver, một điều khác bạn có thể muốn xem là 2 mới.1 phiên bản của thư viện máy khách lưu trữ, bổ sung thêm đầu ra theo dõi của bản thân SCL - http://blogs.msdn.com/b/windowsazurestorage/archive/2013/07/12/introducing-storage-client-library-2-1- rc-cho-net-và-windows-phone-8.aspx. – kwill

+0

Tôi đã đặt một Đồng hồ bấm giờ xung quanh cuộc gọi đến DownloadToStream() và tôi vẫn thấy sự chậm chạp ở cuối ứng dụng khách. Tôi lưu ý rằng các cuộc gọi chậm được thực hiện trong một quá trình mới bắt đầu. Điều này có tác động không? Rất tiếc, tôi không thể sử dụng thư viện ứng dụng lưu trữ mới vì quá trình được đề cập bị kẹt trong .Net 2.0 do phụ thuộc và thư viện mới yêu cầu .Net 4. –

Các vấn đề liên quan