Các hệ thống phối hợp phân tán

26 472 1
Các hệ thống phối hợp phân tán

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Những hệ phân tán thế hệ mới đều coi rằng các thành phần khác nhau của hệ thống là phân tán và vấn đề thật sự khi phát triển những hệ phân tán như thế là việc làm thế nào để phối hợp hoạt động của các thành phần này.

Phần I - Giới thiệu chung Bắt đầu từ những năm 80 của thế kỉ 20, loài người đã được chứng kiến sự phát triển vượt bậc của hệ thống máy tính nhờ có 2 công nghệ đỉnh cao. Thứ nhất, đó là sự ra đời và phát triển của các bộ vi xử lý với chất lượng ngày càng cao đi đôi với giá thành ngày càng rẻ. Và thứ hai, đó là công nghệ về mạng máy tính tốc độ cao. Sự kết hợp của chúng đã khiến cho việc kết nối các máy tính với nhau thông qua hạ tầng mạng trở nên dễ dàng hơn bao giờ hết và cũng từ đó đã làm nảy sinh ra những định nghĩa mới về hệ phân tán. Có nhiều định nghĩa được đưa ra để mô tả một hệ phân tán. Chẳng hạn như: “Hệ phân tán là một tập các máy tính độc lập, giao tiếp với người dùng như một hệ thống thống nhất, toàn vẹn”. - A. S. Tanenbaum, 2002 - “Hệ phân tán được định nghĩa là một hệ trong đó các thành phần phần cứng hay phần mềm nằm tại các máy tính được kết nối mạng với nhau giao tiếp và phối hợp hoạt động với nhau chỉ thông qua việc truyền thông điệp”. - G. Coulouris, 2001 – Tuy nhiên, dù với định nghĩa nào thì một hệ phân tán cũng được nhìn nhận một cách thống nhất trên 2 khía cạnh. Đấy là: • Về phần cứng: Các máy trong hệ phân tán phải mang tính tự trị. • Về phần mềm: Người dùng phải nghĩ rằng họ đang làm việc với một hệ thống duy nhất. Chính vì thế mà một hệ phân tán phải đảm bảo được 4 mục đích chính: • Dễ dàng kết nối người sử dụng và tài nguyên. • Đảm bảo tính trong suốt. • Hỗ trợ tính mở. • Có thể co dãn. 4 mục đích này có thể hiểu một cách đơn giản nhất như sau. • Việc kết nối người sử dụng và tài nguyên nhằm tăng tính kinh tế cho hệ thống, cho phép sự hợp tác và trao đổi thông tin giữa các nhóm người sử dụng. Tuy nhiên, việc chia sẻ tài nguyên có thể dẫn tới những vấn đề như mất an toàn thông tin, những sự hợp tác không mong muốn hay tăng cao mức độ tương tranh. • Tính trong suốt giúp người dùng tưởng như mình đang làm việc chỉ với một hệ thống duy nhất, đảm bảo che dấu sự rời rạc và những nhược điểm nếu có của hệ thống. Có 8 dạng trong suốt đã được cụ thể hóa cho hệ phân tán. Đó là: 1. Trong suốt truy cập: che dấu khác biệt về cách biểu diễn và truy cập tài nguyên. 2. Trong suốt vị trí: che dấu vị trí của tài nguyên. 3. Trong suốt di trú: che dấu khả năng di chuyển vị trí của tài nguyên. 4. Trong suốt tái định vị: che dấu sự di chuyển khi đang được sử dụng. 5. Trong suốt nhân bản: che dấu tình trạng sử dụng bản sao của tài nguyên. 6. Trong suốt tương tranh: che dấu sự chia sẻ tài nguyên. 7. Trong suốt về lỗi: che dấu lỗi xảy ra. 8. Trong suốt tính nhất quán: che dấu sự di chuyển tài nguyên giữa bộ nhớ ngoài và bộ nhớ trong. • Tính mở để đảm bảo cung cấp các dịch vụ theo các quy tắc chuẩn mô tả cú pháp và ngữ nghĩa của dịch vụ đó. Cho phép người dùng được sử dụng các đặc tả đầy đủ hay trung lập, điều này giúp cho hệ phân tán có được 2 lợi thế. Đó là: có tính liên tác, giúp các hệ thống có thể hợp tác làm việc cùng nhau, và tính chuyển mạng, cho phép sự chuyển đổi giữa các ứng dụng được tạo trên nền tảng phần cứng và phần mềm khác nhau. • Tính co dãn cho phép bổ sung thêm người dùng và tài nguyên của hệ thống, mở rộng hệ thống về mặt địa lý đồng thời cho phép việc thay đổi về quy mô quản trị. Đi cùng với sự phát triển của các dạng hệ phân tán là sự xuất hiện của các hệ điều hành dành cho hệ phân tán. • DOS (hệ điều hành phân tán): hệ điều hành dành cho các hệ thống đa xử lý và các hệ thống đa máy tính thuần nhất. Những hệ thống máy tính này không thực sự hỗ trợ nhiều cho các máy tính tự trị, tuy nhiên lại rất tốt trong việc đảm bảo tính trong suốt cho việc cung cấp dịch vụ. • NOS (hệ điều hành mạng): là hệ điều hành dành cho các hệ thống đa máy tính không thuần nhất. Hệ điều hành này giúp cho việc kết nối các máy tính với hệ điều hành riêng biệt trở nên dễ dàng, tuy nhiên nó lại không đảm bảo được tính trong suốt cho cả hệ thống như DOS. • Middle-ware = NOS + một tầng phụ. Tầng này được xây dựng bên trên NOS, nhằm che dấu sự không nhất quán và phân tán của các máy tính được quản lý bởi NOS. Các hệ thống có xây dựng middle-ware thường có những mô hình để đặc tả cho một chức năng cụ thể nào đấy, chẳng hạn như hệ thống file phân tán v.v Một vấn đề nữa cũng hết sức quan trọng đối với bất kì một hệ phân tán nào, đó là cách tổ chức bên trong của nó. Client-server là một mô hình hiện nay đang được áp dụng rộng rãi trong các hệ phân tán. Trong mô hình này, client sẽ gửi những thông điệp yêu cầu dịch vụ đến server và chờ cho đến khi server gửi trả lời, cách hoạt động như vậy đã tạo ra sự liên hệ mật thiết giữa mô hình này với các phương pháp lập trình truyền thống, trong đó các dịch vụ được thực thi như một thủ tục trong từng module riêng rẽ. Tuy nhiên các ứng dụng trong mô hình client-server đã được cải tiến bằng cách phân ra làm 3 mức: mức giao diện người dùng, mức xử lý và mức dữ liệu. Phía server sẽ đảm nhận việc đáp ứng cho mức dữ liệu, trong khi đó mức giao diện người dùng được thực thi bên phía client, còn mức xử lý có thể được thực thi tại phía client, server hoặc là tại cả hai phía. Các hệ phân tán được phân ra 3 mức theo kiến trúc client-server như trên được coi là phân tán theo chiều dọc. Tuy nhiên, hiện nay trong các mô hình phân tán hiện đại người ta lại có xu hướng phân tán theo chiều ngang, trong đó, client và server được chia nhỏ một cách vật lý thành những phần tương đương nhau, mỗi phần được thực thi trên một tập dữ liệu chia sẻ hoàn toàn giống nhau để đảm bảo việc cân bằng tải. Ví dụ điển hình cho việc áp dụng thành công mô hình phân tán theo chiều ngang, đó chính là World Wide Web (www). Phần II - Truyền thông Việc truyền thông giữa các tiến trình có thể được coi là trái tim của một hệ phân tán. Trong các hệ phân tán truyền thống, việc truyền thông chủ yếu dựa trên việc truyền thông điệp mức thấp. Tuy nhiên trong các hệ phân tán hiện đại, với sự tồn tại của hàng nghìn, thậm chí hàng triệu các tiến trình đồng thời và rải rác khắp hệ thống mạng (ví dụ như Internet) thì việc truyền thông có vẻ như không còn thích hợp do chúng không đảm bảo được tính trong suốt của hệ phân tán. Như ta đã biết, việc truyền thông trên một hệ phân tán đòi hỏi phải đảm bảo về nhiều yếu tố. Đầu tiên là phải đảm bảo hiệu năng của quá trình truyền, trong đấy phải chú trọng đến một số vấn đề cốt lõi như độ trễ, tốc độ truyền dữ liệu hay băng thông…, tiếp theo phải đảm bảo được tính co dãn, tăng độ tin cậy và tính an toàn cho hệ phân tán, đồng thời vẫn phải chú ý đến tính linh hoạt cũng như chất lượng các dịch vụ phân phối trên hệ. Để các hệ thống khác nhau trong hệ phân tán có thể truyền thông với nhau dễ dàng và đảm bảo được những yêu cầu trong việc truyền nhận dữ liệu, mô hình tham chiếu kết nối các hệ thống mở OSI đã ra đời, mô hình này chuẩn hóa các quy tắc kết nối giữa 2 hệ thống trong các giao thức, đồng thời phân việc truyền thông thành 7 tầng: tầng vật lý, tầng liên kết dữ liệu, tầng mạng, tầng vận chuyển, tầng phiên, tầng biểu diễn và tầng ứng dụng, mỗi tầng có một giao thức riêng cho mình và được xây dựng để giải quyết một khía cạnh cụ thể của truyền thông. Sự phát triển hay thay đổi công nghệ tại mỗi tầng là hoàn toàn độc lập với các tầng khác. Trong 7 giao thức của mô hình kiến trúc OSI, thì 4 giao thức ứng với 4 tầng dưới cùng được coi là những giao thức bậc thấp, 3 tầng phía trên ứng với các giao thức bậc cao. Trong số các giao thức bậc cao tồn tại trong các hệ thống phân tán hiện nay thì còn phải chú ý đến giao thức middleware. Đây là một giao thức đa mục đích, nó độc lập với các giao thức khác và giúp cho việc truyền thông giữa các tiến trình được dễ dàng hơn so với việc truyền thông thông qua tầng vận chuyển. Giao thức middleware hỗ trợ các dịch vụ truyền thông bậc cao ví dụ như: gọi thủ tục từ xa, triệu gọi đối tượng từ xa, các dịch vụ hàng đợi thông điệp, bên cạnh đó cũng hỗ trợ việc truyền dòng các dữ liệu liên tục. Một trong những dịch vụ middleware được sử dụng rộng rãi nhất đấy là: gọi thủ tục từ xa (RPC). Bản chất của RPC là một dịch vụ được thực thi bởi các thủ tục, trong đó phần thân của thủ tục được đặt tại server. Phía client chỉ sử dụng đến chữ kí của thủ tục, tức là tên của thủ tục và các tham số cần thiết phải cấp cho nó. Khi client gọi thủ tục, thì bộ phận thực thi bên phía client, gọi là client-stub sẽ đảm nhận việc đóng gói các giá trị tham số vào một thông điệp và gửi thông điệp đó đến cho server. Phần thực thi bên phía server gọi là server-stub sẽ bóc các tham số từ gói thông điệp và gọi server, server gọi thủ tục thực sự và thực hiện công việc, sau đó đưa kết quả cho server-stub để đóng gói thành thông điệp và gửi trả cho client. Client-stub sẽ lấy các giá trị kết quả từ thông điệp phản hồi và truyền tới cho ứng dụng khách đã gọi thủ tục từ xa. RPC là mô hình được sử dụng rộng rãi trong các hệ phân tán do tính đơn giản của nó. Tuy nhiên, có một số vấn đề nảy sinh trong quá trình áp dụng RPC cho việc truyền thông, những vấn đề này được giải quyết thông qua một số mô hình RPC mở rộng. Mô hình mở rộng đầu tiên là Doors. Mô hình này được sử dụng khi client và server nằm trên cùng một máy. Tuy nhiên mô hình này có nhược điểm là vẫn phải xác định xem lời gọi thủ tục là cục bộ hay từ xa. Mô hình thứ hai là RPC dị bộ. Mô hình này cho phép client tiếp tục hoạt động ngay sau khi thực hiện lời gọi RPC, tránh việc lãng phí thời gian chờ đợi. Tuy nhiên nó có một nhược điểm là không đảm bảo được tính tin cậy trong truyền thông, vì client không thể nào chắc chắn được rằng yêu cầu nó gửi tới server liệu đã được xử lý hay chưa. Mục đích của RPC là đảm bảo tính trong suốt truy cập, tuy nhiên trong vấn đề truyền tham chiếu thì việc hỗ trợ của RPC lại tương đối nghèo nàn. Chính vì thế nó không thích hợp để đảm bảo cho việc truyền các đối tượng từ xa, những đối tượng có đòi hỏi cao về tính trong suốt truy cập. Do đó triệu gọi đối tượng từ xa (RMI) là dịch vụ thích hợp hơn trong những trường hợp như thế này. RMI về bản chất thì vẫn là dịch vụ RPC, điểm khác biệt ở chỗ là nó cho phép các đối tượng của hệ thống có thể được truyền giống như một tham số. Vì RPC và RMI thường yêu cầu việc truyền thông đồng bộ tức là client bị chặn cho đến khi nhận được trả lời từ phía server thì mới được tiếp tục hoạt động, do đó thường gây bất tiện và chậm trễ cho việc truyền thông. Dù đã có nhiều cơ chế xuất hiện để nới lỏng phần nào yêu cầu khắt khe này, tuy nhiên RMI và RPC dường như vẫn không thể thuận tiện được bằng mô hình truyền thông hướng thông điệp. Trong mô hình hướng thông điệp, vấn đề đặt ra là phải xác định xem lúc nào thì truyền thông là kiên trì hoặc nhất thời và lúc nào thì truyền thông là đồng bộ hoặc dị bộ. Bản chất của truyền thông kiên trì là thông điệp đã được lựa chọn để gửi đi sẽ được lưu trữ trong hệ thống cho đến khi nào nó được đưa tới phía nhận. Đồng nghĩa với việc đấy là ứng dụng bên nhận ứng dụng bên gửi đều không phải thực hiện việc gì nữa sau khi thông điệp đã được lựa chọn. Đối lập với truyền thông kiên trì là truyền thông nhất thời, với dạng truyền thông này thì thông điệp chỉ được lưu trong hệ thống nếu như cả ứng dụng gửi và ứng dụng nhận đều đang được thực hiện. Nếu như bên gửi không thể truyền thông điệp tới bên nhận thì thông điệp sẽ bị loại bỏ. Trong truyền thông đồng bộ, bên gửi sẽ bị chặn cho đến khi thông điệp nó gửi đi được lưu trữ vào bộ nhớ đệm của phía nhận hoặc đã thực sự được chuyển đến phía nhận. Trong trường hợp mạnh nhất, bên gửi có thể bị chặn cho đến khi bên nhận đã xử lý xong thông điệp, khi đó bên gửi sẽ được bên nhận trả lời thông qua RPC. Còn trong truyền thông không đồng bộ, bên gửi có thể tiếp tục làm việc ngay sau khi nó chọn xong thông điệp để truyền đi. Điều này có nghĩa là thông điệp có thể được lưu trữ trong bộ đệm cục bộ tại phía gửi hay nói cách khác là nó có thể chưa được gửi đi. Nhiều hệ thống hướng thông điệp được xây dựng bên trên tầng vận chuyển thông qua các socket. Socket cung cấp điểm cuối cho việc truyền thông giữa các tiến trình, thông điệp sẽ được truyền giữa một socket của tiến trình này với một socket của tiến trình khác. Tuy nhiên socket chỉ hỗ trợ các hàm gửi và nhận nguyên thuỷ, thêm vào đó nó lại được thiết kế chỉ cho việc truyền thông giữa một số ít giao thức, chẳng hạn như TCP/IP, do đó nó không phải là phương pháp truyền thông được sử dụng duy nhất trong mô hình hướng thông điệp. Giao diện truyền thông điệp (MPI) cũng là một dịch vụ được sử dụng trong các mô hình hướng thông điệp. MPI sử dụng phương pháp truyền thông nhất thời và nó hỗ trợ hầu hết các hàm truyền thông nguyên thuỷ. Vì MPI có thể tối ưu hoá việc thực thi của hệ thống nên nó được sử dụng cho các dịch vụ song song có hiệu năng cao. Một dịch vụ middleware quan trọng hỗ trợ truyền thông hướng thông điệp, đó chính là hàng đợi thông điệp hay còn gọi là middleware hướng thông điệp (MOM). Các mô hình MOM hỗ trợ truyền thông dị bộ kiên trì. Chúng được sử dụng chủ yếu cho việc kết hợp các bộ dữ liệu phân tán rộng rãi vào trong các hệ thống thông tin quy mô lớn. MOM cung cấp khả năng lưu trữ trung gian cho thông điệp, vì thế nó rất thích hợp cho việc truyền các thông điệp có dung lượng lớn. Khi sử dụng MOM người gửi sẽ được đảm bảo rằng thông điệp của mình nhất định sẽ được đưa vào trong hàng đợi thông điệp của người nhận, bên cạnh đó người nhận và người gửi có thể làm việc hoàn toàn độc lập với nhau. Một dạng truyền thông nữa hoàn toàn khác với những dạng truyền thông kể trên được gọi là truyền thông hướng dòng. Nếu như RPC, RMI hay truyền thông hướng thông điệp đều chỉ quan tâm đến tính độc lập và chính xác của các đơn vị thông tin, thời gian coi như không có ảnh hưởng gì đến độ chính xác của dữ liệu. Thì với truyền thông hướng dòng, thời gian đóng một vai trò hết sức quan trọng. Nhất là với những dữ liệu liên tục thì quan hệ về mặt thời gian phải chính xác để đảm bảo cho việc trình diễn dữ liệu đạt hiệu quả cao. Mô hình truyền thông hướng dòng đòi hỏi phải có những giao thức đặc biệt để trao đổi những dữ liệu phụ thuộc vào thời gian, chẳng hạn như giao thức RTP hay RTCP. Mô hình này cũng yêu cầu những cơ chế để đồng bộ hoá các dòng dữ liệu video và audio. Để đảm bảo chất lượng dịch vụ khi sử dụng truyền thông hướng dòng cần phải lưu ý đến những nhân tố ảnh hưởng khi truyền, đó có thể là độ trễ hay jitter…Những nhân tố này có thể ảnh hưởng rất lớn đến hiệu năng của dịch vụ. Phần III - Tiến trình Tiến trình đóng vai trò hết sức quan trọng trong hệ phân tán vì nó là cơ sở cho việc truyền thông giữa các máy khác nhau trong hệ. Một vấn đề đáng quan tâm là các tiến trình được tổ chức bên trong như thế nào và liệu chúng có hỗ trợ điều khiển đa luồng hay không. Việc tạo và quản lý các tiến trình nhìn chung là một công việc khó khăn, hơn nữa việc đảm bảo cho tất cả các tiến trình cùng tồn tại hòa bình trong một hệ thống cũng không hề dễ dàng, nhất là khi phải đảm bảo được tính trong suốt tương tranh. Luồng là giải pháp để đảm bảo việc thực thi các công việc đồng thời trong một tiến trình. Với luồng, hệ điều hành không phải đảm nhận trách nhiệm về vấn đề trong suốt tương tranh mà các ứng dụng phải tự lên kế hoạch cho mình. Luồng thường được sử dụng để giảm tác động của các thao tác khối (ví dụ như IO, hay ứng dụng mạng). Có 2 điểm cần lưu ý về luồng. Đấy là: 1. Các ứng dụng được phân luồng thường chạy nhanh hơn các ứng dụng không phân luồng (vì việc chuyển đổi ngữ cảnh giữa nhân và không gian người sử dụng đã bị loại bỏ). 2. Các ứng dụng được phân luồng khó phát triển hơn những ứng dụng khác, do đó các môi trường lập trình đã cung cấp các thư viện Luồng để lập trình viên có thể sử dụng. Luồng trong hệ phân tán đặc biệt hữu trong việc cho phép tiếp tục sử dụng CPU khi một thao tác khối IO đang được thực hiện. Chính vì thế mà nó tạo ra cơ hội để xây dựng các server hiệu năng cao chạy được đa luồng song song. Việc tổ chức các ứng dụng trong hệ phân tán theo mô hình client-server tỏ ra khá hiệu quả. Các tiến trình phía client nhìn chung được thực thi từ các giao diện người sử dụng, những giao diện này có thể được sắp xếp một cách đơn giản hay phức tạp tuỳ theo ứng dụng. Giao diện có thể tích hợp các tài liệu ghép để tạo sự tương tác với người dùng, ví dụ drag-and-drop cho phép người dùng có thể di chuyển đối tượng ngang màn hình để triệu gọi tương tác tới một ứng dụng khác, hay các ứng dụng ở mức giao diện người dùng khác như: bộ xử lý từ và các tiện ích đồ hoạ v.v… Các phần mềm phía client thường nhắm tới mục đích tạo ra sự trong suốt bằng cách ẩn các chi tiết liên quan đến việc truyền thông với server dù server đó là server cục bộ hay là một server được nhân bản. Ví dụ, tính trong suốt truy cập được đảm bảo bằng việc sử dụng các client-stub khi gọi các RPC. Tính trong suốt vị trí và di trú được tạo ra bằng cách chỉ cho các phần mềm phía client giữ vết vị trí thực của server. Và cho client-stub đảm nhận việc triệu gọi các đối tượng bản sao để đảm bảo trong suốt nhân bản. Cuối cùng là đảm bảo lỗi chỉ xảy ra phía client, cố gắng che dấu lỗi truyền thông và lỗi của server để đạt tính trong suốt về lỗi. Server có cấu trúc phức tạp hơn client rất nhiều tuy nhiên việc thiết kế cấu trúc cho server lại chỉ liên quan đến một số ít vấn đề. Một server có thể được thiết kế để hoạt động dưới dạng lặp (tức là tại một thời điểm chỉ phục vụ được cho một client), hoặc ngược lại là dạng đồng thời, thực thi một hay nhiều dịch vụ, có trạng thái (tức là có lưu giữ vết của các client) hay không có trạng thái (tức là không lưu giữ những thông tin chính xác về tình trạng của client sau khi xử lý các request). Một số vấn đề khác trong việc thiết kế lại liên quan đến việc định địa chỉ dịch vụ và các cơ chế để ngắt một server sau khi một yêu cầu dịch vụ được đưa ra và dịch vụ đó có khả năng sẽ được thực hiện. Các đối tượng server tạo ra một lớp đặc biệt, khi cần, mỗi đối tượng server trở thành một tiến trình với một số đối tượng nằm trong không gian địa chỉ của nó, và tiển trình này sẽ chấp nhận các triệu gọi từ phía client. Điều khiến cho một đối tượng server trở nên đặc biệt là do nó có nhiều cách để gọi đến các đối tượng. Ví dụ, một server có thể tạo ra một luồng riêng biệt cho mỗi lời triệu gọi. Nói một cách khác là nó có thể sử dụng mỗi luồng cho mỗi đối tượng, hay thậm chí là một luồng cho tất cả các đối tượng của nó. Mỗi chính sách triệu gọi khác nhau được xử lý bởi cùng một server bằng cách sử dụng một đối tượng adapter. Một vấn đề quan trọng trong các hệ phân tán là việc di trú mã giữa các máy khác nhau. Di trú mã là việc một tiến trình được di chuyển từ máy này sang máy khác. Hai lý do quan trọng để thực hiện việc di trú mã là để tăng hiệu năng cũng như tính linh hoạt của hệ phân tán. Khi việc truyền thông trở nên đắt đỏ để có thể thực hiện được thì chúng ta có thể giảm tải cho truyền thông bằng cách chuyển việc tính toán từ server sang client và để cho client có thể xử lý công việc cục bộ càng nhiều càng tốt. Tính linh hoạt của hệ sẽ được tăng nếu như client có thể tải động các phần mềm cần thiết để truyền thông tới một server. Sau khi cài đặt phần mềm đã tải về thì client có thể triệu gọi đến server. Như thế là client chỉ tải phần mềm khi cần và có thể loại bỏ nó ngay sau khi thực hiện xong công việc của mình. Di trú mã có thể theo mô hình di động yếu tức là chỉ chuyển các đoạn mã và đoạn dữ liêụ rồi sau khi di trú mã đến nơi cần thiết thì sẽ tiến hành việc thực hiện tiến trình lại từ đầu. Hoặc có thể di trú theo mô hình di động mạnh, tức là chuyển toàn bộ từ đoạn mã, đoạn dữ liệu đến cả trạng thái đang thực hiện của tiến trình đến đích, sau khi di trú xong thì sẽ khởi động một bản sao của tiến trình cũ với cùng một trạng thái như trước khi nó được chuyển đi. Việc di trú mã cũng đưa lại một số vấn đề liên quan đến việc sử dụng các tài nguyên cục bộ, đấy là việc phía máy đích không có sẵn những tài nguyên mà tiến trình đang sử dụng tại máy nguồn, do đó dẫn đến yêu cầu phải di trú cả tài nguyên. Một ràng buộc tới các tài nguyên cục bộ sẽ được thiết lập cho máy đích hay cho cả hệ thống mạng có tham chiếu tới tài nguyên này. Một vấn đề nữa là về việc di trú mã trong các hệ không đồng nhất. Các máy đich có thể không thích hợp để thực hiện việc di trú do ngữ cảnh của tiến trình phụ thuộc rất nhiều vào phần cứng cũng như hệ điều hành và hệ thống của máy. Giải pháp được coi là tốt nhất cho trường hợp này là sử dụng một máy ảo để ẩn đi sự không đồng nhất trong quá trình thực hiện mã. Cuối cùng chúng ta cần phải lưu tâm tới định nghĩa tác tử mềm, một dạng tiến trình đặc biệt, được thực hiện như một đơn vị tự trị, tuy nhiên lại có khả năng phối hợp cùng những tác tử khác. Nhìn từ khía cạnh của hệ phân tán thì sẽ thấy điều làm cho một tác tử khác với tiến trình là ở chỗ nó sử dụng một giao thức truyền thông mức ứng dụng gọi là ngôn ngữ truyền thông tác tử (ACL). Trong một ACL có sự phân biệt rạch ròi giữa mục đích của thông điệp với nội dung của nó. ACL định nghĩa ra một giao thức truyền thông bậc cao giữa các tác tử. Mỗi thông điệp được gửi đi từ một tác tử sẽ khiến cho tác tử nhận phản ứng theo một cách nào đó tuỳ theo mục đích của thông điệp. Phần IV - Định danh Tên đóng vai trò quan trong bất cứ hệ thống máy tính nào. Chúng có thể được sử dụng để chia sẻ tài nguyên, để định danh duy nhất cho một thực thể, để tham chiếu đến vị trí của thực thể đó, và còn nhiều tác dụng khác nữa. Trong các hệ phân tán thì có 3 kiểu tên, đấy là địa chỉ, định danh và tên thân thiện với con người. • Địa chỉ là tên của điểm truy cập được kết hợp với một thực thể, nó có thể được gọi một cách đơn giản là địa chỉ của thực thể. • Định danh là một kiểu tên đặc biệt với những tính chất sau: 1. Một định danh chỉ tham chiếu nhiều nhất đến một thực thể. 2. Mỗi thực thể chỉ bị tham chiếu bởi nhiều nhất một định danh. 3. Một định danh luôn luôn tham chiếu đến cùng một thực thể (nó không bao giờ được sử dụng lại để tham chiếu đến một thực thể khác). • Cuối cùng là tên thân thiện với con người thường do người dùng tự định nghĩa và được biểu diễn dưới dạng các chuỗi kí tự. Tên trong hệ phân tán thường được tổ chức vào một không gian tên. Không gian tên có thể được biểu diễn bởi một đồ thị có hướng, trong đó mỗi nút đại diện cho một thực thể được đặt tên và nhãn tại mỗi đỉnh biểu diễn tên của thực thể đó. Có 2 loại nút. • Nút lá biểu diễn một thực thể có tên và thực thể đó không có đỉnh nào đi ra. Một nút lá thường chứa thông tin của thực thể mà nó biểu diễn. Mặt khác nó cũng có thể chứa trạng thái của thực thể. • Trái ngược với nút lá là nút thư mục. Một nút thư mục có nhiều đỉnh đi ra, mỗi nút thư mục lưu trữ một bảng thư mục, trong bảng đó, mỗi đỉnh đi ra được biểu diễn bằng một cặp: nhãn của đỉnh và định danh của nút mà nhãn tham chiếu tới. Các đồ thị tên quy mô lớn thường được tổ chức dưới dạng đồ thị có hướng, không vòng với một nút gốc. Các đồ thị tên rất thuận tiện cho việc tổ chức các tên “thân thiện với con người” một cách có cấu trúc. Một thực thể tên trong đồ thị có thể được tham chiếu qua một đường dẫn tên, là một trật tự các nhãn tương ứng với các đỉnh trên đường để tới được vị trí của thực thể. Nu nút  u tiên ca    n g dn tên là nút gc ca   th, thì    n g ó    c gi là    n g dn tên tuyt   i, nu không thì nó    c gi là    n g dn tên t ng   i. Ng i ta cng   a ra khái nim phân gii tên, ây là vic i theo các h ng trên mt   th tên bng cách tra cu các thành phn ca mt    n g dn tên, mi ln i theo mt nhãn trên    n g dn cho ti khi tìm   n    c thc th. Mt   th tên có quy mô ln th  ng    c thc thi bng cách phân phi các nút ca nó ti nhiu name server (nhng nút này    c gi là nút cài). Phân gii tên lúc này không ch    c s dng trong mt không gian tên riêng l na mà nó còn    c s dng   hòa nhp các không gian tên khác nhau mt cách trong sut. Khi ln theo mt    n g dn tên trong mt   th, nu phân gii tên gp mt nút cài ca server khác thì ngay lp tc nó s tip tc thc hin công vic ti server này. Mt không gian tên trong các h phân tán th  ng có cu trúc phân tng, chúng    c chia ra thành 3 tng logic. • Tầng tổng thể (global layer) được tạo thành từ những nút bậc cao nhất, là nút gốc và những nút con của nó. Ở tầng này, tính sẵn sàng cao là một tiêu chí đặc biệt nghiêm ngặt • Tầng quản trị (administrational layer) được tạo thành từ các nút thư mục được quản lý bởi một tổ chức riêng lẻ. Những nút thư mục ở tầng này đại diện cho nhóm các thực thể thuộc về cùng một tổ chức hay cùng một đơn vị quản trị. Ở tầng này, tính sẵn sàng cũng tương đối quan trọng. • Tầng quản lý (managerial layer) bao gồm các nút thay đổi một cách thường xuyên, chúng biểu diễn những thư mục và file do người dùng tự định nghĩa. Các nút trong tầng này được duy trì không chỉ bởi người quản trị hệ thống mà còn bởi những người dùng cuối trong hệ phân tán. Ở tầng này, hiệu năng là một vấn đề cốt lõi. Các hệ thống định danh cho những tên “thân thiện với con người” thường không thích hợp với các thực thể di động mạnh. Việc định vị những thực thể này có thể tiến hành một cách hiệu quả hơn bằng cách sử dụng các định danh độc lập vị trí. Có 4 cách cơ bản để tiếp cận việc định vị cho một thực thể di động: • Phương pháp tiếp cận thứ nhất là sử dụng Broadcasting hoặc Multicasting. Định danh của thực thể sẽ được quảng bá đến mỗi tiến trình của hệ phân tán hoặc đến mỗi tiến trình của một nhóm multicast nào đó. Tiến trình sẽ đưa ra một điểm truy cập, đồng thời cung cấp địa chỉ điểm truy cập đó để thực thể có thể trả lời. Tuy nhiên, phương pháp này sẽ không hiệu quả nếu thực hiện trong một mạng có quy mô lớn. • Phương pháp tiếp cận thứ hai là sử dụng con trỏ chuyển tiếp. Ý tưởng của phương pháp này là: khi một thực thể rời từ vị trí A sang vị trí B thì nó sẽ để lại A một con trỏ trỏ đến vị trí B. Để định vị được thực thể thì cần phải lần theo đường đi của các con trỏ chuyển tiếp. Tuy nhiên phương pháp này có một số nhược điểm như: chuỗi chuyển tiếp có thể rất dài vì thế sẽ tạo trễ và việc tra cứu sẽ có chi phí cao, tính mở của hệ thống sẽ bị giảm do thời gian để duy trì các mắt xích trung gian là không xác định, các mắt xích trung gian có thể bị gãy dẫn đến việc mất dấu thực thể, vì thế sẽ làm giảm tính tin cậy của hệ thống. Do đó, để tránh việc chuỗi chuyển tiếp trở nên quá lớn thì việc quan trọng là phải giảm độ dài chuỗi thường xuyên. • Phương pháp tiếp cận thứ ba là home-based, tức là mỗi thực thể được gán cho một vị trí gốc (nhà), vị trí gốc này giữ dấu vị trí hiện thời của thực thể. Client giao tiếp với vị trí gốc để xác định xem thực thể thực sự nằm ở đâu. Nếu client mất dấu thực thể thì luôn luôn có thể quay lại vị trí gốc để tìm lại. Tuy nhiên phương pháp này có thể gây trễ trên mạng, và nếu thực thể quyết định đổi vị trí gốc thì có thể dẫn đến việc vĩnh viễn mất dấu. • Phương pháp thứ tư là xây dựng một cây tìm kiếm phân cấp. Mạng được chia ra thành các domain không chồng lên nhau, các domain có thể được nhóm lại thành các domain mức cao hơn v.v… Sẽ có một domain mức đỉnh cho toàn bộ mạng, mỗi domain tại mỗi mức có một nút thư mục liên kết với mình. Nếu một thực thể được định vị tại domain D thì nút thư mục của domain cao hơn D một mức sẽ chứa con trỏ trỏ tới D. Nút thư mục mức thấp nhất sẽ lưu địa chỉ của thực thể. Nút thư mục mức đỉnh phải biết về tất cả các thực thể của hệ. Phương pháp tiếp theo kiểu phân cấp này được sử dụng khá phổ biến và có thể được mở rộng cả về kích thước lẫn vị trí địa lý. [...]... hàng của hệ thống thanh toán điện tử có thể giấu mặt, không công khai danh tính, điều này tạo cho thương mại điện tử tính linh hoạt so với những phương pháp truyền thống khác Phần IX - Các hệ thống phối hợp phân tán Những hệ phân tán thế hệ mới đều coi rằng các thành phần khác nhau của hệ thống là phân tán và vấn đề thật sự khi phát triển những hệ phân tán như thế là việc làm thế nào để phối hợp hoạt... hợp hoạt động của các thành phần này Nếu coi một hệ phân tán là một tập các tiến trình thì một hệ thống phối hợp chịu trách nhiệm xử lý việc truyền thông và phối hợp giữa các tiến trình trong khi các tiến trình chịu trách nhiệm trong việc tính toán Phần lớn các hệ thống phối hợp tập trung vào tính tách cặp có liên quan (referentially uncouple) của các tiến trình, điều đó có nghĩa là các tiến trình không... quyền hạn Kết luận: Các hệ thống kết hợp khác với các hệ phân tán khác ở chỗ nó tập trung chủ yếu vào việc cung cấp các cách thuận lợi nhất cho các tiến trình có thể giao tiếp với nhau mà không cần phải hiểu nhiều về nhau Đây là một ưu điểm giúp tăng tính linh hoạt của hệ thống, cho phép có thể mở rộng hoặc thay đổi hệ thống ngay cả khi nó vẫn đang vận hành Các nguyên lý của hệ phân tán được đề đến trong... thích hợp Tuy nhiên trong các hệ phân tán cũng như trong các hệ thống mạng nói chung không hề tồn tại khái niệm về một đồng hồ chia sẻ tổng thể Nói cách khác, các tiến trình trên những máy khác nhau có ý kiến riêng của mình về vấn đề thời gian Và không gì đảm bảo được rằng các đồng hồ vật lý trên từng máy có thể chạy với cùng một tần số Có nhiều cách khác nhau để đồng bộ các đồng hồ trong một hệ phân tán, ... hình khi điều phối viên bị sụp mà không cần phải cấm các tiến trình đi đến thoả thuận trước khi điều phối viên được phục hồi Phục hồi trong một hệ thống chịu lỗi là đạt được sự bất biến bằng cách tạo ra các checkpoint cho hệ thống một cách thường xuyên Tuy nhiên việc tạo ra được một checkpoint là điều không dễ dàng và cũng khá tốn kém Để tăng hiêu năng của hệ thống, nhiều hệ phân tán đã kết hợp việc tạo... động từ hệ thống Kerberos và đang nỗ lực để có thể trở nên tương thích với Kerberos Cuối cùng phải nói đến các hệ thống thanh toán điện tử, một ứng dụng quan trọng trong các hệ phân tán Ứng dụng này đã tạo ra một phong cách mới cho thương mại điện tử, mở rộng pham vi hoạt động của các doanh nghiệp số này ra toàn thế giới, nó là một cuộc cách mạng so với các hệ thống thanh toán bằng tiền mặt truyền thống. .. thiết kế một hệ phân tán Chịu lỗi được định nghĩa là đặc tính của hệ thống để có thể che dấu sự cố và phục hồi được khi bị lỗi Nói một cách khác thì hệ thống được gọi là có tính chịu lỗi nếu nó vẫn có thể tiếp tục vận hành khi có sự hiện diện của lỗi Chịu lỗi có quan hệ mật thiết với khái niệm “đáng tin cậy”, trong các hệ phân tán thì khái niệm này có những đặc tính sau: • Tính sẵn sàng: hệ thống luôn... Jini, một mô hình khác của hệ phân tán phối hợp Jini hỗ trợ phương pháp truyền thông generative như trong các hệ thống Linda bằng cách sử dụng các JavaSpace JavaSpace là các cơ sở dữ liệu để lưu trữ các tuple (một dạng dữ liệu có cấu trúc tương tự như bản ghi), cung cấp các cơ chế tách cặp có liên quan và tách cặp theo thời gian cho tiến trình Một tiến trình nếu muốn đọc các tuple từ một không gian... thì nó sẽ gửi thông báo cho client biết thông qua các Java RMI Các tiến trình trong Jini thực chất là sự thực thi của các JavaSpace Các JavaSpace này có thể được thực thi trên các hệ thống đa xử lý hoặc các hệ thống đa máy tính Jini không cung cấp các dịch vụ định danh truyền thống tuy nhiên lại cho phép client có thể tra cứu các dịch vụ đã đăng ký bằng cách sử dụng một tiện ích tìm kiếm Bên cạnh đó còn... Trong các hệ cơ sở dữ liệu phân tán và các hệ thống file không yêu cầu cao về tính chịu lỗi Các bản sao thường được đặt trên cùng một mạng LAN • Sử dụng chỉ trên hệ thuần phân tán, kho dữ liệu không nhân bản • Dùng trong hệ thống bộ nhớ chia sẻ phân tán, nhưng tính toán linh hoạt trong chế độ không kết nối Giao thức Primary-based có 2 loại: • Giao thức ghi từ xa: tất cả các thao tác ghi được thực hiện . cho hệ phân tán. • DOS (hệ điều hành phân tán) : hệ điều hành dành cho các hệ thống đa xử lý và các hệ thống đa máy tính thuần nhất. Những hệ thống máy tính này không thực sự hỗ trợ nhiều cho các. nghĩa mới về hệ phân tán. Có nhiều định nghĩa được đưa ra để mô tả một hệ phân tán. Chẳng hạn như: Hệ phân tán là một tập các máy tính độc lập, giao tiếp với người dùng như một hệ thống thống nhất,. cậy và tính an toàn cho hệ phân tán, đồng thời vẫn phải chú ý đến tính linh hoạt cũng như chất lượng các dịch vụ phân phối trên hệ. Để các hệ thống khác nhau trong hệ phân tán có thể truyền thông

Ngày đăng: 03/08/2014, 00:22

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan