2010-03-11 21 views
5

Tôi đang ở giai đoạn đầu của việc thiết kế một ứng dụng dựa trên Azure. Một trong những điều thu hút tôi với Azure là khả năng mở rộng, do sự thay đổi của nhu cầu mà tôi có thể mong đợi. Vì vậy, tôi đang cố gắng để giữ cho mọi thứ lỏng lẻo cùng nhau để tôi có thể thêm các trường hợp khi tôi cần.Thực tiễn tốt nhất cho (trên) sử dụng hàng đợi Azure

Các đề xuất tôi đã thấy để kiến ​​trúc một ứng dụng cho Azure bao gồm việc giữ logic vai trò web ở mức tối thiểu và xử lý được thực hiện trong vai trò của nhân viên, sử dụng hàng đợi để giao tiếp và một số loại lưu trữ phía sau như SQL Azure hoặc Azure Những cái bàn. Điều này có vẻ như một ý tưởng hay đối với tôi vì tôi có thể mở rộng một hoặc cả hai phần của ứng dụng mà không gặp bất kỳ vấn đề nào. Tuy nhiên tôi tò mò nếu có bất kỳ thực hành tốt nhất (hoặc nếu bất cứ ai có bất kỳ kinh nghiệm) cho khi nó là tốt nhất để chỉ có vai trò web nói chuyện trực tiếp đến các cửa hàng dữ liệu so với gửi dữ liệu của hàng đợi?

Tôi đang suy nghĩ về trường hợp tôi có một chèn đơn giản để làm từ vai trò web - trong khi tôi có thể thiết lập như một tin nhắn, gửi nó trên hàng đợi, và có một vai trò công nhân nhặt nó lên và làm chèn, nó có vẻ như rất nhiều xử lý đôi. Tuy nhiên tôi cũng đánh giá cao rằng nó có thể là trường hợp đó là tốt hơn trong thời gian dài, trong trường hợp vai trò web bị quá tải hoặc phức tạp hơn logic kết thúc lên được yêu cầu cho chèn.

Tôi nhận thấy đây có thể là trường hợp câu trả lời là "nó phụ thuộc hoàn toàn vào tình huống, kiểm tra chỉ số perf của bạn" - nhưng nếu có ai có bất kỳ suy nghĩ nào tôi sẽ rất cảm kích!

Cảm ơn

John

Trả lời

3

tôi sẽ nói điều gì đó giống như một chèn không đòi hỏi vai trò người lao động. Bạn sẽ có một chèn vào hàng đợi anyway, vì vậy bạn sẽ không được tiết kiệm bất cứ điều gì trong vai trò web. Điều tốt nhất là để cô lập chèn của bạn (và tất cả các truy cập dữ liệu) vào một lớp riêng biệt (hoặc các lớp) trong vai trò web của bạn. Điều này sẽ cho phép bạn tách phần còn lại của mã trong vai trò web của bạn khỏi hệ thống lưu trữ dữ liệu cụ thể mà bạn đang sử dụng. Điều đó làm cho việc thay đổi lưu trữ dữ liệu sau này dễ dàng hơn nhiều. Nếu chèn của bạn kết thúc cần xử lý nhiều hơn, bạn có thể thêm hàng đợi và vai trò của nhân viên khi cần, nhưng tôi vẫn muốn nói rằng bạn muốn chèn trực tiếp vào bộ nhớ bảng và sau đó relegate tính toán hoặc logic nghiệp vụ khác vai trò công nhân. Sau đó, vai trò công nhân đó có thể xử lý các tin nhắn từ hàng đợi hoặc chỉ lưu trữ bảng truy vấn cho các bản ghi mới (chưa xử lý).

Cách tôi nhìn thấy bằng cách sử dụng hàng đợi để giao tiếp với vai trò công nhân trở thành tình cảm nhất là khi có các phép tính hoặc xử lý khác cần được thực hiện với dữ liệu. Một trong những tôi đã được sử dụng nhiều nhất thực sự là một trong những mẫu trong Azure SDK cho thấy làm thế nào để làm cho hình ảnh thu nhỏ. Vai trò web của tôi chèn hình ảnh được tải lên vào bộ nhớ blob Azure và mô tả liên quan và các trường khác vào bộ nhớ bảng Azure. Nó cũng đặt một thông báo trên hàng đợi cho phép vai trò của nhân viên biết rằng có một hình ảnh mới cần tạo hình thu nhỏ. Tôi thực sự tạo ra một vài kích thước khác nhau của mỗi hình ảnh để sử dụng trong các phần khác nhau của trang web. Vai trò công nhân chỉ tạo các hình thu nhỏ đó và không cần phải gửi bất kỳ loại thông báo nào trở lại vai trò web. Bất kỳ địa điểm nào sử dụng hình ảnh đều có logic để sử dụng tải lên ban đầu hoặc trình giữ chỗ khác khi hình thu nhỏ chưa có sẵn.

Quy trình tương tự này chỉ có thể sử dụng truy vấn trên bộ nhớ blob để tìm hình ảnh nào vẫn yêu cầu xử lý nếu bạn muốn bỏ qua hàng đợi hoàn toàn. Tôi đã không thực hiện một quyết định về nếu tôi thích bằng cách sử dụng hàng đợi hoặc chỉ bỏ phiếu dữ liệu để tìm hồ sơ cần xử lý vai trò của nhân viên. Tôi cho rằng hàng đợi hiệu quả hơn, nhưng nó cũng làm tăng thêm một lớp phức tạp và thêm một điểm hỏng tiềm ẩn.

Chỉnh sửa để trả lời nhận xét: khi tôi đăng câu trả lời này tôi đã nói chỉ sử dụng hình ảnh có độ phân giải đầy đủ trong giao diện người dùng nếu hình thu nhỏ không có sẵn. Bây giờ tôi đang làm việc trên một trang web chỉ sử dụng hình thu nhỏ mặc định có nội dung "đang xử lý" cho đến khi hình thu nhỏ được tạo sẵn có. Lựa chọn là của bạn và thực sự phụ thuộc vào các yêu cầu của giao diện người dùng của ứng dụng.

Một điều bạn có thể làm là sử dụng SignalR hoặc một chút AJAX để thông báo cho trình duyệt của người dùng khi có hình thu nhỏ mới mà không phải chờ tải trang mới.

Xem hình thu nhỏ trình giữ chỗ trong khi xử lý hình ảnh đang diễn ra trên chuỗi công nhân là trải nghiệm người dùng tốt hơn nhiều so với việc chờ trang tải trong khi hình thu nhỏ được tạo.

+0

Khi bạn làm điều này, bạn cho người dùng thấy điều gì? Nhiều người dùng sẽ thấy hình thu nhỏ trong giao diện người dùng khi hình ảnh được tải lên, vì vậy trong khi tôi có thể thấy giá trị trong việc tách hình thu nhỏ thành vai trò công nhân, bạn không bị bỏ sót với vấn đề UX xung quanh nội dung hiển thị cho đến khi xử lý hoàn chỉnh, và làm thế nào để biết khi nào? – dumbledad

5

Dưới đây là phép ẩn dụ của tôi, làm những gì bạn sẽ với nó

Hãy tưởng tượng bạn đang bước vào một hộp đêm, rằng biên giới trên một diện tích tinh ranh, nhưng là alright khi bạn đang ở bên trong.

Quản lý sử dụng một số bouncers thịt lớn trên cửa để sắp xếp raff riff. Nếu bạn là một thằng ngốc, bạn sẽ không tham gia. Mở rộng ẩn dụ nhiều như bạn thích ở đây.

Nếu bạn không sao, họ sẽ cho bạn ở cửa, và bạn tham gia, có, Hàng đợi thanh toán tại Phòng vé để vào câu lạc bộ thực tế.

Tùy thuộc vào bóng đá hay gì đó, bạn có thể muốn thêm một số bouncers trên cửa, nhưng điều này có thể độc lập với nhân viên của Box Office. Đêm bận rộn, bạn có thể mở một cửa sổ khác để lấy tiền nhanh hơn, nhưng những gì bạn có thể sẽ không làm cho các bouncers xử lý tiền mặt. Họ đã có những thứ khác để làm với bàn tay của họ.

Vì vậy:

  • bouncers - vai trò web. Xử lý lưu lượng truy cập đến , đẩy lùi yêu cầu không hợp lệ và thêm yêu cầu hợp lệ tới:
  • Hàng đợi - Hàng đợi!
  • Box Office - vai trò người lao động, thực hiện một vai trò khác nhau đối với webrole

Vì vậy, không có lý do tại sao vai trò web của bạn không thể làm được vai trò phòng vé, nhưng có lẽ tốt nhất là không trong dài hạn

đó là phép ẩn dụ của tôi

Toby

1

Sử dụng Queues Distributed (Azure hay của Amazon hoặc khác) là khá đáng ngạc nhiên tinh tế. Tôi đã đăng một mục blog covering frequent subtleties of Azure Queues. Tóm lại: Tôi đề nghị một cách cẩn thận trừu tượng hóa logic cơ sở hạ tầng của bạn (hỗ trợ hàng đợi) từ logic nghiệp vụ của bạn (nội dung và xử lý hàng đợi).

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