Tải bản đầy đủ (.pdf) (56 trang)

Nghiên cứu ứng dụng tính toán mạng lưới tại Việt Nam dựa trên máy tính cá nhân

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (25.71 MB, 56 trang )

ĐẠI HỌC QUÓC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC T ự NHIÊN
• • • •
* * ** * * * * *
TÊN ĐÈ TÀI:
NGHIÊN CỨU ỨNG DỤNG TÍNH TOÁN MẠNG LƯỚI
TẠI VIỆT NAM DựÀTRÊN MÁY TÍNH CÁ NHÂN
• * •
MÃ SÓ: QT-08-69
CHỦ TRÌ ĐÈ TÀI: ThS. Trịnh Thị Thúy Giang
HÀ NỘI - 2008
1
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC Tự NHIÊN
« • • •
TÊN ĐÈ TÀI:
NGHIÊN CỨU ỨNG DỤNG TÍNH TOÁN MẠNG LƯỚI
TẠI VIỆT NAM DựÁTRÊN MÁY TÍNH CÁ NHÂN
• • •
MÃ SÓ: QT-08-69
CHỦ TRÌ ĐÈ TÀI: ThS. Trịnh Thị Thúy Giang
ĐẠI H Ọ C Q U Ố C G IA HÀ r ọ i
TRUNG TÂM t h ò n g tin TH J VIỆN
HÀ NỘI - 2008
1
ĐẠI HỌC QƯÓC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC T ự NHIÊN
• • * *
'k'k'k'k'k'k’kyc'k
TÊN ĐÈ TÀI:
NGHIÊN CỨU ỨNG DỤNG TÍNH TOÁN MẠNG LƯỚI


TẠI VIỆT NAM DựA TRÊN MÁY TÍNH CÁ NHÂN
• • •
MÃ SỐ: QT-08-69
CHỦ TRÌ ĐÈ TÀI: ThS. Trịnh Thị Thúy G iang
CÁN B ộ THAM GIA: ThS. Hồ Đầc Phương
ThS. Trần Văn Dũng
ThS. Lê Thị Thanh Hải
HÀ NỘI - 2008
2
BÁO CÁO TÓM TẮT
1. Tên đề tài: Nghiên cứu ứng dụng tính toán mạng lưới tại Việt Nam dựa trên
máy tính cá nhân; mã số: QT-08-69.
2. C hủ trì đề tài: ThS. Trịnh Thị Thúy Giang
3. Các cán bộ tham gia:
- ThS. Hồ Đắc Phương, Trường Đại học Công nghệ, ĐHQGHN
- ThS. Trần Văn Dũng, Trường ĐHKHTN
- ThS. Lê Thị Thanh Hải, Trường ĐHKHTN
4. Mục tiêu và nội dung nghiên cứu.
Hiện nay, trên thực tế có rất nhiều bài toán yêu cầu khối lượng tính toán lớn mà
không thể sử dụng các máy tính thông thường, chính vì vậy xuất hiện những siêu
máy tính để giải quyết các bài toán đó, tuy nhiên đi kèm theo nó cũng là những chi
phí vô cùng lớn.
Tính toán mạng lưới chính là công nghệ được đưa ra để giải quyết hai vấn đề:
Tận dụng các tài nguyên dư thừa và xử lý tính toán lớn với chi phí rẻ
Hiện nay, có rất nhiều mô hình công nghệ nền tảng để xây dựng các ứng dụng
tính toán lưới, rất nhiều công cụ đã được phát triển như một framework để phục vụ
việc thực thi và phát triển những ứng dụng chạy trên nền tính toán lưới, ví dụ
Globus, Boinc, Alchemi Trong đó Alchemi là một bộ công cụ phát triển trên nền
tảng .NET, nhưng vẫn hỗ trợ các ứng dụng chạy trên những nền tảng khác nhau hoạt
động, và cũng hồ trợ tích hợp với các ứng đụng chạy ưên bộ công cụ đã được phát

triển khá lâu Globus [1].
Các nội dung nghiên cứu:
- Nghiên cứu các vấn đề liên quan đến môi trường tỉnh toán mạng lưới
và bộ công cụ Alchemi (công cụ phát triển trên nền tảng .NET và được cung
cấp mã nguồn trên Internet [1]).
- Nghiên cứu đưa ra một số giải pháp và phát triển một số tính năng mới
cho bộ công cụ Alchemi.
- Một số kết quả sau khi triển khai mô hình với bộ công cụ Alchemi.
3
5. Các kết quả đạt được.
- Viết được một bộ tài liệu giới thiệu về bộ công cụ Alchemi.
- Đã nghiên cứu và phát triển một số tính năng mới cho bộ công cụ
Alchemi.
- Đã gửi đáng 01 bài báo ở tạp chí Bưu chính Viễn thông và Công nghệ
thông tin của Bộ Bưu chính Viễn thông.
6. Tình hình kỉnh phí của đề tài (hoặc dự án).
ĐƠN VỊ QUẢN LÝ
(Ký và ghi rõ họ tên)
CHỦ TRÌ ĐỀ TÀI
(Ký và ghi rỗ họ tên)
PG S.TS. Đỗ Q uang Huy
ThS. Trịnh Thị Thúy G iang
TRƯỜNG ĐẠI HỌC KHOA HỌC T ự NHIÊN
*HÓ HIỆU IRbỏNG
MỤC LỤC
■ •
Phàn I. GIỚI THIỆU CHUNG
6
I. Đặt vấn đề 6
II. Bộ công cụ Alchemi 6

