Các hệ thống dùng chung bộ nhớ • Multiprocessor nhiều bộ vi xử lý dùng chung 1 bus và một đơn vị bộ nhớ • Hệ điều hành hỗ trợ SMP symmetric multiprocessing • Đơn giản hơn hệ phân tán •
Trang 1TRƯỜNG ĐẠI HỌC QUẢNG BÌNH KHOA KỸ THUẬT – CÔNG NGHỆ THÔNG TIN
BÀI GIẢNG
(Lưu hành nội bộ)
HỆ PHÂN TÁN
(Dành cho sinh viên CNTT)
Giảng viên: TS Hoàng Tuấn Nhã
Năm 2017
Trang 24 Tổng quan về các nguyên lý và mô hình
5 Giới thiệu môn học
Trang 3Hệ thống phân tán là gì?
Định nghĩa của Andrew Tannenbaum
– Hệ phân tán là một tập hợp các máy tính độc lập mà, đối với người dùng, nó như thể một hệ thống đơn gắn kết.
Định nghĩa yếu hơn, gần thực tế hơn
– Hệ phân tán là một tập hợp các máy tính độc lập
được sử dụng một cách kết hợp để thực hiện một tác
vụ đơn hoặc để cung cấp một dịch vụ đơn.
Trang 4Hệ thống phân tán là gì?
Ví dụ về các hệ phân tán:
– Tổ hợp các Web server: cơ sở dữ liệu phân tán cho siêu văn bản và tài liệu đa phương tiện
– Hệ thống file phân tán trong một mạng LAN
– Dịch vụ tên miền (Domain Name Service - DNS)
– Cray XT5 & CLE (multiprocessor quy mô lớn)
Các ví dụ khác?
Trang 5Ưu điểm của hệ phân tán
Chi phí: nếu sử dụng phần cứng thông dụng cho các máy tính thành
phần, thu được tỷ lệ giá/hiệu năng tốt hơn
Hiệu năng: do sử dụng kết hợp khả năng lưu trữ và xử lí của nhiều
nút, có thể đạt được mức độ hiệu năng vượt ra ngoài tầm của các máy tính trung tâm
Khả năng mở rộng Các tài nguyên như khả năng lưu trữ và xử lý
có thể được tăng theo cấp số cộng
Độ tin cậy do có các thành phần dư thừa, khi một máy tính hỏng, có
thể hệ thống chung vẫn tiếp tục hoạt động bình thường
Tính phân tán cố hữu Một số ứng dụng như Web đã có tính phân
tán một cách tự nhiên
Trang 6Nhược điểm của hệ phân tán
phân tán phức tạp hơn và khó hơn so với phần mềm
truyền thống; dẫn tới chi phí cao hơn và khả năng bị lỗi cao hơn
Khó xây dựng và khó hiểu các hệ thống phân tán.
Trang 7Kiến trúc của hệ thống phân tán
Trang 10Tính chất:
– giao diện lập trình phân tán độc lập với hệ điều hành
– tăng tính trong suốt (ví dụ:che dấu tính không đồng nhất)
– cung cấp dịch vụ (ví dụ: naming service, transaction, v.v )
– cung cấp mô hình lập trình (ví dụ: các đối tượng phân tán)
Trang 11Tại sao middleware thông dụng hơn?
– xây dựng trên các trừu tượng hóa thông dụng về các hệ điều hành mạng (tiến trình và truyền thông điệp)
– ví dụ RPC, NFS, CORBA, DCOM, J2EE, NET
– các ngôn ngữ (hoặc sửa đổi ngôn ngữ) được thiết kế đặc biệt cho tính toán phân tán (vd Erlang, Ada, Limbo )
Ưu điểm:
– thường chạy tại không gian người dùng
– tăng mức độ trừu tượng hóa trong lập trình → đỡ gây lỗi
– độc lập với hệ điều hành, giao thức mạng, ngôn ngữ lập trình, v.v → tính linh hoạt
Nhược điểm:
– có các giao diện rườm rà rắc rối thiếu hiệu quả
Trang 12Hệ phân tán và tính toán song song
• Tính toán song song: nâng cao hiệu năng bằng cách sử
dụng nhiều bộ vi xử lý cho mỗi ứng dụng
• Hai dạng:
1 Các hệ thống dùng chung bộ nhớ
• Multiprocessor (nhiều bộ vi xử lý dùng chung 1 bus và một đơn vị bộ
nhớ)
• Hệ điều hành hỗ trợ SMP (symmetric multiprocessing)
• Đơn giản hơn hệ phân tán
• Tính mở rộng được không cao
Trang 13– Quản lý tài nguyên cho các hệ thống đơn
– Hệ phân tán: quản lý các tài nguyên phân tán
Trang 15Tính trong suốt
Che dấu sự tách biệt giữa các thành phần của một hệ phân tán
(hình ảnh về một hệ thống đơn nhất)
Các hình thức khác nhau của tính trong suốt:
– Truy nhập: tài nguyên địa phương và ở xa được truy nhập theo cùng kiểu
– Vị trí: người dùng không nhận biết về địa điểm của các tài nguyên
– Di cư: có thể chuyển chỗ tài nguyên mà không đổi tên
– Sao lặp: người dùng không nhận biết về sự tồn tại của nhiều bản sao tài nguyên
– Thất bại: người dùng không nhận biết về thất bại của các thành phần riêng biệt
– Tương tranh: người dùng không nhận biết về việc chia sẻ tài nguyên với những
người khác.
không phải lúc nào cũng được mong muốn
không phải lúc nào cũng đạt được
Trang 16Tính mở rộng được
Một hệ thống có tính mở rộng được nếu người ta có thể tăng số người dùng và bổ sung tài nguyên mà không gây giảm hiệu năng hoặc tăng độ phức tạp quản trị một cách đáng kể.
(B Clifford Neuman)
Hệ thống mở rộng theo ba chiều:
– Kích thước: tăng số người dùng hoặc tài nguyên (quá tải)
– Địa lý: tăng khoảng cách giữa người dùng và tài nguyên (liên lạc)
– Quản lý: tăng số lượng các tổ chức tham gia quản lý các phần của hệ thống
(rối rắm và đan xen về quản trị)
Lưu ý
– Tính mở rộng được thường xung đột với hiệu năng (hệ thống nhỏ)
– Tính mở rộng được thường bị khẳng định một cách phiến diện
Trang 17Tính mở rộng được
Kĩ thuật mở rộng hệ thống:
– Phi trung tâm hóa
– Che dấu độ trễ liên lạc (liên lạc không đồng bộ, giảm liên lạc)
– Phân tán (dữ liệu và điều khiển)
– Sao lặp (tạo các bản sao của dữ liệu và tiến trình)
Trang 18Tính mở rộng được
Phi trung tâm hóa
Tránh tập trung:
– dịch vụ (vd tránh dùng một server đơn)
– dữ liệu (vd tránh lưu trữ tên tại một thư mục trung tâm)
– thuật toán (vd tránh dựa vào thông tin đầy đủ)
Về các thuật toán phi tập trung:
– Không có máy nào chứa thông tin hoàn chỉnh về trạng thái hệ thống
– Cho phép các nút ra quyết định dựa trên thông tin địa phương
– Một nút thất bại không làm hỏng thuật toán
– Không có giả thiết rằng có một đồng hồ toàn cục chung
• Đồng hồ mỗi máy mỗi khác và khó có thể đồng bộ hóa đồng hồ một cách chính xác
phi trung tâm hóa là một công việc khó
Trang 19– Nhưng tính sẵn có có thể suy giảm
• nhiều thành phần → tiềm tàng nhiều điểm thất bại
• Tính phụ thuộc đòi hỏi tính nhất quán, bảo mật hệ thống, và khả năng chịu lỗi
Trang 21Tính mềm dẻo
• Xây dựng hệ thống từ các thành phần cần thiết
• Có thể đổi hoặc thêm thành phần/dịch vụ
• Tính mở của giao diện và đặc tả
– cho phép cài đặt lại theo đặc tả và mở rộng tính năng
• Khả năng hoạt động tương giao
• Tách biệt giữa chính sách và cơ chế
– các giao diện nội bộ được chuẩn hóa
Trang 23Nguyên lý
Một số nguyên lý quan trọng đằng sau mọi hệ phân tán:
– Kiến trúc hệ thống (system architecture)
Trang 24Mô hình
Hầu hết các hệ thống phân tán được xây dựng dựa trên một mô hình cụ thể
– Bộ nhớ dùng chung (shared memory)
– Đối tượng phân tán (distributed objects)
– Hệ thống file phân tán (distributed file system)
– Tài liệu dùng chung (shared documents)
– Cộng tác phân tán (distributed coordination)
– Tác tử (agents)
3 mô hình sau là chủ đề dành cho các báo cáo thu hoạch
Trang 25Cấu trúc môn học
1 Giới thiệu
2 Kiến trúc hệ thống và liên lạc
3 Sao lặp và tính nhất quán, bộ nhớ dùng chung phân tán
4 Middleware, đối tượng phân tán, publish/subscribe,
Trang 26Tài liệu tham khảo
• Tài liệu môn học Distributed Systems
(COMP9243), Đại học New South Wales, Úc
http://www.cse.unsw.edu.au/~cs9243/
• Andrew S Tanenbaum & Maarten van Steen,
Distributed Systems: Principles and Paradigms,
2002, Pearson Prentice Hall
• George Coulouris, Jean Dollimore & Tim
Kindberg: Distributed Systems: Concepts and
Design, 3rd ed, 2003, Addison-Wesley
Trang 27Thông tin khác
Đánh giá:
• 01 bài tập (hệ số 0,3)
lập trình phân tán dùng Java RMI + CORBA
• 01 báo cáo thu hoạch (hệ số 0,2)
đọc và tóm tắt bài báo khoa học
• Thi cuối kì (được dùng tài liệu, hệ số 0,5)
• Gian lận (chép / cho chép bài thi, bài tập, báo cáo)
→ trượt, không được thi lại
Trang 28II Kiến trúc hệ thống và liên lạc
Hệ phân tán (NW605)
1 Các kiến trúc hệ thống
2 Tiến trình
3 Liên lạc trong hệ phân tán
4 Các trừu tượng hóa liên lạc
Trang 29Các phong cách kiến trúc
Phân tầng (layered) Hướng đối tượng (object-oriented)
Tách thành phần theo logic xử lý
Tách thành phần theo không gian
và thời gian
Trang 30Kiến trúc tập trung
Mô hình client-server cơ bản
• Server : tiến trình cung cấp dịch vụ
• Client : tiến trình sử dụng dịch vụ
• Client và server chạy trên các máy khác nhau
• Client sử dụng dịch vụ theo mô hình yêu cầu/trả lời
Trang 31Ví dụ client-server
server(void) {
struct sockaddr_in cin, sin;
int sd, sd_client;
sd = socket( AF_INET , SOCK_STREAM , 0 );
bind(sd, ( struct sockaddr *) &sin, sizeof (sin)); //đăng ký dịch vụ
listen(sd, queuesize); //vòng lặp đợi yêu cầu của client
while ( true ) {
sd_client = accept(sd, ( struct sockaddr *)&cin, &addrlen));
recv(sd_client, buffer, sizeof (buffer), 0 ); //nhận yêu cầu
DoService(buffer); //thực hiện yêu cầu, ghi kết quả vào buffer
send(sd_client, buffer, strlen(buffer), 0 ); //gửi trả kết quả
sd = socket( AF_INET , SOCK_STREAM , 0 );
connect(sd, (void*) &sin, sizeof (sin));
send(sd, buffer, strlen(buffer), 0 ); //yêu cầu
recv(sd, buffer, bufsize, 0 ); // nhận kết quả
close(sd);
}
Trang 32Các kiểu phân chia chức năng giữa client và server
1-29
Trang 33Phân tán theo chiều dọc (Multi-tier)
Trang 34Phân tán theo chiều dọc (Multi-tier)
Ví dụ về một server thực hiện vai trò như một client
1-30
Trang 35Phân tán theo chiều ngang
Ví dụ về phân tán theo chiều ngang ở một dịch vụ Web
1-31
Trang 36Kiến trúc đồng đẳng (Peer to peer – P2P)
Mọi tiến trình đều giữ cả hai vai trò server và client
Trang 37Các hệ thống P2P phi cấu trúc
• Đồ thị có cấu trúc ngẫu nhiên
• Dữ liệu lưu tại các nút ngẫu nhiên
• Cập nhật thông tin cấu trúc bằng cách trao đổi
thông tin không đầy đủ với các nút láng giềng
– Mỗi peer giữ một hình ảnh không đầy đủ về mạng – danh sách các nút láng giềng
– Định kì, mỗi nút p chọn một nút q trong danh sách nút
láng giềng của mình
– p và q trao đổi thông tin và danh sách láng giềng
Trang 38– Ví dụ: Distributed hash table (DHT) Thao tác của hệ thống sẽ LOOKUP(key)dẫn
đường yêu cầu tra cứu tới nút có trách nhiệm
Trang 40Mạng superpeer
• Peer thông thường là client của superpeer
• Superpeer là server của các peer thông thường
• Các superpeer đóng vai trò peer của nhau
• Superpeer có thể giữ danh mục lớn, hoặc thực hiện vai trò
broker
Trang 41Mạng edge-server
• Các edge server đặt tại rìa của mạng
– Sao lặp nội dung
– Xác thực người dùng
• Client chỉ liên lạc với edge server nhưng có vẻ như liên lạc với server
trung tâm
• Chủ yếu dùng để phát tán nội dung và ứng dụng
• Content Distribution Network
Trang 42Collaborative Distributed System
Ví dụ: BitTorrent
• Nút tải các đoạn của một file từ nhiều nút khác
• Nút cung cấp các đoạn file cho các nút khác
• Tracker theo dõi các nút đang hoạt động xem chúng chứa những đoạn file
nào
• Đảm bảo sự cộng tác bằng cách phạt những nút ích kỉ
Trang 43Tiến trình và luồng
• Tiến trình (process): một chương trình đang chạy, bao
gồm một hoặc nhiều luồng (thread) đang chạy tuần tự.
• Các tiến trình khác nhau nằm trong một không gian địa chỉ riêng biệt và không truy nhập bộ nhớ của nhau.
• Các luồng thuộc cùng một tiến trình thì cùng sử dụng không gian bộ nhớ của tiến trình đó.
Quy ước trong môn học: gọi mỗi luồng điều khiển là một “tiến trình”
trừ khi các trường hợp có ý nghĩa rõ ràng là luồng.
Trang 44Đa luồng và các hệ phân tán
Ví dụ:
Web client đa luồng
– Trình duyệt Web quét qua nội dung một trang HTML nhận được và nhận ra
là phải lấy thêm vài file nữa.
– Mỗi file được lấy bởi 1 luồng riêng, mỗi luồng thực hiện một yêu cầu HTTP (blocking)
– Khi nhận được các file, trình duyệt hiển thị chúng
Gửi đồng loạt nhiều yêu cầu tới các máy khác (RPC)
– Một client cùng lúc gọi nhiều hàm, mỗi lời gọi hàm do 1 luồng thực hiện
– Client đợi cho đến khi nhận được tất cả các kết quả
– Lưu ý: nếu các lời gọi hàm gửi đến các server khác nhau, ta có thể có tốc độ tăng theo hàm tuyến tính
Trang 45Đa luồng và các hệ phân tán
Tăng hiệu năng:
– Mở luồng mới rẻ hơn nhiều so với mở tiến trình mới
– Dùng server đơn luồng cản trở khả năng mở rộng tới hệ thống multi-processor
– Với client: che dấu độ trễ do mạng bằng cách phản ứng với yêu cầu tiếp theo trong khi đang đợi kết quả của yêu cầu trước
Cấu trúc tốt hơn
– Đa số server chịu đòi hỏi cao về I/O Sử dụng các lời gọi hàm dạng blocking dễ hiểu làm đơn giản hóa cấu trúc toàn cục
– Các chương trình đa luồng có xu hướng gọn hơn và dễ hiểu
hơn do cấu trúc điều khiển đơn giản hơn
Trang 46Thiết kế server
Một server đa luồng
được tổ chức theo mô
hình dispatcher/worker.
Tiến trình đơn luồng Không song song, blocking system call
Luồng Song song, blocking system call
Ôtômát hữu hạn Song song, nonblocking system call
Trang 47Thiết kế server
Mô hình cơ bản: Server là một tiến trình đợi yêu cầu dịch
vụ tại một địa chỉ cụ thể (IP+cổng) Trong thực tiễn có ánh xạ 1-1 giữa một cổng và một dịch vụ.
– Ví dụ: ftp (File Transfer Protocol) dùng cổng 21, smtp (Simple Mail Transfer) dùng cổng 25
Các kiểu server:
– Siêu server: server nghe tại nhiều cổng, cung cấp các dịch vụ độc lập Mỗi khi nhận được một yêu cầu dịch vụ, siêu server tạo một tiến trình con để xử lý yêu cầu
– Server lặp và server tương tranh: server lặp chỉ phục vụ từng client một
Trang 48√ Tăng hiệu năng, đặc biệt khi client được lưu dữ liệu tại các bản sao nội bộ
× Chi phí cao khi khôi phục sau lỗi
× Phải theo dõi client
Stateless server:
Ø Không lưu trữ trạng thái của client (file đã mở, kiểm tra cache của client…)
√ Client và server hoàn toàn độc lập
√ Không phải dọn dẹp khi khôi phục sau lỗi (do không có sự không thống
nhất về trạng thái)
√ Dễ dàng cho sao lặp
× Có thể giảm hiệu năng (liên lạc nhiều hơn, không thể đoán và tải file trước)
Trang 50– Phân tích yêu cầu
– Chuyển tiếp yêu cầu tới server thích hợp
Trang 51Liên lạc
Các tiến trình đang cộng tác cần liên lạc với nhau
– Để đồng bộ hóa và điều khiển
– Truyền thông điệp
• Cơ chế IPC (Inter-process communication) của hệ điều hành
Đó là trong hệ thống một máy tính
Trang 52Liên lạc trong hệ phân tán
Trong một hệ phân tán (nhiều máy tính)
• Chia sẻ bộ nhớ
– Không thể thực sự dùng chung bộ nhớ
– Bộ nhớ dùng chung phân tán
(DSM - distributed shared memory)
• Truyền thông điệp
– Qua mạng
– Nảy sinh độ trễ
– Nảy sinh rủi ro thất bại
– Tính không đồng nhất có thể dẫn đến sự không tương thích
Trang 53Distributed Shared Memory
Giả lập bộ nhớ dùng chung
a) Các trang của không gian
địa chỉ được phân tán
Trang 54Truyền thông điệp
– Đáng tin cậy / không đáng tin cậy
– Có đảm bảo thứ tự thông điệp khi giao
Biểu diễn dữ liệu:
– Marshalling
– Thứ tự byte thấp/cao (little/big endian)
Trang 55Các tầng trong liên lạc của hệ phân tán
1 Các tầng thấp:
– Vật lý, Liên kết dữ liệu, Mạng
– Tầng mạng là giao diện mức thấp nhất của nhiều hệ phân tán
2 Tầng giao vận: cung cấp các tiện ích liên lạc thực sự cho hầu hết
– Các giao thức naming cho phép dễ dàng chia sẻ tài nguyên
– Các giao thức bảo mật dành cho liên lạc an toàn
– Các cơ chế mở rộng, chẳng hạn sao lặp và caching
– Phần còn lại (không có trong middleware) là các giao thức đặc thù của ứng dụng
Trang 57Liên lạc hướng dữ liệu / hướng điều khiển
Liên lạc hướng dữ liệu:
– Tạo điều kiện cho trao đổi dữ liệu giữa các luồng
– Không gian địa chỉ dùng chung, bộ nhớ dùng chung và truyền thông điệp
Liên lạc hướng điều khiển:
– Chuyển điều khiển theo thông điệp
– RPC (gọi hàm từ xa ), RMI (gọi phương thức từ xa)
Nhận xét:
– Phần cứng và hệ điều hành thường cung cấp liên lạc hướng dữ liệu
– Cơ sở hạ tầng ở mức cao hơn thường cung cấp cơ chế liên lạc hướng điều khiển (middleware)
– Nhưng một số hệ điều hành cung cấp RPC, và MPI (Message Passing
Interface) cung cấp liên lạc hướng dữ liệu
Trang 58Liên lạc đồng bộ / không đồng bộ
Liên lạc đồng bộ:
– Bên gửi block cho đến khi thông điệp được nhận
– Bên gửi thường block cho đến khi thông điệp được xử lý và bên gửi nhận được thông điệp trả lời
– Bên gửi và bên nhận phải cùng ở chế độ hoạt động
– Bên gửi đợi yêu cầu, xử lý yêu cầu (nhanh nhất có thể), và gửi trả kết quả
– Mô hình client-server thường dùng liên lạc đồng bộ
Không đồng bộ
– Bên gửi tiếp tục chạy sau khi gửi thông điệp (không block đợi kết quả)
– Thông điệp được xếp vào hàng đợi nếu bên nhận không ở chế độ hoạt động
– Thông điệp được xử lý khi nào thuận tiện cho bên nhận
Đồng bộ / không đồng bộ thích hợp cho các tình huống nào?