BỘ GIÁO DỤC & ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
TIỂU LUẬN MÔN HỌC
Giáo viên hướng dẫn:
Học viên:
Lớp: !""
#$%&'()*("(
LỜI MỞ ĐẦU
Trong những năm gần đây, các thành tựu mới nhất của hệ thống tin học về phần
cứng, phần mềm và các hệ quản trị cơ sở dữ liệu ổn định, tin cậy đã góp phần đáng kể
cho sự phát triển của xã hội nói chung và ngành Công nghệ Thông tin nói riêng. Một
trong những thành tựu nổi bật đó, phải nói đến các phần mềm cơ sở nhằm vào, trực tiếp
và trước hết, tăng khả năng điều hành, khai thác hiệu quả tất cả các tài nguyên của hệ.
Sự phát triển của CNTT-TT và đặc biệt là Internet, “thế giới là phẳng”. Do đó, tất
cả mọi vấn đề, dù khoảng cách có xa đến đâu đi chăng nữa nhưng nếu chúng ta ngồi
trước máy vi tính có nối mạng thì hầu như mọi thứ đang hiện hữu tại máy tính của chúng
ta. Chúng ta có thể quản lý nhân sự của một công ty đa quốc gia, chúng ta có thể ngồi ở
nhà để đăng ký đặt chỗ vé máy bay, mua một món hàng tại siêu thị… Để có được sự tiện
nghi này đối với người sử dụng thì nó đặt ra nhiều vấn đề rất lớn và rất phức tạp cho các
nhà nghiên cứu và phát triển các hệ thống này. Các câu hỏi lớn đặt ra một cách cụ thể
như: “làm thế nào để đảm bảo rằng không có ít nhất 2 người cùng đăng ký 01 vé máy bay
trong hệ thống đăng ký vé? Làm thế nào để biết được có còn một mặt hàng nào đó trong
hệ thống siêu thị?”…
Ngày nay hầu hết các ứng dụng tin học đều được xây dựng để thực hiện trên mạng
máy tính, các ứng dụng client-server đang ngày càng được sử dụng phổ biến. Nhưng khi
quy mô và mức độ của các ứng dụng tăng lên và yêu cầu về chất lượng, tốc độ xử lý và
độ phức tạp cũng tăng theo thì trên thực tế, một xu hướng kỹ thuật mới ra đời – xu hướng
phân tán các thành phần tạo nên hệ tin học theo hướng tiếp cận nơi sử dụng và sản xuất
thông tin. Song để khai thác có hiệu quả toàn hệ, vấn đề quan trọng hàng đầu cần phải
tính đến là các tài nguyên nói chung, đặc biệt là tài nguyên thông tin nói riêng và chiến
lược khai thác, sử dụng chúng một cách tối ưu nhất.
Sau khi được học hai môn “Hệ tin học phân tán” và môn “Lập trình mạng máy
tính” dưới sự giảng dạy nhiệt tình của Thầy PGS.TS Lê Văn Sơn, chúng tôi đã tiếp thu
được các kiến thức của hai môn học này. Với sự hướng dẫn tận tình của Thầy Lê Văn
Sơn và sự giúp đỡ của các bạn, chúng tôi đã hoàn thành được cơ bản yêu cầu của bài toán
đề ra.
Vấn đề truy cập, xử lý thông tin và đảm bảo sự gắn bó dữ liệu trên hệ phân tán đã
được nghiên cứu trong hàng loạt các công trình. Trong phạm vi tiểu luận của mình, tôi
thực hiện những vấn đề sau:
Phần I: Cơ sở lý thuyết, bao gồm: Hệ phân tán, Cơ sở dữ liệu trong hệ phân tán
và Sự gắn bó dữ liệu trong cơ sở dữ liệu phân tán.
Phần II: Bài tập ứng dụng. Trình bày về thuật toán Lamport và xây dựng chương
trình sắp xếp các thông điệp đến dự trên đồng hồ Lamport.
Mặc dầu đã hết sức cố gắng, nhưng do điều kiện thời gian và khả năng còn nhiều
hạn chế, hơn nữa tiểu luận môn học này là một lĩnh vực tri thức rộng lớn, đa dạng và rất
phức tạp nên chắc chắn không thể không tránh khỏi những sai sót và khiếm khuyết. Rất
mong nhận được sự góp ý, phê bình, đánh giá của Thầy giáo và của các bạn trong lớp để
nhóm chúng tôi rút kinh nghiệm và hoàn thiện tốt hơn trong thời gian tới.
Chúng tôi xin gửi lời cảm ơn chân thành đến Thầy giáo Lê Văn Sơn đã cung cấp,
định hướng và hướng dẫn chúng tôi trong suốt thời gian qua để nhóm chúng tôi hoàn
thành tiểu luận này.
Mọi sự đóng góp và phê bình xin gửi về:
1. Lê Tự Quốc, Trường Cao đẳng Lương thực- Thực phẩm Đà Nẵng.
Địa chỉ: 101B Lê Hữu Trác-Quận Sơn Trà-Tp.Đà Nẵng
Điện thoại: 0914 .112.319
Email:+,-.+/01
2. Lê Trọng Hiền, Trường Đại học Công nghiệp Tp. HCM – Cơ sở Miền trung.
Địa chỉ: 978 Quang trung- Tp. Quảng Ngãi.
Điện thoại: 0914.043.456
Email:,+0,.1
#$%&'$"*()*("(
Nhóm học viên thực hiện
2+3453/6789 :5
PHẦN I: CƠ SỞ LÝ THUYẾT
CHƯƠNG I: HỆ PHÂN TÁN, MÔ HÌNH CLIENT/SERVER
I. Hệ phân tán.
I.1. Khái niệm.
Hệ tin học phân tán là hệ thống đa dạng, phức tạp về mặt cấu trúc, đang được các
chuyên gia công nghệ thông tin quan tâm nghiên cứu với hàng loạt các công trình
được công bố.
Cho đến nay, xét trên các phương diện khác nhau, người ta có thể có các định
nghĩa khác nhau về hệ tin học phân tán, nhưng phổ biến hơn cả là định nghĩa được
phát biểu như sau :
Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System) là hệ
thống xử lý thông tin bao gồm nhiều bộ xử lý (hoặc bộ vi xử lý) phân bố ở những vị trí
địa lý khác nhau, được liên kết với nhau thông qua phương tiện truyền thông (viễn
thông) dưới quản lý thống nhất của một hệ thống điều khiển.
Qua đó ta có thể xem hệ phân tán như là một tập hợp các bộ xử lý (hoặc bộ vi xử
lý) với bộ nhớ và đồng hồ nhịp độc lập. Điều này đồng nghĩa với việc các bộ xử lý
không sử dụng chung bộ nhớ và đồng hồ. Như vậy, mỗi một hệ xử lý thông tin thành
phần của hệ phân tán bao gồm một hay nhiều bộ xử lý và bộ nhớ cục bộ. Trong hệ
phân tán, hệ xử lý thông tin thành phần phải được thiết kế sao cho về cấu trúc, số
lượng và dung lượng có thể cho phép thực hiện một cách trọn vẹn các chức năng mà
nó phải đảm nhận.
Hệ tin học phân tán thực hiện hàng loạt các chức năng phức tạp, nhưng cơ bản
nhất là đảm bảo cung cấp cho người sử dụng khả năng truy cập có kết quả đến các loại
tài nguyên vốn có và rất đa đạng của hệ thống như là những tài nguyên dùng chung.
Việc định nghĩa các tài nguyên của hệ như là tài nguyên dùng chung sẽ mang
đến cho người sử dụng những tiện ích và đem lại cho hệ những hiệu năng tốt trong
khai thác ứng dụng.
Những ưu điểm căn bản của việc sử dụng chung tài nguyên:
- Tăng tốc độ bình quân trong tính toán - xử lý.
- Cải thiện tình trạng sẵn sàng của các loại tài nguyên dùng chung.
- Tăng độ an toàn và an ninh cho dữ liệu.
- Đảm bảo tính vẹn toàn của thông tin do giải quyết được vấn đề gắn bó
dữ liệu.
- Cho phép đa dạng hoá các loại hình dịch vụ tin học nói chung.
%;5! <
2+3453/6789 :5
I.2. Các đặc điểm của hệ phân tán.
Các đặc điểm và yêu cầu được liệt kê dưới đây (bảng I.1 và I.2) giúp ta nhận biết
những đặc trưng cơ bản và phân biệt hệ tin học phân tán với các hệ tin học khác, đồng
thời cung cấp thông tin cơ bản trong quá trình phân tích, thiết kế, xây dựng và đánh giá
một hệ thống nào đó.
TT Các yêu cầu cơ bản cần nghiên cứu giải quyết
1 Lập trình và thực hiện cho hệ thống đa truy cập, ngẫu nhiên, số lượng lớn
2 Định danh định danh cho các đối tượng qua hệ thống viễn thông
3 Cấu trúc lập trình được cho các truy vấn đa chiều và đáp ứng lại truy vấn
4 Trình tự và đồng bộ các tiến trình hoạt động
5 Gắn bó thông tin (Coherence) và vấn đề nhiều bản sao
6 Cung cấp từ xa các tài nguyên dùng chung (tài nguyên găng)
7 Vấn đề xử lý - tính toán đồng thời trong hệ
8 Vấn đề đa Server và hệ điều khiển - giám sát của người quản trị hệ thống
9 Vấn đề tin cậy và hiệu năng hệ thống
Bảng 1 Các yêu cầu cơ bản của hệ phân tán
TT Đặc điểm
1 Thời gian truyền thông tin trong hệ không giống nhau
2 Các thông điệp có thể bị mất trong quá trình truyền thông tin
3 Các thông điệp có thể được truyền kép
4 Việc phát và nhận thông điệp đối với toàn hệ là ngẩu nhiên
5 Việc cập nhật thông tin (chương trình và dữ liệu) dẫn đến hệ rơi vào trạng thái
thiếu gắn bó
6 Hệ có thể rơi vào trạng thái bế tắc, tắt nghẽn đường truyền, chờ vô hạn và
thiếu thốn tài nguyên
7 Một (hay nhiều) máy tính cấu thành của hệ phân tán có thể bị sự cố
Bảng I.2 Đặc điểm cơ bản của hệ phân tán
II. Tiến trình trong hệ phân tán
II.1. Khái niệm
Tiến trình (Process) là khái niệm khá quen thuộc và là đối tượng nghiên cứu của
hệ điều hành. Trong hệ phân tán ta chỉ xem xét và bổ sung đặc điểm hoạt động và truy
cập của các tiến trình có nhu cầu cung cấp tài nguyên dùng chung.
Các đặc điểm đó là:
- Các tiến trình được hình thành và điều khiển bởi hệ điều khiển duy nhất
có nghĩa là nếu trong các thành phần tham gia hệ phân tán như mạng máy
tính, các hệ tập trung, có thể có các hệ điều hành riêng với các tiến trình
%;5! =
2+3453/6789 :5
riêng của mình, thì chúng cũng bị phái sinh lại trong nội dung của tiến trình
mới, phân tán.
- Tiến trình là chương trình hay đoạn chương trình đang hoạt động trong
hệ phân tán là đối tượng chủ yếu có nhu cầu tài nguyên phần cứng hay phần
mềm để thực hiện các lệnh của mình. Tiến trình cần tài nguyên để phát triển.
Về nguyên tắc, tất cả các tiến trình và tài nguyên được cung cấp là các đối
tượng ở xa.
- Các nguyên lý của hệ tập trung có thể nghiên cứu và áp dụng cho các
tiến trình phân tán như dự phòng và chống bế tắc, chống xung đột,
- Khi tiến trình được cung cấp tài nguyên có thể nó thực hiện ngay, nếu nó
là đối tượng được gửi đến từ trước trên bộ xử lý (máy) cục bộ hoặc phải gửi
đối tượng là tiến trình qua hệ thống đường truyền. Việc cung cấp tài nguyên
cho các tiến trình có thể thực hiện theo 2 cách trong hệ phân tán :
o Thông qua hệ thống cung cấp chung cho toàn hệ như
Controllor/Allocator.
o Thông qua Allocator cục bộ trên Server/Workstation bằng cách tham
chiếu vào bảng trạng thái, ảnh của thông tin toàn cục.
II.2. Tầm quan trọng của việc đồng bộ hóa tiến trình trong hệ phân tán.
Đồng bộ hoá tiến trình được hiểu như là quá trình điều khiển tạo nên sự ăn khớp
với nhau giữa tất cả các tiến trình khác nhau giúp cho hệ phân tán hoạt động nhịp
nhàng, tin cậy và phòng tránh các sự cố kỹ thuật.
Trong tất cả các hệ thống tin học, ta cần phải nghiên cứu các công cụ đủ mạnh và
hiệu quả để có thể đồng bộ hóa các tiến trình. Tính cấp thiết về mặt nguyên lý và kỹ
thuật của vấn đề này thể hiện ở hai nguyên do cơ bản sau đây :
Các tiến trình kể cả các tiến trình xuất phát từ các ứng dụng độc lập muốn truy
cập vào các tài nguyên với số lượng rất hạn chế hay truy cập vào thông tin dùng chung
cùng một lúc gây nên hiện tượng truy cập tương tranh.
Tương tranh là nguyên nhân chính của các xung đột giữa các tiến trình muốn
truy cập vào các tài nguyên dùng chung.
Các tiến trình của cùng một hệ ứng dụng hoạt động theo kiểu hợp lực để giải
quyết các bài tóan đặt ra và cho kết quả nhanh chóng nhất. Điều này cho phép tăng
hiệu năng sử dụng thiết bị và hiệu quả hoạt động của chương trình.
Hợp lực là nguyên nhân chính của sự tác động tương hỗ được lập trình giữa các
tiến trình nhằm cho phép chúng tham gia vào các hành động chung.
Sự tương tranh và hợp lực giữa các tiến trình đòi hỏi phải có trao đổi thông tin qua lại
với nhau. Trong các hệ thống tập trung, điều đó được thực hiện nhờ thuật toán loại trừ tương
hỗ thông qua các biến cùng tác động trong một vùng nhớ chung.
%;5! >
2+3453/6789 :5
III. Mô hình CLIENT/SERVER
III.1. Giới thiệu
Khi nói tới lập trình mạng ta thường nghĩ đến cách trao đổi giữa một chương
trình phục vụ (Server) với một hay nhiều chương trình khách (Client). Chương trình
khách gửi một yêu cầu tới cho chương trình phục vụ, và chương trình này xử lý dữ liệu
để trả lời cho chương trình khách. Như vậy, chương trình khách muốn gửi được yêu
cầu thì trước hết phải tìm cách kết nối với Server. Server có thể chấp nhận hay từ chối
sự kết nối này. Một khi sự kết nối đã được thiết lập thì Client và Server trao đổi với
nhau thông qua Sockets. Các lớp trong gói java.net cung cấp các phương thức để kết
nối mạng và trao đổi tin giữa các máy với nhau theo mô hình Client/Server. Mặt khác,
trên Internet nhiều máy tính sử dụng các giao thức để trao đổi với nhau.
Socket chính là lớp (trừu tượng) thực hiện sự trao đổi giữa Server và Client.
Java xem sự trao đổi giữa Server và Client dựa trên Socket gần giống như các thao tác
vào/ra (I/O), nghĩa là các chương trình có thể đọc, ghi vào Socket dễ dàng như chúng
đọc, ghi lên tệp dữ liệu. Lớp Server tạo ra sự kết nối từ máy Client tới Server thông
qua các phương thức tạo lập đối tượng.
Lớp ServerSocket dùng để tạo kết nối từ Server tới các máy Client. Đối tượng
của lớp này được tạo ra trên Server và lắng nghe những kết nối từ máy Client theo
cổng xác định. Server phải chạy thường trực trước khi Client bắt đầu thực hiện.
Server chờ sự yêu cầu kết nối của Client. Để thiết lập được một Server, ta phải tạo ra
một đối tượng, ví dụ ServerSocket của lớp ServerSocket, gắn nó với một cổng nào đó
và lắng nghe xem có Client nào cần kết nối hay không. Các Socket được xác định
tương ứng với địa chỉ của máy và cổng.
ServerSocket serverSocket = new ServerSocket(port);
Trong đó port là số hiệu của cổng nằm giữa 0 và 1023. Cổng cho phép trao đổi
tin giữa hai chương trình. Địa chỉ của cổng là số 16 bit và thường phụ thuộc vào các
giao thức ứng dụng. Thông thường, giao thức FTP sử dụng cổng 21, telnet dùng cổng
23, các dịch vụ E-mail (SMTP) sử dụng cổng 25, Web Server chạy trên cổng 80.
Sau khi đối tượng serverSocket được tạo ra, Server có thể sử dụng câu lệnh sau
để lắng nghe yêu cầu kết nối của Client.
Socket connectToServer = new Socket(ServerName,port);
serverName là tên của máy chủ trên Interrnet hoặc địa chỉ IP, xác định duy nhất một
máy tính trên toàn mạng Internet (cả thế giới). IP là giao thức được sử dụng để gửi tin
từ một máy tới máy khác trên mạng Internet. IP phải xác định được máy gửi và máy
nhận thông qua địa chỉ IP. Một địa chỉ IP gồm bốn số nguyên nằm giữa 0 và 255, phân
cách với nhau bằng dấu ‘.’. Ví dụ:
Socket connectToServer = new Socket(“129.74.250.103”, 8000);
Vì địa chỉ IP thường rất khó nhớ nên thay vì địa chỉ IP người ta thường sử dụng
tên miền dịch vụ, ví dụ Gophe.nd.edu. tương ứng với địa chỉ IP nêu trên.
%;5! ?
2+3453/6789 :5
Ngày nay, trên Internet hai máy có thể trao đổi với nhau phần lớn đều dựa trên
qui ước hay giao thức chuẩn TCP/IP.
Sau khi sự kết nối đã được Server chấp nhận, việc trao đổi giữa Client và
Server giống như trên các luồng I/O. Ví dụ:
InputStream isFromServer = connectToServer. getInputStream();
OutputStream osToServer = connectToServer. getOutputStream();
Tạo ra luồng vào/ra: isFromServer để đọc từ Server và osToServer để ghi vào
(gửi cho) Server. Hai lớp InputStream, OutputStream được sử dụng để đọc và ghi từng
byte. Ta cũng có thể sử dụng DataOutputStream, DataInputputStream,
BufferedReader, PrintWriter để đọc, ghi dữ liệu kiểu int, double, String, v.v. Ví dụ,
đoạn chương trình sau tạo ra isFromClient, osToClient để đọc, ghi các dữ liệu kiểu
nguyên thủy ở Client.
DataInputStream isFromClient = new DataInputStream
(connectToClient.getInputStream());
DataOutputStream osFromClient = new DataOutputStream
(connectToClient.getOutputStream());
Server có thể sử dụng isFromClient.read() để nhận dữ liệu từ Client và
isFromClient.write() để gửi dữ liệu cho Client.
%;5! @
2+3453/6789 :5
III.2. Server phục vụ nhiều chương trình Client
Cùng một lúc, một chương trình Server có thể trao đổi với nhiều chương trình
Client. Server chạy thường trực trên máy chủ và các chương trình Client trên mạng có
thể kết nối với Server bất kỳ lúc nào [Daniel]. Server thiết lập việc kết nối với nhiều
Client như sau.
while(true){
Socket connectToClient = serverSocket.accept();
Thread thread = new ThreadClass(connectToClient);
thread.start();
}
Socket server có thể có nhiều kết nối. Mỗi vòng lặp của chu trình while tạo ra
một kết nối mới. Khi đã thiết lập được một kết nối, một luồng thực hiện (thread) mới
được tạo ra để đảm nhận việc trao đổi giữa Server và Client. Sau đó Server chờ những
yêu cầu kết nối khác. Nghĩa là có nhiều kết nối thực hiện theo cơ chế đa luồng thực
hiện đồng thời.
Trong khi trao đổi với nhau, nhiều khi ta muốn biết ai kết nối với Server. Muốn
biết về chương trình khách ta sử dụng lớp InetAddress để biết được tên miền (host
name) và địa chỉ IP.
%;5! A
2+3453/6789 :5
CHƯƠNG II: CƠ SỞ DỮ LIỆU PHÂN TÁN
I. Cơ sở dữ liệu phân tán
Có nhiều lý do để xây dựng cơ sở dữ liệu phân tán, như chia sẻ thông tin, tăng độ
tin cậy, tăng tốc độ truy cập thông tin. Tuy nhiên, sử dụng hệ thống phân tán phải trả
giá phát triển phần mềm, khó khăn hơn khi sửa lỗi dữ liệu và lỗi hệ thống.
I.1. Các ưu điểm của việc phân tán dữ liệu
Trước tiên hệ thống cơ sở dữ liệu phân tán có ưu điểm cho phép dùng chung dữ
liệu theo cách hiệu quả và tin cậy.
I.1.1. Chia sẻ dữ liệu và điều khiển phân tán
Nếu một số trạm nối nhau, người dùng tại một trạm có thể khai thác dữ liệu trên
trạm kia. Thí dụ nếu không có hệ thống phân tán, việc chuyển tiền qua tài khoản phải
thực hiện qua cơ chế trung gian.
Tiến bộ thứ nhất này cho phép chia sẻ dữ liệu theo nghĩa mỗi trạm vẫn có mức
độ ưu tiên về điều khiển dữ liệu cục bộ. Trong hệ thống tập trung, người quản trị cơ sở
dữ liệu của trạm trung tâm điều khiển các hoạt động xử lý của cơ sở dữ liệu. Trong hệ
thống phân tán, cũng có người quản trị bao quát chung toàn hệ thống. Một phần của
trách nhiệm này trao lại cho người quản trị địa phương tại trạm. Phụ thuộc vào thiết kế
của hệ thống mà người này có độ tự trị riêng. Khả năng tự trị địa phương được xem là
ưu điểm chính của cơ sở dữ liệu phân tán.
I.1.2. Tin cậy và sẵn sàng
Nếu một trạm trong cơ sở dữ liệu phân tán bị hỏng, các trạm còn lại vẫn có khả
năng tiếp tục công việc. Cụ thể, nếu dữ liệu sao chép trên nhiều trạm, mỗi giao tác cần
dữ liệu cụ thể có thể tìm trên trạm khác. Do vậy hư hỏng một trạm không gây sụp đổ
cả hệ thống.
Sai sót của trạm cần được hệ thống phát hiện, cần có hành động thích hợp để hồi
phục dữ liệu. Hệ thống không tiếp tục sử dụng trạm bị hư mà đợi sau khi sửa xong,
trạm này được gắn tích hợp vào hệ thống.
Dù việc khôi phục sai sót trong cơ sở dữ liệu phân tán là phức tạp hơn so với cơ
sở dữ liệu tập trung, khả năng hầu hết các hệ thống là tiếp tục làm việc khiến cho tính
sẵn sàng tăng lên. Tính sẵn sàng là khó đạt được trong cơ sở dữ liệu thời gian thực.
Ví dụ : Trong hệ thống bán vé máy bay, việc không truy nhập được vào các dữ
liệu như việc không kịp đăng ký chỗ cho các chuyến bay sẽ gây tổn hại đến uy tín và
lượng khách hàng của hãng hàng không.
I.1.3. Tăng tốc xử lý các truy vấn
Nếu một câu hỏi yêu cầu dữ liệu trên vài trạm, có thể tách câu hỏi này ra các câu
hỏi nhỏ để có thể khai thác song song tại nhiều trạm. Tính toán song song như thế cho
%;5! "(
2+3453/6789 :5
phép trả lời câu hỏi nhanh hơn. Trong trường hợp này, các trạm đều có một bản sao dữ
liệu, câu hỏi được hệ thống trả lời tại trạm nào có chi phí rẻ hơn cả.
I.2. Các nhược điểm của việc phân tán dữ liệu
Nhược điểm đầu tiên của hệ thống cơ sở dữ liệu phân tán là việc tăng thêm sự
phức tạp khi xử lý phân tán. Phức tạp tăng lên dưới các dạng sau:
- /2/B: Do các khó khăn khi cài đặt một hệ thống
phân tán, giá thành sẽ tăng lên.
- :CD+E: Vì các trạm trong hệ phân tán làm việc song song, khó
có thể đảm bảo thuật toán được thực hiện đúng trên tất cả các trạm. Do vậy
mà số lỗi sẽ tăng lên. Các thuật toán phù hợp với cơ sở dữ liệu phân tán còn
đang được nghiên cứu.
- +FGHI+J: Hệ thống phân tán cần truyền nhiều thông
báo, nhiều tính toán phụ. Do vậy khối lượng xử lý tăng lên so với hệ thống
tập trung. Khi chọn thiết kế hệ thống cơ sở dữ liệu, người thiết kế cần phải
cân đối các ưu điểm và nhược điểm của việc phân tán các dữ liệu. Có dải
rộng các thiết kế rất phân tán đến các hệ thống tập trung.
- Những vấn đề về cập nhập và quản lý bản sao dữ liệu.
- Xử lý các truy vấn phức tạp hơn.
- Thiết kế và quản trị Cơ sở dữ liệu phức tạp hơn.
II. Thiết kế các cơ sở dữ liệu phân tán
Phần này tập trung vào các thiết kế dùng cho cơ sở dữ liệu phân tán. Giả sử quan
hệ R được lưu trữ trong cơ sở dữ liệu. Có vài lý do yêu cầu lưu quan hệ này trong hệ
thống phân tán.
- Các bản sao: Hệ thống bảo trì vài bản sao như nhau của quan hệ. Mỗi
quan hệ được lưu tại một trạm.
- Các phần nhỏ: Quan hệ tách thành các phần nhỏ. Mỗi phần được lưu trên
một trạm.
- Bản sao và phần nhỏ: Đây là hình thức tổ hợp của hai dạng vừa nêu.
Quan hệ tách thành nhiều phần. Hệ thống có nhiều bản sao của mỗi phần,
trên các trạm khác nhau.
Nếu quan hệ R được sao lại, một bản sao của R được lưu trong hai hay nhiều
trạm. Trong trường hợp cực đoan, tại mỗi trạm đều có một bản sao. Một vài ưu điểm
và nhược điểm của việc sao này.
- Tính sẵn sàng: Nếu một trạm chứa quan hệ R bị hư, quan hệ R có thể
được tìm trên trạm khác. Do vậy, hệ thống cần tiếp tục câu hỏi về quan hệ R
dù xảy ra hư hỏng trên một trạm.
%;5! ""
2+3453/6789 :5
- Tính song song tăng lên: Trong trường hợp đa số truy nhập quan hệ R
chỉ là đọc dữ liệu, một vài trạm yêu cầu R có thể xử lý song song. Càng
nhiều bản sao càng tăng khả năng sẵn sàng của dữ liệu. Hơn nữa, việc tăng
các bản sao làm giảm số lượng thông tin cần truyền giữa các trạm.
- Phức tạp tăng lên khi tiến hành cập nhật: Hệ thống cần đảm bảo tất cả
các bản sao của quan hệ R là chặt chẽ, tức thỏa mãn các điều kiện toàn vẹn,
trừ khi xảy ra sai sót. Điều này có nghĩa khi một bản sao được cập nhật,
phép xử lý này cần được thực hiện trên tất cả các trạm có chứa bản sao của
R. Chẳng hạn trong hệ thống ngân hàng, khi tài khoản có trên các trạm, số
lượng tiền của tài khoản này trên các trạm phải như nhau.
Nhìn chung, việc dùng các bản sao làm tăng hiệu quả của phép đọc, tăng tính sẵn
sàng trong giao tác đọc dữ liệu. Vấn đề điều khiển các phép cập nhật tương tranh của
những giao thức trong trường hợp dữ liệu có các bản sao trong hệ thống phân tán là
phức tạp hơn việc điều khiển trong hệ thống tập trung. Việc quản lý có thể được đơn
giản hóa bằng cách chọn ra một bản sao gọi là bản sao sơ cấp của quan hệ R.
Ví dụ: Trong hệ thống ngân hàng, một tài khoản gắn với trạm mà tài khoản đó
yêu cầu mở. Tại trạm này, tài khoản có dữ liệu như bản sao sơ cấp. Trong hệ thống đặt
chỗ máy bay, dữ liệu gắn với chuyến bay tại trạm mà chuyến bay xuất phát sẽ được
xem là bản sao sơ cấp.
%;5! "*
2+3453/6789 :5
CHƯƠNG III: SỰ GẮN BÓ DỮ LIỆU TRONG CƠ SỞ DỮ
LIỆU PHÂN TÁN
I. Tác động và giao dịch
Các đối tượng khác nhau của hệ không phải là các đối tượng độc lập nhau, chúng
quan hệ với nhau bởi tập hợp các quan hệ gọi là các ràng buộc toàn vẹn. Các ràng
buộc này thể hiện sâu sắc các đặc tính riêng biệt của hệ.
Trạng thái của hệ thoả mãn một tập các ràng buộc toàn vẹn gọi là trạng thái gắn
bó.
Các nhà thiết kế và vận hành hệ mong muốn rằng việc thực hiện các tiến trình
phải duy trì cho được hệ trong trạng thái gắn bó. Để chính xác hoá đặc tính này, cần
phải lưu ý là trạng thái của hệ chỉ được xác định ở mức quan sát cho trước.
Ta quan tâm đến hai mức quan sát:
STT Mức Giải thích
1 NSD
Tiến trình là một dãy thực hiện các giao dịch.
Giao dịch đó là chương trình duy nhất được thực hiện từ một
trạng thái gắn bó dẫn hệ đến một trạng thái gắn bó khác.
2 Hệ thống
Mỗi giao dịch được cấu tạo từ nột dãy các tác động được thể
hiện như sau. Nếu 2 tác động A và B thuộc hai giao dịch khác
nhau được thực hiện bởi hai tiến trình thì hiệu ứng tổng quát
của chúng sẽ là hiệu ứng của dãy (A;B) hoặc là (B;A)
Ở mức hệ thống, ta có thể nói rằng các tác động là phần tử nhỏ nhất không thể
chia cắt được nữa.
Cho một tập hợp giao dịch M={T1, T2…, Tn} lần lượt được thực hiện bởi các
tiến trình độc lập p1, p2,…,pn. Việc thực hiện tuần tự có nghĩa là thực hiện tất cả các
giao dịch của M theo kiểu nối đuôi nhau và tuân thủ một trật tự nào đó. Sự gắn bó của
hệ được bảo toàn, theo định nghĩa, bằng việc thực hiện riêng biệt từng giao dịch. Do
vậy, nó cũng được bảo toàn trong chế độ thực hiện tuần tự của M.
Nếu, vì lý do hiệu quả, nhiều giao dịch được thực hiện song song, thì sự gắn bó
không còn đảm bảo được nữa.
Một yêu cầu khác nữa rất quan trọng là trong quá trình thực hiện hệ phải đảm
bảo cho các tác động không bị ngắt quãng.
II. Trật tự hóa các tác động
Trở lại với tập hợp giao dịch M = {T1, T2…, Tn} cho ở phần trước. Mỗi giao
dịch được cấu tạo từ một dãy các tác động. Bằng các tác động không chia sẻ được này,
toàn bộ sự việc thực hiện của tập hợp các giao dịch M bởi một tập hợp các tiến trình
tương tranh là tương đương với việc thực hiện một dãy S các tác động thuộc các giao
%;5! ")
2+3453/6789 :5
dịch này, như S = (a1, a2, , an) chẳng hạn. Trong trật tự tuân thủ trật tự nội tại của
từng giao dịch, dãy này bao gồm tất cả các tác động cấu tạo nên các giao dịch M; mỗi
tác động chỉ xuất hiện một và chỉ một lần. Một dãy như vậy gọi là trật tự hóa của tập
các giao dịch M.
Ví dụ: Cho T1 = (a11, a12, a13, a14) và T2 = (a21, a22, a23). Một trật tự hóa
(T1, T2) được thể hiện như sau:
S = a21, a11, a12, a22, a13, a23, a14
Trong số các trật tự hóa của một tập hợp các giao dịch, điều rất quan trọng là
phải tách ra cho được những cái phục vụ trạng thái gắn bó dữ liệu và chúng được gọi
là trật tự hóa gắn bó.
Như vậy, đặc tính quan trọng của trật tự hóa là: các trật tự hóa tương ứng với
việc thực hiện tuần tự của tập hợp các giao dịch hay còn gọi ngắn gọn là trật tự hóa
tuần tự.
Điều kiện đủ cho sự gắn bó của một trật tự hóa có thể được phát biểu như sau:
Một trật tự hóa là gắn bó, nếu nó có cùng quan hệ phụ thuộc với một trật tự tuần hoàn.
III. Triển khai giao dịch tôn trọng sự gắn bó
Cho một tập hợp giao dịch M={T1, T2…, Tn}. Một trật tự hóa của tập hợp các
tác động thành phần sẽ tương ứng với việc thực hiện hoàn toàn các giao dịch. Việc thu
được một trật tự hóa gắn bó chỉ có thể thành công khi áp dụng các ràng buộc trên trật
tự thực hiện các tác động. Nguyên lý của phương pháp là ở chỗ làm chậm một tác
động nào đó cho đến thời điểm mà sự thực hiện của nó không còn có nguy cơ phá hủy
sự gắn bó của trật tự hóa (bằng cách chặn tiến trình hiện hành).
Để đảm bảo các giao dịch trên tôn trọng sự gắn bó thông tin thì người ta đưa ra
các phương pháp, cơ chế để đảm bảo khi giao dịch vẫn có sự gắn bó thông tin toàn vẹn
dữ liệu trên cơ sở dữ liệu phân tán là:
- Cơ chế then cài: Cho phép một giao dịch có thể giải phóng đối tượng mà
nó đã cài then.
- Loại trừ tương hỗ: Nếu ta biết trước các đối tượng được xử lý bởi một
giao dịch nào đó, thì ta có thể cài then công việc truy cập đến các đối tượng.
- Then cài lựa chọn đối tượng: Một giao dịch thay đổi giá trị của đối tượng
phải loại trừ tất cả các đối tượng khác muốn truy cập, ngược lại thì việc truy
cập được tiến hành theo kiểu tương tranh.
- Giao dịch hai pha: 1. Toàn bộ đối tượng bị cài then vẫn ở trong tình
trạng cài then cho đến cuối giao dịch và 2. Không có then cài nào có thể
diễn ra tiếp theo một then cài khác trong cùng một giao dịch.
Bây giờ ta tưởng tượng rằng các đối tượng được phân tán trên nhiều trạm khác
nhau và được nối với nhau thông qua hệ thống viễn thông và rằng các tiến trình diễn ra
trên các trạm khác nhau. Hệ thống viễn thông cho phép các tiến trình trên các trạm
%;5! "<
2+3453/6789 :5
khác nhau có thể trao đổi các thông điệp với nhau. Ta giả định rằng các tiến trình và
các phương tiện truyền thông là các đối tượng có thể rơi vào sự cố. Một hệ quản lý tập
hợp thông tin phân tán bao gồm:
STT Cơ chế
1
Cơ chế cho phép sắp xếp một cách tổng quát các tác động của cùng
một giao dịch, ngay cả khi các tác động này diễn ra trên các trạm khác
nhau.
2
Cơ chế điều khiển các tranh chấp truy cập cục bộ vào các đối tượng
đảm bảo tôn trọng tính toàn vẹn của các đối tượng truy cập cục bộ
này.
3
Cơ chế có khả năng xử lý các bế tắc và thiếu thốn vô hạn, hậu quả của
việc hủy bỏ các giao dịch.
4 Cơ chế phục hồi các giao dịch đã hủy bỏ hay xử lý các sự cố.
Cơ chế xử lý sự cố
STT Phải thực hiện
1 Giao dịch T bắt buộc phải thực hiện một cách trọn vẹn
2 Nếu có sự cố xảy ra thì phải quay lại điểm xuất phát.
Muốn thực hiện những điều vừa nêu ở trên, người ta đòi hỏi giao dịch phải có
các đặc tính toàn vẹn như sau:
STT Phải thực hiện
1
Nếu một tiến trình bị sự cố trước khi kết thúc T nhưng lại sau các thao
tác thay đổi cần thiết của T, trạng thái của hệ là gắn bó.
2
Nếu một tiến trình bị sự cố trước khi diễn ra các thay đổi của T, trạng
hái của hệ là gắn bó.
3
Nếu một tiến trình bị sự cố giữa các thay đổi của T, trạng thái của hệ là
không gắn bó.
Nếu dữ liệu được phân tán trên nhiều server, để bảo đảm dữ liệu sẽ được ghi lên
đúng đắn lên mọi cơ sở dữ liệu, đòi hỏi phải có các cơ chế bảo vệ dữ liệu. Ví dụ như
việc cập nhật bảng cân đối tài khoản khách hàng ở ba cơ sở dữ liệu khác nhau. Nếu có
sự cố kết nối xảy ra trong thời gian ghi giao dịch, cơ sở dữ liệu sẽ mất tính đồng bộ.
Xử lý giao dịch khắc phục tình trạng này bằng cách giám sát những thay đổi tác động
lên các cơ sở dữ liệu liên quan nhằm bảo đảm toàn vẹn dữ liệu một khi có sự cố.
IV. Quản lý gắn bó các giao dịch
Bây giờ ta hãy xem xét một hệ, trong đó các đối tượng được phân tán trên nhiều
trạm, không có bản sao mỗi đối tượng chỉ tồn tại có một bản duy nhất. Một giao dịch
Tj có thể tham chiếu đến các đối tượng nằm trên các trạm khác nhau và do vậy gồm
nhiều tác động thực hiện trên nhiều trạm. Như vậy ta phải xác định trên một trạm Si
một tiến trình Pji với nhiệm vụ thực hiện các tác động giao dịch Tj trên Si, các tác
động được thực hiện trên các trạm khác nhau có thể tiến hành theo kiểu song song.
Các phương pháp để quản lý gắn bó các giao dịch như: Phương pháp dự phòng
để chống bế tắc, phương pháp dựa vào việc hạn chế các khả năng diễn ra bằng cách
phát hiện bế tắc có tính chất động, điều đó dẫn đến hủy bỏ các giao dịch.
%;5! "=
2+3453/6789 :5
PHẦN II: BÀI TẬP ỨNG DỤNG
I. Phát biểu bài toán
Lập trình cho phép hệ đa Server gắn bó dữ liệu bằng phương pháp trật tự hóa.
Bài toán gồm có các phần chính sau:
- Xây dựng đa Server theo kiểu ngang hàng có khả năng phát và nhận
thông điệp.
- Xây dựng cấu trúc các loại thông điệp trao đổi giữa các Server.
- Xây dựng đoạn chương trình sắp xếp các thông điệp đến căn cứ vào giá
trị đồng hồ logic Lamport.
II. Đồng hồ logic Lamport
II.1. Đồng hồ logic Lamport
Đồng hồ logic Lamport dựa trên hai vấn đề sau:
- Các sự kiện xảy ra trong cùng một bộ xử lý thì chúng luôn ở trong trạng
thái trật tự gắn bó bằng cách sử dụng đồng hồ hệ thống (thời gian thực) vì
giá trị của đồng hồ hệ thống luôn được tăng đều.
- Các sự kiện xảy ra trong các bộ xử lý khác nhau thì sẽ gây ra tình trạng
không gắn bó trong thời gian truyền thông điệp, nhưng không lâu sau chúng
cũng gắn bó vì nếu bộ xử lý Pj gửi thông điệp cho bộ xử lý Pk vào thời gian
T thì Pk không thể nhận thông điệp đó vào thời gian T hoặc trước đó.
Tuy nhiên, vấn đề là thời gian thực trên mỗi hệ thống không đồng bộ, đặc biệt
trong hệ phân tán, nó khó giữ được đồng hồ hệ thống chung giữa tất cả các tiến trình
đang sắp xếp. Trong trường hợp như vậy, đồng hồ logic có thể được dùng để biểu thị
thứ tự thông tin cho các sự kiện, đồng hồ logic Lamport là khái niệm cơ bản để sắp
xếp các tiến trình và các sự kiện trong hệ phân tán.
II.2. Thuật toán Lamport dựa trên đồng hồ logic
Đặt T là giá trị đồng hồ thực và Cj(T) là giá trị của đồng hồ logic trong bộ xử lý
J tại thời gian T, đồng hồ logic hoạt động theo nguyên tắc sau:
1. Đánh dấu mỗi sự kiện bằng giá trị đồng hồ logic của bộ xử lý đó. (với
C
j
: Đồng hồ logic của P
j
, được khởi tạo từ 0).
2. Nếu có một sự kiện cục bộ xảy ra, thì ta tăng giá trị đồng hồ logic lên 1.
3. Khi một thông điệp được gửi bởi bộ xử lý K, hãy đánh dấu nó bởi
C
k
(T).
%;5! ">
2+3453/6789 :5
4. Khi bộ xử lý K nhận một thông điệp có dấu thời gian là C’ thì ta đặt lại
đồng hồ logic của bộ xử lý K là: max(C’, C
k
(T)) + 1.
Đề tài chỉ quan tâm đến truyền và nhận các thông điệp, nên nếu nhận các thông
điệp cùng một thời gian thì căn cứ vào giá trị đồng hồ logic của các thông điệp để thực
hiện:
Như vậy trong thông điệp ta phải truyền thêm ID của bộ xử lý (nếu là sắp xếp
trong các tiến trình ta phải dùng thêm ID của tiến trình). Tổng quát cấu trúc thông điệp
như sau:
(METHOD, PARAs, C
i
, i)
Với:
- METHOD: là phương thức muốn gọi.
- PARAs: là các tham số cần truyền cho phương thức.
- C
i
: giá trị đồng hồ logic của bộ xử lý i.
- i: là ID của bộ xử lý (như Server1, Server2…).
III.3. Xây dựng cấu trúc của thông điệp giữa các Server:
Phân tán thuật toán Lamport kéo theo việc phân tán các chức năng cung cấp mà
cần phải điều khiển hàng đợi trên trạm. Do vậy, một trạm chuyên cho việc tiếp nhận
các yêu cầu và các khuyến nghị giải phóng từ các trạm còn lại. Một trật tự giống nhau
trên các trạm chỉ đạt được, nếu ta áp dụng dấu trong các thông điệp bởi các đồng hồ
logic truyền và đánh số trạm. Quan hệ trật tự toàn bộ được định nghĩa. Thêm vào đó,
để cho một trạm có thể ra quyết định bằng việc tham chiếu duy nhất vào hàng đợi của
mình, nó còn cần phải được nhận một thông điệp của từng trạm khẳng định rằng
không có thông điệp nào trước các thông điệp khác mà đang quá cảnh trên đường.
Giả sử :
1. Trạm i của mạng có thể gửi cho các trạm khác thông điệp có dạng
(T, H
i
, i), trong đó H
i
là dấu của thông điệp có nghĩa là đồng hồ logic của
nó và T có thể nhận một trong ba giá trị REQ, REL, và ACQ.
Ba giá trị này xác định bản chất của ba loại thông điệp khác nhau
STT Thông điệp Giải thích
1 REQ
Thông điệp REQ được phát đi cho tất cả các trạm, khi trạm
i muốn vào trong đoạn găng
2 REL
Thông điệp REL được phát đi cho tất cả các trạm, khi trạm
i đã rời khỏi đoạn găng
3 ACQ
Thông điệp ACQ được gửi bởi trạm j cho trạm j đã nhận
được từ trạm i thông điệp REQ.
%;5! "?
2+3453/6789 :5
2. Khi có một thông điệp được gởi đi bởi trạm i đồng thời nó cũng được ghi
trong hàng đợi của trạm này.
Giả sử rằng mỗi hàng đợi ban đầu chứa các thông điệp:
Trong đó, i, H
init
là thời điểm khởi sự giống nhau cho tất cả các trạm.
Mỗi trạm quản lý một hàng đợi các thông điệp được sắp xếp hoàn toàn bởi quan
hệ ⇒ theo cặp <thời gian, số> của từng thông điệp. dùng biến trạng thái State để sắp
xếp (State =muon : đang yêu cầu tài nguyên, state=namgiu : đang sử dụng tài nguyên,
State=ranh : rãnh)
I.4. Thuật toán sắp xếp các thông điệp đến căn cứ vào giá trị của đồng
hồ logic Lamport
Thuật toán được mô tả theo sơ đồ sau :
+ Khởi tạo hàng đợi, mỗi máy tự phát thông điệp
+ Khi trạm đang yêu cầu tài nguyên:
o Để truy cập vào tài nguyên một trạm nào đó sẽ phát một thông điệp
yêu cầu M
i
(T,H
i
,i) đến tất cả các trạm khác và đưa yêu cầu vào hàng
đợi yêu cầu của trạm này.
o Khi trạm j nhận thông điệp yêu cầu từ i, nó sẽ gởi ngược lại thông điệp
(có chứa đồng hồ logic H
j
) cho S
j
và đưa yêu cầu này vào trong hàng
đợi yêu cầu của nó.
If state =muon then
Begin
Send M(T,H
j
,j) đến trạm i
INSERT(M
i
,hàngđợi)
End
+ Khi trạm đang vào đoạn găng: Trạm i nhận một thông điệp với đồng hồ logic
lớn hơn đồng hồ ở thời điểm hiện tại của trạm i và yêu cầu của trạm i đang ở vị trí của
hàng đợi yêu cầu của nó.
If (H>H
i
) and (Vị trí M
ở đầu của hàng đợi) then state=namgiu
+ Khi trạm không thực hiện gì cả
Xoá yêu cầu và gởi thông điệp giải phóng những trạm khác sẽ loại bỏ yêu cầu
tương ứng
%;5! "@
M
i
= (REL, H
init
, i)
M
i
= (REL, H
init
, i)
2+3453/6789 :5
If state=ranh then xử lý(các thông điệp hàng đợi) ‘sau đó xoá
Send thông điệp giải phóng đến các trạm
Những trạm khác cũng sẽ xoá yêu cầu của nó trong hàng đợi của mình.
III. Giải quyết bài toán.
Phần này tôi chọn lập trình Client/Server bằng Socket của Java để mô phỏng:
- Giả lập hai Server trên một máy đơn giống như hai Server đang chạy trên
Internet thực sự. Hai Server này có chức năng:
o Chứa cơ sở dữ liệu là một tài khoản ngân hàng.
o Khi nhận thông điệp:
Server sẽ cập nhật giá trị đồng hồ logic của chính.
Lưu thông điệp vào hàng đợi.
Sắp xếp lại hàng đợi.
Lấy thông điệp ở đầu hàng đợi ra khỏi hàng đợi và thực hiện nó.
o Sau khi thực hiện 1 thông điệp, Server sẽ tự động trả về kết quả.
Để mô phỏng cho cách làm việc trên mạng của Server ta sẽ mở hai cửa sổ dòng
lệnh, mỗi cửa sổ được dùng làm một Server.
- Giả lập Client trên một cửa sổ khác:
o Kết nối với 2 Server
o Gửi thông điệp để thay đổi số tiền có trong tài khoản (thêm tiền và tính
lãi suất).
o Nhận thông điệp trả về từ các Server cho biết số tiền hiện có trong tài
khoản.
IV. Demo chương trình.
Chương trình sử dụng hàng đợi lưu trữ các yêu cầu được gởi đến và sau đó
chương trình sẽ sắp xếp các yêu cầu trong hàng đợi dựa theo giá trị đồng hồ Lamport.
%;5! "A
2+3453/6789 :5
IV.1. Chương trình Client
IV.2. Chương trình Server 1
%;5! *(
2+3453/6789 :5
IV.3. Chương trình Server 2
IV.4. Chương trình Client khi Start
%;5! *"
2+3453/6789 :5
IV.5. Chương trình Server1 khi Start
IV.6. Chương trình Server2 khi Start
%;5! **
2+3453/6789 :5
IV.7. Chương trình Client gởi một Message
IV.8. Chương trình Server1 khi nhận kết quả
%;5! *)
2+3453/6789 :5
IV.9. Chương trình Server2 khi nhận kết quả
IV.10. Chương trình Client khi Stop
%;5! *<
2+3453/6789 :5
IV.11. Chương trình Server1 khi Stop
IV.12. Chương trình Server2 khi Stop
%;5! *=