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.
Trang 1Phầ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ượtbậ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áttriể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ếncho 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 baogiờ 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ốngthố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áchthố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 duynhấ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 Tuynhiê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ôngtin, 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àinguyê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
Trang 28 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ínhliê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ểnmạ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ầncứ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ànhdà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ínhtrong 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ínhkhô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ínhtrong 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ởiNOS 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ãitrong 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ácdịch vụ được thực thi như một thủ tục trong từng module riêng rẽ Tuy nhiên các ứngdụ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ứcgiao 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 ứngcho 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ộttậ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ìnhcho việc áp dụng thành công mô hình phân tán theo chiều ngang, đó chính là World WideWeb (www)
Trang 3Phầ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 đếnmộ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ẫnphả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 trongcá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ậpvớ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ảichú ý đến giao thức middleware Đây là một giao thức đa mục đích, nó độc lập với cácgiao 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ớiviệ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ầnthâ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íaserver 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ànhthô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ảnhồ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
Trang 4má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 saukhi 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ộtnhượ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ềntham 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íchhợ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ơntrong 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ácbiệ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ộttham 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 đếnkhi 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ấttiệ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ầnnà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ềnthô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ảnchấ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ớidạ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ụnggử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 đượclư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 Trongtrườ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ôngkhô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ạiphí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ácsocket 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 Tuynhiê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ướngthông điệp
Trang 5Giao 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ìnhhướ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ếtcá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ốngnê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ìnhMOM 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ợpcá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 cungcấ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ềncá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ằngthô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ườinhậ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 đềuchỉ 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 ý đếnnhữ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ụ
Trang 6dễ 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ươngtranh 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ầnlư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ụngkhông phân luồng (vì việc chuyển đổi ngữ cảnh giữa nhân và không gianngườ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ìnhviê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ộtthao 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ácserver 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ệuquả 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 ứngdụ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ùngkhá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ườngnhắ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ệctruyề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ácRPC 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íaclient 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 đốitượ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íaclient, 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 serverlạ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ướidạ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ủacá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
Trang 7liê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êucầ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ộttiế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 đặcbiệ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ộtluồ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ồngcho 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ínhsá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 đốitượ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ý doquan 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ộtserver 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ôngviệ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ó đượcchuyể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ụngtạ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àinguyê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ếutớ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ềuvà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ốtnhấ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 đặcbiệ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ữngtá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ácvớ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
Trang 8ngữ 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 đíchcủ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
Trang 9Phầ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ủathự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ể đượcgọ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 baogiờ đượ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ộtnú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ỗinút thư mục lưu trữ một bảng thư mục, trong bảng đó, mỗi đỉnh đi ra được biểudiễ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òngvớ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 n g 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 n g 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ãntrê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 n g
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 giantê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 tcá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 servernày
M t không gian tên trong các h phân tán th n g 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ệtnghiêm ngặt
Trang 10• Tầng quản trị (administrational layer) được tạo thành từ các nút thư mục đượcquả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 chonhó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ườngxuyên, chúng biểu diễn những thư mục và file do người dùng tự định nghĩa Cácnú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ởinhữ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íchhợ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ộtcá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 Địnhdanh 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 đếnmỗ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 truycập, đồng thời cung cấp địa chỉ điểm truy cập đó để thực thể có thể trả lời Tuynhiê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ươngphá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ộtcon trỏ trỏ đến vị trí B Để định vị được thực thể thì cần phải lần theo đường đicủ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ểmnhư: 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 trunggian 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ấtdấ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ệcchuỗ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ỗithườ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 chomộ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 giaotiế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ấuthự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ápnà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 rathành các domain không chồng lên nhau, các domain có thể được nhóm lại thànhcá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útthư 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 theokiể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íchthước lẫn vị trí địa lý
Trang 11Những thực thể không còn định vị được nữa thì cần phải bị loại bỏ Một mục đích sửdụng quan trọng của tên trong hệ phân tán là để tập hợp các tham chiếu tới một thực thể,đây cũng chính là cách để có thể tự động loại bỏ những thực thể không còn được thamchiếu nữa Để thực hiện việc “thu nhặt rác” này có thể sử dụng một trong các phươngpháp sau đây:
• Tính toán tham chiếu: với phương pháp này một thực thể chỉ phải làm công việcđơn giản là đếm số lượng tham chiếu trỏ tới nó Khi bộ đếm chỉ về số 0 thì thựcthể đã đến lúc bị loại bỏ Ngoài ra, nếu không muốn đếm số lượng tham chiếu thìcũng có thể duy trì một danh sách các tiến trình tham chiếu tới một thực thể,phương pháp liệt kê tham chiếu này mạnh hơn phương pháp tính toán tham chiếu,tuy nhiên nó lại gặp phải vấn đề với việc tăng tính mở rộng cho hệ thống
• Phương pháp thứ 2 là tracing-based, với phương pháp này tất cả các thực thể bịtham chiếu một cách trực tiếp hay gián tiếp từ một tập các thực thể gốc được địnhtrước, đều được đánh dấu là reachable (có thể đến được) Những thực thểunreachable sẽ bị loại bỏ Phương pháp này rất khó thực hiện vì thực thể nàotrong hệ cũng phải bị kiểm tra Giải pháp cho vấn đề này thì có nhiều nhưng nhìnchung đều dựa vào các phương pháp thu gom rác truyền thống được sử dụngtrong các hệ đơn xử lý
Trang 12Phần V - Đồng bộ hoá
Liên quan chặt chẽ đến việc giao tiếp giữa các tiến trình chính là vấn đề làm cách nào đểđồng bộ các tiến trình trong một hệ phân tán Đồng bộ hóa là đảm bảo cho những việcthích hợp được làm vào những thời điểm thích hợp Tuy nhiên trong các hệ phân tán cũngnhư 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ủamì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ừngmá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, tuy nhiên tất cảcác phương pháp đều chủ yếu dựa trên việc trao đổi các giá trị đồng hồ, rồi tính toán thờigian cần thiết để gửi và nhận thông điệp Có 3 giải thuật được sử dụng để đồng bộ hoáđồng hồ vật lý Đấy là:
• Giải thuật của Cristian: trong giải thuật này, máy chủ hoàn toàn bị động trong việcđịnh vị thời gian Nó phải đợi thông điệp từ máy khách, sau đó mới trả lời
• Giải thuật Berkeley: với giải thuật này, máy chủ hoàn toàn chủ động trong việctính toán và phân phối thời gian
• Giải thuật trung bình: nếu 2 giải thuật trên là giải thuật tập trung thì giải thuật nàylại là phân tán.Thuật toán này đồng bộ đồng hồ dựa trên nguyên tắc phân chia thờigian thành các khoảng cố định rồi đồng bộ hoá lại các khoảng đó
Trong nhiều trường hợp, việc biết đến thời gian tuyệt đối là không cần thiết Chúng ta chỉcần quan tâm đến việc các sự kiện có liên quan đến nhau nhưng nằm tại các tiến trìnhkhác nhau phải được diễn ra theo đúng trình tự Lamport đã đưa ra hướng giải quyết chovấn đề trên bằng cách giới thiệu khái niệm về đồng hồ logic Đồng hồ logic cho phép mộttập các tiến trình đạt được thỏa thuận chung về thứ tự thực hiện chính xác của từng sựkiện Giả sử có sự kiện e, e có thể đang gửi hoặc đang nhận một thông điệp, sự kiện này
được gán cho một tem thời gian logic tổng thể và duy nhất C(e) thoả mãn những điều
kiện sau:
1 Nếu có một sự kiện a xảy ra trước sự kiện b thì C(a) < C(b).
2 Nếu a gửi đi một thông điệp m và b là bên nhận thông điệp đó thì C(a) < C(b).
Vấn đề đặt ra là làm thế nào để gán một tem thời gian vào một sự kiện khi không có đồng
hồ tổng thể Giải pháp cho việc đó là duy trì một tập nhất quán các đồng hồ logic, mỗiđồng hồ được gán cho một tiến trình
Tem thời gian Lamport có thể được mở rộng ra thành một vector tem thời gian thoả mãn
điều kiện sau: nếu C(a) < C(b) thì sự kiện a là sự kiện tiền nhân quả của b.
Vì không có một khái niệm nào về bộ nhớ chia sẻ trong một hệ phân tán nên rất khó đểxác định chính xác được trạng thái hiện thời của hệ thống Tuy nhiên ta có thể xác địnhđược trạng thái tổng thể của hệ, trạng thái này chính là tập hợp các trạng thái cục bộ củatừng tiến trình cùng với những thông điệp đang được truyền qua chúng Việc quyết địnhtrạng thái tổng thể của một hệ phân tán có thể được thực hiện bằng cách đồng bộ tất cảcác tiến trình của hệ Việc đồng bộ tự bản thân nó có thể được thực hiện mà không cầnphải ép các tiến trình dừng hoạt động để thu thập trạng thái của chúng Hơn nữa việc để
Trang 13các tiến trình trong hệ phân tán tiếp tục hoạt động còn có thể giúp thu thập được cácsnapshot về trạng thái hiện thời của tiến trình.
Việc đồng bộ giữa các tiến trình thường yêu cầu phải có một tiến trình đảm nhận vai tròlàm điều phối viên để khởi tạo cho việc đồng bộ và thực hiện một số vai trò đặc biệtkhác Trong một số trường hợp khi điều phối viên không được cố định thì cần thiết phảiquyết định xem tiến trình nào có thể trở thành điều phối viên Vì lý do này mà các giảithuật bầu cử đã ra đời Có 2 giải thuật tiêu biểu là giải thuật Bully và giải thuật vòng.Một lớp quan trọng trong các giải thuật đồng bộ hoá được gọi là “loại trừ lẫn nhau phântán” (distributed mutual exclusion) Những giải thuật này đảm bảo rằng: trong một tậpcác tiến trình phân tán thì ít nhất tại một thời điểm phải có một tiến trình được truy cậpvào tài nguyên chia sẻ Điều này có thể dễ dàng thực hiện bằng cách sử dụng một điềuphối viên để lưu vết các tiến trình và quyết định xem đến lượt tiến trình nào được phép sửdụng tài nguyên Có một số giải thuật phân tán hoàn toàn đã được đưa ra
• Giải thuật tập trung: đây là giải thuật đơn giản nhưng cũng hiệu quả nhất, nó sửdụng điều phối viên để cho phép tại mỗi thời điểm chỉ một tiến trình được phéptruy cập vào vùng tới hạn, và không có tiến trình nào phải chờ đợi vĩnh viễn.Nhược điểm của giải thuật này là có thể tạo ra các nút cổ chai do chỉ có một mìnhđiều phối viên xử lý mọi việc và nếu điều phối viên bị sụp thì có thể dẫn đến việc
cả hệ thống cũng sụp theo
• Giải thuật phân tán: ý tưởng của giải thuật này là với một cặp sự kiện bất kì,chẳng hạn như một cặp thông điệp thì phải phân biệt rõ ràng xem sự kiện nào sẽđược xảy ra trước Giống như giải thuật tập trung, giải thuật này cũng đảm bảokhông có thời gian chết cũng như không có tiến trình nào phải đợi quá lâu Tuynhiên giải thuật này chỉ tốt nếu được thực hiện với một nhóm nhỏ tiến trình vànhóm này không bao giờ thay đổi thành viên trong nhóm của mình
• Giải thuật Token Ring: Tại mỗi thời điểm chỉ có một tiến trình giữ thẻ bài mớiđược truy cập vào vùng tới hạn Nếu một tiến trình được một tiến trình láng giềngtruyền thẻ bài cho nhưng nó lại không muốn vào vùng tới hạn thì nó có thể truyềnthẻ bài đó đi tiếp.Giải thuật này cũng sẽ gặp vấn đề nếu như một tiến trình bị sụp,tuy nhiên việc khôi phục lại nó thì lại dễ hơn so với 2 giải thuật trên
Một vấn đề nữa cũng cần được quan tâm, đấy chính là các giao dịch phân tán Một giaodịch bao gồm một loạt các thao tác lên các dữ liệu chia sẻ nhằm bảo vệ dữ liệu khỏi việc
bị truy cập đồng thời bởi các tiến trình tương tranh Một giao dịch phải đảm bảo tínhACID, tức là phải có 4 tính chất sau:
1 Automic (Tính nguyên tử): không có kết quả trung gian nào của giao dịch
có thể quan sát được bởi thế giới bên ngoài
2 Consistent (Tính nhất quán): các giao dịch không xung đột với những sự
bất biến của hệ thống
3 Isolated (Tính tách biệt): các giao dịch tương tranh không can thiệp vào
nhau
4 Durable (Tính bền): khi một giao dịch được thực hiện thì thay đổi mà nó
tạo ra tồn tại vĩnh viễn trong hệ thống