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" - Pdf 19

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

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

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

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ấ

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 đã

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



Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status