Tiểu luận Hệ phân tán

Tài liệu Tiểu luận Hệ phân tán: Phần I. Giới thiệu Hệ thống máy tính đang trải qua một cuộc cách mạng. Từ năm 1945 cho đến năm 1985, các máy tính rất lớn và rất đắt. Hầu hết các tổ chức chỉ có rất ít máy tính và không biết cách nối chúng. Đến giữa những năm 1980, hai mở rộng trong kỹ thuật đã thay đổi tình hình đó. Thứ nhất là sự phát triển vi xử lý, từ CPU chỉ có 8 bit đã phát triển thành 16, 32, 64 bit. Nhiều CPU đã có một năng lực tính toán của một siêu máy tính nhưng với giá thấp. Sự phát triển thứ hai là sự phát minh mạng máy tính tốc độ cao, mạng cục bộ (Local-area networks-LAN) cho phép hàng trăm máy tính có thể kết nối được với nhau để trao đổi thông tin. Mạng diện rộng (Wide-area network-WAN) cho phép hàng triệu máy tính trên trái đất có thể được kết nối với tốc độ truyền dữ liệu từ 64Kbps đến gigabits mỗi giây. Kết quả của những cải tiến về mặt kỹ thuật đem lại sự kết nối dễ dàng nhiều hệ thống máy tính với nhau để tạo một mạng cao tốc. Chúng thường được gọi là mạng máy tính hoặc hệ phân tán. Để xâ...

doc49 trang | Chia sẻ: hunglv | Lượt xem: 1322 | Lượt tải: 0download
Bạn đang xem trước 20 trang mẫu tài liệu Tiểu luận Hệ phân tán, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Phần I. Giới thiệu Hệ thống máy tính đang trải qua một cuộc cách mạng. Từ năm 1945 cho đến năm 1985, các máy tính rất lớn và rất đắt. Hầu hết các tổ chức chỉ có rất ít máy tính và không biết cách nối chúng. Đến giữa những năm 1980, hai mở rộng trong kỹ thuật đã thay đổi tình hình đó. Thứ nhất là sự phát triển vi xử lý, từ CPU chỉ có 8 bit đã phát triển thành 16, 32, 64 bit. Nhiều CPU đã có một năng lực tính toán của một siêu máy tính nhưng với giá thấp. Sự phát triển thứ hai là sự phát minh mạng máy tính tốc độ cao, mạng cục bộ (Local-area networks-LAN) cho phép hàng trăm máy tính có thể kết nối được với nhau để trao đổi thông tin. Mạng diện rộng (Wide-area network-WAN) cho phép hàng triệu máy tính trên trái đất có thể được kết nối với tốc độ truyền dữ liệu từ 64Kbps đến gigabits mỗi giây. Kết quả của những cải tiến về mặt kỹ thuật đem lại sự kết nối dễ dàng nhiều hệ thống máy tính với nhau để tạo một mạng cao tốc. Chúng thường được gọi là mạng máy tính hoặc hệ phân tán. Để xây dựng được một hệ phân tán hoạt động hiệu quả và tối ưu, nhà thiết kế phải giải quyết rất nhiều vấn đề có tính chiến lược. Tiểu luận nhằm trình bày một số vấn đề cơ bản khi xây dựng một hệ phân tán và đưa ra một số giải pháp nhằm giải quyết các vấn đề đó. Đồng thời tiểu luận còn đưa ra một số ví dụ minh họa cho những vấn đề và giải pháp trên. Tiểu luận gồm bốn phần. Phần 1:Định nghĩa một hệ phân tán. Phần 2: Những mục tiêu khi xây dựng hệ phân tán. Phần này nhằm giới thiệu bốn mục tiêu cơ bản khi thiết kế và xây dựng hệ phân tán, đó là dễ dàng kết nối ngưởi sử dụng với tài nguyên; trong suốt đối với người sử dụng và ứng dụng; có khả năng thêm bớt các dịch vụ mà không ảnh hưởng đến các dịch vụ đã có-tính mở; dễ dàng thay đổi theo sự thay đổi quy mô của hệ thống-tính co giãn. Đồng thời nêu ra một số vấn đề và giải pháp chung mà người thiết kế cần chú ý. Phần 3: Trình bày một số vấn đề và giải pháp cụ thể liên quan đến truyền thông, tiến trình, định danh, đồng bộ hóa, nhân bản, tính chịu lỗi và an toàn trên hệ phân tán. Phần 4: Đưa ra trọn vẹn hai ví dụ về hệ phân tán hướng tư liệu đó là World Wide Web và Lotus Note nhằm minh họa cho những vấn đề và giải pháp cụ thể đã đề cập ở phần 3. Phần II. Nội dung I/ Định nghĩa hệ phân tán. Nhiều định nghĩa của hệ phân tán được đưa ra, tuy nhiên một số định nghĩa lại không phù hợp với những định nghĩa khác. Theo mục đích trình bày trong tiểu luận này, ta có thể đưa ra một định nghĩa như sau: Một hệ phân tán là một tập hợp của những máy tính độc lập mà hiện hữu cho những người sử dụng của nó như một hệ thống cố kết đơn. Định nghĩa này có hai khía cạnh. Thứ nhất đối với phần cứng: các máy là tự trị. Thứ hai đối với phần mềm: người sử dụng nghĩ rằng họ làm việc với hệ thống đơn. Để hỗ trợ những máy tính và mạng máy tính không đồng nhất, những hệ phân tán thường được tổ chức bởi một lớp phân mềm mà được đặt một cách logic giữa một lớp mức cao (gồm có người sử dụng và ứng dụng) và một lớp ở bên dưới (gồm có một hệ điều hành). Vì vậy, một hệ phân tán như vậy còn được gọi là phần mềm trung gian (middleware). Ví dụ: Với World Wide Web, Web đưa ra một mô hình phân tán tài liệu đơn giản, nhất quán và duy nhất. Để xem một tài liệu, người sử dụng chỉ cần khởi động một tham chiếu, và tài liệu xuất hiện trên màn hình. Theo lý thuyết, không cần biết server đem tài liệu từ đâu về. Xuất bản một tài liệu chỉ đơn giản là sinh ra một tên duy nhất dưới dạng Uniform Resource Locator (URL) mà tham chiếu đến một file cục bộ chứa nội dung tài liệu. Nếu World Wide Web xuất hiện cho những người sử dụng của nó như một hệ thống tài liệu tập trung khổng lồ thì nó cũng sẽ gọi là một hệ phân tán. Máy A Máy B Local OS Local OS Distributed application Middleware service Network Một tổ chức của hệ phân tán như middleware II/ Những mục tiêu khi xây dựng hệ phân tán Để xây dựng một hệ phân tán hoạt động hiệu quả và tối ưu, người thiết kế phải tập trung quan tâm đến việc giải quyết những mục tiêu quan trọng. Một hệ phân tán tối ưu phải là dễ dàng kết nối những người sử dụng với những tài nguyên, phải che dấu tài nguyên được phân tán trên một mạng máy tính, phải có khả năng thêm bớt các dịch vụ mà không ảnh hưởng đến các dịch vụ đã có, phải dễ dàng thay đổi theo sự thay đổi quy mô của hệ thống. 2.1/ Kết nối người sử dụng với tài nguyên Mục tiêu chính của hệ phân tán là tạo thuận lợi cho người sử dụng truy cập và chia sẻ tài nguyên từ xa. Đây là vấn đề bao trùm, các vấn đề khác đều liên quan đến vấn đề này. Khi cần chia sẻ phải không được dẫn đến tắc nghẽn. Đây không phải chỉ có ở bài toán hệ phân tán mà còn ở hệ tập trung. Tuy nhiên việc giải quyết vấn đề chia sẻ tài nguyên trên hệ phân tán là rất khó. Tài nguyên có thể là máy in, máy tính, bộ nhớ hữu dụng, file, dữ liệu... Có nhiều lý do để chia sẻ tài nguyên, trước hết đó là tiết kiệm và thuận lợi để hợp tác và trao đổi thông tin. Chia sẻ tài nguyên đã dẫn đến một vấn đề an toàn trong hệ phân tán. Đây là một vấn đề rất quan trọng. Với sự tăng lên của kết nối và chia sẻ, có thể dẫn đến một số truyền thông không mong muốn. Giải pháp cho vấn đề này là phải xây dựng những thiết bị lọc nhằm chọn được thông điệp dựa vào nội dung của chúng. Một vấn đề an toàn khác đó là vết truyền thông để xây dựng một tiểu sử tham chiếu của một người sử dụng cụ thể. Một vết như vậy rõ ràng vi phạm sự bí mật, đặc biệt nếu nó được làm mà không có sự khai báo người sử dụng. Giải pháp chung là cần phải có cơ chế bảo vệ đủ mạnh để chống lại sự nghe trộm hoặc sự xâm nhập trên giao tiếp. Chia sẻ tài nguyên cũng dẫn đến vấn đề tương tranh trong hệ phân tán. Giải pháp bổ sung thêm tài nguyên không phải là phương án tốt. Vì thế cần phải có những thuật toán chia sẻ tài nguyên tối ưu. Nhiều trường hợp của chia sẽ tài nguyên dẫn đến một số lỗi xuất hiện. Hệ phan tán phải có khả năng vượt qua được một số lỗi đó và hoạt động bình thường. Giải pháp khi xây dựng hệ phân tán, với một số lỗi nhất định phải có cơ chế phục hồi lỗi và đưa hệ thống trở lại hoạt động bình thường. 2.2/ Tính trong suốt (Transparency) Một mục tiêu quan trọng của một hệ phân tán là tính trong suốt đối với người sử dụng cuối và người lập trình ứng dụng. Một hệ phân tán mà che dấu những tiến trình và tài nguyên của nó được phân tán trên nhiều máy tính, thể hiện bản thân nó cho người sử dụng và ứng dụng như là một hệ thống đơn được gọi là trong suốt. Khái niệm trong suốt có thể được áp vào nhiều khía cạnh của một hệ phân tán, bao gồm trong suốt truy xuất (access transparency), trong suốt định vị (location transparency), trong suốt di trú (migration transparency), trong suốt tái định vị (relocation transparency), trong suốt nhân bản (replication transparency) trong suốt tương tranh (concurrency transparency), trong suốt lỗi (failure transparency), trong suốt kiên nhẫn (persistence transparency) Trong suốt truy xuất thể hiện khả năng che dấu sự khác nhau trong biểu diễn dữ liệu và cách thức truy xuất tài nguyên của người sử dụng. Ví dụ, một hệ thống phân tán có thể có những hệ thống máy tính mà chạy trên những hệ điều hành khác nhau, mỗi cái có một quy ước đặt tên file riêng. Sự khác nhau trong quy ước đặt tên cũng như những file có thể được thao tác như thế nào đều phải được che dấu đối với người sử dụng và những ứng dụng. Trong suốt vị trí là khả năng che dấu vị trí tài nguyên được định vị vật lý trong hệ thống đối với người sử dụng. Định danh đóng một vai trò quan trọng trong việc đạt được trong suốt vị trí. Giải quyết trong suốt vị trí có thể được thực hiện bằng cách ấn định những tên logic cho tài nguyên, đó là những tên trong đó những vị trí của một tài nguyên là không được mã hóa bí mật. Trong suốt di trú thể hiện khả năng tài nguyên có thể được di chuyển mà không ảnh hưởng đến truy xuất. Trong suốt tái định vị thể hiện tài nguyên có thể định vị lại trong khi chúng đang được truy xuất mà người sử dụng hoặc chương trình đều không nhận ra. Ví dụ khi những người sử dụng di chuyển có thể tiếp tục sử dụng laptop không dây của họ trong khi chuyển từ nơi này sang nơi khác mà không bị cắt kết nối. Trong suốt nhân bản giải quyết việc che dấu sự kiện mà server sao chép một tài nguyên đã tồn tại. Để che dấu nhân bản đối với người sử dụng, điều cần thiết là tất cả các bản nhân có cùng một tên. Vì vậy, một hệ thống mà hỗ trợ trong suốt nhân bản phải hỗ trợ trong suốt định vị, bởi vì nếu không thì sẽ không thể tham chiếu đến một bản nhân tại một vị trí khác. Trong quá trình tương tác với hệ phân tán, có khi nhiều người cùng truy xuất đến một tài nguyên nhưng mỗi người không biết người khác cũng đang sử dụng cùng tài nguyên đó. Khả năng che dấu này của hệ phân tán được gọi là trong suốt tương tranh. Một hệ phân tán trong suốt lỗi nghĩa là che dấu để người sử dụng đang làm việc không biết rằng có một tài nguyên hỏng và sau đó hệ thống tự động phục hồi lại từ hỏng đó. Đánh dấu lỗi là một vấn đề khó nhất trong hệ phân tán, đó là làm thế nào để phân biệt giữa một tài nguyên đã chết với một tài nguyên chậm. Trong suốt kiên nhẫn giải quyết việc đánh dấu liệu một tài nguyên hiện đang trong bộ nhớ hoặc có thể một nơi nào đó trên đĩa. Ví dụ nhiều cơ sở dữ liệu hướng đối tượng cung cấp phương tiện để trực tiếp gọi phương thức trên đối tượng được lưu. Đầu tiên, cơ sở dữ liệu server sao chép trạng thái đối tượng từ đĩa vào bộ nhớ chính, thực hiện thao tác và có thể viết trạng thái đó lên bộ nhớ thứ cấp. Tuy nhiên, người sử dụng không ý thức được rằng server đang chuyển trạng thái từ bộ nhớ cơ sở sang bộ nhớ thứ cấp. 2.3/ Tính mở. Một mục tiêu quan trọng khác của hệ phân tán là tính mở. Tính mở của hệ phân tán thể hiện ở khả năng có thể bổ sung thêm các dịch vụ mới mà không làm ảnh hưởng đến các dịch vụ đã có. Giải pháp để xây dựng một hệ phân tán mở là đưa ra nhiều dịch vụ theo nguyên tắc chuẩn mô tả cú pháp và ngữ nghĩa của những dịch vụ này. Ví dụ trong mạng máy tính, các nguyên tắc chuẩn chi phối khuôn dạng, nội dung và ý nghĩa của thông điệp gữi và nhận. Những nguyên tắc như vậy được chính thức hóa trong giao thức. Trong hệ phân tán, những dịch vụ nói chung được chỉ ra thông qua giao diện, thường được mô tả trong một Interface Definition Language (IDL). Định nghĩa giao diện được viết trong một IDL nhằm chỉ ra chính xác tên của hàm mà có thể dùng được với nhau với những loại tham số, giá trị trả về... Một định nghĩa giao diện cho phép một tiến trình tùy ý mà cần thiết một giao diện nào đó để nói chuyện với một tiến trình khác mà cung cấp giao diện đó. Nó cũng cho phép hai bên độc lập để xây dựng thực hiện những giao diện hoàn toàn khác nhau. Dẫn đến hai hệ phân tán riêng biệt mà hoạt động trên cùng một cách. Một mục tiêu khác đối với một hệ phân tán mở đó là tính mềm dẻo. Giải pháp chính khi thiết kế xây dụng hệ thống thành nhiều thành phần để dễ dàng thêm một thành phần mới hoặc thay thế những phần đang tồn tại mà không ảnh hưởng đễn thành phần khác. Có nhiều giải pháp để xây dựng một hệ phân tán có tính mở. Để không xảy ra xung đột thì các tiến trình phải hiểu nhau. Muốn thế các dịch vụ mới và cũ phải cùng chung sống, trước hết phải có cơ chế truyền thông với nhau. 2.4/ Tính co giãn. Tính co giãn là mục tiêu thiết kế quan trọng khi phát triển hệ phân tán. Tính co giãn của hệ phân tán là khả năng thay đổi dễ dàng theo sự thay đổi quy mô của hệ thống. Tính co giãn thể hiện theo ba góc độ. Thứ nhất, một hệ thống có thể co giãn đối với kích cở của nó, nghĩa là có thể dễ dàng thêm nhiều người sử dụng và tài nguyên cho hệ thống. Thứ hai, một hệ thống co giãn về mặt địa lý, nghĩa là người sử dụng và các tài nguyên có thể nằm trên những vùng khác nhau. Thứ ba, một hệ thống co giãn về mặt quản lý, nghĩa là có thể dễ dàng quản lý ngay cả khi nó mở rộng nhiều tổ chức quản trị độc lập. Trước hết, đối với vấn đề kích cở. Nếu nhiều người sử dụng hoặc tài nguyên cần được hỗ trợ, ta thường đối mặt với hạn chế của tập trung dịch vụ, dữ liệu và giải thuật. Ví dụ, nhiều dịch vụ được tập trung mà chúng được thực hiện bởi chỉ một server đơn chạy trên một máy cụ thể trong hệ phân tán. Rõ ràng, server có thể trở thành quá tải vì số lượng người dùng tăng lên. Cũng như vậy, ví dụ ta phải lưu giữ số điện thoại và địa chỉ của 50 triệu người. Nếu chỉ có một cơ sở dữ liệu đơn sẽ chắc chắn làm tràn đầy tất cả dòng truyền thông bên trong và bên ngoài nó. Tập trung thuật giải cũng là một ý tưởng không hợp lý. Trong một hệ phân tán lớn, một số lượng khổng lồ của những thông điệp phải được gửi trên nhiều đường. Việc chọn đường có thể bằng cách tập hợp những thông tin về tải trọng trên tất cả các máy và sau đó chạy một thuật giải để tính toán tất cả lộ trình tối ưu, cuối cùng truyền kết quả ra khắp hệ thống để cải tiến lộ trình. Tuy nhiên, chỉ với việc tập hợp và vận chuyển tất cả thông tin vào ra đã làm quá tải của mạng. Vì vậy giải pháp tối ưu là phân tán thuật giải. Co giãn về mặt địa lý có những vấn đề của chính nó. Một nguyên nhân chính vì sao là khó khăn để co giãn cho những hệ phân tán mà chỉ được thiết kế cho mạng cục bộ đó là chúng được dựa trên truyền thông đồng bộ. Trong dạng truyền thông này, client yêu cầu dịch vụ bị ngăn lại cho đến khi nhận được một trả lời. Một vấn đề khác mà gây trở ngại co giãn địa lý đó là truyền thông trong mạng diện rộng là vốn đã là không đáng tin cậy. Ngược lại, mạng cục bộ lại cung cấp một phương tiện truyền thông có độ tin cậy cao dựa trên quảng bá. Co giãn địa lý là liên quan chặt chẽ với vấn đề giải quyết tập trung hóa mà cản trở co giãn kích cỡ. Nếu ta có một hệ thống với nhiều thành phần tập trung, rõ ràng co giãn địa lý sẽ là bị hạn chế vì những vấn đề hiệu suất và độ tin cậy kết quả từ truyền thông diện rộng. Hơn nữa, tập trung hóa những thành phần sẽ dẫn đến một sự lãng phí tài nguyên mạng. Cuối cùng, một khó khăn là làm thế nào để một hệ thống co giãn về mặt quản lý. Một vấn đề chính đó là chính sách để giải quyết xung đột đối với tài nguyên hữu dụng, sự quản lý và an toàn. Có ba kỹ thuật cơ bản cho co giãn: che dấu truyền thông, phân tán và nhân bản. Che dấu truyền thông là có thể áp dụng trong trường hợp của co giãn địa lý. ý tưởng cơ bản là hạn chế thời gian chờ những trả lời của các yêu cầu dịch vụ từ xa. Nghĩa là xây dựng ứng dụng yêu cầu sao cho nó sử dụng truyền thông không đồng bộ. Khi một trả lời đến, ứng dụng bị ngắt và một điều khiển đặc biệt được gọi để hoàn thành yêu cầu đã phát ra. Tuy nhiên, có nhiều ứng dụng mà không cần sử dụng của truyền thông không đồng bộ. Ví dụ, trong những ứng dụng tương tác lẫn nhau khi một người sử dụng gửi một yêu cầu và chỉ chờ câu trả lời. Trong trường này, giải pháp tốt nhất là giảm toàn bộ truyền thông bằng cách di chuyển phần tính toán được làm ở server đến client để xử lý yêu cầu dịch vụ. Một trường hợp điển hình trong đó tiếp cận này được dùng để xử lý cơ sở dữ liệu sử dụng forms. Thông thường, điền vào form được làm bằng cách gửi một thông điệp phân biệt cho mỗi trường, và chờ một thông báo nhận. Một giải pháp tốt hơn là gửi mã để điền vào form đến client và client trả lại một form sau khi hoàn thành. Cách tiếp cận gửi mã này được hỗ trợ rộng rãi bởi Web trong dạng của Java applet Một kỹ thuật co giãn khác là phân tán. Phân tán bao hàm lấy một thành phần, chia nó thành nhiều phần nhỏ và truyền những phần đó ra khắp hệ thống. Kỹ thuật co giãn thứ ba đó là nhân bản. Nhân bản không chỉ làm tăng khả năng sẵn sàng mà còn giúp làm cân bằng tải trọng giữa các thành phần dẫn đến hiệu suất tốt hơn. Caching là một dạng đặc biệt của nhân bản mà kết quả là một bản sao của một tài nguyên. Tuy nhiên, nếu nhân bản được làm bằng chủ nhân của tài nguyên thì caching được làm bởi client truy xuất đến tài nguyên. Có một điều rắc rối đối với caching và nhân bản mà ảnh hưởng bất lợi đến co giãn. Vì khi caching hoặc nhân bản sẽ sinh ra nhiều bản sao của một tài nguyên, khi sửa đổi một bản sao sẽ làm nó khác với những bản sao khác. Vì vậy, caching và nhân bản dẫn đến vấn đề nhất quán. III/ Một số vấn đề cụ thể và giải pháp khi xây dựng hệ phân tán. Để xây dựng được hệ phân tán đáp ứng được tất cả các mục tiêu trên là rất khó. Nó đòi hỏi phải giải quyết hành loạt các vấn đề có tính chiến lược. Giải pháp để giải quyết các vấn đề này cũng được thể hiện trong các phần được trình bày dưới đây. 3.1/ Truyền thông (Communication) Truyền thông liên tiến trình là trung tâm của tất cả hệ phân tán. Phần này trình bày các quy luật mà những tiến trình truyền thông phải dựa vào đó là những giao thức và các mô hình sử dụng mở rộng cho truyền thông: Remote Procedure Call (RPC), Remote Method Invocation (RMI), Message-Oriented Middleware (MOM) và Stream. 3.1.1/ Giao thức phân tầng Để dễ dàng giải quyết những vấn đề của truyền thông Tổ chức tiêu chuẩn quốc tế (ISO) đã phát triển mô hình tham chiếu mà chỉ rõ các mức khác nhau, quy định tên cho chúng và đưa ra mức độ cần phải làm. Mô hình này được gọi là mô hình OSI. Mô hình OSI được thiết kế để cho phép hệ thống mở có thể truyền thông. Một hệ thống mở là hệ thống được chuẩn bị để truyền thông với bất kỳ hệ thống mở khác bằng cách sử dụng các quy tắc chuẩn. Những quy tắc này được gọi là những giao thức. Để cho phép một nhóm máy tính có thể truyền thông trên mạng, chúng phải thỏa thuận trên một giao thức được sử dụng. Có hai loại giao thức chính. Giao thức hướng kết nối và giao thức không kết nối. Trong mô hình OSI, truyền thông đươc chia thành 7 tầng. Mỗi tầng giải quyết một vấn đề của truyền thông. Tầng vật lý: liên quan đến nhiệm vụ truyền dòng bít không có cấu trúc qua đường truyền vật lý, truy nhập đường truyền vật lý nhờ các phương tiện cơ, điện. Tầng liên kết dữ liệu: cung cấp phương tiện để truyền thông tin qua liên kết vật lý đảm bảo tin cậy như gửi các khối dữ liệu với các cơ chế đồng bộ hóa, kiểm soát lỗi và kiểm soát luồng dữ liệu cần thiết. Tầng mạng: thực hiện việc chọn đường và chuyển tiếp thông tin với công nghệ chuyển mạch thích hợp, thực hiện kiểm soát luồng dữ liệu, cắt/hợp dữ liệu. Tầng giao vận: Thực hiện việc truyền dữ liệu giữa hai đầu mút; thực hiện cả việc kiểm soát lỗi và kiểm soát luồng dữ liệu giữa hai đầu mút; có thể thực hiện ghép kênh, cắt/hợp dữ liệu nếu cần. Tầng phiên: Cung cấp phương tiện quản lý truyền thông giữa các ứng dung; thiết lập, duy trì, đồng bộ hóa và hủy bỏ các phiên truyền thông giữa các ứng dụng. Tầng trình diễn: Chuyển đổi cú pháp dữ liệu để đáp ứng yêu cầu truyền dữ liệu của các ứng dụng qua môi trường OSI. Tầng ứng dụng: Cung cấp các phương tiện để người sử dụng truy nhập được vào môi trường OSI, đồng thời cung cấp các dịch vụ thông tin phân tán. Khi tiến trình A trên máy 1 muốn giao tiếp với tiến trình B trên máy 2, nó xây dựng một thông điệp và chuyển đến tầng ứng dụng của nó. Tầng ứng dụng sẽ thêm header trước thông điệp và chuyển xuống lớp giao diện cho tầng trình diễn. Tầng trình diễn thêm header của nó và chuyển thông điệp xuống tầng phiên. Cho đến khi thông điệp xuống đến tầng vật lý, nó thực sự được truyền đi. Khi thông điệp đến máy 2, nó được chuyển ngược lên các tầng trên và khi qua mỗi tầng nó lần lược được bóc đi các header. 3.1.2/ Gọi thủ tục từ xa Nhiều hệ phân tán dựa trên trao đổi thông điệp giữa các tiến trình. Tuy nhiên những thủ tục nhận và gửi không che dấu truyền thông, cái mà quan trọng để đạt được trong suốt truy cập trong hệ phân tán. Mô hình gọi thủ tục từ xa (Remote Procedure Call-RPC) nhằm vào che dấu hầu hết tính rắc rối của truyền thông điệp và là ý tưởng cho những ứng dụng client-server. Gọi thủ tục từ xa là phương thức cho phép một chương trình gọi một thủ tục nằm ở trên một máy khác. Khi tiến trình trên máy A gọi một tiến trình trên máy B, tiến trình trên A bị treo, và sự thực hiện thủ tục được gọi xảy ra trên B. Thông tin có thể được chuyển từ A đến B dưới dạng những tham số và sau khi thực hiện xong, kết quả được trả lại cho A. Vấn đề xảy ra đó là lời gọi và thủ tục được gọi nằm trên những máy khác nhau, chúng được thực hiện trong những không gian địa chỉ khác nhau, sự truyền những tham số và kết quả đã dẫn đến vấn đề phức tạp. Cuối cùng cả hai máy có thể bị lỗi hoặc sinh ra những vấn đề khác. Giải pháp để thực hiện lời gọi thủ tục từ xa là phải xây dựng tiến trình thực hiện giữa client và server như sau: -Thủ tục client gọi client stub. -Client stub xây dựng thông điệp và gọi hệ điều hành cục bộ. -Hệ điều hành client gửi thông điệp đến hệ điều hành từ xa. -Hệ điều hành từ xa chuyển thông điệp đến server stub. -Server stub mở những tham số và gọi server. -Server thực hiện và trả lại kết quả cho stub. -Server stub đóng gói trong một thông điệp và gọi hệ điều hành cục bộ. -Hệ điều hành server gửi thông điệp đến hệ điều hành client -Hệ điều hành client đưa thông điệp đến client stub -Stub mở kết quả và trả về cho client. Thực chất của RPC là một dịch vụ được thực hiện bởi một thủ tục mà phần thân của nó được thực hiện ở server. Khi client gọi một thủ tục, nó gọi một stub, gói những giá trị tham số vào một thông điệp và gửi đến server. Sau đó gọi thủ tục hiện thời và trả về kết quả ngược lại trong một thông điệp. Stub của client rút những giá trị kết quả từ thông điệp trả về cho ứng dụng của client gọi. RPC nhằm đạt được tính trong suốt truy xuất. Tuy nhiên, chúng không hỗ trợ nhiều để truyền những tham chiếu. Chức năng của client là lấy tham số của nó, gói chúng trong một thông điệp và gửi đến server stub. Khi thông điệp đến server, stub kiểm tra thông điệp để xem thủ tục nào cần thiết và làm lời gọi phù hợp. Nếu server cũng hỗ trợ thủ tục từ xa, server phải có một lệnh chuyển để chọn thủ tục được gọi, tùy thuộc trường thứ nhất của thông điệp. Khi server kết thúc, server stub điều khiển lại lần nữa. Nó lấy kết quả được cung cấp bởi server, đóng gói thành thông điệp. Thông điệp này được gửi lại client stub. 3.1.3/ Mô hình RPC mở rộng Mô hình RPC vẫn còn nhiều hạn chế, vì vậy ta bổ sung thêm một số mở rộng cho mô hình. Một số hệ điều hành đã đưa ra một sự tương đương của RPC cho những tiến trình mà cùng định vị trên cùng một máy, được gọi là doors. Một door là một tên chung cho một thủ tục trong không gian địa chỉ của một tiến trình server mà có thể được gọi bởi tiến trình cùng nằm với server. Như trong quy ước lời gọi thủ tục, khi một client gọi một thủ tục từ xa, client sẽ bị treo cho đến khi có trả lời. Sự chặt chẽ trong quá trình “yêu cầu-trả lời” này là không cần thiết khi không có một kết quả trả lại mà chỉ dẫn đến treo client trong khi nó có thể được xử lý được việc hữu ích khác ngay sau khi yêu cầu thủ tục từ xa được gọi. Để hỗ trợ cho trường hợp này hệ thống RPC được cung cấp những phương tiện gọi là RPC không đồng bộ. Với RPC không đồng bộ, server ngay tức khắc gửi trả lời lại cho client báo rằng yêu cầu RPC được nhận, sau đó nó gọi thủ tục được yêu cầu. Thao tác trả lời như một sự thừa nhận với client rằng server đang xử lý RPC. Client sẽ tiếp tục mà không bị ngăn lại ngay khi nó đã nhận được thông báo của server. RPC không đồng bộ cũng hữu ích khi một hồi âm sẽ được trả lại nhưng client không chuẩn bị để chờ nó và không làm gì cả. 3.1.4/ Các mô hình mở rộng khác Một cải tiến cho mô hình RPC dưới dạng RMI, cái mà dựa trên một khái niệm của những đối tượng phân tán. Một RMI về bản chất là một RPC, nhưng cụ thể cho một đối tượng từ xa. Sự khác nhau chính đó là RMI cho phép những tham chiếu đối tượng hệ thống rộng lớn được truyền như là những tham số. RPC và RMI đưa ra những phương tiện truyền thông đồng bộ, bằng cách một client bị ngăn lại cho đến khi server đã gửi một trả lời. Khác nhau của mỗi cơ chế là mức độ chặt chẽ của đồng bộ. Tính chặt chẽ trong đồng bộ của RPC là cao hơn so với RMI. Mô hình MOM nói chung đưa ra truyền thông đồng bộ liên tục, và được sử dụng khi RPCs và RMIs là không thích hợp. Chúng căn bản được sử dụng để giúp sự tích hợp của tập hợp những cơ sở dữ liệu vào một hệ thống thông tin mức lớn hơn. Một dạng truyền thông hoàn toàn khác đó là dòng (streaming), trong đó vấn đề là liệu có hoặc không hai thông điệp liên tiếp có mối quan hệ thời gian. Trong những dòng dữ liệu liên tục, một độ trễ hai đầu mút (end-to-end) lớn nhất được chỉ rõ cho mỗi thông điệp. Hơn nữa nó cũng được yêu cầu những thông điệp được gửi đối tượng với độ trễ hai đầu mút tối thiểu. Một ví dụ điển hình của dòng dữ liệu liên tục là phim và dòng âm thanh. 3.2/ Tiến trình (Processes) Tiến trình đóng một vai trò chủ yếu trong hệ phân tán vì chúng hình thành một cơ sở cho việc truyền thông giữa những máy khác nhau. Khái niệm tiến trình có nguồn gốc từ một lĩnh vực của hệ điều hành trong đó nó đựơc định nghĩa như một chương trình khả thi. Để tổ chức hiệu quả hệ thống client-server, khi thiết kế hệ phân tán cần chú ý trong việc thiết kế server, đồng thời đáp ứng triệt để những kỹ thuật chính như kỹ thuật đa luồng hoặc di trú mã 3.2.1/ Luồng trong hệ phân tán Một thuộc tính quan trọng của luồng là chúng có thể cung cấp một phương tiện cho phép ngăn chặn hệ thống gọi mà không ngăn chặn toàn bộ tiến trình đang chạy trong luồng. Đặc tính này làm cho luồng trở nên hấp dẫn để sử dụng trong hệ phân tán vì nó làm nó dễ dàng hơn để biểu diễn truyền thông dưới dạng duy trì đa kết nối logic trong cùng một thời gian. Để minh họa điều này, xin trình bày một số nét cơ bản của client và server đa luồng. a/ Client đa luồng Để thiết lập sự trong suốt ở mức độ cao, hệ phân tán hoạt động trong mạng diện rộng phải che dấu thời gian truyền thông điệp liên tiến trình dài. Giải pháp để che dấu sự truyền thông, là bắt đầu truyền thông và lập tức tiếp tục với những cái khác. Một ví dụ điển hình trong đó điều này xảy ra là trong Web browser. Trong nhiều trường hợp, một Web document gồm có một file HTML chứa văn bản với một tập hợp các hình ảnh... Để đem về một tài liệu Web, browser phải thiết lập một kết nối TCP/IP, đọc dữ liệu vào, và chuyển nó đến màn hình. Thiết lập một kết nối cũng như đọc dữ liệu vào là vốn đã ngăn chặn quá trình hoạt động. Khi giải quyết với truyền thông kéo dài, điều bất lợi là thời gian cho một thao tác để hoàn thành có thể khá dài. Một Web browser thường bắt đầu đem về một trang HTML và sau đó hiển thị nó. Để che dấu truyền thông, browser bắt đầu hiển thị dữ liệu trong khi nó vẫn còn nhập về. Trong khi văn bản và các phương tiện cuộn trang được làm sẵn sàng cho người sử dụng, browser tiếp tục đem về những file khác chẳng hạn hình ảnh. Như vậy người dùng có thể sử dụng trang Web mà không cần phải đợi cho đến khi toàn bộ trang được đem về. Web browser có thể làm một số nhiệm vụ đồng thời xảy ra cùng một lúc. Như vậy, phát triển browser khi một cilent đa luồng làm đơn giản hóa vấn đề đáng kể. Ngay từ khi file HTML chính được đem về, những luồng phân biệt có thể được kích hoạt để giữ việc đem về của những phần khác. Mỗi luồng thiết lập một kết nối phân biệt đến server và kéo dữ liệu trong đó. Thiết lập một kết nối và đọc dữ liệu từ server có thể được lập trình sử dụng lời gọi hệ thống chuẩn. Trong nhiều trường hợp, Web server được nhân bản qua nhiều máy, trong đó mỗi server cung cấp chính xác cùng một tập những tài liệu Web. Server được nhân bản định vị ở cùng một site và được biết dưới cùng một tên. Nếu một yêu cầu một trang web đến, yêu cầu được hướng về một server. Khi sử dụng một client đa luồng, kết nối có thể được thiết lập thành nhiều bản nhân khác nhau, cho phép dữ liệu được truyền song song, kết quả toàn bộ tài liệu Web lấp đầy màn hình trong thời gian ngắn hơn so với một server không nhân bản. Cách tiếp cận này là chỉ có thể nếu client được điều khiển dòng song song của dữ liệu vào. Luồng là ý tưởng cho mục đích này. b/ Server đa luồng. Mặc dù client đa luồng là rất hữu ích nhưng sử dụng chính của đa luồng trong hệ phân tán lại là tìm kiếm tại server. Thực tế chỉ ra rằng không chỉ làm đơn giản hóa mã server đáng kể mà còn làm nó dễ dàng hơn để phát triển server mà khai thác song song để đạt được hiệu suất cao, thậm chí trên một hệ thống đơn xử lý. 3.2.2/ Những vấn đề thiết kế chung cho server Một server là một tiến trình thực hiện một dịch vụ cụ thể thay mặt cho một tập hợp client. Có một số cách khác nhau để tổ chức server. Trong trường hợp của một server tương tác, bản thân server điều khiển yêu cầu và trả lại một đáp ứng cho client yêu cầu. Một server đồng thời không điều khiển yêu cầu, nhưng nó truyền yêu cầu đến một luồng phân biệt hoặc một tiến trình khác, sau đó nó chờ yêu cầu tiếp theo. Một server đa luồng là một ví dụ của server đồng thời. Sự thực hiện của một server đồng thời là để phân một tiến trình mới cho mỗi yêu cầu vào mới. Luồng hoặc tiến trình điều khiển yêu cầu chịu trách nhiệm trả lời cho client yêu cầu. Một vấn đề khác là khi những client tiếp xúc với server. Trong tất cả các trường hợp, client gửi yêu cầu đến một điểm cuối (endpoint), còn gọi là cổng, là máy mà server đang chạy. Mỗi server hướng đến một cổng cụ thể. Bằng cách nào client biết cổng của một server. Một giải pháp là ấn định những cổng cho dịch vụ đã biết. Ví dụ, một HTTP server cho World Wide Web luôn hướng đến TCP cổng 80. Những điểm cuối này được ấn định bởi Internet Assign Numbers Authority (IANA). Với những điểm cuối được ấn định, client chỉ cần tìm địa chỉ mạng của máy trong đó server đạng chạy. Một vấn đề khác khi thiết kế server là có thể một server bị gián đoạn. Ví dụ, người sử dụng quyết định upload một file lớn lên một FTP server. Sau đó nhận ra rằng đó là file sai và muốn ngắt server để hủy bỏ truyền dữ liệu. Có nhiều cách để làm điều này. Một cách làm trong Internet là cho người sử dụng thoát ứng dụng client, khởi động lại nó và xem như không có gì xảy ra. Server sẽ cắt kết nối cũ, xem như client đã bị ngắt. Một giải pháp tốt hơn để điều khiển ngắt truyền thông là phát triển client và server sao cho nó có thể gửi dữ liệu out-of-band, là dữ liệu mà được xử lý bởi server trước khi bất kỳ dữ liệu nào của client. Một giải pháp là cho server nghe một cổng điều khiển phân biệt để client gửi dữ liệu out-of-band, trong khi cùng lúc đó nghe điểm cuối thông qua cái mà truyền dữ liệu thông thường. Một giải pháp khác là để gửi dữ liệu out-of-band qua kết nối giống nhau thông qua client đang gửi những yêu cầu nguyên bản. Trong TCP có thể chuyển khẩn cấp dữ liệu. Khi dữ liệu khẩn cấp được nhận tại server, cái sau cùng bị ngắt, sau đó nó có thể kiểm tra dữ liệu và điều khiển phù hợp. Cuối cùng một vấn đề thiết kế quan trọng là liệu có hoặc không server là stateless. Một server stateless là không giữ thông tin trên trạng thái của client của nó, và có thể thay đổi trạng thái bản thân mà không phải báo cho bất kỳ client nào. Ví dụ, một Web server là một server stateless. Nó chỉ đơn thuần trả lời cho những yêu cầu HTTP để upload một file lên server hoặc để đem về một file. Khi yêu cầu được xử lý, Web server hoàn toàn bỏ quên client. Cũng như vậy một tập hợp các file mà Web server quản lý có thể thay đổi mà client không được thông báo. Ngược lại, một server statefull duy trì thông tin trên các client của nó. Một server như vậy sẽ duy trì một bảng chứa các mục . Bảng này cho phép server lưu vết của client hiện tại có quyền cập nhật trên file này, và như vậy cũng có thể phiên bản mới nhất của file đó. Khi thiết kế một server, việc chọn stateless hoặc stateful phải không được ảnh hưởng các dịch vụ được cung cấp bởi server. Trong các trường hợp khác, một server có thể muốn giữ một bản ghi trên một hành động của client vì vậy nó có thể hữu ích hơn đáp ứng những yêu cầu của nó. Ví dụ, Web server đôi khi đưa ra một khả năng để hướng một client đến một trang ưa thích. Cách tiếp cận này chỉ nếu server có thông tin tiểu sử của client đó. Một giải pháp chung là cho client gửi thêm thông tin trên những truy xuất trước của nó. Thông tin này được lưu trữ trong suốt bởi browser của client 3.2.3/ Di trú mã Một kỹ thuật quan trọng trong hệ phân tán diện rộng là di trú mã. Di trú mã trong hệ phân tán xảy ra dưới dạng di trú tiến trình trong đó một tiến trình di chuyển từ một máy đến một máy khác. Di chuyển một tiến trình đang chạy đến một máy khác nhằm nâng cao hiệu suất của hệ phân tán. Cơ sở của ý tưởng đó là hiệu suất của hệ thống có thể được cải tiến nếu tiến trình được di chuyển từ máy tải trọng cao đến máy có tải trọng thấp Một giải pháp để giảm tải trọng đó là phân tán thuật giải, ngoài ra còn có thể khai thác cơ chế song song. Ví dụ tìm kiếm thông tin trên Web. Rất đơn giản để thực hiện tìm kiếm dưới dạng một chương trình di động nhỏ mà di chuyển từ site này sang site khác. Bằng cách làm nhiều bản sao của chương trình như vậy và gửi cho mỗi site khác nhau, ta có thể đạt được sự tăng tốc tuyến tính so với chỉ sử dụng một chương trình đơn. Một lý do khác để hỗ trợ di trú mã đó là tính linh hoạt. Tính linh hoạt tăng nếu một client có thể chủ động tải phần mềm cần thiết để giao tiếp với một server cụ thể. Phần mềm được tải có thể được nhằm vào server đó mà không bắt buộc client phải được cài đặt trước. 3.3/ Định danh-Naming Tên đóng một vai trò quan trọng trong tất cả những hệ thống máy tính. Chúng được dùng để chia sẻ tài nguyên, để nhận diện duy nhất các thực thể, để tìm đến những vị trí... Phần này đề cập đến ba loại tên khác nhau đó là địa chỉ, Identifiers và tên thân thiện. Sau đó giới thiệu về hai cách tổ chức không gian tên, cuối cùng trình bày về kỹ thuật phân tích tên. 3.3.1/ Tên, Identifiers và địa chỉ Một tên trong hệ phân tán là một xâu bít hoặc ký tự mà được dùng để tham chiếu đến một thực thể. Thực thể trong hệ phân tán có thể là bất kỳ cái gì chẳng hạn: máy in, đĩa, trang Web... Về cơ bản, có ba loại tên. Một địa chỉ là một loại đặc biệt của tên, nó tham chiếu đến một điểm truy xuất của một thực thể. Bởi vì một điểm truy xuất liên quan chặt chẽ với một thực thể, do vậy dường như việc dùng một địa chỉ của một điểm truy xuất như một tên của một thực thể là thích hợp. Nếu một thực thể có nhiều hơn một điểm truy xuất, việc dùng địa chỉ để tham chiếu thực thể là không rõ ràng. Ví dụ, nhiều tổ chức phân tán dịch vụ Web của họ trên nhiều server, nếu ta sử dụng địa chỉ của những server đó như một tham chiếu đối với dịch vụ Web, thì không thể biết địa chỉ nào sẽ được chọn. Giải pháp tốt hơn phải có một tên riêng cho dịch vụ Web, độc lập với những địa chỉ Web server khác. Một Identifier là một loại khác của tên. Nó có ba thuộc tính đó là: mỗi thực thể được tham chiếu chính xác bởi một identifier, một identifier chỉ tham chiếu đến đúng một thực thể, và nó không bao giờ được quy cho một thực thể khác. Việc sử dụng identifier sẽ dễ dàng hơn để tham chiếu rõ ràng đến một thực thể. Những tên thân thiện với con người là một loại của tên mà được biểu diễn như một xâu ký tự. Những tên này xuất hiện trong nhiều dạng khác nhau, nó được định nghĩa bởi người sử dụng. 3.3.2/ Tổ chức không gian tên Những tên trong hệ phân tán được tổ chức thành một không gian tên. Có nhiều cách để tổ chức không gian tên. Một không gian tên có thể được biểu diễn như là một đồ thị có hướng với hai loại nút. Một nút lá biểu diễn một tên thực thể và có thuộc tính là không có cạnh đi ra. Một nút lá lưu giữ thông tin của thực thể mà nó biểu diễn. Một nút thư mục có một số cạnh đi ra. Mỗi nút có một nhãn và một tên. Trong một số trường hợp một không gian tên chỉ có một nút gốc và được phân cấp chặt chẽ theo cấu trúc hình cây. Một không gian tên có thể được biểu diễn bởi một định danh đồ họa trong đó một nút biểu diễn một tên thực thể và nhãn trên mỗi cạnh biểu diễn tên dưới dạng thực thể được biết. Một nút có nhiều cạnh đi ra biểu diễn một tập hợp những thực thể. 3.3.3/ Phân tích tên Không gian tên đưa ra một cơ chế thích hợp để lưu giữ thông tin về những thực thể. Một tên đường dẫn đã cho, có thể tìm kiếm bất kỳ một thông tin được lưu trên nút được tham chiếu bởi tên đó. Tiến trình tìm kiếm một tên được gọi là phân tích tên. Một tên được tìm kiếm trả về một định danh của nút từ nơi mà xử lý phân tích tiếp tục. Định danh đồ họa là thích hợp cho việc tổ chức định danh thân thiện của con người theo một cách có cấu trúc. Một thực thể có thể được tham chiếu đến bởi một tên đường dẫn. Phân tích tên là quá trình đi trên định danh đồ họa bằng cách tra những thành phần của một tên đường dẫn, mỗi cái một lần. Một định danh đồ họa tích hợp được biểu diễn bằng cách phân tán những nút của nó khắp nhiều tên của các server. Khi phân tích một tên đường dẫn bằng cách đi trên định danh đồ họa, phân tích tên tiếp tục tại tên server tiếp theo ngay khi một nút được đi đến biểu diễn server đó Tên được sử dụng để định vị những thực thể di động. Hệ thống định danh cho tên thân thiện là không thích hợp với thực thể di động cao. Tìm kiếm các thực thể di động có thể được thực hiện tốt hơn bằng cách sử dụng identifier độc lập định vị. Có bốn cách tiếp cận cơ bản để tìm kiếm một thực thể di động. Tiếp cận thứ nhất là sử dụng quảng bá hoặc đa tán. Sự nhận dạng của thực thể được quảng bá đến mọi tiến trình trong hệ phân tán. Tiến trình đưa ra một điểm truy xuất cho thực thể đáp lại bằng cách cung cấp một địa chỉ cho điểm truy xuất đó. Rõ ràng, tiếp cận này bị giới hạn bởi tính co giãn. Cách tiếp cận thứ hai là sử dụng con trỏ định hướng. Mỗi lần một thực thể di chuyển đến một vị trí tiếp theo. Nó để lại đằng sau một con trỏ cho biết nơi tiếp theo của nó. Vị trí thực thể yêu cầu đi trên đường của con trỏ định hướng. Để ngăn chặn sự trải dài đường đi của con trỏ định hướng, cần phải đặt lại vị trí con trỏ sau mỗi lần. Cách tiếp cận thứ ba là định rõ vị trí hiện tại cho một thực thể. Mỗi lần một thực thể di chuyển đến vị trí khác vị trí hiện tại sẽ thay đổi. Định vị một thực thể bằng cách yêu cầu vị trí hiện tại của nó. Cách tiếp cận thứ tư là xây dựng một cây phân cấp tìm kiếm. Mạng được chia ra thành nhiều miền không chồng nhau. Các miền có thể được nhóm lại thành những miền không chồng nhau mức cao hơn. Có một miền đơn mức đỉnh mà bao bọc toàn bộ mạng. Mỗi miền ở một mức bất kỳ có một nút thư mục liên quan. Nếu một thực thể được định vị trong một miền D, nút thư mục của miền mức cao hơn sẽ có một con trỏ chỉ đến D. Một nút thư mục mức thấp nhất lưu địa chỉ của thực thể. Nút thư mục ở mức đỉnh biết về tất cả mọi thực thể. Cuối cùng đó là giải quyết vấn đề tự động xóa bỏ với tên mà không được tham chiếu nữa. Những thực thể mà có thể không được tìm kiếm nữa sẽ bị xóa. Một sử dụng quan trọng của tên trong hệ phân tán là để tổ chức tham chiếu đến những thực thể sao cho những thực thể không được tham chiếu được tự động xóa bỏ. Tập hợp rác này yêu cầu sự hỗ trợ của đếm tham chiếu hoặc lưu vết tham chiếu. Với đếm tham chiếu, một thực thể đếm số tham chiếu còn tồn tại đến nó. Khi con đếm giảm về 0, thực thể có thể bị xóa. Thay vì đếm số tham chiếu, cũng có thể duy trì một danh sách các tiến trình tham chiếu đến một thực thể. Với phương thức dựa trên lưu vết, tất cả những thực thể mà trực tiếp hoặc gián tiếp tham chiếu từ một tập đã cho của những thực thể gốc, được đánh dấu là có thể đến được. Những thực thể không đến được là bị xóa. Lưu vết phân tán là khó vì nó yêu cầu tất cả các thực thể trong một hệ thống là được duyệt qua. 3.4/ Đồng bộ hóa-Synchronization Liên quan chặt chẽ với truyền thông giữa các tiến trình là vấn đề bằng cách nào những tiến trình trong hệ phân tán xảy ra đồng thời. Một vấn đề trong hệ phân tán và mạng máy tính đó là không có khái niệm đồng hồ chia sẻ toàn cầu. Để thực hiện đồng bộ hóa, các đồng hồ trong hệ phân tán cùng cho một giá trị thời gian. Cách duy nhất là phải thực hiện đồng bộ hóa đồng hồ. Có nhiều thuật toán đồng bộ hóa đồng hồ chẳng hạn như Cristian’s Algorithm, Berkeley Algorithm, Averaging Algorithm. Nhưng tất cả những thuật toán về cơ bản dựa trên những thay đổi giá trị đồng hồ, đó là thời gian được tính cần thiết để gửi và nhận thông điệp. Sự thay đổi do sự chậm trễ truyền thông và cách giải quyết những sự thay đổi này, xác định mức độ chính xác của những thuật giải đồng bộ hóa đồng hồ. Trong nhiều trường hợp, không cần thiết phải biết thời gian tuyệt đối. Vì vậy bằng cách đưa vào một khái niệm của đồng hồ logic, có thể cho một tập hợp những tiến trình đi đến sự thỏa thuận toàn cầu trên thứ tự đúng của những sự kiện. Thực chất, mỗi sự kiện e, khi gửi hoặc nhận một thông điệp, được gắn cho một nhãn thời gian logic toàn cầu C(e), như vậy nếu sự kiện a đã xảy ra trước b, thì C(a)<C(b). Những nhãn thời gian có thể mở rộng thành vectơ nhãn thời gian: nếu C(a)<C(b), cũng có nghĩa là sự kiện a đã đến trước b. Trong hệ phân tán, việc xác định một cách chính xác tình trạng hiện tại của hệ thống là rất khó. Xác định tình trạng toàn cục của một hệ phân tán có thể được thực hiện bởi sự đồng bộ tất cả các tiến trình vì vậy mỗi cái tích hợp tình trạng cục bộ của bản thân nó, cùng với thông điệp mà hiện tại trên đường đi. Bản thân sự đồng bộ hóa có thể được thực hiện mà không bắt buộc những tiến trình dừng lại và tập hợp trạng thái của chúng. Đồng bộ hóa giữa các tiến trình thường yêu cầu một tiến trình hoạt động như một điều phối viên. Trong những trường hợp đó nếu điều phối viên không được cố định, cần thiết phải có một tiến trình trong tính toán phân tán quyết định ai sẽ là điều phối viên. Một quyết định như vậy được thực hiện bởi thuật toán chọn. Thuật toán chọn cũng được sử dụng trong những trường hợp mà điều phối viên có thể rớt mạng. Hai vấn đề liên quan với đồng bộ hóa là sự ngăn chặn lẫn nhau trong hệ phân tán và những giao dịch phân tán. Ngăn chặn lẫn nhau trong hệ phân tán cho phép chia sẻ những tài nguyên được bảo vệ chống lại sự truy cập cùng một lúc của nhiều tiến trình. Giao dịch phân tán thực hiện việc này một cách tương tự, nhưng tối ưu hóa truy xuất thông qua những cơ chế điều khiển xảy ra đồng thời cấp cao. Liên quan đến sự ngăn chặn lẫn nhau là phân tán giao dịch. Một giao dịch gồm có một chuỗi các thao tác trên cơ sở dữ liệu chia sẻ, như vậy giao dịch hoặc là thực hiện hoàn toàn hoặc là không. Hơn nữa, một số giao dịch có thể được thực thi cùng một lúc vì vậy toàn bộ kết quả là giống như những giao dịch đã được thực hiện trong một thứ tự tùy ý và liên tiếp. Một giao dịch là bền vững nếu nó hoàn thành và những kết quả của nó là vĩnh cửu. 3.5/ Nhất quán và nhân bản-Consitency and replication Một vấn đề quan trọng trong hệ phân tán là nhân bản của dữ liệu. Lý do để nhân bản đó là nhằm nâng cao độ tin cậy và cải tiến hiệu suất của hệ phân tán. Vấn đề đặt ra là những bản nhân phải nhất quán. Để minh họa, ta xem xét sự cải tiến thời gian truy xuất đến trang Web. Nếu không có biện pháp đặc biệt, việc đem về một trang Web từ một Web server từ xa có thể mất nhiều thời gian để hoàn thành. Để cải tiến hiệu suất, Web browser thường lưu trữ cục bộ một bản sao của một trang Web đã đem về lần trước. Nếu người sử dụng yêu cầu trang Web đó lại thì browser sẽ tự động trả lại bản sao cục bộ. Nhân bản đưa ra một vấn đề nhất quán đó là mỗi khi một bản nhân được cập nhật thì bản nhân này trở thành khác với những bản nhân khác. Để giữ bản nhân nhất quán, ta cần phải truyền bá cập nhật sao cho không nhất quán tạm thời là không được chú ý. Nhưng làm như vậy có thể làm giảm sút hiệu suất, đặc biệt trong hệ phân tán diện rộng. Giải pháp duy nhất cho vấn đề này là giảm bớt mức độ nhất quán. Trong mô hình nhất quán mạnh, nhất quán được định nghĩa trong những điều kiện riêng biệt những thao tác đọc và ghi trên cơ sở dữ liệu chia sẻ. Có thể phân thành một số dạng nhất quán như sau: nhất quán chặt chẽ, nhất quán liên tục (sequential), nhất quán nhân quả, và nhất quán FIFO. Tình trạng nhất quán chặt chẽ mà một thao tác đọc luôn luôn trả lại giá trị được viết gần nhất. Với sự thiếu thời gian toàn cục trong hệ phân tán, nhất quán chặt chẽ không thể thực hiện được. Nhất quán liên tục về cơ bản cung cấp ngữ nghĩa mà những người lập trình mong đợi trong chương trình xảy ra đồng thời. Tất cả các thao tác ghi đều được mọi người thấy trong cùng thứ tự. Nhất quán nhân quả phản ánh những thao tác mà có khả năng lệ thuộc vào nhau được đưa ra trong thứ tự của sự phụ thuộc đó. Nhất quán FIFO cho rằng chỉ những thao tác từ một tiến trình đơn được đưa ra trong thứ tự như đã chỉ rõ bởi tiến trình đó. Những mô hình nhất quán đối với dữ liệu chia sẻ thường khó thực thi hiệu quả trong những hệ phân tán tích hợp cao (large-scale) Hơn nữa, trong nhiều trường hợp những mô hình đơn giản và dễ sử dụng hơn có thể được dùng. Một lớp cụ thể được tạo thành bởi những mô hình nhất quán tập trung client, cái mà tập trung trên sự nhất quán từ góc độ của một client đơn. Mô hình nhất quán tập trung client không quan tâm đến việc dữ liệu có thể được chia sẻ bởi nhiều người sử dụng, mà tập trung trên nhất quán một client độc lập. Sự thừa nhận cơ bản đó là một client kết nối với các bản nhân khác trong dòng thời gian, nhưng sự khác nhau đó phải được làm trong suốt. Thực chất, mô hình nhất quán tập trung client bảo đảm rằng mỗi khi một client nối với một bản nhân, bản nhân đó được duy trì với dữ liệu mà trước đây đã được điều khiển bởi client đó. Có hai vấn đề liên quan đến việc thực hiện nhất quán. Vấn đề thứ nhất liên quan đến sự sắp xếp của những bản nhân và những cách tryền bá những cập nhật giữa các bản nhân. Để truyền bá những cập nhật cần phải áp dụng những kỹ thuật khác nhau. Điều quan trọng là phải xác định được chính xác truyền bá cái gì, nơi nào những cập nhật được truyền bá và sự truyền bá được bắt đầu bởi người nào. Vì vậy, không phải tất cả các bản nhân luôn luôn cần được cập nhật ngay tức thì. Những bản nhân nào được cập nhật tại thời gian nào phụ thuộc vào giao thức phân tán. Có hai cách để cập nhật đó là có thể một cập nhật được đẩy vào cho một bản nhân hoặc một bản nhân kéo những cập nhật từ bản nhân khác. Những giao thức nhất quán mô tả biểu diễn cụ thể của mô hình nhất quán. Đối với nhất quán liên tục và biến đổi của nó, một sự phân tán có thể được làm giữa những giao thức hướng cơ sở. Tất cả những thao tác cập nhật được định hướng đến một bản sao cơ sở, sau đó những cập nhật được sắp xếp và định hướng. Trong những giao thức nhân bản ghi (replicated-write), một cập nhật được hướng đến nhiều bản nhân tại cùng một lúc. Trong trường hợp đó, sắp xếp chính xác những thao tác thường trở nên khó hơn. Vấn đề thứ hai là những bản nhân được giữ nhất quán như thế nào. Trong hầu hết những trường hợp, các ứng dụng yêu cầu một sự nhất quán mạnh. Điều này có nghĩa là những cập nhật được truyền bá ngay tức thì giữa những bản nhân. Có nhiều lựa chọn khác nhau để thực hiện sự nhất quán mạnh. Giải pháp được thể hiện trong những giao thức caching. 3.6/ Tính chịu lỗi (Fault Tolerance- Dung sai lỗi) Một đặc điểm của hệ phân tán để phân biệt với hệ thống tập trung đó là sự hỏng hóc từng phần. Một hỏng hóc từng phần xảy ra khi một thành phần trong hệ phân tán không hoạt động được nữa. Một mục tiêu quan trọng trong thiết kế hệ phân tán là xây dựng hệ thống mà khi có một lỗi xuất hiện, hệ thống có thể tiếp tục thực hiện và có thể tự động khôi phục những phần lỗi cục bộ mà không ảnh hưởng nghiêm trọng đến toàn bộ hệ thống. Tính chịu lỗi là một đề tài quan trọng trong thiết kế hệ phân tán. Tính chịu lỗi của một hệ thống được thể hiện ở khả năng có thể tiếp tục hoạt động trong sự hiện hữu của lỗi, đồng thời phục hồi được lỗi đó ngay trong quá trình hoạt động. 3.6.1/ Phân loại lỗi Có nhiều loại lỗi khác nhau. Một lỗi treo (crash) xuất hiện khi một tiến trình bị dừng lại. Một lỗi bỏ sót (omission) xuất hiện khi một tiến trình không đáp lại yêu cầu vào. Một lỗi thời gian xuất hiện khi một tiến trình đáp ứng quá sớm hoặc quá muộn một yêu cầu. Trả lời sai yêu cầu vào gọi là lỗi đáp ứng. Lỗi khó nhất đó là một tiến trình có nhiều loại lỗi và được gọi là lỗi phức tạp. 3.6.2/ Kỹ thuật để đạt được tính chịu lỗi Dự phòng là kỹ thuật chủ yếu để đạt được tính chịu lỗi. Trong đó ý tưởng chính đó là tổ chức nhiều tiến trình y hệt nhau thành một nhóm mà cùng hoạt động để cung cấp một dịch vụ. Một nhóm tiến trình chịu lỗi nếu một hoặc nhiều tiến trình có thể hỏng mà không ảnh hưởng đến khả năng phục vụ của dịch vụ. Nhóm tiến trình có thể không cố định. Có thể tạo ra nhóm mới và xóa đi những nhóm cũ. Một tiến trình có thể tham gia vào một nhóm hoặc rời khỏi một nhóm trong suốt quá trình hoạt động của hệ thống. Một tiến trình có thể là thành viên của nhiều nhóm trong cùng một thời điểm. Vì vậy cần có cơ chế quản lý các nhóm và các thành viên nhóm. Thông thường, nó là cần thiết mà truyền thông với nhóm được tin cậy cao, và theo thứ tự chặt chẽ và những thuộc tính automicity để đạt được tính chịu lỗi. 3.6.3/ Kỹ thuật phục hồi lỗi Để phục hồi lỗi, phải sử dụng kỹ thuật điểm kiểm soát (checkpoint). Trong đó, mỗi tiến trình lưu lại trạng thái của nó trong một thiết bị nhớ cục bộ. Để phục hồi sau mỗi tiến trình bị lỗi yêu cầu phải xây dựng một trạng thái nhất quán toàn cục từ những trạng thái cục bộ này. Tuy nhiên, việc chọn một điểm kiểm soát là rất khó khăn và tốn thời gian. Để cải tiến hiệu suất, nhiều hệ phân tán tích hợp điểm kiểm soát với việc cắt các thông điệp. ý tưởng cơ bản của kỹ thuật cắt thông điệp đó là nếu thông điệp có thể được truyền lại, ta vẫn có thể đạt được một trạng thái nhất quán toàn cục mà không phải phục hồi trạng thái đó từ thiết bị nhớ cố định. Thay vào đó một trạng thái điểm kiểm soát được lấy như một điểm khởi đầu và tất cả thông điệp mà đã được gửi từ đó được truyền lại và điều khiển. Bằng cách cắt truyền thông giữa các tiến trình đã dẫn đến khả năng hệ thống hoạt động lại sau khi một lỗi xuất hiện. 3.7/ An toàn-Security An toàn đóng một vai trò rất quan trọng trong hệ phân tán và đó cũng là một vấn đề khó nhất. 3.7.1/ Vấn đề cơ bản của an toàn. Có ba vấn đề quan trọng liên quan đến vấn đề an toàn trong hệ phân tán. Vấn đề thứ nhất đó là một hệ phân tán nên đưa ra những phương tiện để thiết lập kênh an toàn giữa những tiến trình. Về nguyên tắc, một kênh an toàn phải cung cấp phương tiện để xác thực lẫn nhau những người tham gia truyền thông, và bảo vệ thông điệp chống lại sự can thiệp trong suốt giao dịch của họ. Một kênh an toàn cũng cung cấp sự cẩn mật sao cho không một ai có thể đọc thông điệp mà truyền thông qua kênh trừ những người tham gia trực tiếp truyền thông. Giải pháp trong thiết kế là hoặc chỉ sử dụng một hệ thống phần tử bí mật đối xứng, hoặc tích hợp nó với một hệ thống khóa công cộng. Vấn đề thứ hai trong an toàn hệ phân tán là điều khiển truy xuất, hoặc sự cấp phép. Điều khiển truy xuất giải quyết việc bảo vệ tài nguyên sao cho chỉ có những tiến trình có quyền truy xuất thích hợp mới được truy xuất và sử dụng những tài nguyên đó. Điều khiển truy xuất luôn luôn xảy ra sau khi một tiến trình đã được xác nhận là đúng. Có hai giải pháp để điều khiển truy xuất. Thứ nhất, mỗi tài nguyên có thể duy trì một danh sách điều khiển truy xuất nhằm đưa ra chính xác quyền truy xuất của mỗi người sử dụng hoặc tiến trình. Thứ hai, một tiến trình có thể mang một giấy phép xác định quyền truy xuất của nó đối với một tập tài nguyên cụ thể. Lợi ích chính của sử dụng giấy phép đó là một tiến trình có thể dễ dàng chuyển giấy phép của nó đến một tiến trình khác, hay còn gọi là ủy thác quyền truy xuất của nó. Tuy nhiên, có một hạn chế của giấy phép đó là thường khó khăn để thu hồi chúng. Chú ý khi giải quyết điều khiển tiến trình trong trường hợp mã di động, bên cạnh việc bảo vệ mã di động chống lại một host nguy hiểm, cần phải bảo vệ một host chống lại một mã di di động nguy hiểm. Nhiều kế hoạch đã được thực hiện, trong đó sandbox đang được áp dụng rộng rãi nhất. Vấn đề thứ ba trong an toàn hệ phân tán liên quan đến sự quản lý. Có hai vấn đề con quan trọng chủ yếu: quản lý khóa và quản lý sự cấp phép. Quản lý khoá bao gồm sự phân tán của những khóa mật mã. Quan trọng đối với quản lý cấp phép là thuộc tính giấy chứng nhận và sự ủy thác. IV/ Những hệ phân tán hướng tư liệu Hệ thống hướng tư liệu mang lại cho người sử dụng khái niệm của một tư liệu như là một phương tiện đơn giản và năng lực hiệu quả để trao đổi thông tin. Web là hệ thống phân tán hướng tư liệu quan trọng nhất hiện nay. Một hệ thống hướng tư liệu được phát triển trước Web là Lotus Notes. Ngược lại với Web, Notes chủ yếu dựa trên cơ sở dữ liệu. Ngày nay nó vẫn còn là một hệ thống sử dụng rộng rãi, thông thường tích hợp với kỹ thuật Web và cung cấp nhiều phương tiện để xây dựng dịch vụ hướng Web. 4.1/ Word Wide Web 4.1.1/ Tổng quan về WWW WWW là một hệ thống client-server khổng lồ với hàng triệu server phân tán rộng khắp thế giới. Mỗi server duy trì một tập hợp những tài liệu, mỗi tài liệu được lưu trữ như là một file, một server chấp nhận những yêu cầu để đem về một tài liệu và chuyển nó đến client. Hơn nữa, nó cũng có thể chấp nhận những yêu cầu cho lưu trữ tài liệu mới. Cách đơn giản nhất để tham chiếu đến một tài liệu là dùng Uniform Resource Locator (URL). Nó ghi rõ nơi một tài liệu được tìm thấy, thông thường bằng cách gắn vào tên DNS của server liên quan của nó với một tên file bằng cái mà server có thể tra cứu tài liệu ở trên hệ thống file cục bộ của nó. Hơn nữa, một URL chỉ ra giao thức mức ứng dụng để chuyển tài liệu trên mạng. 2.Server fetch doc from local file Một client tương tác với Web servers thông qua một ứng dụng đặc biệt là một chương trình duyệt (browser). Một browser là chịu trách nhiệm hiển thị một tài liệu và nhận thông tin vào từ một người dùng bằng cách để người dùng chọn một tham chiếu đến một tài liệu khác. Server Web server OS Client Browser OS 3.response 1.Get document req Toàn bộ tổ chức của Web a/ Mô hình tài liệu Nguyên tắc cơ bản của Web là tất cả thông tin biểu diễn bằng tài liệu. Có nhiều cách để miêu tả một tài liệu. Một vài tài liệu như là một file văn bản, file âm thanh hoặc những kịch bản... Một tài liệu có thể chứa những tham chiếu đến tài liệu khác. Một tham chiếu như vậy gọi là một siêu liên kết. Khi một tài liệu được hiển thị trong một browser, siêu liên kết đến một tài liệu khác có thể được chỉ ra rõ ràng cho người dùng. Người dùng có thể chọn một liên kết bằng cách bấm chuột lên nó. Kết quả của việc chọn một siêu liên kết là đem về và hiển thị một tài liệu ở máy của người sử dụng. Hầu hết tài liệu Web được miêu tả bởi một ngôn ngữ đặc biệt gọi là HyperText Markup Language (HTML). HTML là một ngôn ngữ đánh dấu, nó cung cấp từ khóa để cấu trúc một tài liệu thành nhiều phần khác nhau. Ví dụ, mỗi tài liệu HTML được chia thành một phần tiêu đề và một phần thân chính. HTML cũng phân biệt những tiêu đề, danh sách, bảng và biểu mẫu. Nó cũng có thể chèn tranh ảnh hoặc chuyển động hoạt họa ở một vị trí đặc biệt trong một tài liệu. Ngoài ra, HTML còn cung cấp nhiều từ khóa để hiển thị tài liệu. Hiện nay HTML có nhiều công cụ để tạo ra những trang Web hoàn hảo. Một khả năng mạnh nhất của nó là biểu diễn những tài liệu dưới dạng kịch bản. Khi một tài liệu được phân tích, nó được lưu trữ bên trong như một cây gọi là cây phân tích, trong đó mỗi nút biểu diễn một thành phần của tài liệu. Để đạt được tính cơ động, sự biểu diễn của cây phân tích được chuẩn hóa. Ngoài HTML còn có một ngôn ngữ khác nữa đó là XML, nó chỉ được dùng để cấu trúc một tài liệu mà không chứa từ khóa để định dạng tài liệu. b/ Kiến trúc tổng quát Sự kết hợp của HTML và XML với kịch bản cung cấp một sức mạnh để miêu tả tài liệu. Tuy nhiên khó mà chỉ ra nơi tài liệu thực tế được xử lý và loại xử lý gì xảy ra. WWW bắt đầu tiến hành như là hệ thống client-server có quan hệ đơn giản. Hiện nay, kiến trúc này được mở rộng với nhiều thành phần để cung cấp một loại kiểu tài liệu mới như vừa được mô tả. Một sự phát triển đầu tiên của kiến trúc cơ sở là cung cấp cho người sử dụng sự tương tác đơn giản bởi Common Gateway Interface-CGI. CGI định nghĩa một cách chuẩn bởi Web server có thể thực hiện một chương trình lấy dữ liệu người sử dụng như là dữ liệu vào. Thông thường, dữ liệu người dùng đến từ một dạng HTML, nó chỉ rõ chương trình mà được thực thi ở server với những giá trị tham số mà được điền vào bởi người sử dụng. Một khi biểu mẫu được hoàn thành, tên chương trình và tập giá trị tham số được gửi đến server. Khi server nhận được yêu cầu, nó bắt đầu lấy tên chương trình và những tham số trong yêu cầu. Chương trình thực hiện và sinh ra kết quả trong biểu mẫu của một tài liệu mà được gửi lại browser của người sử dụng. Ngoài nhiệm vụ chính là điều khiển các yêu cầu của client, server có thể xử lý một tài liệu đem về trước khi chuyển nó đến client, thực thi kịch bản server-side. Kết quả của việc thực hiện một kịch bản được gửi với tài liệu đến client. Bên cạnh đó, server cũng có thể chuyển chương trình dịch sang một client dưới dạng applets. Một applet là một ứng dụng đơn giản mà có thể gửi đến client và được thực thi trong không gian địa chỉ của browser. Có một bản sao server-side của applets gọi là servlets. Một servlet là một chương trình dịch mà được thực thi trong không gian địa chỉ của server. Mỗi khi nào một server nhận một địa chỉ yêu cầu HTTP với một servlet, nó gọi phương thức liên quan với yêu cầu ở servlet. Sau đó, lần lượt thực thi yêu cầu và trả lời trong biểu mẫu của một tài liệu HTML. Sự khác nhau quan trọng với những kịch bản CGI là sau khi được thực thi như một tiến trình phân biệt, trong khi servlet được thực thi bởi server. Bất cứ khi nào người dùng phát ra một yêu cầu cho một tài liệu, Web server thông thường có thể làm một trong ba việc. Thứ nhất , nó có thể đem về tài liệu trực tiếp từ hệ thống file cục bộ của nó. Thứ hai, nó có thể bắt đầu một chương trình CGI mà sẽ sinh ra một tài liệu. Thứ ba, nó có thể chuyển một yêu cầu đến servlet. Một khi tài liệu được đem về, nó có thể yêu cầu một số gói xử lý bằng cách thực hiện kịch bản server-side nó chứa. Thực tế, điều này xảy ra chỉ đối với những tài liệu mà đã được đem về trực tiếp từ hệ thống file cục bộ mà không có sự chèn vào của một servlet hoặc chương trình CGI. Tài liệu sau đó được chuyển qua browser của người sử dụng. Khi tài liệu được trả về client, browser sẽ thực thi bất kỳ kịch bản client-side và có thể đem về và thực thi những applets như là tham chiếu trên tài liệu. Tài liệu kết quả xử lý trong nội dung của nó được đang hiển thị trên trạm cuối của người sử dụng. 4.1.2 Truyền thông Tất cả truyền thông ở trên Web giữa clients và servers là dựa trên Hypertexxt Transfer Protocol (HTTP). HTTP là một giao thức client-server tương đối đơn giản. Một client gửi một thông báo yêu cầu đến một server và đợi một thông báo trả lời. Một tính chất quan trọng của HTTP đó là nó là stateless. a/ Kết nối HTTP HTTP được dựa trên TCP. Bất cứ khi nào một client phát ra một yêu cầu đến một server, nó lập một kết nối TCP đến server và gửi thông báo yêu cầu của nó và nhận trả lời theo kết nối đó. Khi một kết nối bị đứt hoặc một lỗi thời gian (timeout) thì người sử dụng được thông báo lại. Một trong những vấn đề với phiên bản đầu tiên của HTTP là sự kém hiệu quả của kết nối TCP của nó. Mỗi tài liệu Web được cấu trúc từ một tập các file khác nhau từ cùng một server. Để có thể hiển thị một tài liệu, những file này cần được chuyển đến client, mỗi file này là bình đẳng với tài liệu khác đối với cái mà client có thể phát ra một yêu cầu độc lập đến server nơi mà chúng được lưu trữ. Trong phiên bản HTTP 1.0 và cũ hơn, mỗi yêu cầu đến một server yêu cầu lập một kết nối độc lập. Khi server đã trả lời, kết nối lại bị cắt. Kết nối như vậy được cho như là nonpersistent (không kiên nhẫn). Mặt hạn chế chính của kết nối không kiên nhẫn đó là nó tốn kém để lập một kết nối TCP. Kết quả, thời gian để nó truyền hoàn toàn một tài liệu với tất cả các thành phần của nó đến một client có thể là lớn. HTTP cũng cho phép một client thiết lập nhiều kết nối đồng thời đến cùng một server. Phương thức này thường được sử dụng để che dấu nguyên nhân tiềm tàng bởi thời gian thiết lập kết nối, và để truyền dữ liệu song song từ sưerver đến client. Một tiếp cận tốt hơn mà được phép trong HTTP phiên bản 1.1 là sử dụng một kết nối kiên nhẫn nhằm phát ra nhiều yêu cầu liên tiếp mà không cần đợi trả lời của yêu cầu đầu tiên. b/ Giao thức HTTP HTTP được thiết kế là một giao thức client-server với mục đích truyền tài liệu trên cả hai hướng. Một client có thể yêu cầu một thao tác để được thực hiện ở server bằng gửi một thông báo yêu cầu chứa đề nghị thao tác đến server Thao tác Head được đưa đến server khi một client không muốn tài liệu hiện tại, mà chỉ cần siêu dữ liệu liên quan với nó. Ví dụ sử dụng thao tác Head sẽ trả lại số lần tài liệu được tham chiếu bị sửa đổi. Thao tác này cũng có thể được dùng để kiểm tra liệu một tài liệu có tồn tại hay không mà không cần truyền thực tế một tài liệu. Thao tác get được dùng để đem về thực sự một tài liệu từ server và trả nó về client yêu cầu. Nó có thể chỉ ra một tài liệu nên được trả lại chỉ nếu nó đã được sửa đổi. HTTP cho phép tài liệu có một thẻ được biểu diễn như một xâu ký tự, để đem về một tài liệu nếu nó phù hợp với một thẻ nào đó. Thao tác Put là đối lập với thao tác Get. Một client có thể yêu cầu một server lưu trữ một tài liệu dưới một tên đã cho. Tất nhiên, một server sẽ không mù quáng thực hiện thao tác Put, mà chỉ chấp nhận yêu cầu như vậy từ sự ủy quyền của những client. Thao tác Post là có phần tương tự để lưu một tài liệu, ngoại trừ một client sẽ yêu cầu dữ liệu để được thêm vào các tài liệu Thao tác Delete được dùng để yêu cầu một server xóa đi tài liệu mà có tên trong thông điệp đã gửi đến server. Tuy nhiên, thực sự xóa hay không là tùy vào giới hạn an ninh khác nhau. Ngay cả bản thân server cũng có thể không có quyền thích hợp để xóa tài liệu đã chỉ ra. Tất cả giao tiếp giữa một client và một server xảy ra thông qua thông điệp. HTTP chỉ nhận ra thông điệp yêu cầu và thông điệp trả lời. Một thông điệp yêu cầu gồm có ba phần. Dòng yêu cầu là bắt buộc, gồm thao tác nhận biết mà client muốn server đưa ra; một tham chiếu đến tài liệu có liên quan với một yêu cầu và một trường phân biệt được sử dụng để nhận ra phiên bản của HTTP client đang chờ đợi. Một thông điệp trả lời bắt đầu với một dòng trạng thái chứa một số phiên bản và một mã trạng thái ba bít. Mã là giải thích ngắn gọn với một cụm từ nguyên bản mà được gửi theo như là một phần của dòng trạng thái. Một thông điệp yêu cầu hoặc trả lời có thể chứa thêm những headers. Ví dụ, nếu một client đã yêu cầu một thao tác Post đối với tài liệu có thuộc tính chỉ đọc, server sẽ trả lời với thông báo có mã trạng thái là 405 (“Method Not Allowed”) theo với một tiêu đề thông báo Allow chỉ rõ quyền của thao tác. Một ví dụ khác, một client có thể được quan tâm chỉ trong một tài liệu nếu nó chưa được sửa đổi từ một thời gian T. Trong trường hợp đó, yêu cầu Get của client được tăng lên với một tiêu đề thông báo If-Modified-Since chỉ rõ giá trị T. Có nhiều tiêu đề khác nhau mà client có thể gửi đến server giải thích cái gì nó có thể chấp nhận như một trả lời. Ví dụ, một client có thể chấp nhận trả lời mà đã được nén sử dụng công cụ nén gzip có sẵn trên hầu hết các máy cài Windows và UNIX. Trong trường hợp đó client sẽ gửi một tiêu đề thông báo Accept-Encoding theo với yêu cầu của nó với nội dung là “Accept-Encoding:gzip”. Cũng như vậy, một tiêu đề thông báo Accept có thể được dùng để chỉ rõ những trang Web HTML đó có thể được trả về. Tiêu đề thông báo Location và Referer được sử dụng để gửi một lần nữa một tài liệu đến một client. Gửi tiếp một trả lời sử dụng con trỏ chuyển tiếp để định vị một tài liệu. Khi một client phát ra một yêu cầu cho tài liệu D, server có thể trả lời với một tiêu đề Location, chỉ rõ rằng client nên phát lại yêu cầu, nhưng bấy giờ đối với tài liệu D’. Khi sử dụng tham chiếu đến D’, client có thể thêm một tiêu đề Referer chứa tham chiếu đến D để chỉ ra nguyên nhân của sự gửi lại. Nói chung tiêu đề thông điệp này được sử dụng để chỉ ra hầu hết các tài liệu đã yêu cầu của client. Tiêu đề Upgrade được sử dụng để chuyển qua một giao thức khác. 4.1.3 Tiến trình Web làm chỉ được sử dụng hai loại tiến trình: browsers để người sử dụng có thể truy cập tài liệu Web và Web servers để trả lời cho những yêu cầu browser. Browsers có thể được hỗ trợ bởi chương trình trợ giúp. Cũng như vậy, servers có thể được bao bọc bởi những chương trình thêm vào chẳng hạn như kịch bản CGI. Một phần quan trọng nhất của Web client là Web browser. Nó cho phép người dùng đem về một trang Web từ server và sau đó hiển thị chúng trên màn hình. Một Browser cung cấp một giao diện bởi siêu liên kết để người sử dụng có thể chọn chúng bằng thao tác bấm chuột. Một trong những vấn đề mà người thiết kế Web browser phải giải quyết là một browser phải được dễ dàng mở rộng để có thể cung cấp bất kỳ một loại tài liệu nào được trả về từ một server. Tiếp cận này nhằm đưa ra những phương tiện như những plug-in. Một plug-in là một chương trình nhỏ mà có thể được tải xuống một browser để điều khiển một loại tài liệu riêng biệt. Plug-ins đưa ra một chuẩn giao diện cho browser và cần một chuẩn giao diện từ browser. Khi một browser bắt gặp một kiểu tài liệu mà cần một plug-in và nó nạp plug-in cục bộ. Plug-in được xóa khỏi browser khi nó là không cần thiết nữa. Một tiến trình client-side thường được sử dụng là Web proxy. Trước tiên, tiến trình này được dùng để cho phép một browser điều khiển những giao thức tầng ứng dụng khác. Ví dụ, để chuyển một file từ một FTP server, browser có thể phát ra một yêu cầu HTTP đến một proxy FTP cục bộ, FTP đem file về và gán cho một thông điệp trả lời HTTP. Browser Web proxy FTP server HTTP Request HTTP Response FTP Request FTP Response Sử dụng một Web proxy Ngày nay, hầu hết những Web browser đều có khả năng hỗ trợ đa dạng những giao thức do đó không cần những proxy. Tuy nhiên, những Web proxy là vẫn còn phổ biến, nhưng với lý do khác. Nó dùng để cung cấp một cache chia sẻ bằng một số browser. Khi yêu cầu một tài liệu, một browser có thể chuyển yêu cầu của nó đến một Web proxy cục bộ. Proxy sẽ kiểm tra liệu yêu cầu tài liệu là trong cache cục bộ của nó hay không trước khi giao dịch với server. Một Web server là một chương trình điều khiển yêu cầu HTTP bằng cách đem về tài liệu yêu cầu và trả lại nó cho client. Vấn đề quan trọng liên quan đến client-server là một Web server có thể bị quá tải. Một giải pháp thiết thực là nhân bản một server trên một cụm trạm làm việc, và dùng một lối vào để hướng những yêu cầu client đến một bản sao. Web server Web server Web server Front end Request Response Front end điều khiển yêu cầu vào và đáp ứng LAN Nguyên tắc sử dụng của một cluster của trạm làm việc để thực hiện một dịch vụ Web. Một khía cạnh chủ yếu của sự tổ chức này là thiết kế của lối vào vì nó có thể trở thành một chỗ giảm hiệu suất. Nói chung, một điều khác biệt được làm giữa những lối vào hoạt động như là chuyển mạch của tầng giao vận và những hoạt động này ở tầng ứng dụng. Khi một client phát ra một yêu cầu HTTP, nó thiết lập một kết nối TCP đến server. Một chuyển mạch tầng giao vận chuyển dữ liệu dọc theo kết nối TCP đến một trong những server, tùy thuộc vào một số kích thước tải trọng của server. Trở ngại chính của tiếp cận này là chuyển mạch không thể tính toán nội dung của yêu cầu HTTP được gửi theo kết nối TCP. Nó chỉ có thể dựa trên sự quyết định gửi lại của nó ở trên tải trọng server. Một tiếp cận tốt hơn là triển khai content-aware phân tán yêu cầu, bằng lối vào thứ nhất kiểm tra một yêu cầu HTTP vào và sau đó quyết định server nó sẽ hướng yêu cầu đến. Mô hình này có thể được tổ hợp với phân tán nội dung thông qua một cụm những server. Phân tán Content-aware có những thuận lợi khác nhau. Ví dụ, nếu lối vào luôn luôn hướng những yêu cầu cùng một tài liệu đến cùng một server, server đó có thể cất giữ tài liệu kết quả trong thời gian trả lời cao hơn. Thêm vào đó, có thể phân tán sự tập trung những tài liệu ở giữa những server thay vì phải nhân bản mỗi tài liệu đối với mỗi server. 4.1.4/ Định danh Web sử dụng một sơ đồ định danh đơn để tham chiếu đến các tài liệu, được gọi là Uniform Resource Identifiers (URI). URI có hai dạng. Một Uniform Resource Locator (URL) là một tham chiếu phụ thuộc vị trí đến một tài liệu. Một URL chứa thông tin để truy xuất một tài liệu. Bằng cách nào để truy cập một tài liệu thường được phản ánh bởi tên của sơ đồ mà là một phần của URL, chẳng hạn như http, ftp, telnet. Nơi một tài liệu được định vị thường được gắn vào một URL bởi tên DNS của server để một yêu cầu truy xuất có thể được gửi, mặc dù một địa chỉ IP cũng có thể được sử dụng. Số lượng cổng ở trên server sẽ tiếp nhận những yêu cầu cũng là một phần của URL. Một URL cũng chứa tên của tài liệu được tra cứu bởi server đó. Scheme Host name Pathname http:// www.cs.vu.nl /home/steen/mbox Chỉ sử dụng một tên DNS Scheme Host name Port Pathname http:// www.cs.vu.nl 80 /home/steen/mbox Kết hợp một tên DNS với một số hiệu cổng Scheme Host name Port Pathname http:// 130.37.24.11 80 /home/steen/mbox Kết hợp một địa chỉ IP với một số hiệu cổng Những cấu trúc thường dùng của URLs Nếu server được tham chiếu bởi tên DNS của nó, tên đó sẽ cần thiết để được phân tích cho địa chỉ IP của server. Sử dụng số hiệu cổng được chứa trong URL, client có thể tiếp xúc với server sử dụng giao thức được định danh bởi sơ đồ, và chuyển nó tên của tài liệu mà những dạng phần cuối của URL. Một dạng tài liệu được hỗ trợ bởi URLs dữ liệu. Trong một URL như vậy, bản thân tài liệu được gắn vào một URL, tương tự như gắn vào dữ liệu của một file trong một inode. URLs còn được dùng với những mục đích khác. Ví dụ, một telnet URL được dùng để thiết lập một phiên telnet đến một server. Cũng có những URLs cho giao tiếp telephone-base URL tel chỉ gắn vào một số điện thoại và cho client thiết lập một cuộc gọi thông qua mạng điện thoại. Trong trường hợp này client sẽ đặc trưng là một thiết bị chẳng hạn như một điện thoại cầm tay. Modem URL có thể được sử dụng để thiết lập một kết nối modem-base với máy tính khác. URNs là một tham chiếu định vị độc lập đến những tài liệu. Một URN có cấu trúc ba phần. Scheme Host name Pathname http:// www.cs.vu.nl /home/steen/mbox Cấu trúc chung của một URN. Mặc dù định nghĩa một không gian định danh URN là khá dễ nhưng giải quyết một URN là rất khó khăn, vì URNs xuất phát từ những không gian định danh khác nhau có thể có những cấu trúc khác nhau. 4.1.5 Đồng bộ hóa Do sự phát triển mạnh mẽ của Web nên nó phải được cung cấp sự hỗ trợ cho những cập nhật hiện tại của những tài liệu bởi một nhóm cộng tác những người sử dụng hoặc những tiến trình. Vì lý do này, một mở rộng của HTTP đã được đưa ra gọi là Web Distributed Authoring and Versioning (WebDAV). WebDAV cung cấp một cơ chế để khóa một tài liệu chia sẻ, tạo, xóa, sao chép và di chuyển tài liệu từ Web server từ xa. Để đồng bộ hóa những truy cập xảy ra đồng thời để chia sẻ một tài liệu, WebDAV cung cấp một kỹ thuật khoá đơn giản. Có hai loại khóa ghi. Một khóa ghi đặc biệt có thể được thiết kế cho một client đơn, nó sẽ ngăn chặn bất cứ client nào sửa chữa tài liệu chia sẻ trong khi nó bị khóa. Một khóa chia sẻ cho phép nhiều client cập nhật tài liệu cùng một lúc. ấn định một khóa được làm bằng cách chuyển một thẻ khóa đến client yêu cầu. Server sẽ ấn định client nào hiện tại có thẻ khóa. Bất cứ khi nào client muốn sửa chữa tài liệu, nó gửi một yêu cầu cổng HTTP đến server, kèm theo với thẻ khóa. Thẻ chỉ ra rằng client có quyền truy cập ghi vào tài liệu, đối với lý do này server sẽ thực hiện yêu cầu. Một vấn đề thiết kế quan trọng đưa ra đó là không cần thiết để duy trì một kết nối giữa client và server trong khi đang cầm khóa. Client có thể cắt kết nối với server sau khi giành được khóa và kết nối lại với server khi gửi một yêu cầu HTTP. Khi một client làm “rơi” một thẻ khóa, server phải phục hồi lại khóa. WebDAV không chỉ ra cách để server điều khiển tình huống này nhưng cho phép mở để bổ sung. Lý do là giải pháp tốt nhất sẽ tùy thuộc vào những tài liệu mà WebDAV là đang sử dụng. 4.1.6/ Caching và nhân bản Để cải tiến sự thực hiện của Web, caching client-side luôn đóng vai trò quan trọng trong thiết kế Web client. Hơn nữa, để giảm tải trọng của những Web server, cần phải nhân bản Web site và đặt các bản sao lên Internet. Gần đây, kỹ thuật để nhân bản Web ngày càng phát triển trong khi caching dần dần mất đi tính phổ biến. a/ Web Proxy Caching Client-side caching xuất hiện tại hai vị trí. Thứ nhất, hầu hết browser được trang bị với một phương tiện caching đơn giản. Bất cứ khi nào một tài liệu được đem về, nó được lưu trữ trong cache của browser từ nơi nó được tải lần tiếp theo. Client có thể cấu hình caching bằng cách chỉ ra khi nào kiểm tra nhất quán sẽ xảy ra. Thứ hai, một site của client thường chạy một Web proxy. Như đã được giải thích, một Web proxy chấp nhận những yêu cầu từ những client cục bộ và chuyển chúng đến Web server. Khi một trả lời đi vào, kết quả được chuyển đến client. Thuận lợi của tiếp cận này đó là proxy có thể cất giữ kết quả và trả lại kết quả đó đến một client khác, nếu cần thiết. Nói cách khác, một Web proxy có thể thực hiện một chia sẻ cache. Caching có thể tại những browser, tại những proxy hoặc cũng có thể bao phủ một miền, vì vậy cần có một sơ đồ caching có thứ tự nhằm giảm sự tắc nghẽn mạng. Những giao thức nhất quán cache khác nhau đã được triển khai trong Web. Để bảo đảm một tài liệu được trả lại từ cache là nhất quán, một số Web proxy gửi một điều kiện yêu cầu get HTTP đến server với tiêu đề yêu cầu If-modified-Since, chỉ rõ lần sữa đổi cuối cùng liên quan với tài liệu đã cất giữ. Chỉ nếu tài liệu đã bị thay đổi từ thời gian đó, server sẽ trả toàn bộ tài liệu. Nếu không thì, Web proxy có thể trả lại phiên bản đã cất giữ của nó đến một yêu cầu client cục bộ. Không may, chiến lược này yêu cầu proxy tiếp xúc một server đối với mỗi yêu cầu. Để cải tiến hiệu suất ở giá trị nhất quán yếu hơn, sự mở rộng sử dụng Squid Web proxy ấn định một thời gian kết thúc Texprie mà tùy thuộc cách đây bao lâu tài liệu được sửa đổi cuối cùng khi nó được cất giữ. Đặc biệt, nếu Tlast_modified là thời gian sửa đổi cuối cùng của một tài liệu và Tcache là thời gian đã cất giữ thì: Texprie= a( Tcache - Tlast_modified ) + Tcache với a=0.2 (giá trị này đã được lấy từ kinh nghiệm thực tiễn). Cho đến khi Texprie , tài liệu được xem như hợp lệ và proxy sẽ không tiếp xúc với server. Sau thời gian kết thúc, the proxy yêu cầu server gửi một bản mới, trừ khi nó chưa bị sửa đổi. Những tài liệu mà chưa bị sửa đổi trong một thời gian dài sẽ không bị kiểm tra về sự sửa đổi ngay khi những tài liệu đã sửa đổi hiện thời. Điều tồi tệ là một proxy có thể trả về một tài liệu hợp lệ mà cũ hơn phiên bản được lưu hiện tại ở server. Tệ hơn, không có cách để client biết rằng nó vừa nhận được một tài liệu đã lỗi thời. Giao thức pull-based để server cho biết những proxy mà một tài liệu đã được sửa đổi bằng cách gửi một mất hiệu lực. Vấn đề với cách tiếp cận này đối với Web proxy, là cái mà server có thể cần để lưu vết một lượng lớn các proxy, chắc chắn dẫn đến một vấn đề co giãn. Một trong những vấn đề những nhà thiết kế Web proxy caches là giải quyết với caching tại những proxy khi những tài liệu bị chia sẻ bởi những client khác nhau. Một cách để xây dựng những cache rất lớn mà có thể phục vụ một số lượng lớn client là sử dụng những caches cộng tác. Trong cache cộng tác, bất cứ khi nào một cache không xuất hiện tại một Web proxy, trước hết proxy kiểm tra một số những proxy láng giềng dể xem nếu một trong chúng có chứa một tài liệu đã yêu cầu. Nếu kiểm tra như vậy bị lỗi, proxy hướng yêu cầu đến Web server chịu trách nhiệm đối với tài liệu. Cache cộng tác có thể liên quan đến một nhóm nhỏ những client. Những nhóm như vậy có thể được phục vụ bằng cách sử dụng một cache proxy đơn. Vấn đề khác của Web proxy caches là chúng có thể được sử dụng chỉ đối với những tài liệu tĩnh, đó là những tài liệu mà không được sinh ra trên đường đi bởi Web serer khi trả lời những yêu cầu của client. Trong một vài trường hợp, có thể chuyển sự phát sinh của tài liệu từ server đến proxy cache, như caches động đã đưa ra. Web server 3.Hướng yêu cầu đến server 1.Nhìn vào cache cục bộ HTTP yêu cầu 2. Yêu cầu cache proxy láng giềng Web proxy Client Client Client Cache Web proxy Client Client Client Cache Nguyên tắc của cache cộng tác Trong tiếp cận này, khi đem về một tài liệu mà được sinh ra một cách bình thường, server sẻ trả lại một applet mà được caches tại proxy. Proxy phát sinh trả lời cho yêu cầu của client bằng cách chạy applet. Applet được lưu giữ trong cache để lần tiếp theo cho yêu cầu như vậy được sử dụng. Chú ý rằng bản thân applet cũng có thể trở thành lỗi thời nếu nó bị sửa đổi ở server. b/ Nhân bản server Có hai cách nhân bản server xảy ra trong Web. Thứ nhất, những Web sites quá tải dùng những cụm Web server để cải tiến thời gian trả lời. Nói chung, kiểu nhân bản này trong suốt đối với client. Thứ hai, một dạng nhân bản không trong suốt mà được triển khai rộng rãi để làm một phiên bản sao chép của một Web site có sẵn tại một server khác. Cách này cũng được gọi là mirroring. Một client được đề nghị chọn giữa nhiều server để truy xuất Web site. Gần đây, một dạng nhân bản thứ ba đang được phổ biến. Trong dạng này, sự lựa chọn server được phân tán trên Internet đưa ra những phương tiện cho tổ chức tài liệu Web bằng cách nhân bản những tài liệu trên những server được biết như một Content Distribution Network (CDN) 4.1.7/ Tính chịu lỗi Tính chịu lỗi trong Web chủ yếu đạt được thông qua client-side caching và nhân bản server. Những phương thức không đặc biệt được hợp nhất, ví dụ, HTTP để giúp đỡ tính chịu lỗi hoặc khôi phục lỗi. Tuy nhiên, tính sẵn sàng cao trong Web là đạt được thông qua dự phòng mà sử dụng kỹ thuật có sẵn trong dịch vụ chủ yếu như là DNS. 4.1.8/ An toàn Vì sự mở rộng của Internet, đặt ra vấn đề quan trọng là xây dựng một kiến trúc an toàn để bảo vệ client và server chống lại sự tấn công nguy hiểm. Hầu hết vấn đề an toàn trong Web giải quyết việc thiết lập một kênh chắc chắn giữa một client và server. Tiếp cận nổi bật để thiết lập một kênh an toàn trên Web là dùng Secure Socket Layer (SSL). Mặc dù SSL chưa từng được chuẩn hóa, hầu hết Web client và server hỗ trợ nó. Gần đây, một nâng cấp của SSL đã bị loại bỏ trong RFC 2246, bây giờ được đưa ra như Transport Layer Security Protocol (TLS) TLS là một giao thức an toàn ứng dụng độc lập mà được phân tầng hợp lý trên đỉnh của một giao thức tầng giao vận. Vì lý do đơn giản, TLS và SSL thực hiện dựa trên TCP. TLS có thể cung cấp một sự đa dạng của những giao thức bậc cao bao gồm HTTP. HTTP FTP Telnet ... TLS Tầng giao vận Tầng mạng Tầng liên kết dữ liệu Tầng vật lý Vị trí của TLS trong ngăn chồng giao thức Internet. Bản thân TLS dược tổ chức thành hai tầng. Lõi của giao thức được làm từ TLS record protocol layer, cái mà thực hiện một kênh an toàn giữa một client và một server. Tính chính xác của kênh được xác định trong suốt cài đặt của nó, nhưng có thể bao gồm sự phân mảnh và nén của thông điệp, cái mà được áp chung vào với sự xác thực thông báo, tính toàn vẹn. Thiết lập một kênh an toàn chia thành hai giai đoạn. Giai đoạn thứ nhất, client báo tin cho server thuật toán mã hóa và giao thức nén nó hỗ trợ mà nó có thể sử dụng. Server thực hiện sựa lựa chọn và báo cáo lại cho client Giai đoạn thứ hai, server yêu cầu xác thực bản thân nó bằng cách chuyển đến client một giấy chứng nhận chứa đựng khóa được ký hiệu bởi một chứng nhận thẩm quyền CA. Client xác thực bằng cách gửi một chứng nhận đến server. Server Client Possibilities [K+S]CA Choices [K+C]CA K+S([R]C) TLS với sự xác thực lẫn nhau. Client sinh ra một số ngẫu nhiên mà sẻ được sử dụng bởi hai mặt để xây dựng một khóa phiên và gửi số này đến server. Nó được viết lại thành mật mã với khóa chung của server. Hơn nữa, nếu xác thực client được yêu cầu, client ký hiệu số với khóa riêng của nó. Tại điểm này server có thể xác minh nhận dạng của client, sau khi kênh an toàn được thiết lập. 4. 2/ Lotus Notes 4.2.1 Khái quát chung của Lotus Notes Giống như Web, một hệ thống Lotus Notes được tổ chức như một hệ thống client-server. Có bốn thành phần chính cùng chung trong một hệ thống Lotus Notes: Client, server, database và một tầng middleware. Mỗi client và server có nhiều cơ sở dữ liệu liên kết cục bộ. Mỗi cơ sở dữ liệu thành lập một tập hợp của notes, với một nút là khóa dữ liệu nguyên tố trong bất cứ hệ thống Notes. Local OS Notes object services Notes Application Local OS Notes object services Notes Application Client Server Share database Local database Network Tổ chức chung của hệ thống Lotus notes Một client chạy một ứng dụng yêu cầu truy xuất dữ liệu, có thể so sánh được với chức năng của một Web browser. Một phân biệt chủ yếu với browser là người sử dụng không chỉ đọc cơ sở dữ liệu mà còn có thể sửa đổi chúng. Ngoài ra, Notes còn có một bộ công cụ phân biệt mà cho phép người sử dụng thiết kế và duy trì những cơ sở dữ liệu của họ. Lotus Notes servers gọi là Domino servers. Một server quản lý tập hợp mối quan hệ của những cơ sở dữ liệu. Nhiệm vụ chính của nó là cung cấp từ xa những clients và những servers khác truy xuất vào những cơ sở dữ liệu này. Chính vì vậy, chương trình server chính gồm có những modules để nhận những yêu cầu đến từ mạng, duy trì liên kết và phiên để xử lý từ xa, và duy trì thông tin trên cơ sở dữ liệu cục bộ. Hơn nữa, có nhiều nhiệm vụ khác liên quan đến quản lý cơ sở dữ liệu và những chương trình phân biệt thường chạy trên server. Những tài liệu trên Web là hầu hết được biểu diễn bằng những file. Trong khi đó, Lotus Notes lưu trữ và quản lý tài liệu thông qua cơ sở dữ liệu. Đây là sự khác nhau lớn nhất giữa Web server và Domino Server Client, server và cơ sở dữ liệu được gắn kết với nhau thông qua một thành phần middlewware phân biệt gọi là Notes Object Services (NOS). Middleware này biểu diễn một lớp trên đỉnh của hệ điều hành cơ sở và mạng mà cho phép client và server giao tiếp và truy xuất cục bộ và chia sẻ cơ sở dữ liệu. Hiểu theo thông thường, nó gồm có những thành phần để gọi thủ tục từ xa, lưu trữ phương tiện, gọi lại chức năng... a/ Mô hình tài liệu Khóa dữ liệu nguyên tố trong một hệ thống Lotus Notes được gọi là một nút, về cơ bản nó là một danh sách những bản tin. Một bản tin là một phần tử để lưu dữ liệu liên quan với một nút, mỗi bản tin xác định loại dữ liệu mà nó lưu. Mỗi nút cũng có thể có một danh sách những nút liên quan tham chiếu đến như là nút con của nó. Hơn nữa mỗi nút có thể có hơn một liên kết cha, dẫn đến một phân cấp của những nút. Phân cấp này phản ánh một khái niệm nguồn gốc của hệ thống Notes, đó là cung cấp một hệ thống mà cho phép người sử dụng gửi notes, và để gửi đáp lại cho notes. Mối quan hệ giữa gửi và đáp lại được duy trì bởi quan hệ cha con, tương tự cách làm việc của Network News. Có nhiều kiểu khác nhau của notes, với một phân loại dựa vào thiết kế notes và quản lý notes. Thiết kế notes được dùng để hiển thị và điều khiển những tài liệu, quản lý note được dùng để quản lý một cơ sở dữ liệu note. Một note dữ liệu tương tự với một tài liệu Web: nó biểu diễn một tài liệu mà có thể dễ dàng được biểu diễn cho một người sử dụng, nhưng có thể bao gồm những loại dữ liệu khác nhau chẳng hạn như là âm thanh, phim, tranh ảnh, văn bản đơn giản, biểu tượng... Notes dữ liệu cũng được gọi là tài liệu. Một note form định nghĩa cách một tài liệu được biểu diễn cho người sử dụng, bằng cách nghĩa vị trí và sự miêu tả của những item của nó như những trường. Một vài trường có thể chia sẻ giữa những mẫu khác nhau. Có nhiều quản lý notes, chẳng hạn một ACL note được dùng cho lưu trữ một danh sách điều khiển truy xuất. Hoặc notes cung cấp phương tiện nhân bản cơ sở dữ liệu Notes có thể tham chiếu lẫn nhau bởi siêu liên kết, được gọi là notelinks. Một notelink nhận biết cơ sở dữ liệu và note được chứa trong cơ sở dữ liệu đó. 4.2.2 Truyền thông Lotus Notes sử dụng một hệ thống RPC cơ sở cho tất cả vấn đề truyền thông giữa clients và servers. Hệ thống Notes RPC trong suốt đối với tất cả clients. Khi một server nhận một yêu cầu RPC, nó bắt đầu một nhiệm vụ độc lập để điều khiển vấn đề của truyền thông liên quan đến RPC đó, tương tự tiếp cận hướng kết nối được cho phép bởi hệ thống RPC khác. Notes cung cấp nhiều phương tiện truyền thông liên tiến trình linh động để trao đổi thông tin giữa những tiến trình đang chạy trên cùng một máy. Tuy nhiên, không giống như những hệ phân tán khác, nó không thêm vào nhiều phương tiện truyền thông giữa những tiến trình trên nhiều máy khác nhau. Hầu hết truyền thông xảy ra thông qua những giao diện hoàn toàn xác định, biểu diễn bởi hệ thống RPC Notes. Một ngoại lệ được hình thành bởi hệ thống con Notes để điều khiển E-mail. thông điệp Notes E-mail luôn được gửi trong định dạng MIME, và hệ thống con có thể sử dụng nhiều loại giao thức truyền mail chẳng hạn SMTP. Để dễ dàng phát triển những ứng dụng bậc cao chẳng hạn như hệ thống dòng công việc. Notes cung cấp nhiều phương tiện để tự động gửi mail như là một phản ứng với sự kiện mà xuất hiện trong một cơ sở dữ liệu. 4.2.3 Tiến trình Notes phân biệt rõ ràng giữa client và server. Phần mềm client-side gồm có chương trình cho phép một người dùng tác động với server, gồm có một Web browser. Hơn nữa, có một chương trình phân biệt để thiết kế và thực thi những ứng dụng Notes. Chương trình này được so sánh với nhiều công cụ phát triển mô hình cơ sở dữ liệu ứng dụng: nó cho phép một người sử dụng thiết kế notes, với những forms, views, events, tasks... Phần mềm server-side gồm có một chương trình chính với một số nhiệm vụ được xây dựng ở trong đó, chẳng hạn để điều khiển những yêu cầu vào, mở và đóng cơ sở dữ liệu cục bộ, giữ lại cơ sở dữ liệu thích hợp và quản lý những cụm servers. Bên cạnh những nhiệm vụ này, có một số lượng lớn server nhiệm vụ thêm vào mà chạy như một tiến trình phân biệt trên cùng một máy như là server chính, và được điều khiển bởi server chính. Server chính và những server nhiệm vụ của nó hình thành một Domino server. Truyền thông giữa các tiến trình của một Domino server xảy ra sử dụng tầng NOS đã mô tả trước đây. NOS cung cấp đa dạng các phương tiện truyền thông liên tiến trình, cũng giống như điều kiện để truy xuất và quản lý những cơ sở dữ liệu cục bộ. Để cải tiến tính chịu lỗi và hiệu suất, Domino servers có thể được nhóm lại một cụm, một tập hợp của 2 đến 6 máy chạy cùng một server với những bản sao y hệt nhau của cơ sử dữ liệu. Một cụm Notes tương tự với một cụm Web, nhưng được tổ chức hơi khác. Đó là cluster trong suốt với client; một client sẽ biết nó đang giao tiếp với một cụm server và được yêu cầu chọn một server để nó trực tiếp thỉnh cầu. Local OS Notes object services Main server program Server task Server task Tổ chức chung Domino server. Thông thường, để truy cập một note trong một cơ sở dữ liệu cụ thể, client sẽ có một tham chiếu đến note đó. Trước tiên client giao tiếp với server của cơ sở dữ liệu, server trả lại danh sách của các server trong cùng một cụm server. Nếu server mà client khởi động giao tiếp là quá bận, client sẽ tìm một server khác trong cluster. Khi server thứ hai được yêu cầu để xây dựng một danh sách thứ tự của những server có sẵn trong cụm server. Thứ tự được xác định bởi khối lượng công việc phải làm của mỗi server trong đó server có khối lượng công việc ít nhất được ở trên đỉnh của danh sách. Client sau đó tiếp xúc với server đầu tiên trên danh sách để xem liệu nó có thể điều khiển được yêu cầu không. Nếu không nó tiếp tục lặp lại với những server tiếp theo. 3. Request Cluster có 3 server Server Server Server Client 2. Least-loaded server Danh sách server trong cluster 1. Yêu cầu một server Điều khiển yêu cầu trong một cụm của Domino servers Khối lượng công việc phải làm W của một server được tính toán bởi mỗi server như một hàm số của số lần trả lời, trả về một giá trị giữa 0 và 100. Đặc biệt, nếu Tresponse là thời gian trả lời hiện tại và Topt là thời gian trả lời tối ưu, W được tính là W=max{0,100-( Tresponse/ Topt)} Server có giá trị W nhỏ là bận hơn server có W lớn. Thời gian trả lời hiện tại được tính toán trên một tập biểu diễn của những hàm trong mỗi phút. Nếu không có yêu cầu nào có nhu cầu xử lý, W sẽ là 100 phản ánh thời gian tối ưu cho yêu cầu vào tiếp theo. 4.2.4/ Định danh Định danh là hướng cơ sở dữ liệu, nó biểu diễn một vai trò khác so với những hệ phân tán đã đề cập. Ví dụ, bởi vì notes được lưu ở trong những cơ sở dữ liệu, chúng dược truy xuất bởi giải pháp định danh. Một cơ sở dữ liệu được biểu diễn bởi một file đơn, và như vậy được định danh sử dụng định danh quy ước của hệ thống file nằm dưới một sự thi hành Notes. Bên cạnh những cơ sở dữ liệu và những file khác, có nhiều thực thể khác ở trong Notes mà cần phải được định danh chẳng hạn như users, servers, public keys... Thông tin này được chứa trong một cơ sở dữ liệu đặc biệt được gọi là Domino Directory, mà có thể được truy xuất giống như bất kỳ một cơ sở dữ liệu Notes khác. Định danh character-string về cơ bản được hỗ trợ trong hai cách. Thứ nhất Notes đưa ra dịch vụ Distinguished name, thực hiện bởi LDAP. Những dịch vụ thư mục này có thể được sử dụng để truy xuất cơ sở dữ liệu, nhưng cũng để tổ chức phân cấp một không gian định danh. Dạng thứ hai của định danh character-string là thông qua những URL. Phương tiện này được cung cấp để cho phép truy xuất đến những Domino Server sử dụng Web. Hơn nữa, cần phải thực hiện Web servers dựa trên Notes. Một Note URL gồm có ba phần chính: tên DNS của một Domino server có khả năng điều khiển yêu cầu HTTP, tên đường dẫn của một cơ sở dữ liệu Notes cục bộ cho server, và một phần thứ ba cho truy xuất hiện thời một note đã nhận diện trong cơ sở dữ liệu đó. Phần thứ ba gồm có một identifier, tên của một toán tử, và những tham số lựa chọn cho toán tử đó. Domino server là chịu trách nhiệm thực hiện tên toán tử ở trong note đã nhận dạng. Liên quan đến một UNID là originator ID (OID) được sử dụng để nhận dạng một trường hợp đặc biệt của một note. OID chứa UNID của Note, nhưng trong phần thêm gồm có một dãy số 2 byte và một nhãn thời gian 8 byte. Hai cái này được dùng để bảo vệ và giải quyết xung đột mà có thể xuất hiện khi một note đã nhân bản đồng thời được cập nhật. Một cơ sở dữ liệu ID không thực sự là identifier nhưng một nhãn thời gian cho biết khi một cơ sở dữ liệu được tạo ra hoặc thời gian cuối cùng nó được phục hồi sau khi nào server bị hỏng (crash). Nó có thể được xem như một identifier với một phạm vi mà bị giới hạn bởi Domino server trong trách nhiệm của nó. Một Node ID được sử dụng để nhận dạng duy nhất một note trong một cơ sở dữ liệu cụ thể. Mỗi cơ sở dữ liệu dùng một bảng tra cứu phân biệt mà những sơ đồ một Note ID cho vị trí vật lý của nó trong cơ sở dữ liệu. Kết quả, bất cứ một cơ sở dữ liệu được tổ chức, chỉ có bảng tra cứu cần thiết để lắp vào trong khi tất cả note IDs của nó còn lại giống nhau. Nhân bản ID được dùng để chỉ ra một nhóm những cơ sở dữ liệu tham gia trong nhân bản. Nếu hai cơ sở dữ liệu có cùng một nhân bản ID, thì tất cả những cập nhật đã thực hiện tại một cơ sở dữ liệu sẽ được nhân cho cái khác. Về nguyên tắc, bản nhân ID là duy nhất trên toàn cầu, nhưng bởi vì nó chỉ dựa trên nhãn thời gian, tính duy nhất là không bảo đảm. Một nhân bản ID đơn thuần được sử dụng để nhận diện một tập hợp của những cơ sở dữ liệu mà chia sẻ cùng một cập nhật. 4.2.5/ Đồng bộ hóa Notes cung cấp nhiều cơ chế khóa để bảo đảm loại trừ lẫn nhau truy xuất đến những cơ sở dữ liệu của nó. Hơn nữa, nó hỗ trợ những giao dịch. Tuy nhiên, những cơ chế đồng bộ hóa này được thực hiện không phân tán theo nghĩa chúng bị giới hạn trong những toán tử trên một Domino server đơn. 4.2.6/ Nhân bản Nhân bản trong Notes chủ yếu áp vào những tài liệu, đó là dữ liệu notes. Một vai trò chính trong nhân bản được thực hiện bởi sự nối kết những tài liệu, cái mà notes được chứa trong một thư mục Domino để mô tả chính xác khi nào nhân bản, nhân bản như thế nào và nhân bản cái gì. Mỗi Domino server có một hoặc nhiều hơn nhiệm vụ nhân bản liên quan mà thực hiện một lược đồ nhân bản như đã mô tả bởi một sự kết nối tài liệu. Có một số lược đồ nhân bản khác nhau. Lược đồ ngầm định là pull-push, trong đó một nhân bản thiết lập một kết nối đến một server đích và sau đó đẩy những cập nhật của nó cho server đó. Hơn nữa, nó kéo về tất cả những cập nhật mà đã xảy ra tại server đích. Cũng có thể nhân bản xảy ra theo lược đồ pull-pull trong đó hai bản nhân ở hai server khác nhau kéo những cập nhật từ máy khác. Lược đồ Pull-only và push-only là những lược đồ theo một hướng duy nhất. Có ba thao tác cập nhật đó là sửa đổi, thêm và xóa một tài liệu. Bằng cách nào để biết được liệu một tài liệu đã bị thay đổi hay chưa. Một tài liệu đã thay đổi phải được phổ biến cho các bản sao. Lưu lại một thay đổi cho một note được làm bằng cách cập nhật dãy số và nhãn thời gian trong ID khởi đầu (OID) của một tài liệu. Giá trị cũ được sao chép vào một danh sách tiểu sử liên quan với tài liệu. Một tài liệu mới được thêm vào được xác nhận bằng cách sinh ra một tài liệu mới, duy nhất toàn cầu OID. Để xác nhận một tài liệu bị xóa, một đánh dấu xóa được đặt trong vị trí của tài liệu đã bị xóa trong cơ sở dữ liệu. Về nguyên tắc, một đánh dấu xóa không thể bị xóa cho đến khi tất cả bản sao tài liệu liên quan của nó thực sự đã bị xóa. Thông thường khi nhân bản xảy ra, tất cả những cập nhật được phổ biến giữa những bản sao. Những bản sao được nhận diện như những cơ sử dữ liệu có cùng ID bản sao. Dù hai bản sao tổ chức bên trong theo một cách giống nhau nhưng cũng không quan trọng. Chỉ những điều mà nội dung những bản sao lại của một tài liệu chứa trong cả hai cơ sở dữ liệu được giữ nhất quán. Những bản sao lại này được tổ chức như vậy bởi UNID liên quan của chúng. a/ Giải quyết xung đột Vấn đề liên quan với nhân bản của Notes đó là xung đột có thể xuất hiện. Nếu những bản sao của cùng một tài liệu được cập nhật độc lập, một xung đột write-write xuất hiện khi những cập nhật được phát tán chậm hơn. Notes giải quyết những xung đột này như sau: Giả sử nhân bản xảy ra theo lược đồ pull-push trên hai bản sao A và B. Những cập nhật đã thực hiện tại B được kéo vào bởi A, sau đó những cập nhật đã thực hiện tại A được đẩy sang B. Tại thời gian của nhân bản, một danh sách của những ID khởi đầu được xây dựng cho mỗi bản nhân. Khi danh sách cho B chứa một UNI mà danh sách A không có, thì một tài liệu mới được thêm vào B, cái mà được kéo vào bởi A. Điều này giống như những tài liệu mới được thêm vào A được đẩy sang B. Nếu cả hai danh sách chứa những OID giống hệt nhau, thì những ID này chuyển đến những tài liệu mà được xem như là giống nhau trong A và B. Không cần thiết để truyền bất kỳ cập nhật nào. Giả sử rằng có một note N trên danh sách của A và trên danh sách của B, nhưng có hai bản sao khác nhau NA và NB của N. Hai bản sao này có cùng UNID, nhưng OID khác nhau. Khi đó, nhiệm vụ nhân bản ở A sẽ nhìn vào danh sách tiểu sử của mỗi bản sao. Nếu một danh sách là danh sách con của cái kia, thì không xảy ra xung đột vì chỉ một bản sao này được cập nhật. Khi đó, bản sao cập nhật có thể được chuyển đến bản nhân kia sau khi danh sách tiểu sử và những OID có thể được đồng nhất. Tuy nhiên, nếu hai danh sách tiểu sử là khác nhau thì có một xung đột mà cần thiết được giải quyết. Notes cho phép tài liệu được trộn bằng cách kiểm tra những item cấu thành một note. Bất cứ khi nào một item bị thay đổi, dãy số mà phần của IOD được tăng lên và gán cho item. Bằng cách này, một sự hiệu chỉnh của item được thực hiện. Trường hợp hai danh sách tiểu sử là giống nhau cho đến khi dãy số k. Nếu tất cả sự thay đổi cho A mà xảy ra sau dãy số k đã được áp vào những item khác hơn những thay đổi cho B sau k, hai tài liệu có thể được trộn lại một cách an toàn. Vì không có một xung đột trong sửa đổi. Replica A Replica B Replica C OID A OID B OID C Hai tài liêu trộn an toàn với những xung đột OID Trong tất cả những trường hợp khác, một xung đột không thể giải quyết được xác nhận. Notes cho một tài liệu như là một “Winner” và cho những cái khác là “Loser”. Bản sao với dãy số cao nhất trong OID của nó là được khai báo “Winner”. b/ Cụm nhân bản Nhân bản đã thảo luận trước đây áp dụng cho một tập hợp những server phân tán trên diện rộng. Trong trường hợp cụm server, một cách tiếp cận khác được cho phép. Thay vì sự lập danh mục nhân bản hoạt động bằng việc kết nối những tài liệu, một cập nhật ngay lập tức được đẩy vào tất cả các bản nhân trong cụm. Đối với mục đích này, mỗi server duy trì một hàng đợi của sự kiện cập nhật để ghi vào những sự kiện bằng nhiều toán tử cơ sở dữ liệu mà được thực hiện cục bộ. Cứ mỗi giây, một nhiệm vụ nhân bản đặc biệt kiểm tra hàng đợi để tìm những cập nhật cần được phổ biến cho những server khác trong cụm. Cập nhật như vậy được gửi đến những bản nhân khác và sự kiện tương ứng được xóa khỏi hàng đợi. 4.2.7/ Tính chịu lỗi-(Dung sai lỗi) Notes không cung cấp bất kỳ một cơ chế cụ thể để che dấu lỗi. Hỗ trợ nổi bật nhất cho tính chịu lỗi gồm có một hệ thống con phục hồi mà được tích hợp vào cơ sở dữ liệu thực hiện trên một server đơn. 4.2.8/ An toàn Cơ sở của an ninh trong bất kỳ hệ thống Notes nằm trong sự xác thực những người sử dụng. Một lần một người sử dụng đã xác thực, truy cập có thể được công nhận cho notes trong những cơ sở dữ liệu của một server. Có một cơ chế mở rộng để điều khiển truy xuất của người dùng vào notes và những phần của một notes. Notes dùng mật mã khóa chung để xác thực người sử dụng và những server. Sự xác thực xảy ra bằng cách chuyển một chứng nhận chứa một khóa chung. Nơi nhận chứng nhận phải chắc chắn rằng khóa chung nó chứa thuộc về nơi gửi được nhận dạng. Notes chú ý đặc biệt tới xác nhận giấy một chứng nhận. Trong ngữ cảnh của an ninh, Notes phân biệt ba loại thực thể: một người dùng, một server và một chứng nhận. Một trong ba thực thể được biết trong hệ thống bởi một đặc điểm nhận dạng mà được biểu diễn như một file chứa những khóa và những chứng nhận Quyền truy xuất (Access Control) Notes cung cấp một hỗ trợ mở rộng cho điều khiển truy xuất những thành phần của nó. Có một sự phân biệt giữa những phần khác nhau của hệ thống. Đối với những server, những danh sách điều khiển truy xuất được giữ đúng chính xác của những người sử dụng, những nhóm người sử dụng và server có thể phát ra những yêu cầu đến một server. Đối với trạm làm việc, Notes duy trì những danh sách quyền thực thi (ECL), nó định rõ giới hạn trên mã khả thi mà được gửi đến một trạm làm việc như là một phần đọc một note. Có một sự hỗ trợ mở rộng để điều khiển truy xuất đến cơ sở dữ liệu. Mỗi cơ sở dữ liệu có một ACL liên quan mà được định rõ một cách chính xác ai có thể làm gì. Có bảy mức truy xuất cơ sở dữ liệu, phạm vi từ mức quản lý mà người dùng được phép thêm, xóa và thay đổi đến một mức “không truy xuất”. Có nhiều quyền truy xuất cơ sử dữ liệu liên quan đến nhiều loại khác nhau của Notes mà có thể được lưu trữ trong một cơ sở dữ liệu. Mỗi tài liệu có ACL liên quan đến bản thân nó. Truy xuất có thể được điều khiển đến mức của những item, nơi một item có thể cùng có một khóa liên kết bí mật để bảo vệ xa hơn. Nó cũng có thể chỉ ra rằng chắc chắn những phần chia ra của một tài liệu được che dấu với những người không được quyền hoặc những dấu hiệu nên xảy ra khi một tài liệu được gửi đến một site từ xa. 4.3/ So sánh của WWW và Lotus Notes World Wide Web và Lotus Notes là hai hệ thống phân tán sử dụng rộng rãi nhất mà dựa trên một mô hình của những tài liệu. Cả Web và Lotus Notes chấp nhận một mô hình client-server trong đó một server quản lý tập hợp những tài liệu mà có thể được truy xuất bởi các client từ xa. Tập hợp những tài liệu là phân tán trên nhiều server. Trong Web một tài liệu về cơ bản là một file văn bản chứa nhiều loại lệnh đánh dấu trong ngôn ngữ HTML hoặc một số ngôn ngữ khác. Ngoài ra, những tài liệu này có thể kèm theo những loại tài liệu khác như âm thanh, hình ảnh và phim, kịch bản, aplet. Trong Lotus Notes, thành phần dữ liệu chính trong Notes là một danh sách của những item nhỏ được gọi là một note. Một note là một cấu trúc dữ liệu liên kết chặt chẽ với cơ sở dữ liệu. Lotus Notes quản lý một hệ thống thực thể sử dụng những note. Web sử dụng những cơ chế phân biệt cho những vấn đề như vậy. 4.3.1/ Truyền thông Truyền thông trong Web xảy ra bởi một giao thức truyền những tài liệu, gọi là HTTP. HTTP chỉ rõ những thao tác đối với những tài liệu và là chủ yếu được giới hạn để lấy một tài liệu và thay thế một tài liệu ở một server. Truyền thông trong Lotus Notes được điều khiển b

Các file đính kèm theo tài liệu này:

  • doctieu luan he phan tanban sua5.doc
Tài liệu liên quan