2015-01-22 15 views
5

Tôi đang xây dựng một trang web (trong số những thứ khác) cho phép người dùng tải ảnh lên qua api web. Các hình ảnh người dùng sẽ được lưu trữ trong blob lưu trữ xanh để được hiển thị trong album của người dùng và được chia sẻ với phương tiện truyền thông xã hội. Trang web sẽ được lưu trữ dưới dạng trang web xanh. Tôi mong muốn giảm thiểu chi phí chuyển dữ liệu. Tôi hiểu rằng việc truyền dữ liệu giữa một trang web xanh và lưu trữ bảng/blob không phát sinh phí chuyển dữ liệu (vì nó không được coi là "đi") trong khi dữ liệu được yêu cầu từ bên ngoài trang web của Azure. Để đáp lại điều này, tôi có 2 chiến lược để hiển thị hình ảnh cho trình duyệt:Chiến lược để giảm thiểu lưu trữ Azure chi phí dữ liệu gửi đi

1.) Thông qua URI tới hình ảnh blob trong bộ nhớ xanh, ví dụ: với tài khoản lưu trữ cục bộ http://ipv4.fiddler:10000/devstoreaccount1/bcb2ad7581.jpg

2.) Thông qua api web tải xuống byte hình ảnh từ bộ nhớ và trả về chúng. ví dụ. với máy chủ cục bộ http://localhost:58559/api/image/bcb2ad7581.jpg

Đây là những giả định của tôi. Việc truy cập trực tiếp vào bộ nhớ (phương pháp 1 ở trên) hiệu quả hơn. Truy cập hình ảnh qua api web (phương pháp 2 ở trên) phải chịu chi phí vượt quá mà quyền truy cập trực tiếp không đúng, phải không? Mỗi yêu cầu api web phải tiêu thụ một chuỗi asp .net cộng với chu kỳ CPU. Đối với mỗi yêu cầu hình ảnh api web được xử lý, đó là một yêu cầu ít hơn cho các tài nguyên api web khác trên trang web không thể và phải được xếp hàng đợi. Mặt khác, bất kỳ trang web bên ngoài nào được chia sẻ hình ảnh sẽ thêm chi phí chuyển dữ liệu (trong số các chi phí khác) cho mỗi yêu cầu hình ảnh; nếu truy cập qua phương thức 1.

Vì vậy, chiến lược của tôi là truy cập hình ảnh trong trang web thông qua liên kết trực tiếp đến bộ nhớ (phương pháp 1), ví dụ: khi người dùng mở một album, tất cả các thẻ có uri xanh trong thuộc tính src của họ. Tuy nhiên khi người dùng nhấp vào biểu tượng Facebook để chia sẻ, tôi sẽ cung cấp một liên kết đến hình ảnh qua api web (phương pháp 2). Tôi nhận ra rằng người dùng có thể bỏ qua tất cả những điều đó bằng các plugin như nút "PinIt", nhưng điều đó vẫn ổn.

Tôi chỉ đang học công cụ này, vì vậy tôi có thể thoát ra. Tôi có sai về chi phí chuyển đi không được áp dụng cho các trang web xanh không? Tôi không nghĩ rằng tôi nhưng toàn bộ mô hình định giá là khó hiểu, để nói rằng ít nhất.

Đang truy cập bộ nhớ blob từ trang html của trình duyệt có thẻ và thuộc tính src, được coi là truyền dữ liệu đi; ngay cả khi trang html đến từ một tên miền trang web azure? Tôi có nghĩa là nó chỉ miễn phí khi mã phía máy chủ truy cập lưu trữ, không phải là khách hàng html?

Có bất kỳ chi phí chuyển dữ liệu nào được lưu qua phương pháp 2 (nếu thực sự có một), đơn giản bị hủy bằng một chi phí khác liên quan đến phương pháp api web (như chi phí băng thông)?

Tôi có sai về lợi ích hiệu suất của việc truy cập trực tiếp vào bộ nhớ blob hay có thể sai về chi phí của yêu cầu api trên web không?

Đó là những ngày đầu trong thiết kế, vì vậy tôi có thể đổ Azure nếu tôi phải làm. Tôi không muốn mặc dù, vì tôi nghĩ rằng đó là những gì tôi đang tìm kiếm. Tôi không muốn một cái gì đó cho không có gì và hạnh phúc để trả tiền cho các dịch vụ tôi tiêu thụ. Đương nhiên, mặc dù, tôi không muốn sự thiếu hiểu biết của mình phải trả giá cho tôi.

Tôi có thể làm theo lời khuyên của bạn, về điều này và thực sự đánh giá cao sự giúp đỡ của bạn.

Trả lời

11

Để trả lời câu hỏi của bạn:

Am Tôi sai lầm về chuyển ra bên ngoài chi phí không được áp dụng cho Azure các trang web?

Đáng buồn thay, Có :) Mọi dữ liệu đi ra khỏi Trung tâm dữ liệu Azure (DC) phải chịu chi phí chuyển đi và bao gồm dữ liệu được phân phát qua trang web của bạn.

Đang truy cập bộ nhớ blob từ trang html của trình duyệt có thẻ và src phân phối, được coi là truyền dữ liệu đi; ngay cả khi trang html xuất phát từ một miền trang web xanh lam? Ý tôi là nó chỉ miễn phí khi mã bên máy chủ truy cập bộ nhớ, chứ không phải ứng dụng khách html?

Có. Hãy nhớ rằng trình duyệt đang tiêu thụ dữ liệu nằm bên ngoài Azure DC.

Là bất kỳ chi phí truyền dữ liệu lưu thông qua phương pháp 2 (nếu thực sự có một), chỉ đơn giản là hủy bỏ do chi phí khác nhau kết hợp với phương pháp web api (như chi phí băng thông)?

số Bởi vì dữ liệu cuối cùng chảy ra khỏi Azure DC (không quan trọng nếu nó là thông qua lưu trữ trực tiếp hoặc qua api web).

Am Tôi sai lầm về hiệu quả lợi ích của truy cập trực tiếp đến việc lưu trữ blob , hoặc có thể sai về chi phí của các yêu cầu web api?

Bạn chắc chắn sẽ nhận được nhiều lợi ích hiệu suất hơn bằng cách cung cấp quyền truy cập trực tiếp vào bộ nhớ blob hơn là chuyển dữ liệu qua api web. Ngoài ra, bạn cũng sẽ tăng độ trễ.

Solution Khuyến nghị

Đối với ứng dụng của bạn, tôi có thể khuyên bạn nên nhìn vào Shared Access Signature chức năng được cung cấp bởi Azure Blob lưu trữ. Tôi tin rằng điều này sẽ cải thiện đáng kể hiệu suất của ứng dụng của bạn.

Để tải lên, bạn có thể tạo URL SAS sẽ tải lên quyền và yêu cầu ứng dụng web của bạn tải lên trực tiếp các tệp trong bộ nhớ blob. Bằng cách đó, dữ liệu tải lên sẽ không được định tuyến thông qua máy chủ của bạn. Tôi đã viết một số bài đăng trên blog trên cùng mà bạn có thể tìm thấy hữu ích:

http://gauravmantri.com/2013/02/16/uploading-large-files-in-windows-azure-blob-storage-using-shared-access-signature-html-and-javascript/

http://gauravmantri.com/2013/12/01/windows-azure-storage-and-cors-lets-have-some-fun/

Đối với tải hình ảnh, một lần nữa có API Web của bạn trả lại một URL SAS thay vì đọc các dữ liệu hình ảnh từ lưu trữ blob và sau đó truyền dữ liệu đó trở lại trình duyệt của khách hàng.

+0

Đó là một câu trả lời tuyệt vời. Cảm ơn –

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