Báo cáo nghiên cứu khoa học: " ỨNG DỤNG THÔNG BÁO TRUY VẤN VÀ XỬ LÝ KHÔNG ĐỒNG BỘ ĐỂ XÂY DỰNG TRANG .ASPX" docx

9 293 0
Báo cáo nghiên cứu khoa học: " ỨNG DỤNG THÔNG BÁO TRUY VẤN VÀ XỬ LÝ KHÔNG ĐỒNG BỘ ĐỂ XÂY DỰNG TRANG .ASPX" docx

Đang tải... (xem toàn văn)

Thông tin tài liệu

TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 296 ỨNG DỤNG THÔNG BÁO TRUY VẤN VÀ XỬ LÝ KHÔNG ĐỒNG BỘ ĐỂ XÂY DỰNG TRANG .ASPX USING QUERY NOTIFICATION AND ASYNCHRONOUS PROCESSING FOR BUILDING .ASPX WEB PAGES Nguyễn Trần Quốc Vinh Trường Đại học Kinh tế, Đại học Đà Nẵng TÓM TẮT Thông thường, máy chủ web phải thường xuyên truy vấn đến hệ quản trị cơ sở dữ liệu, kể cả khi không có sự thay đổi dữ liệu nào. Ngoài ra, hầu hết các trang web được xây dựng dựa trên kỹ thuật xử lý đồng bộ, trình duyệt phải thường xuyên chủ động gửi yêu cầu đến máy chủ web để truy vấn nội dung mới. Tương ứng, máy chủ web phải thường xuyên xử lý các yêu cầu và trả lời trình duyệt ngay lập tức. Những hạn chế đó làm giảm mạnh khả năng phản hồi của máy chủ web và thậm chí hệ quản trị cơ sở dữ liệu. Bài viết giới thiệu về kỹ thuật thông báo truy vấn trong SQL Server và kỹ thuật xử lý không đồng bộ các yêu cầu của ASP.NET. Trên cơ sở đó, bài viết đề nghị cách thức ứng d ụng có cải tiến các kỹ thuật đó để xây dựng các trang web cập nhật dữ liệu theo thời gian thực và đáp ứng số lượng lớn yêu cầu đồng thời. ABSTRACT It is a commonplace that a web server frequently queries the database management system even though there are no data change at that time. Additionally, most of the web pages are built on the synchronous handler technique so the web browsers must periodically send requests to the web server for new contents. Correspondingly, the web server must process those requests and answer the browsers immediately. These disadvantages reduce responsive abilities of the web server and even the database management system. This paper presents a query notification technique in the SQL Server and techniques for the request asynchronous processing in ASP.NET programming. In addition, an approach to the improved applications of those techniques to the building of the ASP.NET web pages with real-time data refreshment to meet the requirement of great numbers of concurrent requests is also offered. 1. Đặt vấn đề Thông thường, khi xuất hiện một yêu cầu (request, YC) từ trình duyệt, máy chủ web (MCW) sẽ truy vấn dữ liệu từ hệ quản trị cơ sở dữ liệu (CSDL). Từ kết quả truy vấn dữ liệu, MCW sẽ chuẩn bị kết quả và trả lời trình duyệt. Kết quả đó có thể chứa toàn bộ nội dung kết quả truy vấn, cũng có thể chỉ chứa những khác biệt giữa hai lần truy vấn cuối cùng. Nếu nó chỉ chứa những khác biệt, MCW phải thực hiện việc so sánh các kết quả của hai lần truy vấn khác nhau. Trong mọi trường hợp, số lần hệ quản trị CSDL đều phải thực thi truy vấn tỉ lệ thuận với số lần MCW nhận được YC từ trình duyệt. Nếu không có sự thay đổi dữ liệu nào giữa hai lần truy vấn cuối cùng, việc thực thi truy vấn của hệ quản trị CSDL và việc so sánh các kết quả truy vấn là vô nghĩa, thậm TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 297 chí, có thể nói là tiêu cực đối với cả hệ quản trị CSDL và MCW. Kỹ thuật thông báo truy vấn (query notification) của SQL Server có thể giúp giải quyết vấn đề này. Với các trang web nói chung và các trang web ASPX (ASP.NET) nói riêng được xây dựng theo cách thông thường, trình duyệt phải thường xuyên gửi YC đến MCW một cách tuần hoàn để có được nội dung mới nhất của một trang hoặc một phần trang web, kể cả khi không có bất kỳ sự thay đổi dữ liệu nào giữa hai lần YC. Máy chủ web phải thường xuyên tiếp nhận, xử lý các YC đó và trả lại kết quả chứa nội dung có thể hoàn toàn trùng lặp với nội dung hiện tại của trang web. Thường các trang web này được lập trình dựa trên cách thức xử lý đồng bộ các YC dẫn đến khả năng xử lý đồng thời các YC của MCW giới hạn trong số chỉ đến hàng chục. Ngay cả khi các YC được xử lý dựa trên kỹ thuật không đồng bộ – một kỹ thuật hầu như không được lập trình viên chú ý đến, sự mở rộng về giới hạn số lượng YC được xử lý đồng thời cũng chưa phải thực sự lớn vì gặp phải giới hạn về số lượng tiến trình. Bài viết giới thiệu về kỹ thuật thông báo truy vấn trong hệ quản trị CSDL SQL Server, kỹ thuật xử lý không đồng bộ các YC trong lập trình ASP.NET và đề nghị cách thức ứng dụng có cải tiến các kỹ thuật đó để xây dựng các trang web cập nhật dữ liệu theo thời gian thực, “chủ động” từ phía MCW ngay khi có thay đổi trong CSDL và đáp ứng đồng thời số lượng lớn, có thể lên đến hàng ngàn YC. 2. Các kỹ thuật cơ bản 2.1 Cập nhật đồng bộ theo yêu cầu của trình duyệt 2.1.1 Làm tươi toàn bộ trang web Trong các trình duyệt web, để làm tươi một trang web, thông thường người dùng sẽ bấm phím F5 để chọn lệnh Refresh. Khi đó, trình duyệt sẽ gửi YC đến MCW để được nhận nội dung mới nhất của toàn bộ trang web. Ngoài ra, lập trình viên có thể cài đặt để trình duyệt tự động làm tươi toàn bộ trang web thông qua các bộ đếm thời gian. Khi nhận được YC làm tươi toàn bộ trang web, MCW sẽ thực hiện việc xử lý cho toàn bộ trang web và trả lại kết quả này cho trình duyệt. MCW phải thực hiện nhiều xử lý, thường là không cần thiết vì những phần nội dung mới này không khác so với nội dung cũ tương ứng, trong khi vẫn yêu cầu tài nguyên hệ thống của máy chủ và cả băng thông mạng cũng có thể bị ảnh hưởng. Để giải quyết vấn đề này, người ta đưa vào sử dụng công nghệ AJAX (Asynchronous JavaScript and XML) [1– 4]. Công nghệ này cho phép trình duyệt chỉ làm tươi những phần nhỏ, chứ không nhất thiết phải làm tươi toàn bộ trang web. 2.1.2 Ajax UpdatePanel trong Visual Studio Một trong những môi trường lập trình web, có thể nói và phổ biến nhất là Microsoft Visual Studio có tích hợp AJAX. Cụ thể, từ phiên bản 2008 trở đi, có tích hợp nhóm công cụ gọi là AJAX Extensions, trong đó có công cụ UpdatePanel. Trang web có thể được chia thành nhiều phần nhỏ. Mỗi phần nhỏ đó có thể là một Update Panel. Update Panel cho phép làm tươi chỉ phần trang web nằm trên nó theo kịch bản: TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 298 Trình duyệt gửi YC làm tươi phần trang web nằm trên UpdatePanel đến MCW. Khi nhận được YC này, MCW thực hiện xử lý phần trang web tương ứng và gửi phần web này đến trình duyệt web. Phụ thuộc vào các chế độ khác nhau, việc gửi YC làm tươi phần trang web thuộc một UpdatePanel đến MCW có thể được thực hiện khi xảy ra sự kiện gọi lệnh làm tươi từ chính nó, hoặc một thành phần khác của trang web, hoặc một UpdatePanel khác chứa nó được lệnh làm tươi, hoặc điều kiện cho việc làm tươi xuất hiện. 2.1.3 Ajax chỉ cập nhật dữ liệu Rõ ràng, cách tiếp cận kiểu UpdatePanel giúp tăng đáng kể tốc độ duyệt web, cụ thể là làm giảm đáng kể việc xử lý cũng như vẽ lại trang web của trình duyệt, làm giảm đáng kể việc xử lý và sử dụng nguồn của MCW, cũng như làm giảm đáng kể khối lượng thông tin được truyền tải qua mạng khi người dùng duyệt web. Tuy nhiên, cách tiếp cận này vẫn có thể được cải thiện. Thay vì gửi đến MCW YC làm tươi một phần trang web, cụ thể là phần thuộc về một UpdatePanel, trình duyệt chỉ gửi YC làm tươi những dữ liệu liên quan đến phần trang web đó. Khi nhận được dữ liệu mới, thường là các tập được định dạng theo chuẩn XML hoặc JSON, các JavaScript sẽ phân tích và cập nhật lên phần trang web cần cập nhật. Việc vẽ lại giao diện trang web được thực hiện trên trình duyệt. Cách tiếp cận này được minh hoạ như là một kỹ thuật thể hiện dữ liệu theo thời gian thực [2]. Thông thường, việc cập nhật được tiến hành một cách tự động và tuần hoàn theo một chu kỳ nào đó. Ví dụ, quan sát và phân tích một số trang web thể hiện thông tin giao dịch chứng khoán, không khó để thấy rằng, kể cả khi không có thay đổi dữ liệu nào, có thể trình duyệt vẫn gửi YC cập nhật đến MCW một cách tuần hoàn; MCW vẫn phải tiếp nhận các YC, xử lý và gửi lại kết quả xử lý các YC cho trình duyệt. Trình duyệt vẫn nhận các tập dữ liệu từ MCW một cách tuần hoàn. Như trên hình 1, các tập dữ liệu funcPrice.aspx, funcOTC_DNSC.aspx và funcPUTAD_EXEC.aspx được MCW gửi đến trình duyệt cứ sau mỗi 5s. Với lý luận thông tin giao dịch chứng khoán thay đổi thường xuyên với tần suất cao trong khoảng thời gian có thể xảy ra giao dịch thực tế trong ngày theo quy định, một số các trang web thể hiện thông tin giao dịch chứng khoán khác chỉ “bật” tính năng tự động gửi YC làm tươi dữ liệu một cách tuần hoàn vào những khoảng thời gian xảy ra giao dịch thực tế là hợp lý. Tuy nhiên, trong những khoảng thời gian đó, cho dù không xảy ra một sự thay đổi dữ liệu nào, trình duyệt vẫn tự động gửi YC cập nhật, nhận và xử lý các tập dữ liệu “cũ” từ MCW. Như thế, đặc biệt trong trường hợp các trang web thể hiện dữ liệu thay đổi với tần suất không cao, nguồn của hệ thống nói chung bị hao phí, có thể là một khoản rất lớn, mà không mang lại lợi ích nào cả. 2.2 Kỹ thuật xử lý không đồng bộ Cách thức xử lý các YC như đã đề cập trên đây của MCW được gọi là xử lý đồng bộ dùng giao diện IHttpHandler của thư viện ASP.NET [5]. IIS 6 giới hạn số lượng các tiến trình, còn IIS 7 giới hạn số lượng các YC đồng thời. Mỗi tiến trình xử lý TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 299 Hình 1. Trang thể hiện thông tin giao dịch chứng khoán một YC. Đối với mỗi MCW, chỉ một số lượng giới hạn tiến trình có thể được thực thi đồng thời. Mỗi trình xử lý đồng bộ sẽ kéo theo một quá trình xử lý bên ngoài – tiến trình xử lý tạo ra kết quả để trả lại cho trình duyệt. Nếu quá nhiều người dùng YC các trình xử lý HTTP đồng bộ, ASP.NET và có thể cả hệ điều hành sẽ nhanh chóng vượt giới hạn về số lượng tiến trình, bởi vì có quá nhiều tiến trình bị khoá và chờ đợi kết quả thực thi các quá trình xử lý bên ngoài. Nếu chỉ xử lý đồng bộ các YC, số lượng truy cập đồng thời đến trang web sẽ được giới hạn trong số lượng YC tối đa có thể tiếp nhận cũng như số lượng tiến trình có thể xử lý đồng thời tối đa đã được cấu hình cho MCW. Các con số này thường chỉ lên đến hàng chục. Một cách tiếp cận khác, đó là dùng các trình xử lý HTTP không đồng bộ (Asynchronous HTTP Handler) bằng cách triển khai giao diện IHTTPAsynHandler của thư viện ASP.NET [5–8]. Các trình xử lý không đồng bộ phải được đăng ký trong tệp cấu hình của MCW giống như các trình xử lý đồng bộ. Trong xử lý không đồng bộ, khi xuất hiện một YC, một tiến trình T – AsyncHandler xử lý nó sẽ bắt đầu bằng việc gọi phương thức BeginProcessRequest. Ở bước này, tiến trình T sẽ tạo ra một đối tượng AsyncRequestState chứa thông tin về YC và sẽ khởi chạy một tiến trình khác T’ thực hiện một công việc kéo dài về mặt thời gian và không phụ thuộc vào ThreadPool. Tiến trình T’ này được chuyển giao cho ASP.NET xử lý. Còn T, nó sẽ trả lại ngay lập tức về ThreadPool với trạng thái “Pending” và ThreadPool được giải phóng. T ở trong trạng thái đó cho đến khi nhận được một callback – tín hiệu kết thúc quá trình xử lý từ tiến trình xử lý bên ngoài T’ và YC kết thúc. Khi đó, trả lời cho YC được giữ trong bộ nhớ và chờ đợi cho đến khi tiến trình kết thúc. Điều này ngăn không cho phép khoá tiến trình và nâng cao năng suất của hệ thống [5]. Rõ ràng, số lượng YC được xử lý đồng thời lúc này có thể lớn hơn số lượng các tiến trình. IIS thường xuyên kiểm tra số lượng YC đang được xử lý, nếu vượt quá giới hạn, nó sẽ đưa YC vào hàng đợi. Hàng đợi này thường được cấu hình để có thể tiếp nhận số lượng YC tối đa tuỳ thuộc vào khả năng xử lý của MCW. Khi số YC vượt quá giới hạn, IIS sẽ đưa ra thông báo lỗi HTTP 503: MCW quá bận. Nếu số lượng YC đang xử lý chưa vượt giới hạn, IIS sẽ tiếp nhận YC tiếp theo. Ở pha thứ hai, việc gọi EndRequest đánh dấu sự kết thúc của YC. Khi đó, kết quả xử lý YC sẽ được chuẩn bị và gửi đến trình duyệt. Nội dung trả lời có thể được chuẩn bị trong suốt khoảng thời gian từ khi gọi BeginProcessRequest cho đến khi EndProcessRequest được gọi. Cách thức xử lý YC như ở pha thứ nhất gây cảm giác bất lợi, vì rằng YC của người dùng không được thực hiện nhanh chóng hơn. Trang web, theo đó là trình duyệt và người dùng cuối, vẫn phải chờ kết quả xử lý từ tiến trình trên máy chủ kết thúc. Như vậy, đối với mỗi người dùng cuối cụ thể thì không có bất cứ lợi ích rõ ràng nào. Tuy TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 300 nhiên, đối với tất cả thì có lợi, kết quả xử lý sẽ nhanh hơn đối với tất cả, vì sẽ giảm đáng kể khả năng ThreadPool của MCW bị quá tải về tiến trình dẫn đến làm chậm hệ thống, thậm chí bị treo. Sau khi nhận được trả lời, trình duyệt lặp lại gửi YC đến MCW. Như vậy, có thể kết quả thực thi truy vấn không hề thay đổi giữa các lần gửi YC khác nhau của trình duyệt. Nhưng MCW vẫn phải tiếp nhận YC và xử lý. Cũng dễ thấy trong xử lý không đồng bộ, tiến trình xử lý bên ngoài T’ vẫn phải luôn luôn nằm trong trạng thái hoạt động và chờ đợi sự kiện thay đổi dữ liệu. Khi số lượng tiến trình này đủ lớn, có khả năng chúng vẫn sẽ ảnh hưởng tiêu cực đến công việc của MCW. 2.3 Thông báo truy vấn trong SQL Server Tính năng thông báo truy vấn được đưa vào SQL Server 2005 cùng với ADO.NET 2.0 [9] cho phép ứng dụng yêu cầu một thông báo từ SQL Server khi kết quả thực thi một truy vấn thay đổi. Với kỹ thuật này, ứng dụng chỉ truy vấn dữ liệu khi nào có thay đổi trong CSDL dẫn đến thông báo về việc thay đổi so với kết quả truy vấn lần kế trước mà ứng dụng đã nhận được. Chẳng hạn, một trang web thể hiện bảng đơn giá các mặt hàng được lưu trong bộ nhớ của MCW. Khi đơn giá hoặc danh sách mặt hàng thay đổi trong CSDL, trình xử lý sự kiện trong ứng dụng sẽ nhận sự kiện thông báo và xoá bộ nhớ. Sau đó, khi người dùng yêu cầu trang web, MCW sẽ truy vấn bảng giá hiện thời và tái thực hiện đăng ký thông báo. Nếu đơn giá chưa thay đổi trong CSDL, MCW sẽ không nhận được thông báo và vẫn sử dụng bảng giá trong bộ nhớ để trả lời các YC của người dùng. Như vậy, thay vì viết mã nguồn để thực thi tuần hoàn một truy vấn để đảm bảo kết quả là hiện tại, lập trình viên có thể thiết kế các ứng dụng tự động được thông báo khi kết quả thực thi truy vấn đã bị lỗi thời. Hệ quản trị CSDL dùng các “thuê bao” thông báo để theo dõi các YC thông báo truy vấn. Khi xuất hiện một l ệnh thực thi bởi đối tượng SqlCommand bao gồm truy vấn kèm với đối tượng thông báo truy vấn, hoặc SqlDependency hoặc SqlNotificationRequest, CSDL sẽ đăng ký YC giống như là một “thuê bao thông báo” và sau đó thực thi truy vấn. Hệ quản trị CSDL dùng Service Broker để chuyển tải các thông điệp thông báo. Vì thế, Service Broker cần phải được kích hoạt cho CSDL để có thể sử dụng dịch vụ thông báo truy vấn. Ngoài ra, để một tài khoản có thể đăng ký và nhận các thông báo truy vấ n, cần phải cung cấp quyền SUBSCRIBE QUERY NOTIFICATIONS cho tài khoản đó [9]. Mỗi thuê bao thông báo truy vấn có một vòng đời tối đa riêng biệt có thể thiết lập được. Sau vòng đời tối đa đó, SQL Server xoá bỏ thuê bao và tạo ra một thông điệp thông báo cho ứng dụng, rằng thông báo không còn được kích hoạt nữa, và SQL Server không còn theo dõi các thay đổi đối với truy vấn. Mỗi thông điệp nói chung bao gồm nguyên nhân dẫn đến thông điệp được tạo ra và thông báo bao gồm cả thời điểm thông báo được sản sinh. TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 301 Thông báo truy vấn hoạt động dựa trên công nghệ khung nhìn thực (indexed view), công nghệ được đưa vào SQL Server một cách đầy đủ từ phiên bản 2005. Thông báo truy vấn chỉ chấp nhận những truy vấn thoả mãn các điều kiện giống như các điều kiện đối với các truy vấn để tạo khung nhìn thực [10]. Công nghệ khung nhìn thực không làm việc theo cách thực thi truy vấn một cách tuần hoàn và so sánh kết quả của hai lần thực thi cuối cùng để đưa ra kết luận về sự thay đổi – một kỹ thuật quá thô sơ và không hiệu quả. Công nghệ khung nhìn thực sử dụng nhiều kỹ thuật khác nhau để phân tích mỗi lệnh thao tác dữ liệu (insert, update, delete) nhằm xác định một thay đổi dữ liệu nào đó có thể dẫn đến thay đổi kết quả thực thi truy vấn hay không. Rõ ràng, thông báo truy vấn hữu ích cho cả các ứng dụng lưu trữ dữ liệu trong bộ nhớ truy cập nhanh (cache) và cả SQL Server. Một khi máy chủ CSDL bị quá tải, SQL Server có thể sản sinh ra một thông điệp thông báo truy vấn cho mỗi thuê bao. Như thế có lợi hơn so với việc ứng dụng thực thi truy vấn nhiều lần và so sánh các kết quả để xác định xem các kết quả của truy vấn có thay đổi hay không. 3. Cập nhật “chủ động” từ phía MCW khi dữ liệu nguồn thay đổi Trong mục này, tác giả sẽ trình bày về sự cải tiến kỹ thuật xử lý không đồng bộ các YC, đồng thời ứng dụng kỹ thuật thông báo truy vấn để thực hiện việc cập nhật “chủ động” từ phía MCW khi có sự thay đổi dữ liệu trong CSDL. Cải tiến kỹ thuật xử lý không đồng bộ các YC theo công nghệ AJAX trên MCW để trình duyệt trên máy trạm không cần phải gửi đến máy chủ các YC kiểm tra sự thay đổi của dữ liệu một cách tuần hoàn với tần suất cao. Trình duyệt chỉ gửi một YC sau mỗi lần nhận kết quả xử lý YC trước đó từ MCW tương ứng với mỗi thay đổi dữ liệu trong CSDL hoặc sau một khoảng thời gian dài cho trước nào đó không có sự thay đổi dữ liệu nào. Việc xử lý một phần trang web diễn ra theo kịch bản gồm hai pha như sau. Pha th ứ nhất. Tiếp nhận YC. Như trên hình 2, các javascript sẽ gửi YC AJAX từ trình duyệt đến MCW để truy vấn những thay đổi dữ liệu tương ứng với một phần hay toàn bộ trang web. MCW tiếp nhận YC, đăng ký nó vào cuối LIST-QUEUE. LIST- QUEUE là một đối tượng kiểu danh sách và được khai báo trong trình xử lý không đồng bộ. IHTTPAsyncHandler thừa kế thuộc tính bool IsReusable từ IHTTPHandler. Nếu thuộc tính này được thiết lập để trả lại giá trị True, thì một phiên bản của trình xử lý sẽ TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 302 được sử dụng lại cho tất cả các YC cùng một loại, thay vì mỗi phiên bản cho mỗi YC trong trường hợp IsReusable trả lại giá trị False. Nhờ đó, ta có thể đăng ký các YC vào LIST-QUEUE. Trong trường hợp này, việc lập trình sẽ được đòi hỏi phải khắt khe hơn để đảm bảo tính ổn định của hệ thống, nhưng nó cho phép MCW “tạm dừng” việc xử lý một cách vô ích các YC hoặc “tạm dừng” chờ đợi kết quả xử lý YC để tiếp nhận các YC tiếp theo. Việc “tạm dừng” trên mỗi YC cho phép giảm một đơn vị trong tổng số tiến trình đang được thực thi. Pha thứ hai. Trả lời YC. Như trên hình 3, ở pha này có thể xảy ra một trong hai trường hợp. a) Một số trình duyệt hỗ trợ các đối tượng XMLHttpRequest bao gồm thuộc tính timeout [11] hoặc bằng các cách thức khác nhau, lập trình viên có thể quy định khoảng thời gian tối đa trình duyệt sẽ chờ kết quả xử lý YC từ MCW. MCW phải trả lại kết quả xử lý YC cho trình duyệt trong khoảng thời gian này, nếu không, trình duyệt sẽ hiểu như là “MCW không còn hoạt động”. Một tiến trình CheckTimeOut luôn luôn trong trạng thái hoạt động, kiểm tra phần tử – YC đầu tiên của LIST-QUEUE. Nếu YC này đã nằm trong LIST-QUEUE vượt quá thời gian đã cho, MCW chuẩn bị kết quả trả lời YC – RỖNG, sinh ra một tiến trình (Thread_Response) với tham số là đối tượng AsyncRequestState chứa thông tin về YC và kết quả, đăng ký Thread_Response vào ThreadPool, xoá YC khỏi LIST-QUEUE và xét YC tiếp theo trong LIST-QUEUE. Thread_Response sau đó sẽ được ThreadPool kích hoạt và nó sẽ gửi trả lời YC cho trình duyệt. Nếu YC hiện tại chưa vượt quá thời gian đã cho, tiến trình CheckTimeOut sẽ TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 303 không thực hiện hành động nào cả và sau đó kiểm tra lặp lại đối với phần tử đầu tiên này. b) Xuất hiện sự kiện thông báo truy vấn từ SQL Server. SQL Server sẽ gửi một thông báo truy vấn cho MCW thông qua Service Broker. Sự kiện này sẽ sinh ra một tiến trình với nội hàm là phiên bản của hàm OnChangedEvent. Đầu tiên, tiến trình này sẽ truy vấn dữ liệu từ CSDL và đăng ký thông báo truy vấn cho lần tiếp theo. Sau đó, nếu thông báo truy vấn có nguyên nhân là dữ liệu trong CSDL đã được thay đổi dẫn đến kết quả thực thi truy vấn thay đổi, tiến trình này sẽ duyệt qua tất cả các phần tử LIST-QUEUE theo nguyên tắt FIFO. Với mỗi phần tử, nó sẽ chuẩn bị kết quả thực thi YC chứa các thay đổi dữ liệu. Ngoài ra, tương tự như tiến trình CheckTimeOut kiểm tra “thời hạn” của YC, nó sinh ra một tiến trình (Thread_Response) với tham số là đối tượng AsyncRequestState chứa thông tin về YC và kết quả, đăng ký Thread_Response vào ThreadPool, xoá YC khỏi LIST-QUEUE và xét YC tiếp theo. Tiến trình này sau đó sẽ được ThreadPool kích hoạt và nó sẽ gửi trả lời YC cho trình duyệt. Ngược lại, nó sẽ không thực hiện thêm hành động nào khác. Trong mọi trường hợp, sau khi nhận được kết quả từ MCW, trình duyệt xử lý nó và ngay sau đó lặp lại việc gửi YC đến MCW. 4. Kết luận Chúng tôi đã xây dựng một trang web đơn giản, thể hiện một giá trị số cùng với thông tin “tăng”/“giảm” so với giá trị kế trước và thời điểm xảy ra sự kiện. Để xây dựng trang web này, chúng tôi đã ứng dụng có cải tiến kỹ thuật thông báo truy vấn của hệ quản trị CSDL SQL Server và kỹ thuật xử lý không đồng bộ bằng cách triển khai giao diện IHTTPAsyncHandler từ thư viện ASP.NET. Trang web được cập nhật mỗi khi xuất hiện s ự kiện thay đổi dữ liệu sang một giá trị khác trong CSDL chỉ bằng một YC gửi đến MCW. Khoảng thời gian giữa hai lần cập nhật dữ liệu trong CSDL trong các thử nghiệm thành công với hệ thống MCW và trình duyệt trên mạng LAN là 1 – 15 phút. Giả sử trong thực tế dữ liệu chỉ thay đổi sau trung bình 5 phút, tương ứng với 300 giây. Trong khoảng thời gian đó, nếu cứ 5 giây trình duyệt gửi YC đến MCW một lần, thì số lượng YC sẽ là 60 thay vì 1. Thông qua nghiên cứu, chúng tôi nhận thấy: - Thông thường, các trang web chủ động truy vấn dữ liệu từ hệ quản trị CSDL, có thể thực hiện so sánh kết quả giữa hai lần truy vấn để xác định xảy ra sự thay đổi dữ liệu hay không. Kỹ thuật thông báo truy vấn cho phép hệ quản trị CSDL chủ động thông báo cho MCW mỗi khi xuất hiện thay đổi dữ liệu. - Thông thường, sử dụng các công c ụ, bên trong triển khai kỹ thuật xử lý đồng bộ các YC, để xây dựng các trang web cho phép đơn giản hoá việc lập trình nhưng làm giảm rõ rệt khả năng đáp ứng của MCW. Kỹ thuật xử lý không đồng bộ các YC cho phép nâng cao đáng kể khả năng xử lý đồng thời các YC của MCW. Tuy nhiên, trong TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 304 quá trình hoạt động của MCW, vẫn tồn tại có thể với số lượng lớn các tiến trình “chờ đợi” kết quả từ bên ngoài. Có thể thấy việc kết hợp ứng dụng có cải tiến kỹ thuật thông báo truy vấn và xử lý không đồng bộ cho phép nâng cao đáng kể năng suất của MCW, cụ thể, nâng cao số lượng tối đa yêu cầu đồng thời được xử lý, tốc độ xử lý yêu cầu cũng như số lượng tối đa tiến trình hoạt động đồng thời. Hạn chế của bài viết là chưa kiểm chứng thực tiễn bằng phương pháp định lượng những sự thay đổi đó, cũng như chưa nghiên cứu một cách hệ thống khoảng thời gian tối đa cho phép giữa thời điểm tiếp nhận YC trên MCW và gửi trả lời cho trình duyệt. Có thể thấy việc ứng dụng có cải tiến kỹ thuật thông báo truy vấn và xử lý không đồng bộ cho phép xây dựng các trang web cập nhật dữ liệu theo thời gian thực một cách chủ động từ MCW và có thể đáp ứng số lượng lớn YC đồng thời. TÀI LIỆU THAM KHẢO [1] AJAX. http://msdn.microsoft.com/en-us/library/dd464678(VS.85).aspx. 11/10/2009. [2] Display data updates in real-time with AJAX. http://encosia.com/2007/ 07/25/display-data-updates-in-real-time-with-ajax/. 11/10/2009. [3] The Most Complete AJAX Framework and JavaScript Libraries List(124+). http://ntt.cc/2008/02/13/the-most-complete-ajax-framework-and-javascript- libraries-list.html. 11/10/2009. [4] Walkthrough: Creating and Using AJAX-Enabled Web Service. http://msdn.microsoft.com/en-us/library/bb532367.aspx. 11/10/2009. [5] Jörg Krause. Pro ASP.NET Extensibility. Apress. 2009. Chapter 2. [6] Mads Kristensen. How to use the IHttpAsyncHandler in ASP.NET. http://madskristensen.net/post/How-to-use-the-IHttpAsyncHandler-in- ASPNET.aspx. 11/10/2009. [7] Walkthrough: Creating an Asynchronous HTTP Handler. http://msdn. microsoft.com/en-us/library/ms227433.aspx. 11/10/2009. [8] Implementation of Asynchronous Page Processing. http://dotnetcentric.com/ asp- net/implementation-of-asynchronous-page-processing.html. 11/10/2009. [9] Query Notifications in SQL Server (ADO.NET). http://msdn.microsoft.com/ en- us/library/t9x04ed2.aspx. 11/10/2009. [10] Improving Performance with SQL Server 2005 Indexed Views. http://technet.microsoft.com/en-us/library/cc917715.aspx. 11/10/2009. [11] HTML and DHTML Reference. http://msdn.microsoft.com/en us/library/ms533050(VS.85).aspx. 11/10/2009. . TẠP CHÍ KHOA HỌC VÀ CÔNG NGHỆ, ĐẠI HỌC ĐÀ NẴNG - SỐ 5(40).2010 296 ỨNG DỤNG THÔNG BÁO TRUY VẤN VÀ XỬ LÝ KHÔNG ĐỒNG BỘ ĐỂ XÂY DỰNG TRANG .ASPX USING QUERY NOTIFICATION. hợp ứng dụng có cải tiến kỹ thuật thông báo truy vấn và xử lý không đồng bộ cho phép nâng cao đáng kể năng suất của MCW, cụ thể, nâng cao số lượng tối đa yêu cầu đồng thời được xử lý, tốc độ xử. thuật xử lý không đồng bộ các YC, đồng thời ứng dụng kỹ thuật thông báo truy vấn để thực hiện việc cập nhật “chủ động” từ phía MCW khi có sự thay đổi dữ liệu trong CSDL. Cải tiến kỹ thuật xử lý

Ngày đăng: 22/07/2014, 18:21

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan