Đăng ký Đăng nhập
Trang chủ Mô phỏng giải thuật phân tán...

Tài liệu Mô phỏng giải thuật phân tán

.PDF
85
3
145

Mô tả:

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI ----------------------------------------------- PHẠM TUẤN ANH MÔ PHỎNG GIẢI THUẬT PHÂN TÁN LUẬN VĂN THẠC SỸ KHOA HỌC CHUYÊN NGÀNH: CÔNG NGHỆ THÔNG TIN HÀ NỘI – 2005 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI ----------------------------------------------- PHẠM TUẤN ANH MÔ PHỎNG GIẢI THUẬT PHÂN TÁN LUẬN VĂN THẠC SỸ KHOA HỌC CHUYÊN NGÀNH: CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS. HÀ QUỐC TRUNG HÀ NỘI - 2005 Chương 1 HỆ PHÂN TÁN 1.1. Hệ phân tán Ngày nay các hệ phân tán xuất hiện trong mọi hoạt động: kinh doanh, nghiên cứu, quản lý và ngay cả tại gia đình. Thông thường chúng cung cấp phương tiện để chia sẻ tài nguyên (như máy in màu hay máy quét) và chia sẻ dữ liệu (không thể thiếu được với nền kinh tế dựa trên thông tin ngày nay). Một hệ thống phân tán bao gồm một tập hợp các bộ xử lý liên kết với nhau thông qua một cấu hình mạng nào đó. Hệ thống có thể là vật lý tức là các máy tính kết nối với nhau thông qua mạng máy tính hay logic tức là tập các tiến trình phần mềm kết nối qua cơ chế truyền thông điệp. Cấu hình mạng có thể là điểm tới điểm hay các kênh truyền thông đại chúng (broadcast). Hệ phân tán khác hệ tập trung ở một số điểm cơ bản sau. • Thiếu nhận biết về trạng thái toàn cục của hệ thống (có thể thu thập thông tin về trạng thái hệ thống nhưng không cập nhật). 12 • Thiếu một khung thời gian toàn cục (các sự kiện không có thứ tự). • Bất định. Cần phân biệt hai mức khác nhau khi xem xét một hệ phân tán: mức bộ xử lý và mức tiến trình. Ở mức của bộ xử lý, các bộ xử lý không có chia sẻ bộ nhớ về mặt vật lý và thiết yếu phải trao đổi thông qua truyền thông điệp. Trên mỗi bộ xử lý có nhiều tiến trình. Các tiến trình trên nhiều bộ xử lý hình thành mức tiến trình trong hệ phân tán. Ở mức tiến trình chúng ta có nhiều lựa chọn trao đổi hơn so với mức bộ xử lý. Các tiến trình có thể trao đổi thông qua chia sẻ bộ nhớ hay truyền thông điệp hoặc phối hợp cả hai. Trong các phần sau chúng ta chỉ xem xét hệ phân tán dưới mức độ tiến trình do mức bộ xử lý có thể xem như mức tiến trình với mỗi tiến trình trên một bộ xử lý. Hệ phân tán được biết đến sớm nhất trong thực tế là mạng máy tính. Dù ban đầu được thực hiện cho mục đích truy cập từ xa và sau này cho thư điện tử mạng máy tính đã phát triển nhanh chóng bao gồm nhiều dịch vụ truyền dữ liệu khác nhau như truyền file hay duy trì các phiên làm việc. Một mạng lưới phức tạp các giao thức đã được thiết kế cho các dịch vụ này bằng cách truyền thông điệp trên nhiều mức độ. Những tiến bộ gần đây trong thiết kế các giao thức còn cho phép tồn tại nhiều dạng truyền thông khác nhau bên cạnh dữ liệu như âm thanh và hình ảnh. Một ví dụ nổi tiếng khác về hệ phân tán nằm trong lĩnh vực xử lý song song với một tập các bộ xử lý cùng phối hợp giải một bài toán. Tính toán song song có rất nhiều ứng dụng trong các lĩnh vực khoa học và kỹ thuật. Thiết kế ban đầu cho các hệ xử lý song song tập trung vào các hệ chia sẻ bộ nhớ (chia sẻ cả không gian nhớ và không gian địa chỉ). Tuy nhiên người ta đã nhanh chóng nhận ra hiệu năng của hệ thống bị giới hạn bởi cơ chế vật lý xác định 13 việc chia sẻ các phần tử nhớ. Mong muốn cung cấp một hiệu năng cao hơn cho các ứng dụng đã dẫn đến sự ra đời của các hệ phân tán với liên kết điểm tới điểm thống trị cho tới ngày nay. Trong các hệ phân tán quan trọng ngày nay còn phải kể đến mạng các máy trạm. Các mạng này có nhiều điểm giống như mạng máy tính ta đã nói ở trên nhưng có phạm vi địa lý hẹp hơn và thường dùng các kết nối đại chúng như môi trường truyền thông chính (các tiến trình trên các bộ xử lý dùng kết nối điểm tới điểm) . Mạng máy trạm cung cấp nhiều dịch vụ hơn mạng máy tính ví dụ như chia sẻ hệ thống file. Từ các ví dụ về các hệ phân tán trong thực tế đã mô tả ở trên có thể thấy rõ kết nối điểm tới điểm thống trị trong hầu hết các trường hợp. Điều này đồng nghĩa với việc truyền thông giữa các điểm mạng đóng vai trò chủ đạo. 1.2. Tính chất của một hệ phân tán 1.2.1. Chia sẻ tài nguyên Tài nguyên là khái niệm để chỉ tất cả những gì có thể sử dụng chung trong hệ phân tán. Tài nguyên có thể bao gồm từ phần cứng như bộ nhớ hay máy in, tới các thực thể lôgic được định nghĩa bởi phần mềm như file, CSDL... Việc chia sẻ tài nguyên đem lại những lợi ích sau: • Các thiết bị phần cứng được chia sẻ tạo thuận lợi cho việc sử dụng và giảm bớt chi phí. • Chia sẻ dữ liệu là một yêu cầu cơ bản của nhiều ứng dụng. • Các nhà phát triển phần mềm có thể cần truy cập công việc lẫn nhau, có thể chia sẻ các công cụ mà chỉ cần một phiên bản của thư viện, trình dịch... 14 • Khi cài đặt một công cụ mới, tất cả các thành viên đều có thể sử dụng tài nguyên mới này. • Các ứng dụng thương mại thường sử dụng một CSDL cho nhiều người truy nhập phân tán. Để việc chia sẻ tài nguyên có hiệu quả, mỗi tài nguyên cần được quả lý bởi một chương trình. Chương trình này cung cấp các giao diện cho phép tài nguyên được truy cập, thay đổi an toàn và thống nhất. Quản trị tài nguyên là một chương trình quản lý một số tài nguyên thuộc một loại nào đó. Mỗi loại tài nguyên cần được quản lý một cách khác nhau. Tuy vậy, cũng có một số yêu cầu chung. Ví dụ như hệ thống đặt tên cho mỗi lớp tài nguyên, việc ánh xạ tên lên địa chỉ vật lý, việc giải quyết các truy nhập đồng thời để đảm bảo tài nguyên có tính thống nhất. Có hai mô hình cho hệ thống các chương trình quản lý tài nguyên: mô hình Client-Server và mô hình hướng đối tượng. • Mô hình Client-Server: Có một số các tiến trình quản lý một loại tài nguyên nhất định, và một số tiến trình khác thực hiện những công việc đòi hỏi phải truy cập các tài nguyên đó. Mô hình này có thể áp dụng vào phạm vi rộng với cả phần cứng và phần mềm. • Mô hình đối tượng: Các tài nguyên chung được nhìn như một đối tượng. Các đối tượng được định danh và có thể dịch chuyển trên mạng. Khi một chương trình cần sử dụng tài nguyên thì chương trình đó gửi một thông báo chứa yêu cầu tới đối tượng. Thông báo này được dịch tới một thủ tục của đối tượng, thực hiện các thao tác cần thiết và một thông báo khác sẽ được gửi lại chương trình chứa kết quả. Một vấn đề của mô hình này là việc mã các 15 thủ tục của đối tượng luôn đi kèm phần dữ liệu của dối tượng, do đó đối tượng không di chuyển được. 1.2.2. Tính mở Tính mở là đặc tính của một hệ thống có thể được mở rộng. Một hệ thống có tính mở đối với phần cứng: ví dụ có thể thêm thiết bị ngoại vi, bộ nhớ trong - hoặc phần mềm: có thể bổ sung một vài tính năng của hệ thông, giao thức trao đổi hoặc một vài dịch vụ chia sẻ tài nguyên. Nói chung, tính mở của hệ phân tán được đánh giá bằng khả năng thêm dịch vụ chia sẻ tài nguyên mà không phải bỏ hoặc thay đổi các dịch vụ sẵn có. Tính mở được thực hiện bằng cách công bố các giao diện cho các nhà phát triển phần mềm. Trong lịch sử, các hệ thống máy tính thường là các hệ thống đóng. UNIX là một ví dụ về hệ thống mở cho các nhà phát triển ứng dụng, cho các nhà sản xuất phần cứng và các nhà quản lý hệ thống, cho các nhà sản xuất phần mềm và người sử dụng. Tính mở trong hệ phân tán đặt nền tảng trên cơ chế chung trao đổi thông tin giữa các tiến trình, các giao diện được công bố để truy nhập tài nguyên. Hệ phân tán mở có thể được cấu thành từ phần cứng và phần mềm không đồng nhất, từ nhiều nhà cung cấp khác nhau. Tuy nhiên các thành phần của hệ thống cần phải được kiểm tra kỹ trước khi đưa vào sử dụng. 1.2.3. Tính tương tranh Khi nhiều chương trình được thực hiện trên một máy tính, chúng ta nói là chúng được thực hiện đồng thời. Nếu máy tính đó chỉ có một bộ vi xử lý, việc thực hiện các tiến trình được tiến hành theo từng phần của các tiến trình. Nếu số lượng bộ vi xử lý nhiều hơn số tiến trình, mỗi mội tiến trình sẽ được 16 thực hiện bằng một bộ vi xử lý và khi đó các tiến trình được thực hiện đồng thời thật sự. Trong hệ phân tán xây dựng trên cơ sở chia sẻ tài nguyên, việc thực hiện đồng thời có thể xảy ra trong các trường hợp sau: • Nhiều người sử dụng cùng gọi nhiều lệnh, tương tác với nhiều ứng dụng. Trường hợp này xảy ra khi có một hay nhiều tiến trình phục vụ cho mỗi người sử dụng. • Nhiều tiến trình phục vụ cùng chạy trả lời các lời gọi khác nhau từ các tiến trình khác nhau. Trường hợp này xảy ra khi tồn tại tiến trình phục vụ cho việc quản lý nhiều tài nguyên sẽ được xếp hàng, có thể sẽ được thực hiện lần lượt, có thể một số sẽ được thực hiện song song bởi nhiều phiên bản của các tiến trình. Khi có nhiều tiến trình truy cập dữ liệu của cùng một tài nguyên, tiến trình quản lý tài nguyên cần phải tiến hành đồng bộ các yêu cầu, đảm bảo chúng không bị mâu thuẫn và vẫn giữ được các lợi thế của tính tương tranh. Tóm lại, tương tranh và thực hiện song song phát sinh một các tự nhiên trong các hệ phân tán, xuất phát từ các hoạt động riêng rẽ của người sử dụng, tính độc lập của tài nguyên, tính phân tán của các tiến trình phục vụ. Điều này cho phép việc xử lý có thể được tiến hành trên các máy tính khác nhau. Truy cập và cập nhật đồng thời tài nguyên phải được đồng bộ. 1.2.4. Khả năng hỗ trợ tải thay đổi Hệ phân tán phải có khả năng làm việc tốt với những qui mô rất khác nhau của tải. Số lượng người truy cập có thể là thay đổi trong phạm vi rất lớn. Hệ phân tán đơn giản nhất cũng phải bao gồm hai máy nối lại với nhau, trong khi có các hệ thống lớn nối nhiều mạng cục bộ với nhau với số lượng hàng 17 nghìn máy. Trong hàng nghìn máy đó, có lúc rất nhiều máy cùng sử dụng một tài nguyên nào đó, có những lúc lại không có máy nào sử dụng tài nguyên đó cả. Các dịch vụ phân tán phải có khả năng hoạt động trong điều kiện khác nhau như vậy. Trong hệ phân tán, những tài nguyên được coi là giới hạn trong các hệ thống tập trung sẽ trở thành vô hạn như: Số bộ vi xử lý, bộ nhơ, các kênh vào ra... Tuy nhiên, một số tài nguyên khác sẽ bị giới hạn nếu trong quá trình thiết kế, tính tương tranh không được quan tâm tới. Khi thiết kế hệ thống phân tán, không một tài nguyên nào được thiết kế để cung cấp trong giới hạn. Khi nhu cầu sử dụng tăng lên, cần phải có khả năng mở rộng hệ thống để đáp ứng nhu cầu mới. Ví dụ: khi số yêu cầu sử dụng file tăng lên, hệ thống cần phải có khả năng thêm một máy phục vụ file mới để giảm bớt tải cho máy phục vụ file cũ. Một vài file có thể bị truy cập một cách thương xuyên thì chúng cần phải được nhân thành nhiều bản, lưu tại nhiều máy khác nhau. 1.2.5. Tính chất chịu lỗi Các hệ thống máy móc đôi khi cũng hỏng hóc. Khi có sự cố xảy ra, hệ thống có thể dừng hoạt động, có thể đưa ra các kết quả không chính xác. Như vậy để có thể hoạt động có hiệu quả, hệ phân tán cần phải có khả năng phát hiện lỗi và xử lý lỗi. Nói chung, khi có lỗi xảy ra, người sử dụng thường không có kiến thức đủ để biết thực sự có chuyện gì xảy ra với hệ thống. Mọi cố gắng của người sử dụng để giải quyết sự cố thường không có kết quả. Như vậy hệ phân tán cần xử lý lỗi sao cho người sử dụng không phải quan tâm đến việc có lỗi hay không có lỗi xảy ra, đồng thời vẫn thu được kết quả đúng chỉ trong trường hợp hệ không tự giải quyết được lỗi thì mới báo cho người sử dụng. 18 Để đạt được mục đích trên, có thể sử dụng phần cứng dự trữ khi có sự cố xảy ra. Ví dụ để đảm bảo dịch vụ thư điện tử vẫn hoạt động bình thường khi máy phục vụ thư điện tử bị lỗi, có thể bố trí một máy khác đưa vào thay thế. Phương pháp này đòi hỏi chi phí đầu tư ban đầu tương đối lớn. Có thể giảm bớt chi phí này bằng cách dùng một máy dự trữ cho nhiều chức năng khác nhau. Một cách khác để đảm bảo tính chịu lỗi cho hệ thống là sử dụng phần mềm phục hồi lại hệ thống. Nếu hệ thống hoặc một phần của hệ thống hoặc một thao tác nào đó bị sự cố, sẽ có phần mềm để loại bỏ những thay đổi do sự có gây ra, khởi động lại thao tác từ điểm chưa có sự cố. Muốn làm như vậy phần mềm này phải theo dõi hệ thống trong suốt thời gian khi chưa xảy ra sự cố. 1.2.6. Tính trong suốt Tính trong suốt là sự che giấu tính phân tán của các thành phần trong hệ phân tán với người sử dụng. Người sử dụng không cần biết các tài nguyên mà mình đang sử dụng nằm ở đâu, phân tán hay tập trung, mà sử dụng như một tài nguyên lôgic duy nhất của hệ phân tán. Có các loại trong suốt sau: • Trong suốt về truy cập: Các đối tượng thông tin có thể truy cập bằng cùng một phương pháp như nhau. • Trong suốt về địa điểm: Tài nguyên có thể được truy cập mà không cần biết vị trí địa lý của chúng. • Trong suốt về tương tranh: Tài nguyên có thể được sử dụng bởi nhiều người sử dụng khác nhau mà người sử dụng không biết 19 được sự tồn tại của người sử dụng khác đang truy cập vào tài nguyên đó. • Trong suốt sao lưu: Một số tài nguên có thể được sao lưu để làm tăng tốc độ phục vụ của hệ thống. Quá trình sao lưu này phải được giấu kín hoàn toàn khỏi sự nhận biết của người sử dụng. • Trong suốt khi có lỗi xảy ra: Khi có lỗi xảy ra trong hệ thống, việc xử lý lỗi cũng cần được che giấu. Người sử dụng chỉ biết là yêu cầu của mình thực hiện được (trong trường hợp hệ phân tán xử lý thành công các sự số) hoặc không xử lý được (nếu hệ phân tán không xử lý được một trong các sự cố). 1.3. Mô hình truyền thông phân tán Môi trường truyền thông giữa các tiến trình được phân thành hai loại: hệ truyền thông điệp và hệ chia sẻ bộ nhớ chung. Trong hệ truyền thông điệp các tiến trình gửi và nhận thông điệp thông qua các kênh tin. Mỗi kênh tin kết nối định hướng hay không định hướng giữa hai tiến trình. Kiểu kết nối giữa các kênh tin hình thành cấu trúc mạng của hệ thống. Như vậy có thể biểu diễn cấu trúc mạng của hệ thống dưới dạng đồ thị với mỗi tiến trình tại một nút và mỗi kênh truyền thông được biểu diễn bằng một cung. Ta có thể hình thức hoá hệ truyền thông điệp dưới dạng toán học như sau. Hệ thống được biểu diễn bằng một đồ thị định hướng liên thông GT = (NT, DT) với tập các nút NT biểu diễn tập các tiến trình, tập các cung định hướng DT biểu diễn các kênh truyền thông định hướng. Mỗi tiến trình tại mỗi nút được mô hình hoá dưới dạng máy trạng thái hữu hạn hay vô hạn. Với một tiến trình t ký hiện Int là tập các cung đi vào t và Outt là tập các cung đi ra khỏi t. Các kênh thuộc tập Int là các kênh từ đó t nhận tin còn các kênh thuộc 20 tập Outt là các kênh mà t gửi tin lên đó. Những gì diễn ra trong hệ thống được mô hình dưới dạng các sự kiện. Có hai dạng sự kiện trong hệ truyền thông điệp: sự kiện tính toán compt (tiến trình t xử lý thông điệp nhận được) và sự kiện gửi thông điệp dels,t,m (tiến trình s gửi thông điệp m tới tiến trình t). Trong hệ chia sẻ bộ nhớ, các tiến trình truyền thông thông qua một vùng nhớ chia sẻ chung chứa tập các biến chia sẻ còn được gọi là các thanh ghi (registers). Các biến này gồm nhiều loại khác nhau. Mỗi loại xác định các toán tử có thể thực hiện trên biến cũng như giá trị mà nó trả về. Loại thông dụng nhất là thanh ghi đọc / ghi với toán tử là các lệnh đọc ghi thông thường. Một số loại khác hỗ trợ các toán tử mạnh hơn như đọc / biến đổi / ghi, kiểm tra / thiết lập, so sánh / tráo đổi… Các thanh ghi còn có thể được phân loại tiếp theo số tiến trình có thể truy cập trong mỗi lần thực hiện của một toán tử. Hệ chia sẻ bộ nhớ được hình thức hoá dưới dạng một tập n các tiến trình và một tập m các thanh ghi. Giống như hệ truyền thông điệp mỗi tiến trình được mô hình hoá dưới dạng máy trạng thái hữu hạn hay vô hạn. Mỗi thanh ghi được xếp vào một loại nhất định phụ thuộc vào giá trị thanh ghi có thể nhận, các toán tử thao tác trên thanh ghi, các giá trị thanh ghi trả về và giá trị mới của thanh ghi sau khi thực hiện toán tử. Sự kiện là sự kiện tính toán của mỗi tiến trình gồm ba loại: tiến trình truy cập thanh ghi để thực hiện một toán tử dựa trên trạng thái hiện tại của tiến trình, toán tử được thực hiện trên thanh ghi, biến đổi trạng thái tiến trình dựa trên trạng thái hiện tại và giá trị trả về từ toán tử thực hiện trên thanh ghi. Trong phần lý thuyết từ đây trở đi ta sẽ chỉ nói về mô hình truyền thông qua việc gửi và nhận thông điệp hay các hệ thống truyền thông điệp. Cách thức chia sẻ một vùng nhớ có những hạn chế về mặt vật lý tác động tới hiệu năng của hệ thống nên sẽ không được nói đến ở đây (như ví dụ về giai đoạn 21 phát triển đầu của xử lý song song sử dụng kỹ thuật chia sẻ bộ nhớ). Mô phỏng hệ chia sẻ bộ nhớ bằng hệ truyền thông điệp có thể thực hiện rất dễ dàng. 1.4. Mô hình đồng bộ và không đồng bộ Quan tâm chính của ta trong phần này là tìm hiểu quan hệ giữa giải thuật phân tán với yếu tố thời gian. Tính toán thực hiện tại mỗi nút của G sẽ được xem xét dưới góc độ các đặc trưng thời gian. Có hai mô hình thời gian: mô hình đồng bộ và mô hình không đồng bộ. 1.4.1. Mô hình không đồng bộ Hệ thống là không đồng bộ nếu không có giới hạn trên cho trước với thời gian truyền thông điệp hay thời gian giữa hai bước tính toán liên tiếp của một tiến trình. Một ví dụ điển hình có thể tìm thấy qua Internet khi thư điện tử (thông điệp) có thể mất nhiều ngày để chuyển tới địa chỉ nhận trong khi thông thường chỉ mất vài giây. Giới hạn trên này biến đổi theo thời gian do đó tốt hơn ta nên thiết kế giải thuật độc lập với các thông số thời gian. Hệ không đồng bộ có hai đặc trưng sau. • Mỗi tiến trình có một thời gian địa phương riêng độc lập với nhau thông qua đồng hồ địa phương. • Độ trễ mỗi thông điệp phải chịu khi truyền giữa các nút lân cận là hữu hạn nhưng bất định. Một điểm quan trọng cần nêu ra đây là các khái niệm sử dụng để mô tả tính toán của một nút trong giải thuật Task_t hoàn toàn phù hợp với các giả thiết của mô hình không đồng bộ vì ngoại trừ thời điểm tính toán lúc đầu tính toán sau đó chỉ có thể diễn ra khi tiến trình nhận được thông điệp. Hơn nữa không có thông tin về thời gian nào được sử dụng trong giải thuật. 22 Dựa trên giải thuật Task_t, tính toán tại một nút trong mô hình không đồng bộ có thể mô tả qua các hành động ban đầu (nếu nút bắt đầu tính toán và gửi thông điệp tự phát) và các hành động khi nhận thông điệp với một số điều kiện nào đó được thoả mãn. Mô tả này được thực hiện trong giải thuật A_Template dưới đây. Giải thuật này là khuôn hình cho tất cả các giải thuật được nghiên cứu dưới mô hình không đồng bộ do đó nó còn được gọi là giải thuật không đồng bộ. Giải thuật mô tả tính toán tại nút ni. N0 thuộc tập N là tập không rỗng các nút có thể gửi tin lúc đầu. Đồ thị được giả định là định hướng. Giải thuật A_Template: Biến: Biến sử dụng bởi ni và giá trị ban đầu. Thông điệp nhận: tini = nil Hành động nếu ni thuộc N0: tính toán gửi thông điệp trên mỗi cung của một tập con (có thể rỗng) của Outi Thông điệp nhận: tini với nguồn(tini) = ck thuộc Ini với 1 ≤ k ≤ |Ini| Hành động khi có Bk: tính toán của Outi gửi tin trên mỗi cung của một tập con (có thể rỗng) Bảng 1.1. Giải thuật A_Template Giải thuật bao gồm một chuỗi các cặp thông điệp nhận / hành động. Mỗi cặp cho một dạng thông điệp cụ thể. Mỗi hành động trong giải thuật được giả thiết là hành động nguyên tử tức là hoàn thành trước khi xuất hiện bất cứ ngắt nào. Thông điệp nhận được ký hiệu bởi tini. Nếu ni thuộc N0 ta có 23 tini = nil do lúc đầu không có thông điệp nào kích hoạt hành động của ni. Khi có một thông điệp tới ta giả định ni biết thông điệp này từ đâu tới qua cung mà nó nhận tin. Mô hình không đồng bộ rất phù hợp với tính chất các hệ phân tán ta đã nhắc đến trong phần một. Tuy nhiên chính tính không đồng bộ lại giải thích cho phần lớn khó khăn gặp phải khi thiết kế giải thuật phân tán cho mô hình không đồng bộ. Vì vậy thông thường người ta dùng các mô hình ít thực tế hơn trong đó các đặc trưng thời gian của G hoàn toàn ở vào thái cực ngược lại. Đó là mô hình đồng bộ. 1.4.2. Mô hình đồng bộ Trong hệ thống đồng bộ tiến trình thực hiện theo nhịp đồng hồ. Quá trình chạy được chia thành các chu kỳ. Trong mỗi chu kỳ mỗi tiến trình có thể gửi thông điệp tới các tiến trình xung quanh, mọi thông điệp đều được nhận và mỗi tiến trình tính toán dựa trên thông điệp vừa nhận được. Mô hình đồng bộ có hai đặc trưng sau: • Mọi nút có một thời gian chung thông qua đồng hồ chung của toàn hệ tạo ra những xung cố định. • Độ trễ mỗi thông điệp phải chịu khi truyền giữa các nút lân cận là khác không nhưng nhỏ hơn độ dài xung của đồng hồ. Độ dài xung sinh ra bởi đồng hồ không nhất thiết phải như nhau do đó có thể lấy độ trễ tin phải chịu khi truyền giữa các nút lân cận là giới hạn dưới cho khoảng thời gian này. Cũng như giải thuật không đồng bộ giải thuật phân tán trong mô hình đồng bộ còn được gọi là giải thuật đồng bộ. Tại xung s = 0 các nút thuộc tập N0 gửi thông điệp lên một số cung đi ra khỏi nút này. Với xung s > 0 mọi 24 thông điệp được gửi tại xung s-1 được giả định là đã nhận được và mọi nút trong N có thể thực hiện tính toán và gửi thông điệp. Có một giả thiết được hiểu ngầm trong phần mô tả trên. Đó là giả thiết tính toán tại mỗi nút trong khoảng đồng hồ chung được xem bằng không. Nếu không có giả thiết này khoảng đồng hồ chung sẽ không đủ cho cả tính toán địa phương tại mỗi nút cũng như truyền thông điệp giữa các nút bởi thời gian truyền thông điệp được lấy gần bằng độ dài xung. Tập N0 có thể gửi thông điệp tại xung s = 0 trong mô hình đồng bộ giống như tập N0 gửi thông điệp tự phát trong mô hình không đồng bộ. Tuy nhiên có một khác biệt căn bản giữa hai mô hình. Trong mô hình đồng bộ các nút có thể thực hiện tính toán mà không cần nhận thông điệp vì mỗi nút được kích hoạt bởi đồng hồ chung không phải bởi thông điệp nhận được. Do đó về mặt nguyên lý giải thuật đồng bộ không cần thông điệp và các nút có thể tiếp tục tính toán ngay cả khi N0 = 0. Điều này không khác gì n nút hoàn toàn độc lập chạy song song với nhau nên để tránh nghiên cứu một hệ thống như vậy ta vẫn cần có ít nhất một thông điệp được gửi đi ban đầu bởi một nút nào đó. Mô hình đồng bộ thoạt nhìn có vẻ không thực tế nhưng đôi khi lại rất có ích khi thiết kế giải thuật phân tán không chỉ vì đơn giản hoá thiết kế mà còn đưa lại một giải thuật không đồng bộ hiệu quả hơn. Có thể thấy mỗi giải thuật không đồng bộ về bản chất là một giải thuật đồng bộ. Một giải thuật thiết kế cho mô hình không đồng bộ cũng hoạt động tốt dưới giả thiết của mô hình đồng bộ với một độ dài xung lựa chọn thích hợp. Điều này xuất hiện do điều kiện truyền thông diễn ra trong mô hình đồng bộ chỉ là một trong vô số các khả năng mà mô hình không đồng bộ cho phép. Dưới đây là giải thuật S_Template mô tả giải thuật đồng bộ sẽ được sử dụng như một khuôn hình cho các giải thuật đồng bộ cụ thể. Với s > 0 và ni 25 thuộc N, TINi(s) là một tập rỗng (nếu s=0) hoặc tập thông điệp nhận được bởi ni trong khoảng s-1 (cũng có thể rỗng). Giải thuật này được thực hiện cho đồ thị định hướng. Giải thuật S_Template: Biến: Biến sử dụng bởi ni và giá trị ban đầu. Thông điệp nhận: s = 0 TINi(0) = 0 Hành động nếu ni thuộc N0: tính toán gửi thông điệp trên mỗi cung của một tập con (có thể rỗng) của Outi Thông điệp nhận: s > 0, TINi(1), …, TINi(s) với nguồn(tin) = ck thuộc Ini với 1 ≤ k ≤ |Ini| cho tin thuộc tập tin nhận được. Hành động: tính toán gửi thông điệp trên mỗi cung của một tập con (có thể rỗng) của Outi Bảng 1.2. Giải thuật S_Template Tương tự như giải thuật A_Template giải thuật S_Template cũng bao gồm một tập các cặp thông điệp nhận / hành động. Thông điệp nhận bây giờ bao gồm cả xung đồng hồ. Những xung này kích hoạt hoạt động của các nút. 26 Tính nguyên tử của các hành động đến từ đặc trưng của mô hình đồng bộ vì không có nút nào thực hiện hơn một hành động trong một chu kỳ. Mỗi nút trong khoảng s có thể truy cập tới mọi thông điệp trong các tập TINi(1), …, TINi(s). 1.5. Thất bại tiến trình Những bài toán phối hợp đòi hỏi các tiến trình đồng thuận trên một tiến trình hành động chung. Những bài toán như vậy rất dễ thực hiện trên những hệ thống đáng tin cậy ta đã nói ở trên. Tuy nhiên trong thực tế hiếm khi các thành phần khác nhau lúc nào cũng chạy đúng. Do đó ta cần khảo sát hệ thống khi có xuất hiện thất bại tiến trình. Khảo sát trong phần này xem xét hệ phân tán dưới mô hình đồng bộ bởi dưới mô hình không đồng bộ người ta đã chứng minh được rằng bài toán đồng thuận là không giải được. Thất bại trên kênh tin sẽ không được xét đến. Mọi kênh được giả định đáng tin cậy cũng như mọi thông điệp đã gửi đều được nhận. Người ta thường xét hai loại thất bại tiến trình: thất bại do bộ vi xử lý và thất bại do mạng. 1.5.1. Thất bại do bộ vi xử lý Thất bại do bộ vi xử lý xuất hiện khi hoạt động của bộ vi xử lý trả lại kết quả không mong đợi. Có ba loại thất bại được xếp tăng dần theo độ khó phát hiện là: thất bại phá huỷ, chậm và byzantine. • Thất bại phá huỷ: Trong mô hình thất bại dừng, hoặc do bộ vi xử lý đang trong thời gian thực hiện một công việc khác và cũng đang tham gia vào một giao thức phân tán, hoặc do bộ vi xử lý có lỗi và không bao giờ trả lời các yêu cầu gửi đến. Trong thất bại phá huỷ tiến trình thực hiện thất bại và ngừng hoạt động nhưng không có các hoạt động lỗi như nhận thông điệp chưa hề được gửi. Mô hình 27 hình thức của hệ đồng bộ khi có sự xuất hiện của thất bại phá huỷ được biến đổi lại như sau. Ta đưa vào tham số sống f là số cực đại tiến trình có thể thất bại. Hệ thống như vậy sẽ được gọi là hệ thống có độ tin cậy f. Như thế sẽ tồn tại một tập F các tiến trình lỗi với nhiều nhất là f tiến trình. Tập F có thể khác nhau trong mỗi lần thực hiện do đó ta không thể biết trước tiến trình nào là tiến trình lỗi. Mỗi chu kỳ của giải thuật chứa chính xác một sự kiện tính toán cho mỗi tiến trình không thuộc F và nhiều nhất một sự kiện tính toán cho mỗi tiến trình thuộc F. Hơn nữa nếu một tiến trình thuộc F không có sự kiện tính toán nào tại một chu kỳ nào đó thì nó cũng không có sự kiện tính toán nào trong các chu kỳ tiếp theo. Trong chu kỳ cuối cùng khi một tiến trình lỗi còn thực hiện tính toán nó nhận được một tập ngẫu nhiên các thông điệp là tập con của tập các thông điệp gửi đến nó. • Thất bại chậm: Thất bại này là do bộ vi xử lý có lỗi hoặc thực hiện các thủ tục chậm. Đôi khi không phải do bộ vi xử lý bị lỗi mà do đang thực hiện, nhưng đã bị đánh dấu lỗi do đó không còn được tham gia vào hệ thống. Rất khó để phát hiện thất bại chậm trong hệ phân tán. • Thất bại byzantine: Trong thất bại byzantine tiến trình lỗi có thể hoạt động tuỳ tiện. Thất bại này nghiêm trọng hơn so với thất bại phá huỷ. Tương tự như mô hình hoá hệ đồng bộ khi có thất bại phá huỷ ta cũng đưa vào tham số f là số cực đại tiến trình có thể thất bại. Trong mỗi lần thực hiện của hệ thống có thất bại byzantine với độ tin cậy f tồn tại một tập F nhiều nhất f tiến trình là các tiến trình lỗi. Tại mỗi bước tính toán của tiến trình lỗi 28 trạng thái tiếp theo của tiến trình cũng như nội dung thông điệp được gửi đến các tiến trình xung quanh hoàn toàn tuỳ tiện, không bị ràng buộc. Do đó một tiến trình lỗi có thể gửi các thông điệp khác nhau tới các tiến trình khác nhau hay thậm chí không gửi thông điệp nào mà lẽ ra nó phải gửi cùng một thông điệp tới mọi tiến trình. Trong một số trường hợp tiến trình nhận có thể phát hiện tiến trình gửi thất bại dựa vào định dạng của thông điệp. Khó khăn chủ yếu nảy sinh khi thông điệp nhận được hợp lệ nhưng thực tế là sai. Một tiến trình byzantine có thể mô phỏng một tiến trình thất bại khi không gửi thông điệp nữa từ một chu kỳ nào đó. 1.5.2. Thất bại do mạng Thất bại do mạng ngăn cản các bộ vi xử lý có thể kết nối với nhau. Thất bại do mạng có thể do mạng không đáng tin cậy, có thể do việc chuyển các message lỗi, có thể là thứ tự của các message đến không đúng thứ tự. Chúng ta cần các giao thức cho phép tạo các liên kết đáng tin cậy mặc dù có thể có nhiều message cùng được gửi trên một đường truyền. Nếu một liên kết bị lỗi có thể gây ra một vài vấn đề như sau: • Các lỗi gây liên kết một chiều: Một thất bại mạng có thể sinh ra một topo kết nối lỗi. Ví dụ như một bộ vi xử lý A có thể gửi một message nhưng bộ vi xử lý B không thể nhận được message. Một bộ vi xử lý C lại có thể nói chuyện với cả bộ vi xử lý A và B. Lỗi này gây ra một lỗi giống như thất bại chậm. • Các lỗi gây ngăn cách mạng: Một lỗi gây ngăn các mạng xuất hiện khi một phần của mạng bị tách ra khỏi phần còn lại. Ví dụ A 29
- Xem thêm -

Tài liệu liên quan