• Một hệ thống phân tán có khả năng xử lí đồng thời một bài toán trên nhiều máy tính là một hướng giải quyết các bài toán lớn và đã được chứng minh tính hữu dụng... • Bài toán sẽ phân ra
Trang 1Chương 2 Công nghệ tính toán
lưới và phân tán
Giảng viên: TS Đàm Quang Hồng Hải
TÍNH TOÁN LƯỚI
Trang 2• Tính toán phân tán là tính toán song song
được phân quyền với nhiều máy tính liên lạc với nhau qua một mạng để hoàn tất một
nhiệm vụ chung
• Hệ thống tính toán phân tán còn tạo nhiều
thuận lợi trong việc chia sẻ thông tin trên toàn thế giới
Trang 3Tính toán phân tán và
tính toán lưới
• Hệ thống song song và phân tán cho phép chia sẻ, lựa chọn và kết hợp động các tài nguyên phân tán theo địa lý tại thời điểm thực thi dựa trên sự sẵn
sàng, dung lượng, hiệu năng, giá và những yêu cầu
về chất lượng dịch vụ
• Kỹ thuật lưới là “kỹ thuật cho phép ảo hoá tài nguyên
dự trữ theo yêu cầu, và chia sẻ dịch vụ, tài nguyên giữa các tổ chức”
• Một hệ thống phân tán có khả năng xử lí đồng thời một bài toán trên nhiều máy tính là một hướng giải quyết các bài toán lớn và đã được chứng minh tính hữu dụng
Trang 4Tính toán phân tán
• Để giải quyết được những bài toán rất lớn, thay vì tăng tốc độ tính toán của máy tính người ta sử dụng cùng một lúc nhiều bộ xử
lý
• Bài toán sẽ phân ra thành nhiều phần thực hiện theo cách song song, mỗi phần do
một bộ xử lý riêng giải quyết
• Cách viết chương trình cho vấn đề này
được biết với tên gọi Lập trình song song (Parallel Programming)
Trang 5Hiệu năng của hệ thống
• Độ trễ (Latency) và băng thông
(Bandwidth) là 2 tiêu chuẩn để xác định
hiệu năng của một hệ thống máy tính
– Bandwidth là tốc độ mà dữ liệu có thể đưa vào
từ bộ nhớ đến bộ xử lý - cho biết số lượng phép tính thực hiện được.
– Latency là thời gian chờ để nhận được dữ liệu khi dữ liệu đã chuyển đi.
• Ví dụ: hệ thống có độ trễ là 100 ns Một
phép toán đòi hỏi phải nạp 1 dữ liệu vào
bộ nhớ sẽ phát sinh độ trể nên tốc độ của tính toán sẽ bị giới hạn
Trang 6Kiến trúc hệ thống song
song
• Kiến trúc SIMD - Single Instruction stream,
Multiple Data stream
• Kiến trúc MIMD - Multiple Instruction
stream, Multiple Data stream
• Kiến trúc SPMD - Single Program, Multiple
Data
• Kiến trúc chuyển thông điệp
Trang 7• SIMD (Single Instruction
stream, Multiple Data
stream): đơn vị điều khiển
riêng lẽ gửi cùng câu lệnh
c[i] = a[i] + b[i]
• Với máy tính thi hành cùng câu lệnh, vòng lặp sẽ thi hành nhanh hơn Trong khi đó, với mẫu lập trình
SIMD sử dụng trong cấu trúc chọn lựa, việc thi hành
có điều kiện sẽ làm tổn hại đến hiệu năng của bộ xử
lý SIMD.
Kiến trúc SIMD
Trang 8Kiến trúc MIMD
• Kiến trúc MIMD (Multiple Instruction stream,
Multiple Data stream) cho phép mỗi đơn vị xử lý thi hành những chương trình khác nhau.
• Các hệ thống MIMD có các đặc trưng sau: xử lí
phân tán thông qua một số các bộ xử lí độc lập, chia sẻ tài nguyên chứa trong hệ thống bộ nhớ
chính, mỗi bộ xử lí thực hiện độc lập, đồng thời và thực hiện các chương trình riêng
• Các hệ thống MIMD thực hiện các phép toán theo dạng song song không đồng bộ, các nút hoạt
động hợp tác chặt chẽ nhưng thực hiện độc lập
Trang 9Memory Module2
Memory ModuleN
Kiến trúc MIMD (tiếp)
Trang 10Kiến trúc SPMD
• Kiến trúc SPMD (Single Program,
Multiple Data) cho phép nhiều thực
thể (instance) của cùng một chương
trình thực thi trên các dữ liệu khác
nhau.
• Kiến trúc SPMD có thể diễn đạt bởi
kiến trúc MIMD bằng cách dùng
khối điều khiển if – else với điều
kiện được chỉ định bởi định danh
(identify) của tác vụ.
Trang 11Kiến trúc chuyển thông điệp
• Về mặt luận lý, platform chuyển thông điệp Passing) bao gồm nhiều nút xử lý (Processing Node), mỗi nút sở hữu một không gian địa chỉ riêng.
(Message-• Mỗi nút có thể hoặc là một bộ xử lý đơn hoặc đa xử lý với không gian địa chỉ chung.
• Xu hướng hiện nay là phát triển máy tính song song dạng chuyển thông điệp (Message-Passing Parallel
Computer) Clustered Workstation hoặc Non - Shared – Address Space Multicomputer là những ví dụ về
platform chuyển thông điệp.
• Trên platform này, tương tác giữa các tiến trình
(process) hay tác vụ (task) thực thi trên các nút khác nhau thông qua việc chuyển các thông điệp.
Trang 12Mô hình kiến trúc chuyển
thông điệp
• Hầu hết mẫu chuyển thông điệp hỗ trợ việc thi
hành chương trình khác nhau trên các nút.
• Việc tương tác được thực hiện bởi việc gửi và nhận thông điệp, chính vì vậy các thao tác cơ bản trong mẫu lập trình này Send và Receive.
• Các hàm giao diện lập trình ứng dụng như MPI
(Message-Passing Interface) và PVM (Parallel
Virtual Machine) có đầy đủ các chức năng giúp cho việc lập trình thuận lợi.
• Với platform này, vấn đề cần quan tâm là chi phí của thuật giải, bởi việc truy cập đến bộ nhớ của nút khác đòi hỏi gửi và nhận thông điệp Đó là chi phí
về sự trao đổi dữ liệu giữa các phần tử xử lý.
Trang 13Giao tiếp cơ bản trên mạng
• Trong hầu hết các thuật giải song song, việc trao đổi
dữ liệu giữa các tiến trình là cần thiết và có ảnh hưởng đặc biệt đến hiệu suất của chương trình song song.
• Thời gian t s + mt w là thơi gian cho một trao đổi đơn
giản của m thông điệp giữa 2 tiến trình trên các nút
khác nhau của mạng Trong đó,
– t s là độ trễ hay thời gian khởi động để truyền dữ
liệu.
– t w thời gian truyền 1 dữ liệu.
• Có các giao tiếp cơ bản trên mạng như sau
– Phát tán (broadcast)
– Quy hồi (reduce)
– Phân phát (scatter)
– Thu thập (gather)
Trang 14Thao tác phát tán
• Đây là hình thức truyền đi, nhằm gửi một thông điệp đến tất cả các tiến trình đang hoạt động trên mạng Thao tác này còn gọi là one-to-all broadcast.
• Khảo sát bài toán cần phát tán các thông điệp
đến p-1 tiến trình Để tránh sự tắt ngẽn trên
đường truyền cần quan tâm đến tiến trình nhận
Trang 15Thuật giải broadcast
• Thuật giải broadcast này thực hiện như sau:
– Tiến trình nguồn (source process) lần đầu tiên gởi thông điệp đến một tiến trình khác.
– Bây giờ 2 tiến trình này đồng thời gởi thông điệp đến 2 tiến trình khác (mà chúng đang đợi để nhận thông điệp) – Thao tác tiếp tục cho đến khi tất cả các tiến trình nhận xong dữ liệu.
Trang 16Thao tác quy hồi
• Là dạng đối ngẫu của thao tác broadcast, nên còn được gọi là thao tác all-to-one reduction.
• Trong thao tác quy hồi tất cả các tiến trình được tổ hợp lại
để tích luỹ về một giá trị Thực chất đây là sự thu thập
(gather) nhưng kết hợp với một phép toán nào đó để có kết quả tích lũy sau cùng Chính vì vậy, thao tác quy hồi thường được dùng để tính tổng, tính tích, tìm cực đại, cực tiểu, v.v
Trang 17Thao tác quy hồi
Trang 18Thao tác phân phát và thu thập
• Phân phát là việc gởi từng phần của dữ liệu đến các tiến
trình hoạt động trên mạng Còn thu thập là ngược lại của phân phát, nhằm tập hợp các giá trị riêng từ các thành
phần lại.
Trang 19Môi trường lập trình
• Để thực hiện tính toán song song và phân tán
trên hệ thống chuyển thông điệp, cần một số yếu
Trang 20Môi trường cho tính toán
phân tán
• Phân ly thuật giải hoặc dữ liệu thành các phần riêng và phân bổ những phần công việc này như các tác vụ làm việc đồng thời trên các bộ xử lý
• Hợp tác và trao đổi giữa các tác vụ này
• Có hai bước cơ bản cho các tính toán
truyền thông điệp:
– Tạo ra các tiến trình, tác vụ (process, task)
riêng để thực thi trên các máy tính khác nhau – Thực thi các việc liên quan đến gởi và nhận
thông điệp.
Trang 21Hệ thống chuyển thông điệp
• Hệ thống truyền thông điệp tạo ra môi
trường cho phép người lập trình cài đặt
chương trình tính toán song song
• Môi trường nầy có thể hoạt động trên nhiều chủng loại máy tính khác nhau
• Hầu hết các ứng dụng song song đều được cài đặt trên hệ điều hành UNIX như Solaris, AIX, Linux,
• Bên cạnh đó, môi trường Windows NT/2000/
XP cũng có thể cài đặt các ứng dụng song song do khả năng xử lý đồng thời.
Trang 22• Trên các hệ thống chuyển thông điệp
thường có hai mô hình lập trình:
– Mô hình master – slave.
– Mô hình task – to – task (hay node to node)
• Trong đó mô hình master – slave là sử thể hiện của dạng MPMD, còn task – to – task
là dạng SPMD
Trang 23Mô hình master-slave
• Trong mô hình thiết kế master-slave, một tiến
trình chủ master điều khiển sự hoạt động của các tiến trình còn lại như là các slave thông qua các
định danh (identify) tác vụ hay định danh tiến
trình – thường được gọi là các ID.
• Trong mô hình master-slave, chương trình master
có thể phát sinh và kích hoạt để tạo ra các chương trình slave trên những node khác nhau của hệ
thống Khi đó một tiến trình hoạt động như là một thực thể (instance) của một slave trên node đó.
• Để xác định phần master hay slave, hệ thống
chuyển thông điệp dùng các ID để nhận biết, hoặc thông qua các hàm như _parent() Khi ID bằng 0,
có nghĩa đây là tiến trình đầu tiên, nên là tiến
trình master
Trang 24Sự đồng bộ gửi và nhận
• Việc chuyển thông điệp giữa các tiến trình thực chất là
sử dụng các hàm thư viện send() và receive().
• Trong các hệ chuyển thông điệp, một hàm được gọi là chuyển đồng bộ (Synchronous Passing) nếu nó kết
thúc (return) khi việc truyền thông điệp vừa hoàn
thành.
• Hàm được gọi là gởi đồng bộ (synchronous send) nếu
nó đợi cho đến khi thông điệp được chấp nhận bởi tiến trình nhận Hàm nhận đồng bộ sẽ đợi cho đến khi
thông điệp mà nó mong đợi đi đến.
• Thực chất của các hàm đồng bộ là thực hiện hai hành động: truyền dữ liệu và đồng bộ hóa các tiến trình,
nói cách khác, có sự phối hợp với nhau trong việc gởi
và nhận.
Trang 25Đồng bộ trong việc gửi và nhận
• Đôi khi còn dùng thuật ngữ blocking thay cho thuật ngữ đồng bộ và non-blocking là bất đồng bộ.
Trang 26Các thành phần của tính toán phân tán
Trang 27• Các tiến trình trên máy truyền và máy
nhận thiết lập một kết nối qua mạng IP
bằng socket theo mô hình Client/Server
• Có hai loại socket
– TCP (Transmission Control Protocol)
– UDP (User Datagram Protocol)
Trang 28Client Process
socket() bind() sendto() recvfrom()
Client Process
1 2
3
socket() bind() recvfrom()
Trang 29Remote Procedure Call
• RPC - Remote Procedure Call : gọi hàm từ
xa
• RPC là nền tảng của lập trình phân tán
(distributed programming) Các giao thức xây dựng trên RPC đã xuất hiện từ rất lâu
và có thể đã trở nên quen thuộc
• RPC là một mở rộng của việc gọi hàm
(procedure call) theo cách cổ điển Giờ
đây hàm cần gọi và nơi gọi hàm có thể
nằm ở 2 máy tính khác nhau nối với nhau qua mạng internet
Trang 30Kiến trúc của RPC
• RPC được thiết kế để cung cấp cho việc
truyền tải thông tin giữa client và server
dễ dàng, bảo mật và thuận tiện hơn cho việc đồng bộ hóa các luồng dữ liệu
• Các hàm trong RPC hỗ trợ cho việc truy
cập bất kỳ chương trình nào đòi hỏi
phương pháp giao tiếp từ client đến server
Trang 31Mô hình kiến trúc của RPC
Trang 32Runtime application
programming interface (API)
• Cung cấp giao diện cho RPC tới Clients
hoặc Servers, thông thường, RPC Clients
và Servers sẽ gọi hàm API (giao diện lập
trình ứng dụng) để khởi tạo RPC và chuẩn
bị cấu trúc dữ liệu sẽ được sử dụng để thực hiện cuộc gọi RPC
• Lớp API sẽ quyết định nếu yêu cầu RPC
đến từ marshalling engine hoặc trực tiếp từ client/server đến máy chủ nội bộ hoặc máy chủ từ xa Sau đó lớp API sẽ dẫn đường
cho RPC đến Connection RPC, Datagram
RPC hoặc Local RPC Layers
Trang 33RPC protocol engine
• Connection RPC protocol engine: Được sử
dụng khi RPC yêu cầu giao thức TCP Lớp này
chỉ định sử dụng giao UDP nếu RPC được gửi
đi hoặc nhận được một phi kết nối tới RPC
• Local RPC protocol engine: Được sử dụng khi Server và Client đặt trong cùng một host.
Trang 34Quá trình xử lý của RPC
• Quá trình xử lý của RPC bắt đầu từ phía Client
Ứng dụng từ phía Client sẽ gọi Client stub thay vì client phải viết code triển khai cho hàm đó
• Các stub sẽ được biên soạn và liên kết với các ứng dụng từ phía client trong quá trình phát triển
• Các code của stub sẽ yêu cầu truy vấn những
tham số từ địa chỉ không gian của Client và sau đó chuyển chúng vào thư viện chạy thực của client
• Thư viện chạy thực của client sẽ biên dịch những tham số cần thiết vào định dạng chuẩn NDR
(Network Data Representation) để chuyển giao
cho Server.
Trang 35Quá trình xử lý của RPC (2)
• Khi Server nhận được yêu cầu của RPC(từ phía
client trong nội bộ hoặc client từ xa), các hàm
trong thư viện chạy thực RPC của Server chấp
nhận các yêu cầu và gọi hàm xử lý Server Stub.
• Server stub sẽ truy vấn các tham số từ network buffer và chọn loại NDR20 (hạ tầng 32 bits) hoặc NDR64 (hạ tầng 64 bits) trong NDR Marshalling
Engines, chuyển đổi chúng từ định dạng truyền tải mạng sang định dạng theo yêu cầu
• Các thủ tục từ xa sẽ được chạy, có khả năng xuất
ra các tham số và trả về giá trị, khi hoàn tất, một chuỗi các bước tương tự sẽ trả về dữ liệu cho
Client
Trang 36Quá trình xử lý của RPC (3)
Trang 37Java RMI
• RMI - Remote Method Invocation
• Java RMI là một sản phẩm viết trên Java
của Sun Java RMI là một phần chính của bộ JDK 1.1 và 2 platform.
• Java là một ngôn ngữ độc lập với nền và cho phép các ứng dụng Java truyền tin với các
ứng dụng Java đang chạy trên bất kỳ phần cứng và hệ điều hành nào có hỗ trợ JVM
• Sự khác biệt chính giữa hai mục tiêu là RPC
hỗ trợ đa ngôn ngữ, ngược lại RMI chỉ hỗ trợ các ứng dụng được viết bằng Java.
Trang 38Remote Method Invocation
• Remote Method Invocation (RMI) là một cơ chế gọi phương thức từ xa giữa 2 máy cài đặt máy
ảo Java, dùng để gọi một phương thức trên một đối tượng từ xa giống như trên máy cục bộ.
• RMI hoạt động dựa trên cơ chế stub/skeleton
nghĩa là phát sinh bộ khung sườn của đối tượng remote, đặt trên máy remote và máy local.
• Stubs hoạt động phía client và Sekeleton hoạt động phía server, trong đặc tả mới hiện nay, khi viết
code không cần tạo ra Skeleton nữa, chúng ta chỉ cần tạo ra stub cho client là đủ, phần còn lại, RMI
sẽ lo liệu cho chúng ta.
Trang 39Java RMI (tiếp)
Trang 40Mục đích của RMI
• Hỗ trợ gọi phương thức từ xa trên các đối tượng trong các máy ảo khác nhau
• Hỗ trợ gọi ngược phương thức ngược từ
server tới các applet
• Duy trì sự an toàn kiểu được cung cấp bởi môi trường thời gian chạy của nền tảng
Trang 41Các thành phần của RMI
• Remote Interface: Có nhiệm vụ khai báo các
phương thức cần thiết Lớp phải kế thừa từ lớp
java.rmi.Remote và các phương thức phải định
nghĩa trả lổi “RemoteException”
• Remote Object : sẽ kế thừa từ lớp Remote
Interface và định nghĩa các phương thức được
nêu từ interface đó.
• RMIregistry sẽ là nơi để máy ảo java đăng ký nơi chứa Remote Object, việc thực hiện ở các máy ảo java có chứa lớp Remote Interface sẽ hoạt động như bình thường nhưng nguồn tài nguyên sẽ của lớp đó sẽ được lấy từ máy ảo định nghĩa lớp đó.
Trang 42Lớp trung gian Stub và Skeleton
• Khi có một yêu cầu dưới client, stub có
nhiệm vụ sắp xếp thứ tự mọi tham số (là
object) và truyền lên Server,
• Skeleton thu nạp đối tượng này và xử lývà trả về cho Client
• Một ứng dụng RMI chúng ta trải qua những bước sau:
– Biên dịch các class trên server
– Tạo Stub and Skeleton (qua RMIC)
– Khởi động bộ đăng ký RMI (RMIregistry)
– Sử dụng dịch vụ
Trang 43Công nghệ COM và DCOM
• COM - Component Object Model: là một
công nghệ được Microsoft phát triển để các phần mềm có thể liên kết được với nhau
• Component Object Model (COM) là 1 công nghệ phần mềm cho phép các ứng dụng
xây dựng từ các thành phần nhị phân và
được sử dụng trong nhiều lĩnh vực lập trình
về media, API, Direct Show
• DCOM (Distributed COM) và một phát triển của COM cho các ứng dụng Client/Server phân tán
Trang 44Kiến trúc của COM
• Kiến trúc của COM là Client/Server
• Các Client trong COM truy cập vào đối
tượng thông qua các giao diện thực thi trên đối tượng đó
• Các thành phần giao tiếp với nhau được xử
lý bởi COM runtime