Trong đó có các thành phần là: • Client với phần mềm trình duyệt Browser • Web Server • Cơ sở dữ liệu chứa tài liệu được yêu cầu, thường nằm cùng Web Server Dưới đây là mô hình tổ chức c
Trang 1Hà Nội – 01/2011
Trang 22
MỤC LỤC
1.1 Kiến trúc chung 3
1.1.1 Mô hình truyền thống 3
1.1.2 Mô hình dịch vụ web 6
1.2 Các tiến trình trong hệ phân tán trên nền web 8
1.2.1 Tiến trình tại phía Client 8
1.2.2 Tiến trình tại máy chủ Web 9
1.2.3 Cơ chế chạy Clustering các máy chủ 10
1.3 Cơ chế truyền thông 11
1.3.1 Giao thức HTTP 11
1.3.2 Giao thức SOAP 14
1.4 Cơ chế định danh 14
1.5 Cơ chế đồng bộ 15
1.6 Cơ chế nhất quán và nhân bản 16
1.6.1 Cơ chế Proxy Caching 17
1.6.2 Nhân bản các ứng dụng web (Chi tiết) 17
1.7 Khả năng chịu lỗi 17
1.8 Tính an toàn, bảo mật của hệ thống 24
TÀI LIỆU THAM KHẢO 25
Trang 3hệ thống web còn phát triển theo hướng cung cấp những dịch vụ khác
1.1.1.1 Mô hình chung
Hệ phân tán dựa trên mô thức web được tổ chức theo mô hình client-server Trong đó có các thành phần là:
• Client với phần mềm trình duyệt (Browser)
• Web Server
• Cơ sở dữ liệu chứa tài liệu được yêu cầu, thường nằm cùng Web Server
Dưới đây là mô hình tổ chức của hệ truyền thống
Hình 1.1: Mô hình tổ chức của hệ phân tán trên nền web truyền thống
(Figure 12-1 Distributed Systems: Principles and Paradigms)
Ở đây ta trình bày một số khái niệm cần thiết:
• Một tài liệu được xác định thông qua các thông tin về nơi nó được lưu trữ bao gồm định danh của server, tên tài liệu, vị trí của nó trong hệ thống file
• Thông tin về tài liệu được thể hiện dưới dạng URL URL không chỉ chứa thông tin vị trí tài liệu mà còn chứa thông tin về giao thức tầng ứng dụng sử dụng để truyền tài liệu trên mạng
• Phần mềm trình duyệt là phần mềm Client sử dụng để tương tác với Web Server
Trang 44
• Tương tác giữa Client và Web Server dựa vào một giao thức chuẩn là HTTP (HyperText Transfer Protocol)
Cơ chế hoạt động của hệ thống như sau:
• Client thực hiện yêu cầu một tài liệu nào đó trong cơ sở dữ liệu thông qua trình duyệt (mà cụ thể hơn là thông qua URL), nó gửi một bản tin HTTP yêu cầu tới Web Server
• Ở phía Server tồn tại một tiến trình có khả năng truy cập vào cơ sở dữ liệu
• Tiến trình này thực hiện truy cập và lấy tài liệu từ cơ sở dữ liệu
• Server sau khi xử lý sẽ trả lại Client thông tin, có thể đó là thông tin báo lỗi không tìm được tài liệu, cũng có thể là nội dung tài liệu, v v
1.1.1.2 Một số ngôn ngữ web
Tài liệu- thông tin được chia sẻ trên mạng có thể được phân chia tương đối làm hai phần:
• Một phần có thể sử dụng như một template cho phần còn lại, mô tả những đặc điểm như vị trí, cách bố trí, nền, font, v v cho phần dữ liệu còn lại Các ngôn ngữ dữ liệu web được sử dụng cho phần này
• Phần còn lại là thông tin thực tế được lưu trữ mà người dùng yêu cầu
Một số ngôn ngữ web thường được sử dụng như: HTML, XML.Các ngôn ngữ này không chỉ cung cấp thông tin
về việc thể hiện dữ liệu cho người dùng, mà còn cung cấp thông tin về các dữ liệu khác giúp biết được loại file, loại định dạng, v v của thành phần tạo nên dữ liệu Các ngôn ngữ này có khả năng đó thông qua việc sử dụng
cơ chế MIME để phân biệt nội dung dữ liệu Bảng dưới đây cho ta thấy các kiểu và kiểu con được định nghĩa bởi MIME
Bảng 1.1: Các kiểu dữ liệu và kiểu dữ liệu con được định nghĩa với MIME
(Figure 12-2 Distributed Systems: Principles and Paradigms)
Trang 55
1.1.1.3 Mô hình truyền thống với kiến trúc đa tầng
Ngôn ngữ Web như HTML, XML cùng phối hợp với các ngôn ngữ script thực sự đã cho chúng ta thấy được một phương tiện mạnh để thể hiện dữ liệu Web Tuy nhiên, chúng ta chưa đi sâu vào cơ chế hoạt động của nó hiện tại Cho tới hiện tại, Web không còn dừng lại ở kiến trúc hai tầng đơn giản client-server, mà qua thời gian
nó đã được phát triển với kiến trúc đa tầng, với nhiều thành phần nhằm hỗ trợ tốt hơn những kiểu dữ liệu khác nhau mà ở phần trước chúng ta đã đề cập qua bảng 1.1 phần trên
Một trong những cải tiến so với kiến trúc cơ bản là việc sử dụng các CGI (Common Gateway Interface) nhằm cung cấp sự tương tác cho người dùng Thông qua các Interface này, Web server có thể chạy những chương trình với dữ liệu đầu vào được người dùng cung cấp
Cơ chế của quá trình này được thể hiện ở hình 1.2 dưới đây
Hình 1.2: Chương trình CGI tại phía Server
(Figure 12-3 Distributed Systems: Principles and Paradigms)
Qua hình 1.2 ta có thể thấy cơ chế hoạt động sử dụng CGI như sau:
• Người dùng nhập vào một form chứa các tham số cần thiết Thông tin về chương trình cũng như thông
số của nó được Client gửi tới Server
• Khi Server nhận được bản tin yêu cầu từ phía Client, nó chạy chương trình được đề cập trong bản tin cùng với các thông số đi kèm
• Sau đó, chương trình tương tác với cở sở dữ liệu, xử lý và tạo ra văn bản HTML Văn bản này được trả lại cho Server
• Server thực hiện trả lại văn bản cho phía Client
Qua đó, ta có thể thấy được Server hoàn toàn ủy quyền việc xử lý yêu cầu cho phía chương trình CGI Đây chính là một kiến trúc 2 tầng tại phía Server
Ngày nay, Server không chỉ dừng lại ở kiến trúc 2 tầng Một ví dụ cho kiến trúc này có thể lấy từ việc một người dùng vào một trang Web bán hàng:
• Các ứng dụng Java Servlet quản lý thông tin về những mòn hàng người dùng mua, thực hiện các gợi ý, lưu trữ các món hàng ưa thích, v v
• Khi người dùng thực hiện việc tìm kiếm theo một từ khóa nào đó, phía Web Server sẽ phải chuyển yêu cầu tới chương trình
Trang 66
• Chương trình thực hiện gửi truy vấn tới cơ sở dữ liệu Phía cơ sở dữ liệu trả lại kết quả truy vấn
• Chương trình thực hiện tạo ra một trang web danh sách các tìm kiếm và trả lại Web Server
• Web Server trả lại thông tin cho người dùng
Như trên có thể thấy, một kiến trúc 3 tầng đã hình thành, trong đó bao gồm Web Server, Application Server (Server chạy ứng dụng), và Cơ sở dữ liệu
Kiến trúc 3 tầng hình thành đã đặt ra một vấn đề: giảm hiệu năng của hệ thống Việc phân chia rõ ràng 3 tầng là điều cần thiết, các Server ứng dụng và Cơ sở dữ liệu phải chịu tải rất lớn Vấn đề này sẽ được bàn đến tại phần 1.6 trong tiểu luận này
Hình 1.3: Mô hình dịch vụ Web
(Figure 12-4 Distributed Systems: Principles and Paradigms)
Cơ chế chung của mô hình là việc ứng dụng ở phía Client có thể gọi các dịch vụ từ ứng dụng phía Server Quá trình này được thực hiện dựa trên sự chuẩn hóa Về mặt nào đó, cơ chế này cũng gần giống với cơ chế gọi thủ tục từ xa (RPC)
Ở đây ta trình bày một số khái niệm cần thiết để hiểu rõ hình 1.3:
Trang 7Tóm lại, ta có cơ chế làm việc của mô hình dịch vụ Web như sau:
• Các dịch vụ của máy chủ được công bố ra phía UDDI Cơ sở dữ liệu này lưu lại mô tả dịch vụ dưới ngôn ngữ WSDL
• Khi Client cần đến dịch vụ, nó tìm kiếm dịch vụ tại UDDI UDDI trả về kết quả cho Client
• Client biết được dịch vụ qua các mô tả trả về qua ngôn ngữ WSDL
• Client thực hiện kết nối đến máy chủ qua giao thức SOAP và gọi dịch vụ
• Từ đây, quá trình trao đổi diễn ra bình thường thông qua giao thức SOAP
1.1.2.2 Thành phần và sự điều phối trong dịch vụ Web
Như trên đã trình bày, mô hình dịch vụ Web có thể được hình dung tương đối đơn giản là việc một dịch vụ được triển khai dưới dạng ứng dụng và được gọi thông qua một chuẩn nào đó
Tuy nhiên, chính ứng dụng đôi khi lại rất phức tạp và nó có thể là một ứng dụng phân tán trong hệ thống mạng
Ở trường hợp này, người ta sử dụng một proxy nội mạng nhằm tương tác với những thành phần của ứng dụng phân tán này Proxy này cũng đảm bảo cho phía Client trong suốt với sự phân tán của ứng dụng
Trong mô hình, chúng ta cũng có thể thấy ứng dụng được cung cấp chỉ thông qua một bước gọi (Look up a Service - Hình 1.3) Tuy nhiên, trong thực tế mô hình gọi phức tạp hơn nhiều Đơn cử như khi người dùng thực hiện mua một cuốn sách từ trang Web thương mại điện tử Một việc tưởng chừng đơn giản đó bao gồm việc chọn lựa, việc thanh toán, việc lấy thông tin giao hàng Dịch vụ ở đây chính là một giao dịch chia làm nhiều bước có thứ tự Hay nói cách khác, dịch vụ được cung cấp ở đây bao gồm những dịch vụ con khác nhau
Sự phức tạp càng tăng lên khi người ta phải kết hợp trên một trang Web các dịch vụ của những nhà cung cấp dịch vụ khác nhau Vẫn lấy mô hình trang Web thương mại làm ví dụ, một trang Web này có thể bao gồm các dịch vụ khác nhau như sau:
• Lựa chọn mặt hàng từ nhà cung cấp mặt hàng
• Tiến hành thanh toán thông qua hệ thống banking của ngân hàng
• Nhập thông tin giao hàng do công ty chuyển phát nhanh cung cấp
Như vậy, mặc dù ở phía người dùng đây là các dịch vụ được cung cấp trên cùng một trang Web, nhưng thực tế
ở phía cung cấp dịch vụ lại là sự kết hợp của nhiều nhà cung cấp dịch vụ khác nhau
Như vậy, 3 vấn đề trên (Ứng dụng phân tán; Sự phức tạp của giao dịch; Sự tham gia của nhiều nhà cung cấp dịch vụ) đặt ra nhu cầu phải điều phối các dịch vụ này, sao cho chúng có thể được kết hợp với nhau, và phải tạo được sự trong suốt của hệ thống với người dùng
Trang 88
Việc điều phối như trên đặt ra được thực hiện bởi các giao thức điều phối Những giao thức này sẽ đưa ra các luật về những bước cần thực hiện đối với các dịch vụ, đồng thời buộc các dịch vụ của các phía phải tuân thủ theo Để đạt được điều đó, người ta định nghĩa một dịch vụ riêng dùng để cung cấp các giao thức điều phối Các tiến trình sẽ thực hiện đăng ký với giao thức điều phối khi tham gia
1.2 Các tiến trình trong hệ phân tán trên nền web
Tại phần này, chúng ta nghiên cứu về các tiến trình của hệ phân tán theo mô thức Web
1.2.1 Tiến trình tại phía Client
Ở đây ta xét đến hai tiến trình thường gặp ở môi trường Web phía Client, đó là tiến trình trình duyệt Web và Web proxy
1.2.1.1 Tiến trình trình duyệt Web
Trình duyệt Web tại phía Client giúp người dùng có thể xem nội dung trang Web, cũng như cung cấp cho người dùng những liên kết mà người dùng có thể dễ dàng chọn
Hình 1.4: Các thành phần logic của một trình duyệt Web
(Figure 12-5 Distributed Systems: Principles and Paradigms)
Như hình 1.4, chúng ta có thể thấy được những thành phần logic của một trình duyệt Web bao gồm 3 thành phần chính:
• Rendering Engine: Engine này chịu trách nhiệm hiển thị các văn bản HTML hay XML lên màn hình Nó chứa các thành phần có khả năng:
ü Tạo liên kết, giao tiếp trên mạng
ü Xử lý ngôn ngữ HTML, XML
ü Phiên dịch các script trong văn bản
• Browser Engine: Engine là trung tâm của trình duyệt, cung cấp cho người dùng cơ chế xem văn bản, như chia nó thành các phần, lựa chọn các phần của văn bản, vào một liên kết, v v
• User Interface: Engine cung cấp giao diện cho người dùng Ngoài ra, do trình duyệt không phụ thuộc nền tảng nó chạy, User Interface cùng với Browser Engine chạy trên các thư viện đồ họa chuẩn được thể hiện trên hình (Display back end)
Trang 99
1.2.1.2 Tiến trình Web Proxy
Một tiến trình khác có thể kể đến ở phía Client và tiến trình chạy Web proxy Một trong các chức năng của nó được thể hiện ở hình dưới
Hình 1.5: Trường hợp sử dụng Web proxy khi có sự bất đồng về giao thức
(Figure 12-6 Distributed Systems: Principles and Paradigms)
Web proxy tại lúc được tạo ra có mục đích nhằm cho phép trình duyệt xử lý các giao thức ở mức ứng dụng khác với HTTP Tuy nhiên cho tới thời điểm hiện tại, trình duyệt đã có khả năng xử lý nhiều giao thức khác nhau và không còn cần tới chức năng này nữa Web proxy sau này được sử dụng cho rất nhiều mục đích khác như caching, nén, ghi log, v v Những tính năng này sẽ được đề cập đến tại phần 1.6 - Cơ chế nhất quán và nhân bản
1.2.2 Tiến trình tại máy chủ Web
Chúng ta nghiên cứu tiến trình tại phía máy chủ thông qua một trong những Web server thông dụng tính tới thời điểm hiện tại (Chiếm 70% lượng sử dụng trên thế giới), đó là Apache
Hai ưu điểm nổi bật của Apache có thể kể đến là:
• Chạy độc lập với nền tảng của Server: Apache thực hiện điều này bằng cách sử dụng một nền tảng
chạy của mình được tạo ra nhằm chạy trên những hệ điều hành khác nhau Môi trường này được gọi là APR (Apache Portable Runtime) Đây là một bộ thư viện cung cấp các giao diện cho việc xử lý file, kết nối mạng, xử lý luồng, v v Khi chạy, thay vì những lời gọi tới các thư viện của nền tảng Apache cài trên, tiến trình gọi tới các thư viện APR
• Dễ mở rộng tính năng: Apache có khả năng mở rộng thêm nhiều tính năng thông qua các thư viện của
mình, mà vẫn đảm bảo cho những phần mở rộng được phát triển là độc lập Đơn cử như mô hình nhân bản thích nghi (Adaptive Replicate)
• Tổ chức cơ chế hoạt động của Apache có thể được miêu tả qua hình vẽ dưới đây:
Hình 1.6: Trường hợp sử dụng Web proxy khi có sự bất đồng về giao thức
Trang 1010
(Figure 12-7 Distributed Systems: Principles and Paradigms)
Trong sơ đồ đặt ra ở đây, chúng ta thấy một khái niệm là hook, nó chỉ một nhóm các chức năng có chung một nhiệm vụ nào đó Các nhóm chức năng này cũng được cung cấp thông qua các module riêng Các module này cũng sẽ có sự độc lập với nhau
Một ví dụ như có hook làm nhiệm vụ chuyển đổi từ URL thành vị trí cần thiết trong hệ thống file, có hook làm nhiệm vụ viết log, v v
1.2.3 Cơ chế chạy Clustering các máy chủ
Một vấn đề khi cung cấp dịch vụ Web là việc các Web Server có thể dễ dàng bị quá tải Chính vì vậy phải có cơ chế chạy nhiều máy chủ Đó là cơ chế Clustering Cơ chế này sẽ được đề cập ở phần 1.6, “Cơ chế nhất quán và nhân bản” Ở đây chúng ta chỉ xem xét về mặt tiến trình thực hiện trong hệ thống các máy chủ
Hình 1.7: Hệ thống Web Server Cluster với máy Front-End
(Figure 12-8 Distributed Systems: Principles and Paradigms)
Với cơ chế Clustering, hệ thống sẽ có một máy chủ Front End để nhận các yêu cầu,chuyển các yêu cầu tới các máy chủ Web, nhận trả lời từ máy chủ Web, và gửi về cho phía yêu cầu Cơ chế gửi có thể là tuần tự, cũng có thể có cơ chế theo dõi để gửi yêu cầu đến máy chủ đang chịu tải ít hơn
Ngoài ra, với hệ thống Web server, chúng ta có thể cấu hình hệ thống Content-Aware Cluster Hệ thống này cũng có một Front-End làm nhiệm vụ nhận và chuyển tiếp các yêu cầu
Hình 1.8: Cơ chế hoạt động của mô hình Content-Aware Cluster
(Figure 12-9 Distributed Systems: Principles and Paradigms)
Trang 1111
Ý tưởng của việc triển khai Content-Aware Cluster là việc có một phần tử là Dispatcher sẽ có thể biết nội dung gói tin và liên tục điều khiển loại gói tin đó về một server Làm như vậy giúp Web server có thể phục vụ nhanh hơn thông qua cơ chế caching, nên hầu hết thời gian sẽ không phải chạy tiến trình lấy dữ liệu từ cơ sở dữ liệu Ngoài ra, việc lựa chọn như vậy có thể giúp hệ thống phân tải cho các Server cho hợp lý
Cơ chế hoạt động của mô hình như sau:
• Client gửi yêu cầu tới hệ thống
• Switch Front End chuyển tiến yêu cầu đó (bản tin TCP Request) tới một trong các Web server hay còn gọi là Distributor
• Distributor nhận được bản tin không xử lý ngay mà tương tác với Dispatcher xem máy chủ Web nào sẽ
xử lý bản tin đó
• Dispatcher quyết định máy chủ sẽ xử lý bản tin
• Bản tin TCP được gửi tới cho máy chủ Web được chọn, đây là quá trình 3 TCP Hand off
• Web server được chọn sẽ thiết lập kết nối TCP với Client
• Switch Front-End cũng được thông báo về điều này, và sau đó tất cả các kết nối được
Để đạt được hiệu quả phân tải tốt người ta cũng dùng rất nhiều cách khác như chia VLAN và ứng dụng các giao thức Gateway(GLBP, VRRP, v v ) , hoặc sử dụng cơ chế DNS Đã đạt được mục tiêu xem xét các tiến trình tại phía các máy chủ Clustering này
1.3 Cơ chế truyền thông
Đối với hệ phân tán trên mô thức Web, các giao thức được sử dụng cũng khá thông dụng Giao thức truyền thống HTTP được sử dụng để trao đổi các bản tin Còn về phía dịch vụ Web thì có các giao thức như SOAP, CORBA Ở đây, chúng ta nghiên cứu cơ chế truyền thông của hệ phân tán mô thức Web với hai giao thức là HTTP và SOAP
Trang 1212
Hình 1.9: Cơ chế kết nối của HTTP dựa trên TCP (hai phiên bản HTTP cũ và mới)
(Figure 12-10 Distributed Systems: Principles and Paradigms)
Với phiên bản HTTP cũ, HTTP đã không tận dụng tốt giao thức TCP khi mỗi yêu cầu từ Client phải dựng một kết nối TCP, làm cho Server phải chịu tải nặng hơn Với các phiên bản HTTP hiện tại, một kết nối TCP có thể phục vụ nhiều yêu cầu từ Client Như vậy cơ chế truyền thông này sẽ giúp tiết kiệm thời gian dựng kết nối, số lượng kết nối TCP, từ đó giảm tải cho hệ thống
1.3.1.2 Các phương thức HTTP
HTTP được thiết kế dưới dạng một giao thức client-server hướng tới việc chuyển tài liệu theo hai chiều Một Client có thể yêu cầu gửi hoặc nhận một tài liệu nào đó thông qua các bản tin yêu cầu với các kiểu khác nhau Dưới đây là các kiểu gói tin yêu cầu của HTTP:
Hình 1.10: Các loại bản tin yêu cầu của giao thức HTTP
(Figure 12-11 Distributed Systems: Principles and Paradigms)
1.3.1.3 Định dạng gói tin HTTP
Tất cả các giao tiếp giữa Client-Server đều thông qua gói tin Định dạng gói tin HTTP bao gồm 3 phần chính như hình dưới đây: