1. Trang chủ
  2. » Luận Văn - Báo Cáo

Áp dụng thuật toán duy trì gắn bó, tránh bế tắc và thiếu thốn vô hạn hai pha trong hệ đa Server

39 356 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 39
Dung lượng 905,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Hiện nay, với sự phát triển nhanh chóng của công nghệ và đặc biệt là số lượng người sử dụng ngày càng tăng, hệ phân tán trở nên phù hợp hơn cho đại bộ phận các ứng dụng như: hệ kinh doanh từ xa (HKDTX), hệ đăng ký giữ chỗ của các công ty hàng không, hệ quản lý và đăng ký tua du lịch từ xa… Đối với các hệ thống thông tin lớn, cơ sở dữ liệu không chỉ được lưu trữ và quản lý bởi các Server độc lập mà thường được phân tán trên nhiều Server và phân bố ở các vị trí địa lý khác nhau. Hệ thống cho phép xử lý đa truy cập đồng thời và cho phép đăng ký từ xa. Một trong những lợi ích của việc phân tán dữ liệu như vậy là nhằm phân chia yêu cầu xử lý dữ liệu cho nhiều máy nhằm làm tăng năng lực xử lý thông tin của hệ thống và đặc biệt, nó đảm bảo yêu cầu toàn dữ liệu vì dữ liệu được lưu trữ dự phòng ở nhiều nơi khác nhau. Tuy nhiên, hệ thống trình bày như trên là hệ thống đa server mang tính phức tạp. Một trong các yêu cầu đặt ra cho hệ thống là phải đảm bảo gắn bó dữ liệu giữa các server đồng thời không làm ảnh hưởng đến năng lực xử lý của hệ thống. Do đó, vấn đề gắn bó dữ liệu trong các hệ thống phân tán là một trong những vấn đề đang được các nhà nghiên cứu quan tâm. Có nhiều giải pháp trình bày phương pháp đảm bảo đặc tính gắn bó, trong đó có giải thuật hai pha tuyến tính và giải thuật MAONT (Model Avanced of Open Nested Transaction) . Báo cáo này sẽ trình bày một giải thuật được phát triển trên cơ sở danh sách di chuyển và minh họa thuật toán bằng chương trình đăng ký tua du lịch. Nội dung cụ thể là: 1. Tên đề tài : Hãy viết chương trình áp dụng thuật toán duy trì gắn bó, tránh bế tắc và thiếu thốn vô hạn (2 pha) trong hệ đa Server; 2. Xây dựng hệ thống 3 Server và CSDL (tr. 270 trở đi); 3. Xây dựng chương trình thực hiện cập nhật trong điều kiện đảm bảo gắn bó thông tin; 4. Viết chương trình quan sát quá trình nêu trên. Trong phạm vi của báo cáo này, chương trình được cài đặt demo trên 3 server, tuy nhiên chúng ta có thể cài đặt trên hệ thống gồm nhiều server. Chương trình cũng bao gồm một công cụ tạm gọi là monitor nhằm giám sát việc cập nhật dữ liệu giữa các server, nhằm đánh giá tính gắn bó dữ liệu giữ liệu giữa các server với nhau. Cuối cùng, tập thể nhóm 12 mong muốn nhận được các ý kiến đóng góp, bổ sung của quý Thầy và các bạn. Xin chân thành cảm ơn

Trang 2

Giảng viên : PGS.TS LÊ VĂN SƠN Học viên : Thái Thị Bích Thủy

Nguyễn Thị Diễm Thúy Lớp : Cao học KHMT khóa 11

Đà Nẵng, tháng 03/2010

Trang 3

LỜI MỞ ĐẦU

-  Hiện nay, với sự phát triển nhanh chóng của công nghệ và đặc biệt là số lượng người sử dụng ngày càng tăng, hệ phân tán trở nên phù hợp hơn cho đại bộ phận các ứng dụng như: hệ kinh doanh từ xa (HKDTX), hệ đăng ký giữ chỗ của các công ty hàng không, hệ quản lý và đăng ký tua du lịch từ xa… Đối với các hệ thống thông tin lớn, cơ sở dữ liệu không chỉ được lưu trữ và quản lý bởi các Server độc lập

 -mà thường được phân tán trên nhiều Server và phân bố ở các vị trí địa lý khác nhau

Hệ thống cho phép xử lý đa truy cập đồng thời và cho phép đăng ký từ xa Một trong những lợi ích của việc phân tán dữ liệu như vậy là nhằm phân chia yêu cầu xử

lý dữ liệu cho nhiều máy nhằm làm tăng năng lực xử lý thông tin của hệ thống và đặc biệt, nó đảm bảo yêu cầu toàn dữ liệu vì dữ liệu được lưu trữ dự phòng ở nhiều

nơi khác nhau.

Tuy nhiên, hệ thống trình bày như trên là hệ thống đa server mang tính phức tạp Một trong các yêu cầu đặt ra cho hệ thống là phải đảm bảo gắn bó dữ liệu giữa các server đồng thời không làm ảnh hưởng đến năng lực xử lý của hệ thống Do đó, vấn đề gắn bó dữ liệu trong các hệ thống phân tán là một trong những vấn đề đang được các nhà nghiên cứu quan tâm Có nhiều giải pháp trình bày phương pháp đảm bảo đặc tính gắn bó, trong đó có giải thuật hai pha tuyến tính và giải thuật MAONT (Model Avanced of Open Nested Transaction) Báo cáo này sẽ trình bày một giải thuật được phát triển trên cơ sở danh sách di chuyển và minh họa thuật toán bằng chương trình đăng ký tua du lịch Nội dung cụ thể là:

1 Tên đề tài : Hãy viết chương trình áp dụng thuật toán duy trì gắn bó,

tránh bế tắc và thiếu thốn vô hạn (2 pha) trong hệ đa Server;

2 Xây dựng hệ thống 3 Server và CSDL (tr 270 trở đi);

Nhóm 12 – Đề số 22 Trang 3

Trang 4

3 Xây dựng chương trình thực hiện cập nhật trong điều kiện đảm bảo gắn

bó thông tin;

4 Viết chương trình quan sát quá trình nêu trên.

Trong phạm vi của báo cáo này, chương trình được cài đặt demo trên 3 server, tuy nhiên chúng ta có thể cài đặt trên hệ thống gồm nhiều server Chương trình cũng bao gồm một công cụ tạm gọi là monitor nhằm giám sát việc cập nhật dữ liệu giữa các server, nhằm đánh giá tính gắn bó dữ liệu giữ liệu giữa các server với nhau

Cuối cùng, tập thể nhóm 12 mong muốn nhận được các ý kiến đóng góp, bổ sung của quý Thầy và các bạn

Xin chân thành cảm ơn!

NHÓM 12

Trang 5

Computer A

A22

I Kỹ thuật lập trình phân tán đối tượng trong java

I.1 Lập trình phân tán đối tượng

Thông thường các chương trình của chúng ta được viết dưới dạng thủ tục hay hàm gọi Mã lệnh của hàm hay thủ tục được nạp thẳng vào kí ức và thực thi ngay tên máy cục bộ Đối với các hàm (hoặc đối tượng) thư viện như System.out.println () chẳng hạn bạn thường không phải quan tâm đến cách thức mà hàm thư viện này được cài đặt Điều mà hầu hết các lập trình viên quan tâm là đối số truyền cho hàm

và kết quả trả về Vậy thì có cách nào nạp nội dung của hàm hay đối tượng ở một máy nào đó và gọi chúng từ một máy khác hay không? Đây chính là nội dung của lập trình phân tán mã lệnh Việc triệu gọi phương thức từ xa – là cách thức giao tiếp giữa các đối tượng Java có mã lệnh cài đặt (bao gồm phương thức và thuộc tính) nằm trên các máy khác nhau có thể triệu gọi lẫn nhau

Hình 1 - Mô hình triệu gọi các đối tượng từ xa

Trên máy A các đối tượng A1, A2 gọi phương thức của nhau được gọi là triệu gọi phương thức cục bộ (local methol Invoke), đây là cách mà lập trình hướng đối

Nhóm 12 – Đề số 22 Trang 5

Trang 6

tượng truyền thống vẫn sử dụng Tương tự, tương tác giữa C1, C2, C3 là tương tác cục bộ.

Tuy nhiên, đối tượng của Java có thể gọi phương thức của đối tượng nằm trên một máy khác dựa vào giao thức triệu gọi từ xa RMI (như A1 gọi C1, A2 gọi B1, C3 gọi B1)

I.2 Gọi phương thức từ xa và các vấn đề phát sinh

Việc gọi phương thức của các đối tượng từ xa thoạt nhìn có vẻ đơn giản nhưng thực

tế lại phức tạp hơn triệu gọi phương thức cục bộ Các đối tượng trên hai máy khác nhau hoạt động trên hai tiến trình (hay không gian địa chỉ) khác nhau cho nên việc tham chiếu biến, địa chỉ đối tượng là hoàn toàn khác nhau Ví dụ, khi bạn truyền con trỏ cho một phương thức ở xa, trên máy bạn con trỏ này tồn tại nhưng trên máy khác (nơi có đối tượng thực thi phương thức) sẽ không có bất kỹ vùng nhớ nào được cấp phát dành cho con trỏ Lời gọi các phương thức cục bộ thường luôn trả về kết quả trong khi lời gọi các phương thức từ xa phải thông qua kết nối mạng và luôn có thể

bị cắt ngang do mạng gặp sự cố

Đối với lời gọi hàm trên máy cục bộ, các tham số truyền cho hàm thường được dặt vào ngăn xếp (stack) trong khi tham số truyền cho phương thức của đối tượng ở xa phải được đóng gói và chuyển qua mạng để đến được với phương thức thực sự

I.3 Các lớp trung gian (stub và skeletion)

Để giải quyết các vấn đề trên, đối tượng Java trên hai máy khác nhau không gọi nhau trực tiếp mà thông qua lớp trung gian Lớp trung gian này tồn tại ở cả hai phía: máy khách (nơi gọi phương thức của các đối tượng ở xa) và máy chủ (nơi đối tượng thực sự được cài đặt để thực thi mã lệnh của phương thức) Phía máy khách lớp trung gian này được gọi là stub (lớp móc), phía máy chủ lớp trung gian này được

Trang 7

gọi là skeletion (lớp nối) Ta hình dung stub và skeletion là hai người môi giới giúp các đối tượng ở xa giao dịch với nhau.

Hình 2 - Gọi các phương thức của các đối tượng thông qua lớp trung gian

Ví dụ bạn có đối tượng C1 được cài đặt chạy trên máy C Trình biên dịch Java sẽ giúp bạn tạo ra hai lớp trung gian C1_Skel và C1_stub Lớp C1_Stub sẽ được đem

về máy computer A Khi A1 trên máy Computer A gọi C1 nó sẽ chuyển lời gọi đến lớp C1_Stub C1_Stub chịu trách nhiệm đóng gói tham số, chuyển tham số quan mạng đến máy Computer C trên máy Computer C lớp nối C1-Skel sẽ nhận tham số chuyển vào vùng không gian địa chỉ tương thích với đối tượng C1 sau đó gọi phương thức tương ứng Kết quả nếu có do phương thức của đối tượng C1 trả về sẽ được lớp C1_Skel đóng gói trả ngược về cho C1_stub C1-Stub chuyển giao kết quả cuối cùng lại cho A1 Bằng cơ chế này, A1 luôn nghĩ rằng nó đang hoạt động trực tiếp với đối tượng C1 ngay trên máy cục bộ Hơn nữa, nhờ sự giúp đỡ của lớp trung gian C1-Stub, khi kết nối mạng gặp sự cố lớp trung gian Stub sẽ luôn biết cách

Nhóm 12 – Đề số 22 Trang 7

Computer A

A1A2

ske l

Trang 8

thông báo lỗi đến đối tượng A1.

Thực tế làm cách nào A1 tham chiếu được đến C1, một khi không có lớp C1 nào được cài đặt ở máy A? C1_Stub trên máy A chỉ làm lớp nền trung gian chuyển đổi tham số và thực hiện các giao thức mạng, nó không phải là hình ảnh của đối tượng C1 Để làm được điều này, đối tượng C1 cần cung cấp một giao tiếp interface tương ứng với các phương thức cho phép đối tượng A1 gọi nó trên máy A Chúng ta sẽ tiếp tục làm sáng tỏ vấn đề hơn trong quá trình xây dựng một ứng dụng RMI thật sự sau đây

I.4 Bộ đăng ký (rmiregistry), classpath và codebase

Với ví dụ trên bạn đã biết đến bộ đăng kí rmiregistry dùng để tiếp nhận đăng kí tên của đối tượng Hầu như trước khi máy khách muốn sử dụng được các phương thức

và được gọi đối tượng ở xa nó phải liên lạc với rmiregistry để lấy về tham chiếu đến đối tượng trên máy chủ Dịch vị dăng kí và truy tìm tên đối tượng (các bước , ,

 ở hình 4) được Java quản lý bằng các hàm giao tiếp API JNDI (Java Naming Directory Interface) Các hàm JNDI ở máy khách (Naming.lookup()) sẽ liên lạc với rmiregistry để nhận về tham chiếu của đối tượng trong khi các hàm JNDI ở máy chủ (Naming.bind()) có nhiệm vụ đăng kí tên của đối tượng với rmiregistry

Trong Windows khi mở cửa sổ DOS-Prompt để chạy một chương trình Java, về lý thuyết chương trình này được xem là chạy độc lập trên một máy (máy ảo) Do đó nếu 3 chương trình Java chạy trên 3 cửa sổ DOS-Prompt khác nhau bạn có thể xem đây là kết quả kiết xuất từ hai máy tính khác nhau Hay nói cách khác dựa vào máy

ảo Java bạn có thể tuỳ thích tạo ra các máy tính ảo để giao tiếp với nhau giả lập mạng Dữ liệu chuyển từ máy ảo Java này sang máy ảo Java khác hoàn toàn tương

tự quá trình giao tiếp và chuyển dữ liệu giữa hai máy tính kết nối vật lý thực sự trên mạng

Trang 9

Hình 4 - Cơ chế làm việc của các máy ảo Java khi đăng kí và gọi đối tượng giữa

trình khách và trình chủTuy nhiên cũng có một số hạn chế đó là tất cả các máy ảo Java đều dùng chng một địa chỉ IP vật lý trong khi hai máy ảo Java chạy trên hai máy tính vật lý khác nhau

sẽ có địa chỉ IP khác nhau Các máy ảo Java chạy trên cùng một máy vật lý sẽ sử dụng cùng thư viện Java, cùng một chính sách bảo mật, điều này làm bạn rất dễ nhầm tưởng là chương trình chạy tốt trên cả hai phía máy khách và máy chủ Trong khi thực tế nếu máy khách và máy chủ dùng hai thư viện Java (cũng như biến môi trường CLASSPATH) khác nhau hoặc chính sách bảo mật khác nhau sẽ làm cho kết nối từ phía máy khách và máy chủ không thực hiện được Bạn nên lưu ý đến vấn đề này khi cài đặt các ứng dụng Java trên các máy mạng vật lý thực sự

I.4.1 Đăng ký rmiregistry

Hình 5 trình bày cơ chế làm việc của trình khách và trình chủ trên máy ảo Java khi đăng kí và truy xuất rmiregistry

Trang 10

Hình 5 Cơ chế hoạt động của các máy ảo Java trên mô hình máy mạng vật lý thật sự

 Đối tượng trên máy ảo Java B dùng hàm Naming.bind() hoặc Naming.rebind() để đăng kí đối tượng với chương trình rmiregistry đang chạy trên máy ảo Java A

 Chương trình khách chạy trên máy ảo Java dùng hàm Naming.lookup() để yêu cầu bộ quản lý rmiregistry trên máy ảo A trả về bộ tham chiếu đến đối tượng

 Bộ quản lý rmiregistry trên máy ảo A trả về tham chiếu đến đối tượng đang tồn tại trên máy ảo B

 Chương trình khách chạy trên máy ảo Java sử dụng tham chiếu do hàm Naming.lookup() trả về để truy và gọi phương thức của đối tượng đang chạy trên máy ảo B từ xa

Như đã nêu, cả 3 máy ảo đều có thể xem như 3 máy vật lý kết nối trực tiếp với nhau qua mô hình mạng Tuy nhiên nếu 3 máy ảo này chạy trên 3 máy khác nhau chúng

sẽ khác nhau số đại chỉ IP Do cùng chạy trên một máy vật lý nên cả 3 máy ảo này

sẽ mang cùng một địa chỉ IP cục bộ 127.0.0.1 (hay localhost)

Thực tế với mô hình trên, nếu hoạt động thật sự qua mạng thì chỉ có thể tách ra làm

2 máy vật lý chứ không thể là 3 Máy ảo A chạy chương trình rmiregistry và máy ảo

B chạy phần cài đặt của đối tượng phải chạy trên cùng một máy vật lý Tức là máy

ảo A và B phải trùng địa chỉ IP của nhau Hiện tại, Java không cho phép rmiregistry chạy trên máy vật lý khác với nơi mà đối tượng đang hoạt động

Hình 5 là cơ chế hoạt động của các máy ảo Java trên mô hình máy mạng vật lý thật

sự Máy khách có địa chỉ mạng IP là 172.16.11.13 truy xuất đến bộ đăng kí

Trang 11

rmiregistry của máy chủ có địa chỉ IP là 172.16.11.12 Trên máy chủ 172.16.11.12 chúng ta có cả 2 máy ảo Java cùng hoạt động Máy ảo Java A chạy chương trình rmiregistry trong khi đó máy ảo Java B chạy phần cài đặt của đối tượng.

I.4.2 Thiết lập và cài đặt hệ đa server dùng Java và RMI

Mô hình xử lý thông tin có thể được trình bày ngắn gọn như sau: Khi Server1 nhận yêu cầu cần xử lý từ Client gửi đến , Server1 xử lý một phần, và có thể xảy ra việc thiếu dữ liệu và cần lấy dữ liệu từ Server2 để xử lý tiếp hay gửi phần xử lý còn lại cho Server2 để xử lý giúp Tất cả các công việc trao đổi dữ liệu hay chia xẻ tác

vụ giữa hai hay nhiều Server này diễn ra đều thực hiện được nhờ vào giải pháp xử lý

đa Server và xử lý song song thông qua giao thức triệu gọi từ xa (RMI mà Java cung cấp) và các tác tử (Agent) điều kiển được tạo ra Một ví dụ cụ thể cho các bước xây dựng một giải pháp xử lý đa Server dùng RMI + Xây dựng Interface cho các phương thức triệu gọi từ xa cho Server1 (Server1.java) import java.rmi.Remote; import java.rmi.RemoteException; public interface Server1 extends java.rmi.Remote{

public abstract java.lang.Stringget

Information(java.lang.String s )

throws java.rmi.RemoteException; }

+ Xây dựng lớp thực thi cho các phương thức triệu gọi từ xa cho Server1 (Server1Impl.java) import java.io.*; import java.rmi.*; public class Server1Impl extends java.rmi.server.UnicastRemoteObject implements Server1{

public Server1Impl()

throws java.rmi.RemoteException {

java.lang.System.out.println("Starting Server1 ");}

static String nameserver2 = null;

// Khai báo biến để giữ tên của Server2 static Server2 ser2=null ;

Nhóm 12 – Đề số 22 Trang 11

Trang 12

//khai báo đối tượng của Server2 public synchronized java.lang.String getInformation(java.lang.String s ) {

System.out.println("Goi Server2 lam giup ");

}catch (Exception e){

System.out.println("connect with server2 err "+ e);

} return s1;}

public static void main(java.lang.String args[ ] ) {

java.lang.System.out.println("Creating Registry Server1 "); try {//Server1 tạo ra đối tượng server1impl và đăng ký nó để sẵn sàng cho việc gọi từ xa

// lay ten cua server2 giữ đấy để khi cần thì gọi

DataInputStream inname = new DataInputStream(System.in);

java.lang.System.out.print("Nhap Ten Cua Server Thu 2 Vao:"); nameserver2=inname.readLine();}

catch(java.lang.Exception exception) {

Trang 13

java.lang.System.out.println("Create registry failed " +

exception.getMessage()); java.lang.System.exit(0);}}}

+ Xây dựng Interface cho các phương thức triệu gọi từ xa cho Server2 (Server2.java) import java.rmi.Remote; import java.rmi.RemoteException; public interface Server2 extends java.rmi.Remote {

public abstract java.lang.String receive(java.lang.String s) throws java.rmi.RemoteException;}

+ Xây dựng lớp thực thi cho các phương thức triệu gọi từ xa cho Server2 (Server2Impl.java) import java.io.*; import java.rmi.*; public class Server2Impl extends java.rmi.server.UnicastRemoteObject implements Server2 {

public Server2Impl()throws java.rmi.RemoteException {

java.lang.System.out.println("Starting Server2 ");} public synchronized java.lang.String receive(java.lang.String s){

java.lang.String s1 = "Yeu cau cua Client duoc Server1 va anh Server2 xu ly xong";

System.out.println("Server2 da xu ly yeu cau cua Server1 gui den ");

return s1; }

public static void main(java.lang.String args[ ] ) {

java.lang.System.out.println("Creating Registry Server2 ");

try { //Server2 tạo ra đối tượng server2impl và đăng ký nó để sẵn sàng cho việc gọi từ xa

Nhóm 12 – Đề số 22 Trang 13

Trang 14

catch(java.lang.Exception exception) {

java.lang.System.out.println("Create registry failed " + exception.getMessage());

java.lang.System.exit(0); } } }

+ Xây dựng chương trình Client để gọi thực hiện (Client.java) import java.io.*; import java.rmi.*;

public class Client {

static Server1 obj = null;

public static void main (String argv[]){

try{ obj = (Server1)Naming.lookup("rmi://"+ argv[0] +":1999/Server1");

java.lang.String message = obj.getInformation(“Help me !”) ; System.out.println(message);

Trang 15

II THUẬT TOÁN TWO PHASE COMMIT (2PC)

II.1 Thuật toán Linear Two Phase Commit – TPC

Chúng ta giả thiết rằng, tại vị trí nguồn của giao dịch một tiến trình thực hiện các thao tác của nó, tiến trình này được gọi là điều phối viên (Coordinator) Điều phối viên trao đổi với các thành viên (Participant) tại những vị trí có tham gia vào việc thực hiện các thao tác của giao dịch

Có một thứ tự giữa các vị trí trong hệ thống dành cho việc giao tiếp Chúng ta hãy giả thiết rằng thứ tự giữa các vị trí có tham gia vào việc thực hiện một giao dịch là 1, 2,…, N với điều phối viên là vị trí đầu tiên trong thứ tự này Nghi thức 2PC được cài đặt bằng cách trong pha đầu tiên truyền tới [ tính từ điều phối viên (số 1) đến N]

và trong pha thứ hai truyền ngược từ N về điều phối viên Thuật toán 2PC tuyến tính hoạt động theo cách sau:

Điều phối viên gửi thông báo prepare đến thành viên 2 Nếu thành viên 2 chưa sẵn sàng ủy thác giao dịch, nó gửi thông báo biểu quyết hủy bỏ vote-abort (VA) và giao dịch bị hủy tại thời điểm này (hủy bỏ đơn phương của 2) Ngược lại nếu thành viên

2 đồng ý ủy thác, nó gửi thông báo vote-commit(VC) cho thành viên 3 rồi chuyển sang trạng thái READY Quá trình này tiếp tục cho đến khi một biểu quyết ủy thác đến được thành viên N Đến đây kết thúc pha đầu tiên Nếu N quyết định ủy thác, nó gửi cho thành viên N-1 thông báo global-commit (GC); bằng không, nó gửi một thông báo toàn cục global-abort(GA) Theo đó các thành viên sẽ chuyển sang trạng thái thích hợp (COMMIT hoặc ABORT) và làm lan truyền thông báo trở về điều phối viên

II.2 Nghi thức ủy thác 2 pha 2PC

Ủy thác hai pha (Two-phasde commit, 2PC) là một nghi thức đơn giản và tinh tế đảm bảo hành động ủy thác nguyên tử cho các giao dịch phân tán Khẳng định rằng

Nhóm 12 – Đề số 22 Trang 15

Trang 16

tất cả các vị trí liên đới trong việc thực hiện giao dịch phân tán đều đồng ý ủy thác giao dịch trước khi tác dụng của nó được đưa vào CSDL thực sự.

Khởi đầu, điều phối viên ghi mẫu begin_commit vào nhật ký của nó và gửi thông báo chuẩn bị (prepare) đến tất cả các thành viên và chuyển sang trạng thái wait Khi một thành viên nhận được thông báo chuẩn bị nó kiểm tra xem nó có thể uỷ thác được giao dich hay không Nêu được nó ghi một mẫu tin ready vào nhật ký vào gửi thông báo biểu quyết uỷ thác (vote-commit) đến điều phối viên rồi chuyển sang trạng thái read Nếu không nó chuyển nó ghi mẫu tin abort và gửi thông báo vote-abort đến điều phối viên Nếu quyết định của vị trí này là huỷ bỏ thì nó có thể quên giao dịch đi vì quyết định của nó được dùng như một phủ quyết (huỷ bỏ đơn phương) Sau khi nhận được sự đáp, nó quyết định hay huỷ bỏ giao dịch Nếu có một thành viên gửi phủ quyết thì điều phối viên sẽ phải huy bỏ toàn bộ giao dịch

Vì thế nó ghi mẫu tin Abort vào nhật ký, gửi thông báo global-abort đến tất cả các thành viên, và chuyển sang trạng thái ABORT , ngược lại nó ghi mẩu tin commit, gửi global-commit tới tất cả các thành viên rối chuyển sang trang thái commit Các thành viên sẽ ủy thác hoặc hủy bỏ giao dịch tùy theo hướng dẫn của điều phối viên

và gửi thông báo ACK Và điều phối viên kết thúc giao dịch bằng cách ghi mẫu tin end-of-transaction vào nhật ký

Quy tắc ủy thác toàn cục (global commit rule)

- Nếu có một thành viên biểu quyết hủy bỏ giao dịch, điều phối viên sẽ đưa

ra quyết định hủy bỏ toàn cục

- Nếu tất cả mọi thành viên đều biểu quyết ủy thác giao dịch , thì điều phối viên sẽ đưa ra quyết định ủy thác toàn cục

Trang 17

II.2.1 Cấu trúc 2PC tập quyền

Một lựa chọn khác là nghi thực 2PC tuyến tính (linear 2PC) Còn được gọi là nghi thức 2PC lồng trong đó các thành viên có thể trao đổi với nhau Có một thứ tự giữa các vị trí trong hệ thống dành cho việc giao tiếp Gia thiết thứ tự giữa các vị trí có tham gia vào việc thực hiện một giao dịc là 1,…,với điều phối viên là vị trí đầu tiên trong giao dịch này

Nhóm 12 – Đề số 22 Trang 17

Trang 18

Nghi thức 2PC được cài đặt bằng cách trong pha đầu tiên truyền tới (tính từ điều phối viên số 1 đến N và trong pha thứ 2 truyền ngược lại từ N đến điều phối viên hoạt động theo các nguyên tắc sau: Điều phối viên gửi thông báo prepare đến thành viên 2 Nếu thành viên 2 chưa sẵn sàng ủy thác giao dịch nó gửi thông báo quyết định hủy bỏ Vote-abort (VA) đến thành viên 3 và giao dịch bị hủy bỏ tại thời điểm này (hủy bỏ đơn phương của 2) Ngược lại nó gửi thông báo vote-commit (VC) cho thành viên thứ 3 chuyển sang trạng thái Ready Quá trình tiếp tục cho đến khi biều quyết ủy thác được đến thành viên thứ N Đến đây kết thúc pha đầu tiên Nếu biểu quyết ủy thác, nó gửi trở lại cho N-1 thành viên thông báo global-commit (GC) Bằng không nó gửi thông báo hủy bỏ toàn cục global- abort (GA) Theo đó các thành viên sẽ chuyển sang trạng thái thíc hợp (commit hoặc abort) và làm lan truyền thông báo tới điều phối viên như hình sau.

Trang 19

II.2.2 Cấu trúc 2PC phân quyền

Tất các các thành viên có thể độc lập đưa ra quyết định kết thúc ứng với giao dịch

cụ thể loại bỏ nhu cầu cần phải có pha thứ 2 của nghi thức bởi vì các thành viên có thể đưa ra quyết định dựa vào chính nó hoạt động như sau điều phố viên gửi thông báo prepare đến tất cả các thành viên sau đó mỗi thành viên gửi quyết định của mình đến các thành viên khác ( và đến điều phối viên ) bằng thông báo Vote-commit hoặc Vote-abort Một thành viên đợi thông báo từ tất cả các thành viên khác rồi ra quyết định kết thúc theo theo đúng quy tắc ủy thác toàn cục

Thuật toán2PC Cho điều phối viên (coordinator)

declare-var

msg:message

Nhóm 12 – Đề số 22 Trang 19

Ngày đăng: 12/11/2014, 08:51

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] PGS.TS. Lê Văn Sơn, Hệ tin học phân tán, Nhà xuất bản Đại học quốc gia TP. Hồ Chí Minh Sách, tạp chí
Tiêu đề: Hệ tin học phân tán
Nhà XB: Nhà xuất bản Đại học quốc gia TP. Hồ Chí Minh
[2] Nguyễn Thúc Hải, Mạng máy tính và các hệ thống mở, Nhà xuất bản Giáo dục Sách, tạp chí
Tiêu đề: Mạng máy tính và các hệ thống mở
Tác giả: Nguyễn Thúc Hải
Nhà XB: Nhà xuất bản Giáo dục
[3] Nguyễn Phương Lan, Hoàng Đức Hải, Java lập trình mạng, Nhà xuất bản Giáo dục, 2001 Sách, tạp chí
Tiêu đề: Java lập trình mạng
Tác giả: Nguyễn Phương Lan, Hoàng Đức Hải
Nhà XB: Nhà xuất bản Giáo dục
Năm: 2001
[4] Lê Văn Sơn, Nguyễn Xuân Tiến, Nghiên cứu phát triển giải pháp hiệu quả khai thác luật kết hợp trong cơ sở dữ liệu phân tán Sách, tạp chí
Tiêu đề: Nghiên cứu phát triển giải pháp hiệu quả khai thác luật kết hợp trong cơ sở dữ liệu phân tán
Tác giả: Lê Văn Sơn, Nguyễn Xuân Tiến
[5] Lê Văn Sơn, Phạm Đình Hân, Phát triển giải pháp kỹ thuật đảm bảo gắn bó dữ liệu cho các hệ thống thông tin đào tạo trên mạng Internet/Intranet Khác

HÌNH ẢNH LIÊN QUAN

Hình 1 -  Mô hình triệu gọi các đối tượng từ xa - Áp dụng thuật toán duy trì gắn bó, tránh bế tắc và thiếu thốn vô hạn hai pha trong hệ đa Server
Hình 1 Mô hình triệu gọi các đối tượng từ xa (Trang 5)
Hình 2 - Gọi các phương thức của các đối tượng thông qua lớp trung gian - Áp dụng thuật toán duy trì gắn bó, tránh bế tắc và thiếu thốn vô hạn hai pha trong hệ đa Server
Hình 2 Gọi các phương thức của các đối tượng thông qua lớp trung gian (Trang 7)
Hình 4 - Cơ chế làm việc của các máy ảo Java khi đăng kí và gọi đối tượng giữa - Áp dụng thuật toán duy trì gắn bó, tránh bế tắc và thiếu thốn vô hạn hai pha trong hệ đa Server
Hình 4 Cơ chế làm việc của các máy ảo Java khi đăng kí và gọi đối tượng giữa (Trang 9)
Bảng 1. Các loại sự cố và nguyên nhân gây ra sự cố - Áp dụng thuật toán duy trì gắn bó, tránh bế tắc và thiếu thốn vô hạn hai pha trong hệ đa Server
Bảng 1. Các loại sự cố và nguyên nhân gây ra sự cố (Trang 25)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w