2012-04-15 47 views
8

Tôi đang đặt cùng một điều khiển web asp.net đơn giản, đó là kết quả của một bài đăng hình thức ajax chèn một bản ghi vào cơ sở dữ liệu MSQL. Có thể là trang chứa điều khiển này sẽ nhận được hàng nghìn lượt truy cập trong một khoảng thời gian nhỏ và tôi lo lắng về vấn đề hiệu suất khi mở kết nối cơ sở dữ liệu, chèn bản ghi và sau đó đóng kết nối cho từng yêu cầu .Là tách lớp web và cơ sở dữ liệu thông qua MSMQ cần thiết hoặc quá mức cần thiết?

Giải pháp đã xảy ra với tôi là làm cho điều khiển web đặt thư vào hàng đợi MSMQ và có Dịch vụ Windows trên máy chủ định kỳ đọc hàng đợi và thực hiện chèn hàng loạt.

Điều đó nghe có vẻ giống như một kiến ​​trúc hợp lý do web và máy chủ cơ sở dữ liệu đang chạy trên cùng một máy. Nghe có cần thiết không?

Từ những gì tôi đã đọc trên cơ sở dữ liệu, hầu hết các lợi ích của việc sử dụng MSMQ là làm với khả năng phục hồi hơn là hiệu suất, vì vậy tôi có thể sủa cây sai.

Lời khuyên nào sẽ được rất biết ơn đánh giá cao

Rất cám ơn

Pete

Trả lời

10

yêu cầu chế biến ẩn theo cách này là một mô hình chung cho khi bạn đang đối phó với một số lượng lớn các yêu cầu.

Cho dù bạn nên hoặc thậm chí có thể làm điều này được dựa trên một số yếu tố.

Yếu tố chính là: người gọi của bạn có cần xem phản hồi cho yêu cầu của họ một cách đồng bộ không?

Điều tôi ngụ ý là người gọi phải biết, ngay lập tức và chắc chắn tuyệt đối, nếu cơ sở dữ liệu đã cam kết thành công dữ liệu của họ như là một phần của phản hồi cuộc gọi? Nếu vậy, sau đó yêu cầu xử lý ngoại tuyến không thực sự là một lựa chọn. Tuy nhiên, nếu chấp nhận được rằng người gọi có thể được gửi phản hồi cho biết yêu cầu của họ sẽ được xử lý ngoại tuyến (và mọi phản hồi bắt buộc cũng được gửi ngoại tuyến) thì việc sử dụng hàng đợi chắc chắn sẽ mang lại lợi ích cho kiến ​​trúc tổng thể của bạn.

Điều đầu tiên sẽ được hưởng lợi là các vấn đề về tính khả dụng của giao diện người dùng.

Nếu bạn đang xử lý hàng nghìn yêu cầu trong một khoảng thời gian ngắn và mỗi yêu cầu sẽ bị xóa và chèn dữ liệu vào cơ sở dữ liệu, rất có thể bạn sẽ gặp phải sự cố không tồn tại luồng điều phối nào yêu cầu dịch vụ đến.

Tuy nhiên, bằng cách giảm số lượng công việc back-end IIS đang thực hiện (ghi vào hàng đợi cục bộ thực sự rẻ so với cuộc gọi cơ sở dữ liệu), bạn cũng giảm khả năng thất bại dựa trên tính khả dụng.

Thứ hai bằng cách sử dụng hàng đợi, bạn sẽ có phương tiện điều chỉnh lưu lượng truy cập ngược, vì bạn có quyền kiểm soát thông lượng trên xử lý mặt sau.

Ví dụ: bạn có thể có một quy trình đọc hàng đợi đơn luồng, xóa một yêu cầu và xử lý yêu cầu đó vào cơ sở dữ liệu. Nếu bạn tìm thấy bạn có tin nhắn xây dựng trong hàng đợi bạn chỉ có thể quy mô ra các dịch vụ đọc hàng đợi bằng cách lưu trữ nhiều trường hợp của nó.

Điều này có nghĩa là bạn đang giảm khả năng nhận các vấn đề tranh chấp cơ sở dữ liệu vì bạn có quyền kiểm soát nhiều hơn số lượng chuỗi truy cập trên cơ sở dữ liệu cùng một lúc.

Vì vậy, bằng cách sử dụng xếp hàng bạn sẽ gặp phải ít lỗi hơn và có chi phí quản lý thấp hơn, đó là điểm nổi bật của các ứng dụng được viết tốt. Điều này đặc biệt là khi bạn đang xem xét lưu trữ cơ sở dữ liệu của bạn trên máy chủ web của bạn!

Ngoài ra, bạn cần phải đọc một mẫu kiến ​​trúc có tên là CQRS, một trong các hiệu trưởng trung tâm là làm cơ sở dữ liệu của bạn viết ngoại tuyến.

+0

Câu trả lời nứt Hugh, cảm ơn rất nhiều vì điều đó. Xác nhận những gì tôi nghi ngờ và nhiều hơn nữa! –

+0

+ 1 để có sự so sánh và giải thích tuyệt vời về các tùy chọn. Cảm ơn nhiều. –

2

Kiến trúc không đồng bộ có nhiều lợi ích (như được xác định bởi Hugh) nhưng chắc chắn có chi phí và độ phức tạp cao hơn được liên kết với nó. Điều này cần được cân bằng cẩn thận. Từ 2 thành phần (ứng dụng web và DB), bạn sẽ phải phát triển, duy trì và giám sát 4 thành phần (ứng dụng web, DB, dịch vụ theo đợt, MSMQ). Bạn nói rằng máy chủ web và máy chủ DB là cùng một máy mà là lạ cho các yêu cầu hiệu suất của bạn. Ngày mai bạn có thể phải lưu trữ ứng dụng web, dịch vụ theo lô và DB là 3 máy riêng biệt. Bây giờ MSMQ liên quan đến mạng là tốt. Một điều nữa có thể đi sai. Bộ xử lý hàng loạt đa luồng cũng không dễ dàng, điều gì sẽ xảy ra nếu bạn phải xử lý từng thông báo trong chuỗi chúng được tạo ra (ít nhất là đối với một thực thể nhất định) logic có thể trở nên phức tạp.

Nếu có thể đo cả giải pháp và quyết định.

+2

Tôi có quan điểm của bạn về giám sát trên không, có, có nhiều thứ để theo dõi. Tuy nhiên, hoàn toàn từ chối rằng cách tiếp cận là phức tạp hơn. Một giải pháp có mức độ khớp nối cao là phức tạp hơn để triển khai và duy trì. Các giải pháp kết hợp đơn giản đơn giản hơn mặc dù có nhiều bộ phận chuyển động hơn. Mỗi phần đều có trách nhiệm rõ ràng. Ngoài ra, không cần dịch vụ hàng loạt đa luồng, chỉ cần một dịch vụ nghe hàng đợi luồng đơn. Đồng ý rằng quy mô ra có thể có hiệu lực thứ tự giao hàng nhưng điều này là không thể tránh khỏi. MSMQ cũng là một phần của hệ thống phụ Windows và không cần phải "phát triển". –

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