2.1. Giới thiệu chung
.
6
2.2 Kiến trúc 8
Phần II. PHÁT TRIẺN ALC H EM I
19
I. Xây dựng module tính toán dư thừa trên Alchemi: 19
1.1 Giới thiệu tính toán dư thừa: 19
1.2 Kỹ thuật Homogeneous Redundancy (HR): 20
1.3 Xây dựng modul tính toán dư thừa 20
1.4 Xây dựng module xác nhận tính đúng đắn của kết quả

24
II. Thực thi chương trình sau khỉ đã thêm các module phát triển thêm:

26
Phàn III. XÂY D ựNG ỨNG DỤNG RAYTRACING DƯA t r ê n ALCHEMI27
I. Giói thiệu Raytracing 27
1.1 Lịch sử: 27
1.2 Tổng quan và khái niệm: 27
1.3 Ưu nhược điểm của phương pháp Raytracing: 28
1.4 ứng dụng của Raytracing: 29
1.5 Các dự án đã phát triển: 31
1.6 Xu thế phát triển Raytracing: 32
II. Thuật toán: 33
III.Song song hóa quá trình tính toán thuật toán ray tracing
34
3.1 Mô hình tính toán: 34
3.2 Cân bàng tả i 35
Phần IV. TH ựC N G H IỆM 37

I. Mô hình triển khai 37
II. Kết quả thu được 37
Phần V. KÉT LUẬN 44
TÀI LIỆU THAM KH ẢO 45
5
Phần I. GIỚI THIỆU CHUNG
I. Đặt vấn đề
Con người đang sổng trong giai đoạn của sự bùng nổ về công nghệ thông tin.
Các thiết bị phần cứng máy tính ngày càng trờ nên hoàn thiện và có sức mạnh lớn
hơn nhiều so với các thiết bị trước đây. Mặt khác giá thành cũng giảm và điều đó
giúp cho máy tính có mặt tại mọi nơi trên thế giới, có mặt trong mọi công việc của
con người, từ công kinh doanh đến sản xuất, nghiên cứu khoa học. Tuy nhiên, các
ứng dụng thông thường chỉ mới sử dụng được một phần nhỏ năng lực xử lý trên
tính, do đó dẫn đến sự lãng phí rất lớn.
Những bài toán có khối lượng tính toán khổng lồ mà nếu dùng máy tính thông
thường có thể phải mất đến vài năm để hoàn thành (ví dụ tạo một bộ phim 100 phút,
với 24 frame/s bàng thuật toán Raytracing, có thể mất đến 6000 ngày tính toán trên
máy tính, tương ứng với 16 năm chạy trên 1 CPU thông thường [2]). Những siêu
máy tính được phát triển để giải quyết những bài toán đó, nhưng giá thành của
chúng quá đắt nên đôi khi không phù hợp.
Tính toán lưới là công nghệ được đưa ra để giải quyết hai vấn đề trên:
o Tận dụng các tài nguyên dư thừa
o Xử lý tính toán lớn với chi phí rẻ
Với sự phát triển của công nghệ tính toán lưới hiện nay, rất nhiều công cụ đã
được phát triển như một framework để phục vụ việc thực thi và phát triển những
ứng dụng chạy trên nền tính toán lưới, ví dụ Globus, Boinc, Alchemi Trong đó
Alchemi là một bộ công cụ phát triển trẽn nền tảng .NET, nhưng vẫn hỗ trợ các ứng
dụng chạy trên những nền tảng khác nhau hoạt động, và cũng hỗ trợ tích hợp với các
ứng dụng chạy trên bộ công cụ đã được phát triển khá lâu Globus [1].
II. Bộ công cụ Alchemi

2.1. Giới thiệu chung
Trong bối cảnh các thư viện và framework dành cho tính toán mạng lưới chủ
yểu nằm trên nền Linux, Alchemi xuất hiện và trở thành một trong những
framework hiếm hoi hoạt động trên nền .NET. Bản thân là một framework mã
nguồn mở, Alchemi cung cấp khả năng linh hoạt cho người sử dụng thiết kế và xử
lý các ứng dụng desktop trên hệ thống các máy tính được kết nổi qua mạng để trơ
thành một máy ảo siêu mạnh (virtual supercomputer). Đề tài trình bày tổng quan về
Alchemi và một ứng dụng xây dựng trên bộ công cụ Alchemi.
6
Trong khi khái niệm về tính toán trên lưới khá đơn giản thì thực tế của việc
triển khai tính toán mạng lưới phải đương đầu với một số thách thức. Những yểu tố
có thể kể ra như tính bảo mật, tính hỗn tạp, tính tin cậy, nền tảng phần mềm, lập lịch
(scheduling) và quản lý tài nguyên. Microsoft .NET Framework cung cấp một công
cụ mạnh để giải quyết tất cả những vấn đề trên, đặc biệt hỗ trợ cho những thực thi từ
xa (qua .NET Remoting và web service), đa luồng (multithreading), bảo mật, lập
trình không đồng bộ, thực thi có quản lý (managed execution) và phát triển đa ngôn
ngữ (cross-language development) khiến nó trở thành một nền tảng (platform) lý
tưởng cho các phần mềm tàng giữa của lưới. Được xây dựng trên nền .NET,
Alchemi bao gồm những thành phần sau:
- Chương trình (file chạy window) để xây dựng một tính toán mạng lưới
- Các hàm .NET API và công cụ cho phép phát triển các ứng dụng và tích hợp
các ứng dụng đã phát triển trên nền tảng khác
Alchemi được xây dựng dựa theo mô hình master-vvorker, trong đó một thành
phần trung tâm đứng ra phân phát các đơn vị xử lý song song và quản lý chúng. Đơn
vị xử lý nhỏ nhất trong mô hình xử lý song song của Alchemi là thread, nó bao gồm
hàm xử lý cũng như dữ liệu. Một ứng dụng lưới được định nghĩa đơn giản là một
ứng dụng có thể chạy trên hệ thống lưới và bao gồm một tập hợp các thread, ứ ng
dụng hay thread đều được trừu tượng hóa trong mô hình hướng đối tượng của
Alchemi.
Framework của Alchemi cho grid được xây dựng với mục tiêu làm cho cấu

trúc của grid và phát triển phàn mềm grid càng đơn giản càng tốt, đảm bảo được tính
mềm dẻo, linh hoạt, tin cậy và khả năng mở rộng. Những tính năng chủ đạo được hỗ
trợ bởi Alchemi là:
- Các cluster nền Internet tạo thành từ các máy tính cá nhân không cần hệ
thống chia sẻ file.
- Hệ thống các cluster để tạo ra hệ thống grid có tính cấp bậc và cộng tác cao.
- Lập trình luồng grid hướng đối tượng
- Giao diện web service hỗ trợ môi trường grid thông qua các thành phần môi
giới tài nguyên (resource broker component)
Thiết kế cho một môi trường grid nhiều tầng sử dụng Alchemi và một số công
nghệ grid khác như Globus Toolkit được thể hiện ở hình vẽ 1. Gridbus Grid Service
Broker (GSB) được thiết kế để triển khai với tài nguyên grid sử dụng Globus được
mở rộng để làm việc trên nền tài nguyên grid sử dụng Alchemi thông qua giao diện
7
web service đa nền của Alchemi. Trong môi trường này, các ứng dụng grid có thể
được tạo bằng cách sử dụng mô hình luồng grid của Alchemi hoặc mô hình lập trình
parameter-sweep của Gridbus broker, ứ ng dụng được thiết kế sử dụng mô hỉnh
hướng luồng grid của Alchemi (viết trên nền .NET) chạy trên các nút của Alchemi
trong khi các ứng dụng khác như ứng dụng parameter-sweep có thể được chạy trên
nút của Alchemi hoặc Globus.
Alchem ì Jobs
Afclu.’ I— r t.£fm 1 lY—’il
Grid T hreads
A lchem i
e - S d e n c e
Applicalion
e-Business
Application
~ - r " ~ —
e-Commerce

Application
e-Engineering
Application
A lchem i .NET API
{Object-Oriented Grid Thread Programming
i Environment)
Precompiled executables
Anv lanauaae
L llrliu u m e illj •• - 7 - -—= —

; srr:——


N ET languag e , e g . c # , Managed C++, VB. NET Parametric Modeling Environment
Gridbus Grid Service Broker (GSB)
A iơiem i A ctuato r Globus Actuator
■ M H r
jm m BEaa— HSjjflwmww
r» mp *7« w+t'y y.T • - ■ * JL "■
Windows-based machines with ,NET
Framework
:lass OS-based machines
Hình I
2.2 Kiến trúc
2.2.1. Thành phần
Alchemi đưa ra bốn thành phần phân tán như trong hình 2, được thiết kế để
hoạt động dưới 3 cách sử dụng.
8
Hình 2
Manager

Manager quản lý thực thi các ứng dụng grid và cung cấp dịch vụ liên kết với
quản lý thực thi luồng. Các Executor đăng kí với Manager qua đó để giúp Manager
kiểm tra tính sẵn sàng của chúng. Luồng được gửi đi tót Owner được đặt vào một
khối chung (pool) và được lên kế hoạch để được thực thi trên các Executor rỗi. Một
mức độ ưu tiên dành cho từng luồng có thể được thiết lập ngay khi nó được tạo tại
Owner, nhưng luồng sẽ được đánh mức ưu tiên cao nhất nếu không thiết lập mức ưu
tiên. Executor trả về luồng đã được thực thi cho Manager và được chuyển tới Owner
tương ứng.
Executor
Executor chấp nhận các luồng từ Manager và thực thi chúng. Một Executor có
thể được chỉnh sửa để chuyên biệt (delicated), có nghĩa tài nguyên có thể được quản
lý tập trung bởi Manager, hoặc không chuyên biệt (none-delicated). có nghĩa tài
nguyên được quản lý trên một nền tự nguyện khi ở chế độ screen save hoặc được đặt
chế độ bởi người sử dụng. Đối với những thực thi không sẵn sàng sẽ có giao tiếp
một đường (one-way communication) giữa Executor và Manager. Trong trường hợp
9
này, tài nguyên mà Executor sử dụng được quản lý trên một cơ sở tự nguyện bời nó
đòi hỏi luồng được thực thi từ Manager. Khi giao tiếp hai đường khả thi (two-way
communication) và những thực thi yêu cầu Executor mở một giao diện (IExecutor)
để Manager có thể giao tiếp trực tiếp với nó. Như vậy, mô hình thực thi của
Alchemi tạo ra hai lợi ích:
- Quản lý tài nguyên mềm dẻo như tập trung quản lý và thực thi chuyên biệt
(dedicated execution) đối đầu với quản lý phi tập trung và thực thi không chuyên
biệt (none-dedicated execution)
- Triển khai mềm dẻo dưới sự ràng buộc của mạng như các thành phàn có thể
được triển khai không chuyên biệt khi mà giao tiếp hai đường không được yêu cầu
hoặc không khả thi (trong trường hợp đằng sau firewall hoặc NAT/proxy server)
Do đó, thực thi chuyên biệt sẽ phù hợp khi Manager và Executor cùng trên một
LAN trong khi thực thi không chuyên biệt sẽ thích hợp khi Manager và Executor kết
nối thông qua Internet.

Owner
ứ n g dụng grid được tạo sử dụng các API (Application Program Interface) của
Alchemi được thực thi trên các thành phần của Owner. Owner cung cấp một giao
diện giữa lập trình viên và grid. Từ đây Owner sở hữu ứng dụng và cung cấp dịch
vụ phối hợp với quyền sở hữu của một ứng dụng và những luồng hợp của nó. Owner
chuyển luồng tới Manager và thu lại những luồng đã xử lý như một lập trình viên
ứng dụng thông qua các hàm API.
Cross-Platform Manager
Cross-Platform Manager là một thành phần tuỳ chọn của Manager, là một giao
diện chung thể hiện phần chức năng của Manager để Alchemi có thể quán lý thực
thi các tác vụ grid độc lập. Tác vụ được đưa tới Cross-Platform Manager được dịch
sang mẫu mà Manager hiểu được (như luồng grid), sau đó được liệt kê và thực thi
bình thường. Do đó, thêm vào khả năng hỗ trợ grid của các ứng dụng đã có, Cross-
Platform M anager trợ giúp những phần mềm tầng giữa khác làm việc được với
Alchemi trên bất cứ nền tảng nào mà hỗ trợ web service (như Gridbus Grid Service
Broker).
2.2.2. Cấu hình hệ thống
Những thành phần được trình bày ở trên cho phép Alchemi tạo những cấu hình
grid sau:
- Desktop cluster grid
10
- Multi-cluster grid
- Cross-platform grid (grid toàn cầu)
- Cluster (desktop grid)
Triển khai cơ bản nhất là một cluster (được thể hiện ở hình 3) bao gồm một
Manager và nhiều Executor được cấu hình để kết nối với Manager. Một hoặc nhiều
Owner có thể thực thi ứng dụng trên cluster thông qua kết nối với Manager. Môi
trường này phù hợp với việc triển khai trên LAN cũng như Internet. Hoạt động của
các Manager, Executor và Owner trong cluster đã được mô tả ở trên
Multi-cluster

Một hệ multi-cluster được tạo bằng cách kết nối nhiều Manager trong một mô
hình phân cấp (hình 4). Nhưng mô hình single-cluster, bất cứ một Executor và
Owner nào đều có thể kết nối với một Manager ở bất cứ tầng nào trong hệ phân cấp.
Một Executor và Owner trong một multi-cluster kết nối với một Manager giống như
trong một cluster và những hoạt động tương ứng không có gì khác biệt.
Chìa khoá để xây dựng multi-cluster trong kiến trúc Alchemi là Manager xử sự
giống như một Executor đối với một Manager khác bởi Manager được tích hợp vào
trong giao diện của Executor. Một Manager tại mỗi tầng ngoài trừ tầng cao nhất
trong cấu trúc phân tầng được cấu hình để kết nổi với một Manager ứ tầng cao hơn
và nó được Manager ở tầng cao hơn đối xử giống như một Executor. Mô hình này
phù hợp với việc triển khai trên Internet.
Alchemi Owner
Alchemi Manager
Alchemỉ Executor
Alchemi Cross
Platform Manager
Hình 3
11
o
Hình 4
Một khi Owner chuyển ứng dụng grid tới từng Manager, mỗi Manager có
những luồng "địa phương" chờ để thực thi. Như đã nói, các luồng được đăng kí với
quyền ưu tiên cao nhất nếu không đăng kí (trừ khi quyền ưu tiên được đánh trong
quá trình tạo) và các luồng được lên kế hoạch và thực thi bình thường bởi những
Executor địa phương của Manager. Một Executor trong hoàn cảnh này hoàn toàn có
thể là một Manager trung gian, bởi nó được đối xử như một Executor bởi Manager
tầng trên. Trong trường hợp này sau khi nhận một luồng từ Manager tầng cao hơn,
nó được lên lịch nội bộ bởi Manager trung gian với quyền ưu tiên giảm đi một bậc
và được thực thi bình thuờng bởi các Executor nội bộ (một lần nữa, những Executor
này lại có thể là Manager trung gian).

12
Ngoài ra có thể xảy ra tình huống khi một Manager muốn chỉ một luồng tới
một trong số những Executor nội bộ (một hoặc hom có thể là Manager trung gian).
Nhưng không có luồng nội bộ nào chờ để thực thi. Trong trường hợp này, nếu
Manager là một Manager trung gian, nó sẽ yêu cầu một luồng từ Manager ờ tầng
cao hơn của nó, giảm độ ưu tiên đi một và lên lịch nội bộ cho nó.
Trong tất cả các trường hợp, hiệu quả của việc giảm độ ưu tiên đi một tương
đương với một luồng càng gần một Executor xử lý nó bao nhiêu thì quyền ưu tiên
mà nó được thực thi càng cao. Nó cho phép một phần của Alchemi grid được quản
lý có thể được chia sẻ bởi các tổ chức khác để tạo thành sự hợp tác mà không gặp
bất kì xung đột nào đối vói lợi ích của người dùng nội bộ.
Giống Executor, một Manager trung gian phải được cấu hình cho cả thực thi
chuỵên biệt lẫn không chuyên biệt. Không chỉ hoạt động như Executor, nó vẫn đảm
bảo duy trì quản lý và triển khai mềm dẻo dưới một mạng được quản lý nghiêm
ngặt.
Cross-Platform Grid
Cross-Platform Manager có thể được sử dụng để khởi tạo một grid gióng như
mô hình grid toàn cầu cổ điển. Một thành phần của phần mềm tầng giữa của grid
như một broker có thể sử dụng web service của Cross-Platform Manager để thực thi
các ứng dụng đa nền trên các nút của Alchemi (cluster hoặc multi-cluster) một cách
ổn thoả.
13
2.2.3. Thiết kế và thực thi
Hình 5
14
$
A
Grid
Application
Dew elopei

Instantiate
ApplicationlD:=
NeuuAp plication
u
AddDependeneies
- W .
SetDependencies
u
stj rtThread
StartThread
-W-
ScheduleThiead
I
{threadsToStart}
GeiFinishedThieads
' [f i n ish ed T h re
a
ds]: T h re
a
d F in ish e d
• u
ApplicaticnFinished
{uivfinishedThieads}
Hình 6
15
Hình 7
Cài đặt:
Cách thức hoạt động của Alchemi
Để cài đặt các thành phần của Alchemi cần phải cài đặt tối thiểu Microsoft
•NET framework 1.1. Ngoài ra Manager yêu cầu phải có SQL Server 2000 hoặc

MSDE 2000 hoặc các phiên bản về sau.
Các chương trình Manager và Executor có thể cài đặt được ở hai chế độ:
- Cài đặt như một ứng dụng desktop
- Cài đặt như một dịch vụ của Window (window service - hỗ trợ trên các hệ
điều hành Window N T '2000, XP 2003)
Việc xây dựng một tính toán mạng lưới đơn giản gồm các công việc sau:
16
- Người dùng phát triển ứng dụng dựa trên các API của Alchemi và đăng ký
ứng dụng với Manager
- Cài đặt Manager lên một máy trung tâm có thể kết nối tới các máy có chức
năng xử lý
- Cài đặt Executor lên các máy có chức năng xử lý, nói tới máy trung tâm chứa
Manager
Phát triển ứng dụng tính toán lưới trên Alchemỉ:
Một tính toán mạng lưới có thể coi như một máy tính ảo với nhiều CPU có
trong nó, Alchemi lả một bộ công cụ trừu tượng tính toán mạng lưới theo quan điểm
này.
Alchemi hỗ trợ hai mô hình kết cấu ứng dụng song song.
- Mô hình phân việc (File-Based Jobs): Tính toán mạng lưới truyền thống được
trừu tượng hóa như một cỗ máy ảo với đơn vị xử lý nhỏ nhất là một tiến trình. Đặc
tả một công việc thường bao gồm file input, file output và một chương trình thực
thi. Với mô hình như vậy việc phát triển phần mềm chạy trên tính toán mạng lưới
bao gồm việc xử lý với các file input, và output.
- Mô hình thứ hai mà Alchemi hỗ trợ cung cấp một cách trừu tượng thấp hơn,
trong đó đơn vị xử lý nhỏ nhất là một Thread. Bởi vậy người lập trình chỉ phải xử lý
với các Thread và ứng dụng trong mạng lưới, do đó chuyên tâm vào ứng dụng hơn
là các chi tiết khác ngoài phát triển ứng dụng.
Với hai mô hình trừu tượng hóa công việc như trên, Alchemi cung cấp một
cách thức lập trình rất tiện lợi và đơn giản cho người lập trình. Người phát triển ứng
dụng chạy trên tính toán mạng lưới chỉ cần thực thi một số thủ tục Alchemi đã định

sẵn là có thể đưa ứng dụng chạy trên một nền tính toán lưới.
Công việc phát triển một ứng dụng gồm hai phần:
- Tạo phần xử lý công việc. Tạo một lớp kế thừa giao lớp Gthread (hoặc GjobJ
và viết phần xử lý bên trong hàm Start().
- Khai báo ứng dụng: ử ng dụng trong Alchemi được trừu tượng hóa là lớp
GApplication. Việc khai báo hay khởi tạo ứng dụng bao gồm:
+ Kết nối đến Manager, có thể sử dụng hai lớp có sẵn trong thư viện lập trình
của Alchemi là GConnection (dùng cho ứng dụng Console), GConnectionDialog
(dùng cho ứng dụng Winform) để tạo kết nối, hoặc gán cho thuộc tính Connection
17
ŨA - Ọ C QUC c
TRUNG TÂM TUÔN
GIA Hy
D r / _ u i
của lớp Gapplication các giá trị như ip của Manager, port, user và password trên
Manager.
+ Khai báo các file gửi kèm theo công việc (ví dụ file dữ liệu) qua thuộc tính
Manifest. Các dữ liệu gửi kèm theo có thể là các Thread, hay file độc lập trên đĩa
cứng.
+ Tạo các Thread cho ứng dụng bàng cách sử dụng thuộc tính Threads của lớp
Gapplication. Thuộc tính này đại diện cho tất cả các Thread cần phải xử lý của ứng
dụng.
+ Ke thừa hai hàm ApplicationFinished, và ThreadFinished để xử lý sự kiện
khi ứng dụng kết thúc, hay một Thread đã được xừ lý.
+ Gọi hàm StartQ của lớp Gapỉication để bắt đầu thực thi ứng dụng.
18
Phần II. PHÁT TRIẺN ALCHEMI
Alchemi được thiết kế theo mô hình hướng đối tượng trong môi trường .NET,
đã được công bô mã nguồn để các lập trình viên trên thế giới có thể tìm hiểu và phát
triên tiêp. Tại thời điêm hiện nay, Alchemi mới bao gồm các tính năng cơ bản để

thiêt lập một tính toán mạng lưới đủ lớn. Nhưng chưa có được một số tính năng mà
các môi trường khác đã cung cấp như tính bảo mật, hay tính toán dư thừa. Đề tài
này xin trình bày việc phát triển và tích hợp thêm một số tính năng cho Alchemi.
Các module đã phát triển thêm:
- Tính toán dư thừa (Redundancy computing)
- Đảm bảo tính đúng đắn của kết quả
I. Xây dựng module tính toán dư thừa trên Alchemi:
1.1 Giới thiệu tính toán dư thừa:
Tính toán lưới có thể mang lại một khả năng tính toán lớn với giá thành thấp so
với những siêu máy tính. Tuy nhiên một vấn đề nảy sinh là các kết quả được tính
toán từ các máy tính tình nguyện có thể có lỗi (cố tính hoặc không cố tình) dẫn đến
kết quả trả về sai [2]. Nút trung tâm phân phổi công việc, các nút con nhận công
việc tính toán và trả về kết quá. Quá trình đó có thể xảy ra các trường hợp sau:
- Kẻt quả được tính toán hoàn toàn chính xác
- Kết quả tính toán không chính xác
- Nút con không tải được dữ liệu từ server về
- ứ n g dụng tại nút con bị lỗi
Việc kết quả sai lệch có thể do một sổ nguyên nhân sau [3]:
- Hardware malfunctions: Các máy tính khi thay đổi “clock rate” có thể dẫn
đến việc lỗi bit. Những lỗi này có thể xảy ra khi tính toán dấu phẩy động do đó kết
quả tính toán là sai lệch.
- Incorrect software modifications: Một số dự án cung cấp mã nguồn mở cho
người tham gia tải về, do đó họ có thể sửa đổi nội dung của chương trình, điều đó có
thể đẫn đến kết quả trả về sai lệch.
- Malicious attack: Hiểm họa do kẻ xấu cố tình gửi kết quả sai đến.
Các hiện tượng lỗi này khiến chương trình chạy không đúng, vì vậy cần có
biện pháp đảm bảo một kết quả đúng. Tính toán dư thừa là một biện pháp đưa ra để
khác phục hiện tượng này. Kỹ thuật tính toán đư thừa gửi một công việc tới nhiều
máy tính đẽ xử lý, sau đó kết quả thu về được so sánh với nhau và tìm cách để đưa
ra một kết quả đúng.

Alchemi là một bộ công cụ mới bởi vậy chưa được xây dựng khả năng tính
toán dư thừa, việc xây dựng một module cung cấp khả năng cho Alchemi là cần
thiết.
Việc phát triển module tính toán dư thừa có thể dựa trên kỹ thuật Homgeneous
Redundancy (đã được Boinc một dự án tính toán lưới khác sử dụng).
1.2 Kỹ thuật Homogeneous Redundancy (HR):
Khái niệm:
Kỹ thuật Homogeneous Redundancy là tính toán trên cùng một mẫu công việc
(input - output - file thực thi giống nhau) trên những máy tính có khả năng tương
đương nhau (ví dụ khả năng tính dấu phẩy động)
Mô tả:
HR chia các máy tham gia thành nhiều lớp tương đương nhau về mặt tính toán
(hai máy tính sẽ thuộc cùng một lớp nếu chúng trả về kết quà giống nhau trên cùng
một công việc). Một mẫu công việc sẽ chỉ được gửi đi tới các máy thuộc cùng một
lớp.
Có 3 tùy chọn khi phân lớp:
0 : Tất cả các máy đều thuộc chung một lớp
1 : Phân lớp rố ràng nhất với 80 lớp (4 hệ điều hành và 20 loại CPU)
2 : Phân lớp đơn giản với 4 lớp phân theo hệ điều hành: Windows, Linux, Mac-
PPC và Mac-Intel
1.3 Xây dựng ntoduỉ tính toán dư thừa
Để phát triển module tính toán dư thừa cho Alchemi, trước tiên phải tìm hiểu
cách hoạt động của bộ điều phối công việc (Scheduler) của Alchemi và các tiến
trình gửi và nhận công việc giữa ba thành phần trong Alchemi là: ứng dụng
(Application), Bộ quản lý (Manager), Bộ xử lý (Executor, hay một ứng dụng độc
lập).
H oạt động của Alchem ỉ:
Trong kiến trúc của Alchemi, Alchemi.Core là thư viện khung của toàn bộ
chương trình. Thư viện Core bao gồm các lớp định nghĩa các giao diện để thực thi
với các thành phần như Manager, Executor, Owner, tương ứng với các giao diện

20
IManager, IExecutor, IOwner và một số các lớp quan trọng khác như Gnode (là lớp
trừu tượng (abtract) đại diện cho một nút hay thành phần), lớp GConnection (đùng
đê tạo kêt nôi), hay các lớp OwnEndPoint, RemoteEndPoint (đại diện cho chính
máy tính nội bộ hay máy tính ờ xa)
Việc nhận và gửi công việc, hay lập lịch cho công việc được xử lý tất cả trên
Manager qua một lớp đại diện cho bộ Scheduler cùa Manager, mặc định trong mã
nguôn của Alchemi là lóp DefaultScheduler (kế thừa giao diện IScheduler - giao
diện định nghĩa các hàm cơ bản của việc lập lịch). Bộ lập lịch mặc định
DefaultScheduler sẽ tìm trong cơ sờ dữ liệu công việc có mức ưu tiên cao nhất và
gửi đi khi có máy tính sẵn sàng nhận công việc.
Công việc sau khi được xử lý bởi các Executor hay một ứng dụng động lập
được gửi trả về Manager qua hàm ExecutorThreadFinished(id) thuộc giao diện
Imanager. Hiện tại, ngay khi kết quà được gửi về, Alchemi mặc định coi đó là kết
quả đúng và lập tức cập nhật vào cơ sờ dữ liệu.
Tiến trình gửi nhận công việc có thể hình dung theo sơ đồ dưới (Hình 8)
Hình 8: Hoạt động của Alchemi
Hoạt động của Alchemi sau khi thêm module tính dư thừa:
Hoạt động của việc gửi nhận công việc như trẽn có thê xảy ra những trường
hợp như đã giới thiệu ở phần đầu. Công việc phát triển thêm module tính toán dư
thừa vào trong Alchemi bao gôm:
- Thêm thuộc tính Redundancy cho Manager, thuộc tính có thê được tùy chọn
tại giao diện mới cùa M anager (trong tab Option).
21
- Xây dựng một bộ lập lịch mới (HRScheduler) thực thi giao diện Ischeduler.
- Xây dựng bộ chuẩn hóa (MValidator)
- Xây dựng lớp MValidatorCollection quản lý các bộ đồng hóa
Thuộc tính Redundancy được thêm vào trong lớp Manager. Thuộc tính
Redundancy xác định sô lần một công việc được tính dư thừa, cũng như số kết quả
trả về để so sánh đưa ra kết quả chính xác.

Alchemi cung cấp một giao diện chuẩn cho các bộ lập lịch là IScheduler, để
tạo một bộ lập lịch mới cần thiết phải thực thi giao diện IScheduler. Trong giao diện
IScheduler, hàm GetNextAvailableThread() sử đụng để điều phối công việc, mục
đích trả lại định danh của Thread trong cơ sở dữ liệu cần xử lý, công việc điều phổi
công việc để thêm module tính toán dư thừa sẽ viết lại hàm này. Bộ lập lịch mới
(HRScheduler) sẽ có nhiệm vụ phân bố một công việc nhiều lần, số lẩn phụ thuộc
vào tham sỏ Redundancy. Trong Alchemi, dữ liệu công việc sẽ chỉ được lưu trong
một kho chứa duy nhất, việc trao đổi công việc sẽ thông qua định danh của công
việc đó. Vì vậy việc tăng số lần của một công việc không ảnh hưởng tới việc lưu trữ
trong cơ sở dữ liệu, bởi bộ lập lịch chi gửi thuộc tính định danh (id) cùa công việc
đó. Việc phân bố một công việc nhiều lần cho các tài nguyên khác nhau sẽ dẫn tới
việc tăng thời gian tính toán và phải sừ dụng nhiều tài nguyên cho một công việc.
Đẻ tối ưu hóa công việc này, chúng tôi sử dụng thuật toán lập lịch dựa trên kỹ thuật
tổi ưu hóa của nhóm bầy. Với cách làm này module tính toán dư thừa thật sự đã phát
huy được ưu điểm của nó.
Lớp M Validator đại diện cho bộ chuẩn hóa được xây dựng, nó bao gồm các
thuộc tính xác định các Thread cần chuẩn hóa ( thuộc tính Threads), và các hàm
chuẩn hóa ( hàm CompareTwoThread() so sánh hai Thread, và IsFinished() xác định
công việc đã được chuẩn hóa chưa). Bộ chuẩn hóa (lớp MValidator) có nhiệm vụ
thu thập các kết quả tính được từ một công việc, so sánh các kết quả với nhau và
đưa ra kết luận. Nếu các kết quả so sánh không có sự sai lệch nào bộ chuẩn hóa sẽ
báo công việc kết thúc, ngược lại coi như công việc đó chưa được tính và sẽ được
tính lại. Việc so sánh các kết quả của bộ chuẩn hóa được tiến hành bằng cách so
sánh từng byte một, vì vậy chỉ cần có một byte khác nhau giữa hai kết quả sẽ dẫn
đến việc tính lại toàn bộ công việc đó. Trước khi nhận một kết quả đã xử lý và cập
nhật cơ sở dữ liệu qua hàm Executor_ThreadFinished(), các kết quả sẽ được đưa vào
một bộ Validator. Kết quả sẽ chỉ được cập nhật trong cơ sờ dữ liệu khi hàm
IsFinishedQ của lớp M Validator trà lại kết quả đúng.
22
Mỗi công việc sẽ có riêng một bộ chuẩn hóa nhằm đảm bảo tính đúng đắn của

kết quả công việc đó. Lớp MvalidatorCollection làm nhiệm vụ lưu trữ, quản lý các
bộ chuẩn hóa đó.
Hình 9: Mô hình gừi và nhận cồng việc trong Alchemi sau khi ỉhêrn Modul
tính toán dư thừa
1.4 Xây dựng module xác nhận tỉnh đúng đẳn của kết quả
Đe xác định tính đúng đắn của một kết quả, thông thường ta phải tính lại toàn
bộ với dữ liệu ban đầu rồi so sánh với kết quả đã nhận. Công việc này đòi hỏi phải
tính toán lại hoàn toàn công việc, do vậy tốn tài nguyên cùa hệ thống. Để có thể
kiểm tra tính đúng đắn của kết quả một cách nhanh hơn, ta có thể gắn thêm một
phần dữ liệu khác gửi kèm theo dữ liệu của công việc. Dữ liệu gửi thêm yêu cầu
phải nhỏ và hàm tính toán dựa trên dữ liệu thêm vào cũng phải nhanh để không tốn
tài nguyên hệ thống cũng như băng thông mạng. Việc đàm bảo tính đúng đắn của cả
kết quả gửi về sẽ được đảm bảo qua kết quả tính toán của dữ liệu gửi kèm theo. Dữ
liệu và hàm để tỉnh sẽ độc lập với người sử dụng. Người sử dụng sẽ không hề biết
có sạ có mặt của dữ liệu thêm vào.
Module đảm bảo tính đúng đắn của kết quả:
Việc thực thi module đảm bảo tính toàn vẹn như sau: Phần dữ liệu thêm vào
mỗi một công việc gửi đi trong tà Manager sẽ được thêm vào hai bytes ngẫu nhiên.
Hàm tính toán đơn thuần chỉ là hàm cộng hai byte dữ liệu thêm với nhau. Công việc
gửi đến bộ xử lý, bộ xử lý được viết lại để tính giá trị kết quả và gắn vào kết quả gửi
trả về.
24

×