Tài liệu Khóa luận Nghiên cứu xây dựng ứng dụng tính toán phân tán trên nền tảng sức mạnh các máy tính cá nhân: I
ĐẠI HỌC QUỐC GIA HÀ NÔI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Chí Công
XÂY DỰNG ỨNG DỤNG TÍNH TOÁN PHÂN TÁN
TRÊN NỀN TẢNG SỨC MẠNH CÁC MÁY TÍNH
CÁ NHÂN
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Thông Tin
HÀ NỘI -2010
II
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Chí Công
XÂY DỰNG ỨNG DỤNG TÍNH TOÁN PHÂN TÁN
TRÊN NỀN TẢNG SỨC MẠNH CÁC MÁY TÍNH
CÁ NHÂN
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Thông Tin
Cán bộ hướng dẫn: ThS. Đào Minh Thu
HÀ NỘI - 2010
I
Tóm tắt nội dung
Tính toán phân tán là một công nghệ mới và rất thiết thực hiên nay. Những hệ
thống tính toán phân tán giúp giải quyết những bài toán khoa học lớn mà một máy tính
không thể giải quyết được. Ngày nay có khá nhiều middleware phục vụ cho việc xây
dựng hệ thống tính toán phân tán. Trong khóa luận này trình bày một số nghiên cứu về
tính toán phân tán, những nghiên cứu về kiến trúc, cách thức hoạt động của một số hệ
thống t...
52 trang |
Chia sẻ: hunglv | Lượt xem: 944 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Nghiên cứu xây dựng ứng dụng tính toán phân tán trên nền tảng sức mạnh các máy tính cá nhân, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
I
ĐẠI HỌC QUỐC GIA HÀ NÔI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Chí Công
XÂY DỰNG ỨNG DỤNG TÍNH TOÁN PHÂN TÁN
TRÊN NỀN TẢNG SỨC MẠNH CÁC MÁY TÍNH
CÁ NHÂN
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Thông Tin
HÀ NỘI -2010
II
ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Chí Công
XÂY DỰNG ỨNG DỤNG TÍNH TOÁN PHÂN TÁN
TRÊN NỀN TẢNG SỨC MẠNH CÁC MÁY TÍNH
CÁ NHÂN
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công Nghệ Thông Tin
Cán bộ hướng dẫn: ThS. Đào Minh Thu
HÀ NỘI - 2010
I
Tóm tắt nội dung
Tính toán phân tán là một công nghệ mới và rất thiết thực hiên nay. Những hệ
thống tính toán phân tán giúp giải quyết những bài toán khoa học lớn mà một máy tính
không thể giải quyết được. Ngày nay có khá nhiều middleware phục vụ cho việc xây
dựng hệ thống tính toán phân tán. Trong khóa luận này trình bày một số nghiên cứu về
tính toán phân tán, những nghiên cứu về kiến trúc, cách thức hoạt động của một số hệ
thống tính toán phân tán phổ biến, giới thiệu một số dự án tính toán khoa học đang
được thực thi nhờ hệ thống tính toán phân tán. Khóa luận này cũng trình bày bước đầu
xây dựng một hệ thống tính toán phân tán, với phần mềm bên phía người dùng được
tích hợp vào ứng dụng facebook. Người dùng không cần cài đặt một phần mềm client
nào, mà chỉ cần có một trình duyệt web là có thể tham gia vào những dự án tính toán.
Việc này sẽ tạo điều kiện mở rộng dự án tính toán được dễ dàng hơn, làm tăng hiệu
suất của những hệ thống tính toán phân tán.
II
Mục lục
Tóm tắt nội dung ........................................................................................................... I
Mục lục .......................................................................................................................... II
Danh mục các hình vẽ ..................................................................................................V
Chương I : Giới thiệu ...................................................................................................1
1.1 Đặt vấn đề ..............................................................................................................1
1.2 Nội dung khóa luận................................................................................................3
Chương II: Các hệ thống tính toán phân tán .............................................................4
2.1 BOINC ..................................................................................................................4
2.1.1: Giới thiệu .......................................................................................................4
2.1.2: Kiến trúc BOINC ...........................................................................................4
2.1.3 Một số dự án đang thực hiện bởi BOINC .......................................................8
2.2: Condor ..................................................................................................................9
2.2.1 Giới thiệu.........................................................................................................9
2.2.2 Kiến trúc..........................................................................................................9
2.3: Globus Toolkit ....................................................................................................13
2.3.1 Giới thiệu.......................................................................................................13
2.3.2 Kiến trúc........................................................................................................13
2.4: So sánh................................................................................................................16
2.4.1 Độ phức tạp hệ thống ....................................................................................16
2.4.2 Độ phức tạp cho người phát triển ứng dụng .................................................16
2.4.3 Độ phức tạp cho người dùng.........................................................................17
Chương III: Kiến trúc hệ thống .................................................................................18
3.1: Kiến trúc tổng thể ...............................................................................................18
3.2: Các thành phần chính..........................................................................................19
3.2.1: Server Task ..................................................................................................20
III
3.2.1.1: Nhiệm vụ ...............................................................................................20
3.2.1.2: Chức năng..............................................................................................21
3.2.1.3: Cấu hình ................................................................................................21
3.2.2: Server Application .......................................................................................23
3.2.2.1: Nhiệm vụ ...............................................................................................23
3.2.2.2: Chức năng..............................................................................................23
3.2.2.3: Cấu hình ................................................................................................23
3.2.3: Node Applet .................................................................................................24
3.2.3.1: Nhiệm vụ ...............................................................................................24
3.2.3.2: Chức năng..............................................................................................24
3.2.3.3: Cấu hình ................................................................................................24
3.3: Ứng dụng tính toán .............................................................................................25
3.3.1: Định nghĩa....................................................................................................25
3.3.2: JPPF API ......................................................................................................25
3.4: Task.....................................................................................................................26
3.4.1: Định nghĩa Task ...........................................................................................26
3.4.2: Input Data File .............................................................................................26
3.4.3: Result ...........................................................................................................27
Chương IV: Cài đặt hệ thống .....................................................................................28
4.1 Server Task ..........................................................................................................28
4.1.1 JPPFDriver ....................................................................................................28
4.1.2 JPPFNode......................................................................................................30
4.1.3 Server Task Configuration ............................................................................31
4.2 Server Application ...............................................................................................33
4.2.1 JPPFClient.....................................................................................................33
4.2.2 JPPFTask.......................................................................................................35
4.2.3 Server Application Configuration.................................................................36
IV
4.3 Node Applet .........................................................................................................38
4.3.1 NodeRunner ..................................................................................................38
4.3.2 JPPFClassLoader...........................................................................................39
4.3.3 Node Applet Configuration...........................................................................40
4.4 Một số ứng dụng tính toán...................................................................................42
Chương V : Tổng kết...................................................................................................44
V
Danh mục các hình vẽ
Hình 2.1: Kiến trúc hệ thống BOINC............................................. ..............................10
Hình 2.1: Kiến trúc hệ thống Condor ............................................................................15
Hình 2.3: Kiến trúc hệ thống Globus Toolkit ...............................................................17
Hình 3.1: Kiến trúc tổng thể hệ thống ..........................................................................22
Hình 3.2: Kiến trúc chi tiết hệ thống ............................................................................24
Hình 3.3: Mô hình kết nối TCP/IP của hệ thống...........................................................26
Hình 4.1: Hình ảnh mô tả phân chia task tới những máy tính Node.............................47
Hình 4.2: Biểu đồ thời gian thực thi khi có một máy tính.............................................47
Hình 4.3: Biểu đồi thời gian thực thi khi có ba máy tính..............................................48
1
Chương I – Giới thiệu
1.1 Đặt vấn đề
Khi khoa học phát triển đặt ra nhiều bài toán với khối lượng tính toán lớn,
cùng với một lượng lớn dữ liệu cần xử lý. Trong nhiều ngành khoa học khác nhau
những bài toán này đang tồn tại và chúng ta luôn muốn xử lý chúng.
Trong thiên văn học có một điều mà chúng ta luôn muốn khám phá đó là
“liệu có một nền văn minh nào ngoài trái đất không?”, đây là một câu hỏi lớn mà
nhiều năm qua con người vẫn chưa tìm được lời giải đáp thỏa đáng. Với khoa học
kỹ thuật như hiện nay chúng ta có thể thu được những tín hiệu từ bên ngoài trái
đất, chúng ta có thể xử lý những tín hiệu này để hy vọng có thể tìm ra một nền văn
minh nào đó bên ngoài trái đất. Nhưng những tín hiệu thu được ngoài trái đất rất
nhiều, nếu dùng một máy tính có công suất tính toán lớn cũng phái mất rất nhiều
thời gian để xử lý lượng tín hiệu này, như vậy sẽ rất lâu chúng ta mới có thể tìm
được câu trả lời cho câu hỏi kia.
Trong ngành công nghệ thông tin có một bài toán quen thuộc đó là bài toán
phá mã. Một phương pháp phá mã đơn giản nhất là duyệt toàn bộ, ta thử lần lượt
tất cả trường hợp có thể của khóa cho đến khi tìm được khóa đúng. Độ dài của
khóa sẽ quyết định đến số lượng các phép thử, ví dụ với hệ mã hóa DES sử dụng
56 bit làm khóa, tức là sẽ có 256 = 72x1016 giá trị có thể của khóa. Nếu sử dụng
một máy tính bình thường có tốc độ tính toán 1 giải mã /μs sẽ phải mất khoảng
1142 năm, thời gian này là quá lâu so với tuổi thọ của thông tin. Muốn phá mã
nhanh có thể dùng một máy tính chuyên dụng (giá khoảng 250.000$) có thể phá
mã trong 3 ngày. Nhưng đó là trường hợp sử dụng 56 bit làm khóa, nếu sử dụng
khóa với độ dài 128 bit hay 126 bit thì máy tính đó cũng tỏ ra không hiệu quả.
Trong y học cũng có nhiều dự án với khối lượng tính toán lớn, dự án “Help
Defeat Cancer [10]” là một dự án nghiên cứu khả năng chống căn bệnh ung thư.
Với dự án này, các nhà nghiên cứu cần phân tích số lượng lớn mô ung thư cùng
một lúc, nếu dùng một máy tính thông thường mất khoảng 168 năm, như vậy là
quá lâu vì chúng ta cần tìm ra phương pháp trị bệnh ung thư càng sớm càng tốt.
Trong nhiều ngành khoa học khác như toán học, sinh học … cũng có nhiều
bài toán lớn được đặt ra, việc giải quyết những bài toàn này giúp phát triển các
ngành khoa học phục vụ cuộc sống, Vì vậy nhu cầu giải quyết những bài toán như
thế là rất thiết thực
2
Ngày nay mạng máy tính phát triển mạnh, nhất là mạng Internet với hàng
triệu máy tính kết nối với nhau. Đối với người dùng bình thường công suất tính
toán của máy tính thường không được sử dụng hết. Trong những khoảng thời gian
máy tính nhàn rỗi, khả năng tính toán của nó không được tận dụng. Vậy tại sao ta
không sử dụng khả năng tính toán đó để giải quyết những bài toán phức tạp trên?
Mỗi máy tính khi nhàn rỗi có thể sử dụng để tính toán một phần nhỏ của bài toán,
nhiều máy tính cùng tham gia tính toán sẽ tao lên một hệ thống tính toán hết sức
mạnh mẽ. Nếu chúng ta có thể kết nối hàng triệu máy tính trên Internet, chúng ta
sẽ tạo ra một mạng lưới tính toán khổng lồ, khi đó những bài toán lớn có thể được
giải quết trong thời gian ngắn.
Để mọi người tham gia tính toán cho một dự án nào đó, họ cần biết về dự án
đó, và biết cách để có thể sử dụng máy tính của mình tham gia vào hệ thống tính
toán. Vì vậy ta cần quảng bá cho người dùng biết về những dụ án tính toán, và
cung cấp cho họ những công cụ để tham gia vào hệ thống tính toán.
Mạng xã hội ngày nay rất phát triển, Facebook là một mạng xã hội có lượng
người dùng lớn nhất hiên nay. Nó có thể là một nơi lý tưởng để quảng bá thông tin
về những dự án tính toán. Trên Facebook bạn có thể giao lưu, liên lạc với bàn bè,
với rất nhiều người cùng tham gia Facebook. Khi một người dùng Facebook tham
gia vào một dự án tính toán, họ có thể giới thiệu cho bạn bè, người thân hay một ai
đó mà họ quen biết trên Facebook. Những dự án tính toán thường là những dự án
có ích cho xã hội nên mọi người sẽ rất sẵn lòng tham gia vào dự án tính toán.
Một vấn đề có thể khiến mọi người ngại tham gia vào hệ thống tính toán đó là
các hệ thống tính toán hiện nay, thường bắt người dùng phải cài một phần mền lên
máy của mình để tham gia vào việc tính toán. Bất kỳ một máy tính nào muốn tham
gia vào hệ thống tính toán cũng cần cài đặt phần mềm này. Vậy nếu có thể xây
dựng một hệ thống tính toán phân tán, mà người dùng không cần cài đặt phần mền
vẫn có thể tham gia vao hệ thống sẽ giúp khả năng huy động được lượng người
dùng lớn, tình nguyện tham gia vào dự án tính toán.
Web là một một công cụ rất hữu ích cho chúng ta, nó thực sự đã thay đổi
cuộc sống của chúng ta. Một trang web với một chương trình applet có thể thay thế
cho phần mềm tham gia vào hệ thống tính toán. Khi người dùng truy cập vào
trang web, chương trình applet sẽ chạy và thực thi việc tính toán. Chúng ta có thể
vào web ở bất kỳ máy tính nào có kết nối mạng Internet, và ngay lập tức có thể
tham gia vào công việc tính toán.
3
Tích hợp trang web đó vào một ứng dụng Facebook sẽ tạo thành một công cụ
tuyệt vời để phát triển các dự án tính toán. Theo thông kê mới nhất của Nielsen
(một công ty khảo sát thị trường) cho thấy Facebook là địa chỉ gây tốn thời gian
nhất của người dùng trên Web. Người dùng Facebook cũng bỏ thời gian lên mạng
gấp 3 lần so với người không tham gia mạng lưới giao tiếp xã hội này.
Một ứng dụng Facebook có thể sử dụng như những phần mềm tham gia vào
hệ thống tính toán phân tán, đó sẽ là một phướng án tốt để mở rộng hệ thống tính
toán phân tán, tăng số người tham gia vào hệ thống, từ đó tăng khả năng tính toán
1.2 Nội dung khóa luận
Trong khóa luận này chúng tôi trình bày một số nghiên cứu về các hệ thống
tính toán phân tán, các Middleware phổ biến dùng trong các hệ thống tính toán
phân tán. Bước đầu triển khai một hệ thống tính toán phân tán, với một ứng dụng
Facebook được sử dụng để người dùng có thể tham gia vào hệ thống tính toán.
Nội dung chi tiết khóa luận gồm 5 chương:
Chương I: Giới thiệu về khóa luận, đặt ra vấn đề cần giải quyết trong khóa
luận.
Chương II: Giới thiệu một số hệ thống tính toán phân tán, kiến trúc của hệ
thống và đưa ra những so sánh. Ba hệ thống được giới thiệu là BOINC,
Condor, Globus đây là 3 hệ thống phổ biến hiện nay.
Chương III: Trình bày kiến trúc hệ thống tính toán phân tán sử dụng ứng
dụng Facebook thay thế cho phần mềm .
Chương IV: Trình bày cách cài đặt chương trình, triển khai một số ứng
dụng tính toán phân tán trên hệ thống và kết quả.
Chương V: Tổng kết, nhận xét về hệ thống, những thành quả đã đạt được
và những kế hoạch phát triển của dự án.
4
Chương II: Các hệ thống tính toán phân tán
2.1 BOINC
2.1.1: Giới thiệu
BOINC [8] viết tắt của Berkeley Open Infrastructure for Network Computing
(Cơ sở hạ tầng mã nguồn mở cho tính toán mạng) là một phần mềm trung gian cho
việc tính toán tình nguyện và tính toán lưới. Ban đầu BOINC được xây dựng để phục
vụ dự án SETI@home, một dự án tìm kiếm tín hiệu ngoài trái đất. Sau đó nó trở lên
phổ biến và được sử dụng cho nhiều dự án tính toán khác nhau trong nhiều lĩnh vực
như toán học, y học, sinh hoc… BOINC là một phần mềm mã nguồn mở, vì vậy những
nhà phát triển có thể tải mã ngồn về để cấu hình và cài đặt theo ý muốn.
2.1.2: Kiến trúc BOINC
Hệ thống BOINC gồm có 2 thành phần chính là hệ thống Server và phần mềm
(Hình 2.1)
Server
Thành phần chính của BOINC là Backend Server, server có thể chạy trên
một hoặc nhiều máy tính khác nhau, điều này giúp cho hệ thống BOINC dễ
dàng mở rộng quy mô của dự án. BOINC Server chạy trên nền tàng hệ điều
hành Linux và sử dụng APACHE, PHP và MySQL làm nền tảng cho hệ thống
web và cơ sở dữ liệu.
Các ứng dụng tính toán chạy trên máy tính thành viên, kết quả được gưi
lên cơ sở dữ liệu của ứng dụng tính toán, tại đây nó sẽ được xử lý. Trước khi
kết quả được gửi lên cơ sở dữ liệu của ứng dụng tính toán, nó được kiểm tra
tính đúng đắn bởi Server Backend. Server Backend kiểm tra tính đúng đắn của
kết quả bằng cách gửi các workunit tới nhiều máy khác nhau, và so sánh kết
quả nhận được của một workunit khác nhau.
Workunit là một khối lượng tính toán nhỏ của bài toán, được thực hiện
trên máy tính . Một workunit gồm nhiều Task, Result là kết quả của một task,
Server sẽ tự động tạo ra những tập kết quả tương ứng với các workunit khi
workunit được tạo (không phải là result thật, mà chỉ là một thể hiện của kết
quả), các result này được lưu vào cơ sở dữ liệu, khi một task hoàn thành và gửi
kết quả lên server, result tương ứng trong cơ sở dữ liệu của server sẽ được đánh
5
đấu là đã hoàn thành. Khi tập tất cả result của một workunit được đánh dấu,
workunit đó được báo là đã hoàn thành
BOINC server cung cấp một vài tính năng như:
+ Validator: Chức năng này kiểm tra kết quả gửi về từ có chính xác hay
không. Một workunit được gửi tới nhiều máy cùng thực thi, kết quả gửi về từ
những máy đó được server so sánh, kết quả có tỉ lệ cao nhất được coi là kết quả
đúng.
+ Homogeneous redundancy: Chức năng này sẽ chỉ gửi một workunit tới
những máy tính có cùng cùng một platform (cùng hệ điều hành…), điều này sẽ
giúp quá trình validator được dễ dàng và chính xác hơn.
+ Workunit trickling: Gửi các thông tin tới server trước khi các workunit
hoàn thành, điều này giúp cho việc đánh giá để có thể gủi một workunit mới kịp
thời, giúp cho việc tính toán nhanh hơn, giảm tối thiểu thời gian nhàn rỗi của
máy .
+ Locality Scheduling: Chỉ gủi các workunit(không gửi các file cần thiết)
tới các máy đã có các file cần thiết để nhanh chóng thực thi workunit.
+ Phân phối các workunit dựa vào các tham số của máy : Chức năng này
đảm bảo việc gửi workunit tới những máy tính có khả năng thực thi workunit
đó.
BOINC server bao gồm 2 chương trình CGI và thường có 5 deamons.
- Một chương trình CGI lập lịch xử lý các yêu cầu từ phía , nhận các
workunit đã hoàn thành và gửi đi những workunit mới.
- Một chương trình CGI xử lý việc upload file.
- 5 deamons:
+ Feeder
+ Validator
+ Assimilator
+ File_deleter
+ Transitioner
6
Hình 2.1 Kiến trúc hệ thống BOINC
Một workunit được chia thành nhiều task, mỗi task tương ứng với một
result trong cơ sở dữ liệu, khi task hoàn thành gửi về server, result tương ứng
được đánh dấu đã hoàn thành. Một deamons Feeder có trách nhiệm đọc các task
trong cơ sở dữ liệu và lưu chúng trong các khối nhớ, bộ lập lịch sẽ đọc các task
trong khối nhớ và gửi chúng tới , Feeder sẽ định kỳ là rỗng các khe trong khối
nhớ sau khi task được gửi đi.
Sheduling
Server
DATA
Server
Web
interfaces
BOINC
DB
Core Client
Project back end
BOINC Server Complex
Application Client
Client API
Server
Client
Project Specific component
BOINC components
7
Khi các result của một workunit được thực hiện xong và gửi về server,
deamon Validator sẽ tiến hành so sánh chúng, Validator có thể được viết bởi
người phát triển ứng dụng để đặt ra những thuật toán so sánh, hay những hàm
đánh giá các kết quả, hoặc đơn giản là so sánh các bit. Nếu các kết quả trùng
nhau nó sẽ được coi là hợp lệ và được sử dụng làm kết quả của workunit.
Tiếp đó deamon Assimilator thực hiện việc xử lý các kết quả hợp lệ dựa
trên code của dự án, việc xử lý này là phụ thuộc vào từng dự án, có dự án cần
phân tích các file kết quả và lưu chúng vào cơ sở dữ liệu, hoắc đơn giản chỉ là
copy từ nới này sang nơi khác.
Deamon File_deleter có nhiệm vụ xóa những output đã được xử lý bởi
Assimilator và các file input không cần thiết.
Deamon Transitioner xử lý việc chuyển trạng thái của workunit và result,
nó cũng tạo ra các result từ workunit khi chúng được tạo ra, hay tạo thêm những
result nếu cần thiết(cho những trường hợp result không thoa mãn trong quá
trình validator hoặc không gửi được lên server).
BOINC Client
BOINC Client là một kết cấu gồm một số ứng dụng độc lập, chúng sử
dụng cơ chế BOINC remote procedure call (thủ tục gọi điều khiển từ xa của
BOINC) để liên lạc với nhau.
Những thành phần ứng dụng gồm có:
+ Chương trình BOINC , đây là một chương trình đóng vai trò là lõi của ,
nó có những tính năng và thực hiện những nhiệm vụ sau:
Tạo và duy trì kết nối giữa và server
Tải về những ứng dụng khoa học, cung cấp một cơ chế đăng nhập
thống nhất để đảm nảo rằng các ứng dụng khoa học được cập nhật, lập lịch
sử dụng tài nguyên CPU của các ứng dụng khoa học.
8
BOINC chạy trên Unix như một chương trình deamon. Trên
Windows, ban đầu BOINC không phải là một dịch vụ danh cho Windows
mà chỉ là một ứng dụng bình thường. sau này có một vài phiên bản dành
cho windows và nó là một tùy chọn trong quá trình cài đặt.
Phụ thuộc vào cách cài đăt BOINC nó có thể là một chương trình
chạy nền hoặc được chạy khi người dùng khởi động máy.
+ Một hoặc một vài ứng dụng khoa học: Những ứng dụng khoa học này
thực hiện việc tính toán các bài toán khoa học, những ứng dụng này là đặc
trưng cho từng dự án tính toán phân tán. Những ứng dụng khoa học sử dụng
BOINC deamon để tải về và gửi đi những workunit, hay để trao đổi những
thông tin thống kê với server.
+ Một boincmgr (boincmgr.exe): là một giao diện tương tác với lõi của
ứng dụng(core ) sử dụng remote procedure call. Mặc định core chỉ cho phép
kết nối từ cùng một máy tính, nhưng nó có thể cấu hình để có thể kết nối từ
những máy tính khác.
+ BOINC screensaver: cung cấp một framework nhờ đó các ứng dụng
khoa học có thể hiển thị hình ảnh trên cửa sổ screensaver của người dùng.
Thông thường BOINC screensaver hiển thị những hoạt ảnh thể hiện chi tiết của
ứng dụng khoa học, hoặc những biểu đồ hay những đồ thị thể hiện việc tính
toán.
2.1.3 Một số dự án đang thực hiện bởi BOINC
SETI@Home: SETI@Home [8] là một thí nghiệm khoa học, sử dụng những
máy tính kết nối trên Internet để tìm kiếm nền văn minh ngoài trái đất. Đây là
một phần của dự án SERENDIP (Search for Extraterrestrial Radio Emissions
from Nearby Developed Intelligent Populations) của đại học California,
Berkeley. Đài thiên văn Arecibo thu thập những tin hiệu trên không trung, sau
đó những tín hiệu này được gửi tới những máy tính tham gia vào dự án để tính
toán và phân tích. Các kết quả được trả lại server của dự án.
Để tham gia vào dự án, người dùng phải tải về và cài đặt phần mềm tính
toán trên máy của mình, mỗi khi máy tính rỗi, phần mềm sẽ tự động tải về một
lượng dữ liệu (khoảng 300KB) và tiến hành tính toán.
Thông tin chi tiết về dự án có tại trang chủ của dự án
9
ABC@Home: ABC@Home [7] là một dự án toán học nhằm tìm ra bộ 3 số a,b
và c để chứng minh cho giả thuyết về bộ 3 số ABC (ABC conjecture), giả
thuyết 3 số ABC nêu lên rằng, chỉ tồn tại duy nhất 3 số a,b và c sao cho log(c) /
log(rad(a * b * c)) > h với h là một số thực lớn hơn 1. Ba số a,b,c thỏa mãn điều
kiện trên khi nó thỏa mãn những điều kiện sau
+ a + b = c
+ a<b<c
+ a,b,c không có ước số chung
+ c > rad(a * b * c)
Việc chứng minh được giả thuyết ABC sẽ giúp giải đáp nhiều câu hỏi
trong toán học. dự án đang được thực hiện bởi trường đại học Leiden, thông tin
về dự án có trên trang chủ
2.2: Condor
2.2.1 Giới thiệu
Condor là kết quả của một dự án nghiên cứu trong trường đại học Wisconsin-
Mandison, Condor là một hệ thống quản lý, lập lịch cho những công việc cần tính toán
lớn, người dùng gửi công việc của họ lên Condor, Condor lưu chúng trong hàng đợi
của nó, lựa chon nơi nào, khi nào sẽ thực thi công việc đó, và báo cho người dùng kết
quả khi hoàn thành. Khác với những hệ thống cổ điển, Condor không đòi hỏi cần có
những máy móc chuyên dụng, Condor sẽ gửi những công việc (jobs) tới những máy
phù hợp với yêu cầu của công việc đó.
2.2.2 Kiến trúc
Hệ thống Condor [1] gồm 3 thành phần chính: Central Manager, Submit
Machine, Execution Machine (Hinh 2.2).
Central Manager
Central Manger có nhiệm vụ thu thập những nguồn tài nguyên, và những
thông tin về tất cả các máy tính tham gia vào mạng lưới tính toán, và đưa ra
những chính sánh hoạt động chung cho cả mạng lưới, Dựa vào những thông tin
10
này, một job sẽ được gửi tới những máy có tài nguyên phù hợp với yếu cầu tính
toán của nó.
Những deamon chính chạy trên Central Manager.
Condor_collector: Deamon này chịu trách nhiệm thu thập thông tin về
trạng thái của những máy tính tham gia vào Condor Pool(một tập hợp
máy tính tham gia vào hệ thống phân tán). Tất cả những deamons khác
định kỳ gửi ClassAd tới collector. ClassAd là những bản ghi về tài
nguyên cần thiết của một job cũng như tài nguyên có của những máy
tham gia vào mạng lưới, điều này giúp cho việc gửi job tới đúng những
máy có thể thực thi chúng. Condor_collector có thể coi như một cơ sở
dữ liệu động của ClassAd. Lệnh condor_status có thể dùng để truy vấn
tới collector về những thông tin của hệ thống Condor. Những deamon
khác cũng có thể truy vấn tới collector để lấy những thông tin quan
trọng như địa chỉ sử dụng để gửi lệnh tới những máy tính ở xa.
Condor_negotiator: Deamon này chịu trách nhiệm tạo ra tất cả những
kết nối trong hệ thống Condor. Nó cũng có trách nhiệm quản lý quyền
ưu tiên của những người dùng trong hệ thống.
Submit Machine
Submit Machine cho phép người dùng gửi những job tới một hàng đợi ảo ở
trên máy cục bộ (scheduler). Scheduler sẽ đàm phán với Central Manage để yêu
cầu Central Manager cấp cho những tài nguyên cần thiết cho việc thực thi job.
Khi có một tài nguyên được cấp cho job, Scheduler sẽ gọi chương trình deamon
Shadow, chương trình này chịu trách nhiệm quản lý việc thực thi job đó, đồng
thời thực thi những công việc như: kiểm tra trạng thái hoàn thành, lập lịch lại
trong các trường hợp job bị lỗi, hay thực thi những lệnh gọi hệ thống của những
máy tính đang chạy job.
11
Hình 2.2 Kiến trúc hệ thống Condor
Những deamon chính chạy trên Submit Machine
Condor_schedd: Deamon này có nhiệm vụ miêu tả job trong Condor
Pool, người dùng có thể gửi những job tới một condor_schedd đang
chạy, những job này được lưu trong job queue, những demons khác có
nhiệm vụ xem và thao tác tới job queue như: condor_submit, condor_q,
condor_rm sẽ kết nối tới condor_schedd để thực thi công việc của nó.
Condor_shadow: Deamon này sẽ chạy khi một job được thực thi, khi một
job hoàn thành, deamon này thực hiện việc truyền file, ghi những log file
Condor_collector
Condor_negotiator
Submit Machine
Controlling Deamons
schedd
Condor_shadow
Controlling Deamons
startd/starter
User’s job
User’s code
Condor_Syscall_Lib
Checkpoint file and
saved to disk
System call
performed
Central Manager
Execution Machine
12
và đưa ra những bản thống kê về quá trình thực thi job. Jobs được liên
kết tới Condor's Standard Universe, cái mà thực thi những lệnh gọi hệ
thống thông qua condor_shadow. Tất cả những lệnh gọi hệ thống được
thực hiện trên máy tính từ xa đều được gửi qua mạng tới
condor_shadow, condor_shadow sẽ thực thi những lệnh gọi thế thống
(như vào ra file) rồi gửi kết quả trả lại cho máy tính đó.
Execution Machine
Exeution Machine chạy trên các máy tính tham gia vào lưới tính toán,
deamon Startd thực thi những job mà Submit Machine gửi tới, khi chạy nó gửi
tới Central Manager những thông tin về khả năng thực thi của nó, những thông
tin như dung lượng bộ nhớ hay tốc độ của CPU. Một deamon khác là Starter
chịu trách nhiệm quản lý việc thực thi job trên máy đó, nó có thể đưa ra những
chính sách riêng để quản lý việc thực thi job
Những deamon chính chạy trên Execution Machine
Condor_startd: Deamon này chạy trên các máy tính tham gia vào
Condor Pool, nó như một thể hiện của máy tính tham gia vào mạng lưới
tính toán. Condor_startd gửi ClassAd của máy tính mà nó chạy tới
Central Manager, những thông tin trong ClassAd gồm có những thông
tin về khả năng thực thi của máy đó, cũng như chính sách hoạt động của
máy đó. Một máy tính chạy condor_startd sẽ có thể thực thi job,
condor_startd chịu tránh nhiệm thi hành những chính sách thực thi một
job trên máy tính đó, như việc chạy, tạm dừng, khôi phục, bỏ không,
hoặc hủy bỏ job. Khi condor_startd chạy và sẵn sàng thực thi job, nó sẽ
gọi tới condor_starter.
Condor_starter: Deamon này chịu trách nhiệm thiết lập môi trường thực
thi và điều khiểm việc thực thi job. Khi một job đang được thực thi,
condor_starter lấy thông tin về trạng thái hoàn thành của job và gửi
những thông tin này lên Submit Machine, khi job hoàn thành deamon
này sẽ ngừng.
13
2.3: Globus Toolkit
2.3.1 Giới thiệu
Globus Toolkit [6] là một sản phẩm của Gobus Alliance, một tổ chức quốc tế
chuyên về phát triển những công nghệ dựa trên nền tảng tính toán lưới. Globus Toolkit
là một phần mêm mã nguồn mở, cho phép xây dựng lưới tính toán. Nó cho phép người
dùng chia sẻ khả năng tính toán, cơ sở dữ liệu hay những công cụ trong một tổ chức,
cơ quan hay một vùng địa lý rộng lớn.
2.3.2 Kiến trúc
Globus Toolkit gồm 3 nhóm dịch vụ chính, có thể truy cập tới thông qua một
lớp dịch vu bảo mật (Hình 2.3)
- Resource Management
- Data Management
- Information Services
Hình 2.3 Kiến trúc hệ thống Globus
Applications
Third Party User – Level Middleware
Grid Resources and Local Services
Security Layer (GSI)
Grid Resource
Management
(GRAM,GRASS)
Grid
Information
Services (MDS)
Grid Data
Management(Gri
dFTP, Replica
Catalog)
Globus
14
Tầng Local Services bao gồm những dịch vụ của hệ điều hành, dịch vụ
mạng như TCP/IP, Submit Jobs, truy vấn Queues…. Tầng lõi của Globus cung
cấp dịch vụ bảo mật, Submit Jobs, quản lý dữ liệu, quản lý tài nguyên. Tầng cao
hơn (Level Middleware và Application) chứa những công cụ để liên lạc với
tầng dưới, và bổ sung những chức năng còn thiếu ở tầng dưới.
Security Layer
Grid Security Infrastructure (GSI) cung cấp phương thức cho việc xác
thực người dùng và đảm bảo những kết nối, nó sử dụng những công cụ như
SSL (Security Sockets Layer), PKI (Public Key Infrastructure) và X.509. GSI
cung cấp những dịch vụ, giao thức và những thư viện để thực hiện những việc
sau.
Xác thực một người dùng tham gia sử dụng dịch vụ lưới tính toán.
Xác thực các nguồn tài nguyên tham gia vào lưới tính toán dựa.
Mã hóa dữ liệu.
Khi một người dùng muốn truy cập vào hệ thống, họ cần có một tài
khoản được chứng thực bởi một cơ quan chứng thực. Hầu hết các dịch vụ của
hệ thống đều yêu cầu xác thực người dùng trước khi cung cấp cho họ, điều này
đảm bảo cho việc bảo mất dự liệu cho cả hai bên,
Resource Management
Resource Management cho phép phân phối tài nguyên phù hợp cho từng
yêu cầu của Job, điều khiển việc thực thi Job và thu thập kết quả tính toán.
Nhóm này có 2 thành phần chính.
Globus Resource Allocation Manager (GRAM): GRAM cung cấp việc
điều khiển và báo cáo trạng thái quá trình thực thi của các máy . Khi một
gửi một Job tới hệ thống, một deamon Gatekeeper sẽ kiểm tra tính xác
thực của , nếu xác thực, gatekeeper sẽ khởi chạy một Job manager để
quản lý việc thực thi Job đó. Job manager được tạo ra độc lập trên những
bộ lập lịch bộ phận. GRAM có những bộ lập lịch như Portable Bacth
System (PBS), Load Sharing Facility (LSF), và LoadLeveler.
Những yêu cầu chi tiết của Job được chỉ định rõ trong Globus
Resource Specification Language (RSL), đây là một thành phần của
15
GRAM, RSL miêu tả rõ những tài nguyên một Job cần để thực thi như
kích thước tối thiếu của bộ nhớ, hay tốc độ của CPU.
Globus Access to Secondary Storage (GASS): GASS là một cơ chế truy
cập file, nó cho phép các ứng dụng có thể thực hiện những thao tác với
file từ xa như đọc, viết vào file. GASS sử dụng để cung cấp file cho việc
thực thi Job và nhận các kết quả khi Job hoàn thành. Nó cũng được sử
dụng để truy cập các dòng xuất nhập chuẩn và các dòng báo lỗi.
Information Services
Information Services quản lý thông tin của những node tham gia vào hệ
thống lưới. Thành phần chính của nó là Monitoring and Discovery Service
(MDS).
MDS cung cấp cơ chế cho phép công bố và truy vấn những thông tin,
các node có thể gửi những thông tin của nó lên server, và có thể truy vấn tới
server để lấy những thông tin cần thiết. MDS có 3 lớp.
Information Providers (IPs): Lớp dưới cùng có nhiệm vụ thu thập thông
tin và trạng thái của các tài nguyên, chuyển những thông tin đó theo định
dạng mà nó quy định.
Grid Resource Information Service (GRIS): Lớp này là một deamon,
chạy trên các máy tính tham gia vào lưới. GRIS lấy những thông tin trên
các máy đó và gửi những thông tin mà nó lấy được về server quản lý
thông tin. GRIS thường xuyên update những thông tin này sau một
khoảng thời gian time-to-live (là khoảng thời gian thông tin về máy còn
hiệu lực) được quy định bởi IPs.
Grid Information Index Service (GIIS): Thực hiện việc đánh chỉ mục
những thông tin về các tài nguyên.
Data Management
Data Management cung cấp những tiện ích và những thư viện cho việc
vận chuyển, lưu trữ và quản lý dữ liệu được tao ra bởi các ứng dụng tính toán.
Những thành phần của nhóm này có:
GridFTP: Là một mở rộng của giao thức FTP, cung cấp khả năng bảo
mật, tin cậy, hiệu suất cao trong việc vận chuyển dữ liệu trong môi
16
trường lưới. Ngoài những chức năng như chuẩn FTP, GridFTP cung cấp
khả năng xác thự dữ liệu truyền, được hỗ trợ bởi GSI, truyền song song
và bán song song.
Replica Location and Management: Thành phần này cho phép một file có
thể được lưu trữ tại nhiều nơi trên hệ thống lưới. Sử dụng dịch vụ của
Replica Management, một file có thể đăng ký với Replica Location
Service (RLS) để tạo những bản sao của nó và lưu trữ tại nhiều nơi trên
hệ thống. Trong RLS một file được gán với một Logical File Name
(LFN), và được lưu trong một logical collection, những bản ghi của một
file sẽ trỏ tới vị trí vật lý của file đó.
2.4: So sánh
2.4.1 Độ phức tạp hệ thống
BOINC
BOINC Server được thiết kết để chạy trên nền tảng Linux, có thể chạy
trên Windows nhưng khó khăn trong việc triển khai.
Sử dụng APACHE, PHP, MySQL làm hệ thống web và database.
Condor
Có thể chạy cả trên nền tảng Unix và Windows.
Globus Toolkit
Chạy trên nhiều nền tảng khác nhau, có thể chạy trên Web server hoặc
non-Web server.
Có nhiều thành phần khác nhau trong hệ thống, người phát triển chỉ cần
chọn những thành phần mình muốn để chạy ứng dụng, không cần sử dụng hết
các thành phần.
2.4.2 Độ phức tạp cho người phát triển ứng dụng
BOINC
Cung cấp hệ thống API cho người phát triển ứng dụng tính toán, nhưng
người phát triển viết ứng dụng tính toán dựa trên API được BOINC cung cấp.
17
Ứng dụng tính toán chủ yếu được viết bằng ngôn ngữ C, cung có thể viết
bằng ngôn ngữ Java.
Condor
Không cung cấp API cho người phát triển, các ứng dụng tính toán được
chia thành nhiều loại. Mỗi loại được viết bằng một ngôn ngữ riêng và liên kết
với thư viện của Condor để có thể triển khai tính toán trên hệ thống Condor.
Mỗi loại Job được mô tả trong những file mô tả job, những file này được lưu
cùng thư mục với những file thực thi.
Globus Toolkit
Cung cấp hệ thống API cho người phát triển ứng dụng tính toán.
2.4.3 Độ phức tạp cho người dùng
BOINC
Người dùng có thể dễ dàng tải phần mềm BOINC về để tham gia vào
lưới tính toán. Dễ dàng mở rộng phạm vi của dự án.
Condor
Khó cài đặt cho người sử dụng thông thường, thường sử dụng xây dựng
một mạng lưới tính toán cho một tổ chức hay một công ty.
Globus Toolkit
Khó khăn cho người sử dụng bình thường tham gia vào lưới tính toán.
Cần phải xác thực người dùng và các tài nguyên khi tham gia vào lưới tính
toán.
18
Chương III: Kiến trúc hệ thống
3.1: Kiến trúc tổng thể
Hình 3.1 Kiến trúc tổng thể hệ thống
Server Project
Server Project là nơi chạy ứng dụng cần tính toán, tại đây một bài toán lớn sẽ
được chia nhỏ thành nhiều phần. Những phần nhỏ của bài toán được gọi là một Task,
Server Project sẽ quản lý những Task này, cùng với những dữ liệu đầu vào cần thiết
cho việc tính toán, dữ liệu này được lưu trong cơ sở dữ liệu của server. Khi một máy
tính Node kết nối tới server, Task và những dữ liệu cần thiết sẽ được gửi tới máy Node.
Sau đó Server sẽ lắng nghe việc thực thi trên Node, Node thực thi một Task xong, kết
quả được trả về cho Server Project, Server Project tiến hành xử lý chúng và lưu vào cơ
sở dữ liệu.
Server Facebook App
Server
Project
Server
Facebook
App
Node N
Input data,
Task
Output data User GUI,
Node Applet
Facebook App
Node1
Facebook App
19
Server Facebook App chứa chương trình ứng dụng facebook, ứng dụng này có
chứa một Node Applet, Node Applet là một chương trình java chạy dưới dang applet.
Node Applet là thành phần tạo kết nối tới Server Project, nhận các yêu cầu tính toán và
thực thi chúng.
Node
Node là những máy tính tham gia vào những dự án tính toán, máy tính Node sử
dụng bộ nhớ và tài nguyên CPU trong những lúc máy tính rảnh rỗi, để phục vụ cho
việc tính toán. Khi một máy Node chạy ứng dụng trên Facebook, một applet sẽ được
chạy, applet này thực hiện việc kết nối tới Server Project mà người dùng chọn. nhận
những task và file input từ Server Project, thực thi chúng trên máy tính Node, và gủi
trả kết quả lại cho Server Project.
3.2: Các thành phần chính
Hệ thống gồm có 3 thành phần chính (được minh họa trên hình 3.2)
Server Task
Server Task nằm trên Server Project, có nhiệm vụ nhận những task được
gủi tới từ Server Application và phân phối task đến máy tính Node, đồng thời
nhận các kết quả trả về từ Node và gửi kết quả tới Server Application
Server Application
Server Application nằm trên Server Project có nhiệm vụ phân chia một bài
toán thành nhiều Task và gủi những task này đến cho Server Task, đồng thời
nhận kết quả trả về từ Server Task và xử lý.
Node Applet
Node Applet nằm trên Server Facebook App và được chạy trên các máy
tính tham gia vào hệ thống tính toán. Node Applet có nhiệm vụ thực thi những
Task mà Server Task gửi tới, và gửi trả kết quả về cho Server Task
20
Hình 3.2 Kiến trúc chi tiết hệ thống
3.2.1: Server Task
3.2.1.1: Nhiệm vụ
Server Task là một chương trình có thể chạy trên một máy hoặc nhiều máy tính
khác nhau.
Input
Data
Pool
Output
Data
Pool
Web Server Application
Server Task
Node
Server
Application
Project
Participant
Task
Manager
Data
Manager
GUI
App Facebook GUI Task GUI
Task Engine Task Data
Node Applet
Web
pages
Admin
GUI
Server Application
21
Server Task có 2 nhiệm vụ chính:
- Nhận task từ Server Application và phân phối chúng tới Node
- Nhận kết quả trả về từ Node và gửi kết quả này tới Server Application xử lý
3.2.1.2: Chức năng
Server Task cung cấp 3 chức năng chính:
Load balancing (cân bằng tải)
Node Applet chạy trên nhiều máy tính khác nhau với cấu hình khác
nhau, chính vì thế khả năng tính toán ở mỗi máy tính Node là khác nhau.
Server Task cung cấp một chức năng cân bằng tải. Khi một máy tính Node
kết nối tới Server Task, nó sẽ tự động gửi những thông tin cấu hình của nó
tới Server Task, Server Task dựa vào những thông tin cấu hình của từng
máy và tốc độ kết nối mạng tới các máy tính đóng vai trò là Node, để gủi số
lượng Task phù hợp với khả năng tính toán của từng máy.
Một tập hợp nhiều Task được gửi tới Node gọi là một “bundle”, dựa
vào các thuật toán cân bằng tải server tính số lượng Task phù hợp cho từng
Node, và gửi một “bundle” với số lượng Task đó tới Node
Quản lý tiến tình tính toán (Jobs)
Chức năng quản lý quá trình tính toán giúp người quản lý có thể dừng
hoặc khôi phục lại việc thực thi công việc tính toán, đồng thời đưa ra các
thông kê về tiến trình thực thi của công việc tính toán, những số liệu được
thống kê như hiệu suất công việc, thời gian tính toán trung bình, thời gian
dự tính hoàn thành công việc.
Quản lý Node
Chức năng quản lý Node, quản lý các Node kết nối tới Server Task,
quản lý thông tin cũng như số lượng Node kết nối tới Server Task. Việc
quản lý Node giúp cho việc đưa ra những thống kê về thời gian tính toán, và
ướng lượng thời gian hoàn thành công việc.
3.2.1.3: Cấu hình
22
Server Task sử dụng 3 kết nối TCP để tạo kết nối tới Server Application,
Node và Server Task khác.
Hình 3.3 Mô hình kết nối TCP/IP
Một kết nối TCP tới Server Application để nhận task gửi từ Server
Application tới và gủi kết quả về cho Server Application xử lý. Khi Server
Task chạy, nó luôn lắng nghe kết nối từ Server Application một cổng, mặc
định là 11112
Một kết nối TCP tới Node để gửi task và file input tới Node, nhận kết
quả trả về từ Node, Server Task lắng nghe kết nối từ Node trên một cổng, mặc
định là 11113
Một kết nối TCP tới Server Task khác để chia sẻ task và file input,
Server Task lắng nghe kêt nối từ những Server Task khác trên cổng mặc định
là 11111
Server Task có 2 tiến trình chính là: “Controller” và “Server”, tiến trình
“controller” sẽ khởi chạy server như một tiến trình độc lập va theo dõi trạng
thái hoạt động của nó, trạng thái của server được ghi nhận trong một mã trạng
thái, dựa vào mã này tiến trình controller sẽ quyết định viết bắt đầu hay dừng
tiến trình server. Tiến trình controller cung cấp những thông số cần thiết để
tiến trình server có thể thực thi.
Server Task Server
Application Node Applet
Server Task
TCP/IP Port: 11112 TCP/IP Port: 11113
TCP/IP Port: 11111
TCP/IP Port: 11112 TCP/IP Port: 11113
23
+ Các cấu hình ( nằm trong một file file cấu hình)
+ Biến môi trường
+ Java Class path
3.2.2: Server Application
3.2.2.1: Nhiệm vụ
Server Application là một chương trình java chạy trên một máy tính nào đó, có
thể cùng hoặc khác Server Task, Server Application có thể kết nối tới một hay
nhiều Server Task. Server Application có nhiệm vụ tạo ra Task và những file input,
gửi các task và các file input tới Server Task, nhận kết quả trả về từ Server Task và
xử lý những kết quả đó.
3.2.2.2: Chức năng
Server Application cung cấp 2 chức năng:
Recovery and Failover
Khi kết nối giữa Server Application và Server Task bị ngắt do một lý do
nào đó, Server Application sẽ tự động cố gắng kết nối tới Server Task trong một
khoảng thời gian được ấn định.
Validator
Những kết quả từ máy tính Node gửi lên có thể không chính xác, do việc
tính toán sai ở máy tính Node.Validator là một chức năng kiểm tra kết quả gửi
về từ Node có chính xác hay không, để thực hiện chức năng này Server
Application yêu cầu Server Task gửi một task tới hai Node để thực thi và nhận
kết quả gủi trả về từ các Node đó. Server Application sẽ tiến hành so sách các
kết quả này, nếu hai kết quả bằng nhau thì kết quả đó được coi là đúng, nếu sai
Server Application sẽ yêu cầu Server Task gửi lại task đó tới Node để tính toán
lại.
3.2.2.3: Cấu hình
Server Application có 2 modun chính, một modun dùng tạo kết nối với
Server Task, nhận và gủi dữ liệu tới Server Task thông qua một kết nối TCP,
modun này được JPPF Frame Work cung cấp sẵn. Modun thứ 2 là những lớp
java thực hiện việc tính toán bài toán, modun này do người phát triển ứng dụng
24
tính toán viết và cấu hình dựa trên hệ thống JPPF API, những dữ liệu đầu vào
phục vụ cho việc tính toán cũng được những người phát triển tạo ra.
Khi Server Application chạy, nó thực hiện việc biên dịch những lớp java
mô tả việc tính toán thành những file .class, những file .class và những file dữ
liệu đầu vào được gửi tới Server Task, tại đây chúng được phân phối tới các
Node.
Trong quá trình chạy, Server Application đồng thời gửi Task tới Server
Task, và nhận kết quả trả về của những Task đã hoàn thành, xử lý các kết này.
3.2.3: Node Applet
3.2.3.1: Nhiệm vụ
Node Applet là một java applet, chạy trên những máy tính tham gia vào hệ thống
tính toán, có nhiệm vụ nhận task và file input gủi về từ Server Task, thực thi chúng
và gủi trả kết quả về cho Server Task.
3.2.3.2: Chức năng
Recovery and Failover
Tương tự như Server Application, khi kết nối giữa Node và Server Task bị
ngắt do một lý do nào đó, Node sẽ tự động thử kết nối tới Server Task sau một
khoảng thời gian được ấn định.
Task Checkpoint
Trong quá trình thực thi một Task, Node Applet có thể gặp một số vấn đề
nào đó cần phải dừng việc thực thi một Task. Để có thể khôi phục lại quá trình
tính toán của một Task. Node Applet cung cấp chức nằng Task Chekpoint, chức
năng này lưu lại trang thái hoàn thành của một Task, một Task có thể bị dừng
thực thi do người dùng dừng việc chạy ứng dụng, hoặc cũng có thể do một sự
cố đột ngột nào đó, để tăng hiệu năng thực thi của một Task và tránh trường
hợp phải thực hiện lại Task nhiều lần do sự cố. Chức năng Task Chekpoint sẽ tự
động lưu trạng thái hoàn thành của một task sau một khoảng thời gian nhất
định.
3.2.3.3: Cấu hình
25
Khi một người dùng Facebook chạy ứng dụng tính toán phân tán trên Facebook,
và chọn một Project để tham gia và lưới tính toán, Node Applet sẽ được chạy, Node
Applet lấy địa chỉ của Server Project từ một file cấu hình. Sau đó nó thực hiện tạo
kết nối TCP tới Server Task. Khi kết nối TCP tạo xong, Server Task gửi Task và
những file input cần thiết về máy tính Node. Node Applet chạy những task mà
Server Task gửi về để bắt đầu thực hiện việc tính toán.
Khi quá trình tính toán hoàn thành, Node Applet gửi kết quả về cho Server Task
thông qua kết nối TCP tạo ra lúc trước, và sau đó kết nối này sẽ bị ngắt, Node
Applet sau đó sẽ tạo một kết nối TCP khác tới Server Task để tiếp tục nhận Task
khác về thực thi.
Quá trình như vậy sẽ liên tục được thực hiện cho đến khi người dùng ngừng
chạy ứng dụng hoặc ứng dụng tính toán đã thực hiện xong.
Máy Node thực hiện việc tính toán bằng một chương trình applet, nên người
dùng không cần phải tải về và cài đặt các chương trình tính toán trên máy tính của
mình. Người dùng có thể truy cập vào trang web của ứng dụng để thực hiện việc
tính toán.
3.3: Ứng dụng tính toán
3.3.1: Định nghĩa
Là những ứng dụng java được chạy trên hệ thống tính toán phân tán, thực hiện
việc tính toán một bài toán nào đó. Những bài toán này thường là những bài toán có
khối lượng tính toán lớn, nếu thực thi trên một máy tính thì thời gian tính toán sẽ rất
lâu, hoặc cần có những máy tính có khả năng tính toán cao, các máy tính loại này
thường rất đắt.Vì vậy muốn tăng tốc độ tính toán cần có một lượng lớn máy tham gia
vào việc tính toán, để làm được điều này, một ứng dụng tính toán cần được chia
thành nhiều phần, mỗi phần được gọi là một Task, Task được gửi tới nhiều máy tính
khác nhau để tính toán.
Nhứng ứng dụng tính toán được viết dựa vào một API được cung cấp bởi hệ
thống JPPF.
3.3.2: JPPF API
JPPF API cung cấp những thư viện cho người lập trình phát triển những ứng
dụng tính toán của mình. JPPF Frame Work cung cấp hệ thống các lớp để tạo kết
26
nối, thực hiện việc phân phối Task, và các chức năng quản lý. Người phát triển ứng
dụng khi muốn triển khai ứng dụng tính toán của mình trên hệ thống JPPF, họ sẽ
định nghĩa những Task được kế thừa từ lớp JPPFTask, những Task được thừa kế từ
lớp này sẽ có thể được triển khai trên hệ thống JPPF.
JPPF API cung cấp những lớp giúp việc tạo kết nối giữa ứng dụng và Server
Task, bao gồm một số tính năng sau.
+ Quản lý một hoặc nhiều kết nối tới Server Task
+ Gửi Task tới Server Task và nhận kết quả từ Server Task
+ Xử lý những thông báo về việc thực thi Task
3.4: Task
3.4.1: Định nghĩa Task
Task là một đơn vị tính toán nhỏ của một ứng dụng tính toán, được thực thi trên
máy tính Node. Một ứng dụng tính toán lớn muốn tăng hiệu suất tính toán cần được
chia nhỏ làm nhiều task, để có thể phân phối tới nhiều máy tính Node thực thi, làm
tăng hiệu năng tính toán của ứng dụng.
Một Task được những người triển khai ứng dụng tính toán định nghĩa, chúng
được quản lý bởi server application. Để thực thi một task, máy tính Node cần tải về
những java class, java class này chính là những chương trình thực thi một phần nhỏ
của một ứng dụng tính toán.
Chu trình thực thi một Task trên là quá trình tạo kết nối, nhận những file .class
và những file dữ liệu đầu vào, thực hiện tính toán trên những dữ liệu đó, tao ra kết
quả và gửi trả về cho Server Task, đóng kết nối TCP. Sau đó lại tạo một kết nối TCP
khác để nhận một Task khác.
Một Task do người phát triển viết muốn thực thi được trên hệ thống JPPF, nó cần
được viết dựa vào API mà JPPF cũng cấp. JPPFTask là một lớp cơ sở cho tất cả task,
những Task do người phát triển viết phải kế thừa lớp này.
3.4.2: Input Data File
Input data file là những dữ liệu cần thiết để thực thi một task, những file này
được Server Application gửi lên Server Task, Server Task lưu chúng trong cở sở dữ
liệu của mình. Khi một kết nối tới Server Task, nếu Task mà nó thực hiện cần có các
27
file đầu vào, Server Task sẽ gửi file input cùng với các file .class của Task về máy ,
các file này sẽ được lưu trong thư mục %temp% của máy , khi một ngừng việc thực
thi task cho một project, những file này sẽ tự động được xóa bỏ.
3.4.3: Result
Result là những kết quả tính toán của một task, khi một task được thực thi xong,
result được gửi trả về cho Server Application thông qua Server Task, các kết quả này
được Server Application xử lý, những kết quả được chấp nhận sẽ được lưu vào cơ sở
dữ liệu trên ở
Result cũng được định nghĩa bởi người phát triển ứng dụng tính toán. Sử dụng
một số phương thức tạo Result và lấy Result do JPPF API cung cấp, người phát triển
có thể định nghĩa Result cho bài toán của mình.
Có 2 phương thức đơn giản để ứng dụng lưu giữ và nhận về một result là:
public void setResult(Object result)
public void getResult()
ví dụ việc tạo result.
public class MyTask extends JPPFTask
{
public void run()
{
// ... some code here ...
setResult("This is the result");
}
}
Result sẽ được nhận về bằng phương thức getResult().
String result = (String) myTask.getResult();
Ngoài ra còn có các cách khác để lưu trữ và nhận về một result:
+ Lưu trữ hoặc nhận về từ một cơ sở dữ liệu
+ Sử dụng files
+ Sử dụng một ứng dụng khác
…..
28
Chương IV: Cài đặt hệ thống
4.1 Server Task
Server Task có nhiệm vụ nhận task từ server application và phân phối task tới
những node tham gia vào lưới tính toán. Khi khởi chạy server task tạo ra 3 server
socket lắng nghe kết nối từ server application, node và serve task khác.
Những lớp chính trong Server Task
4.1.1 JPPFDriver
JPPFDriver là lớp chính trong Server Task, nó chuẩn bị và khởi chạy
những môdun của Server Task. Nó chạy một server cho Server Task kết nối
đến, một server cho Node kết nối đến và một class server để xử lý những
yêu cầu từ những class loader từ xa.
Những thuộc tính chính:
taskQueue: Thuộc tính này có kiểu là đối tượng JPPFQueue, là một hàng đợt
lưu trức task để thực thi.
applicationServers: là môt đối tượng có kiểu JPPFAppli cationServer. Lớp
đối tượng này lắng nghe những kết nối tới từ Server Application, mỗi khi có
một kết nối tới server một thread được tạo để lắng nghe những yêu cầu của
Server Application, và đặt những yêu cầu này vào hàng đợi thực thi
nodeNioServer: là một đối tượng có kiểu NodeNioServer. Lớp đối tường
NodeNioServer thực hiện tạo kết nối với Node, gửi yêu cầu thực thi task tới
Node.
classServer: là một đối tường có kiểu ClassNioServer. lớp đối tượng này xử
lý những yêu cầu từ những class loader .
29
Những phương thức chính:
run(): Phương thức được gọi bởi hàm main() sẽ khởi chạy Server Task,
phương thức run() sẽ khởi tạo những đối tượng ClassNioServer,
NodeNioServer và JPPFApplicationServers, và chạy chúng. Nó cũng khởi
tạo đối tượng JPPFBroadcaster để quảng bá thông tin của Server Task nếu
được cấu hình. Nếu thuộc tính "jppf.management.enabled" trong file cấu
hình được gán bằng true, nó sẽ khởi tạo đối tượng JMXServerImpl để thực
thi việc thực thi task.
shutdown(): Shutdown Server cùng nhưng thành phần của nó.
createConnectionInformation(): Lấy thống tin về host và cổng dùng cho
những kết nối tới Server Task từ file cấu hình.
NodeNioServer ClassNioServer JPPFApplicationServer
JPPFDriver
- void run()
- void shutdown()
- void createConnectionInformation()
- void main()
- JPPFApplicationServer[] applicationServers
- NodeNioServer nodeNioServer
- ClassNioServer classServer
30
4.1.2 JPPFNode
Lớp JPPFNode là đối tượng thực thi task, lớp đối tượng này được gọi
bởi Node thông qua Classloader, Một Node khi chạy dùng phương thức
Classloader để load lớp JPPFNode về thực thi.
Những thuộc tính chính:
executionManager: Thuộc tính này có kiểu là một đối tượng
NodeExecutionManager dùng để thực thi task.
nodeIO: Thuộc tính này có kiểu là một đối tượng NodeIO dùng để đọc
những task bundle do server gửi về.
exitAction: Thuộc tính này có kiểu là đối tường Runable, nếu exitAction
khác null, node sẽ được dừng.
Những phương thức chính:
init(): Phương thức này khởi tạo node, tạo những socket kết nối tới Server
Task
run(): Khởi chạy JPPFNode, gọi phương thức init() để tạo node, khi quá
trình tạo node hoàn thành nó sẽ gọi phương thức perform() để thực thi task.
perform(): Đây là phương thức thực thi task, phương thức này sẽ gọi đối
tượng NodeIO để đọc những task do server gửi về, sau đó gọi đối tượng
JPPFNode
- void run()
- void perform()
- void processResults()
- void init()
- NodeExecutionManager executionManager
- NodeIO nodeIO
- Runnable exitAction
31
executeManage để thực thi task và gọi phương thức processResults thực thi
gửi trả kết quả về server.
stopNode(): Phương thức dừng node và giải phóng tài nguyên nó sử dụng.
4.1.3 Server Task Configuration
Thông tin cấu hình server được lưu trong một file cấu hình.
Cấu hình thông tin mạng
Cấu hình cổng lắng nghe kết nối từ Server Application, Node và Class
loader.
# class loader port
class.server.port = 11111
# communication with the applications
app.server.port = 11112
# communication with the nodes
node.server.port = 11113
Server Task có thể gửi quảng bá những thông tin của nó trên mạng (địa
chỉ host và số cổng) thông qua cơ chế UDP multicast. Nhờ cơ chế này Node
và Server Application có thể tự tìm được những Server Task đang hoạt động
trên mạng. Để Server Task tự động quảng bá thông tin của nó trên mạng ta
cần gán thuộc tính jppf.discovery.enabled bằng true.
# Enable or disable automatic discovery of JPPF drivers
jppf.discovery.enabled = true
# UDP multicast group to which drivers broadcast their connection parameters
jppf.discovery.group = 230.0.0.1
# UDP multicast port to which drivers broadcast their connection parameters
jppf.discovery.port = 11111
# How long a driver should wait between 2 broadcasts, in milliseconds
jppf.discovery.broadcast.interval = 1000
32
Server Task có thể kết nối tới Server Task khác tạo thành một mạng kiểu
mạng ngang hàng. Có 4 loại kết nối giữa 2 server A và server B
+ A và B không có kết nối
+ A kết nối tới B ( A hoạt động như một Node kết nối tới B)
+ B kết nối tới A ( B hoạt động như một Node kết nối tới A)
+ A và B được kết nối với nhau.
Có hai cách để định nghĩa một kết nối từ một server tới một server khác
trong mạng.
Tự động tìm kiếm server khác trong mạng để kết nối
# Enable or disable auto-discovery of other peer servers (defaults to false)
jppf.peer.dicovery.enabled = true
Với cách này, các Server Task sẽ tự động tìm kiếm những Server Task
khác đang hoạt động trong mạng để thực hiện kết nối.
Cấu hình bằng tay.
# define a space-separated list of peers to connect to
jppf.peers = server_1 server_2
# connection to server_1
jppf.peer.server_1.server.host = host_1
class.peer.server_1.server.port = 11111
node.peer.server_1.server.port = 11113
# connection to server_2
jppf.peer.server_2.server.host = host_2
class.peer.server_2.server.port = 11111
node.peer.server_2.server.port = 11113
33
Với cách cấu hình bằng tay ta có thể chỉ định Server Task nào kết nối
với những Server Task nào.
Giá trị “jppf.peer.server_1.server.host” cần phải trùng với giá trị
“class.server.host” trong file cấu hình của server_1 và giá trị
“node.peer.server_1.port” cần phải trùng với giá trị “node.server.port” trong
file cấu hình của server_1
Cấu hình thuộc tính cân bằng tải
jppf.load.balancing.algorithm =
JPPF cung cấp bốn thuật toán cân bằng tải:
+ manual: mỗi một bunle chứa cố định số task, tức là một node
được chia cho số lượng task là như nhau.
+ autotuned: sử dụng thuật toán Monte Carlo
+ proportional: tính thời gian trung bình để thực thi task dựa vào
việc tham gia của các node, từ đó gửi lượng task tương ứng với thời gian
thực thi trung bình tới các node.
+ rl: thuật toán dựa trên một kỹ thuật trí thông minh nhân tạo gọi là
reinforcement learning
4.2 Server Application
Tạo kết nối tới Server Task, gửi task tới Server Task và nhận kết quả trả về để xử
lý.
Những lớp chính trong Server Application
4.2.1 JPPFClient
Lớp JPPFClient cung cấp một API cho việc kết nối tới Server Task, gửi
task và những câu lệnh điều khiển .
34
Những thuộc tính chính.
uuid: là định danh của một JPPF, định danh này để xác định những ứng
dụng đang kết nối tới Server Task
Những phương thức chính.
initPools(): phương thức này đọc những thông tin trong file cấu hình và
gọi phương thức newconnection để tạo kết nối tới Server Task.
submit(): phương thức này thực hiện việc gửi Task tới Server Task,
phương thức này có các đối số: tasklist, dataProvider, policy, priority.
+ tasklist: danh sách task cần submit.
+ dataProvider: là một cung cấp khả năng chia sẻ dữ liêu giữa các
task, đối số này có thể bằng null.
+ policy: cơ chế thực thi task, đối số này quyết định một task có
được thực thi trên một node nào đó không.
+ priority: quyền ưu tiên, xác định quyền ưu tiên thực thi của một
task.
close(): phương thức này thực hiện dừng Server Application và giải
phóng tài nguyên nó sử dụng
JPPFClient
- String uuid
- JPPFClient()
- void initPools()
- List submit()
- void close()
35
4.2.2 JPPFTask
Là một lớp trừu tượng cho tất cả task gửi tới server để thực thi, lớp này mô
tả việc chia sẻ dữ liệu giữa các task, mô tả những ngoại lệ trong việc thực thi task,
và mô tả kết quả của việc thực thi task.
Những thuộc tính chính.
id: định danh của task
position: vị trí của task theo thời gian nó được gửi tới server, đây chính
là vị trí của nó trong hàng đợi thực thi task.
result: kết quả thực thi của task
exption: ngoại lệ trong việc thực thi task
dataProvider: cơ chế chia sẻ dữ liệu giữa các task
Những phương thức chính.
getId(): trả về id của task
setId(): thiêt lập id cho task
getResult(): trả về kết quả thực thi của task
- String id
- int position
- Object result
- Exeption exeption
- DataProvider dataProvider
- String getId()
- void setId()
- Object getResult()
- void setResult()
- Exeption getExeption()
- void setExeption()
- DataProvider getDataProvider()
- void setDataProvider()
- int getPosition()
- void setPosition()
JPPFTask
36
setResult(): thiết lập kết quả của task, phương thức này sẽ được người
phát triển những ứng dụng tính toàn dùng để định nghĩa một kết quả của
task theo từng ứng dụng tính toán.
getExeption(): trả về ngoại lệ trong việc thực thi task
setExeption(): thiết lập những ngoại lệ trong việc thực thi task
getDataProvider(): trả về cơ chế chia sẻ dữ liệu giữa các task
setDataProvider(): thiết lập cơ chế chia sẻ dữ liệu gữa các task
getPosition(): trả về vị trí của task trong hàng đợt thực thi task
setPosition(): thiết lập vị trí của task trong hàng đợi thực thi task
Ngoài ra JPPFTask còn định nghĩa một số phương thức khác như
onCancel(), onRestart(), onTimeout() để xử lý những sự kiện xẩy ra đối với task
4.2.3 Server Application Configuration
Server Application có thể kết nối tới nhiều Server Task, trong file cấu hình
liệt kê tên và địa chỉ của những Server Task mà nó sẽ kết nối tới.
# space-separated list of drivers this may connect to
# defaults to “default-driver”
jppf.drivers = driver-1 driver-2
Cấu hình thông tin mạng
Với mỗi Server Task ta định nghĩa những thuộc tính của nó như địa chỉ
host và số cổng.
# host name, or ip address, of the host the JPPF driver is running on
driver-1.jppf.server.host = localhost
# port number for the class server that performs remote class loading
driver-1.class.server.port = 11111
# port number the s / applications connect to
driver-1.app.server.port = 11112
37
Thứ tự ưu tiên của Server Task
# assigned driver priority
driver-1.priority = 10
Giá trị này sẽ quyết định thứ tự ưu tiên của Server Task, Server
Applicaton sẽ luôn sử dụng kết nối tới Server Task có độ ưu tiên cao nhất,
khi kết nối tới Server Task có độ ưu tiên cao nhất bị ngắt, nó sẽ tạo kết nối
tới Server Task có độ ưu tiên tiếp theo.
Recovery and Failover
# number of seconds before the first reconnection attempt
reconnect.initial.delay = 1
# time after which the system stops trying to reconnect, in seconds
# a value of zero or less means it never stops
reconnect.max.time = 60
# time between two connection attempts, in seconds
reconnect.interval = 1
Chúng ta có thể cấu hình cơ chế khôi phục khi kết nối giữa Server
Application và Server Task gặp sự cố, với những thông tin cấu hình như
trên, Server Application sẽ thực hiện việc khôi phục lại kêt nối sau 1s khi
kết nối bị ngắt, nó sẽ cố gắng kết tạo kết nối trong 60s, sau 60 mà không tạo
được kết nối nó sẽ chờ 1s sau để tiếp tục thử lại việc tạo kết nối
Local execution
# enable local job execution; defaults to false
jppf.local.execution.enabled = true
# number of threads to use for local execution
# the default value is the number of CPUs or cores available to the JVM
jppf.local.execution.threads = 4
38
Với việc cấu hình này sẽ cho phép Server Application cũng tham gia
vào việc tính toán như một node. Mặc định giá trị này là false
4.3 Node Applet
Chạy trên những máy tính tham gia vào lưới tính toán, thực thi Task và trả kết
quả về cho Server Task
Những lớp chính trong Node Applet
4.3.1 NodeRunner
Là một applet, thực thi việc chạy Node, tạo kết nối tới Server Task, sử
dụng cơ chế classloader tải lớp JPPFNode để thực thi task và gửi kết quả trả về
Server Task.
Những thuộc tính chính.
classLoader: có kiểu JPPFClassLoader, là một classloader dùng để load
những lớp cần java khi chạy node.
nodeSocket: có kiểu SocketWrapper, là socket kết nối tới Server Task.
node: có kiểu MonitoredNode đối tượng này được tạo nhờ cơ chế
classloader. NodeRunner dùng cơ chế classloader tải lớp JPPFNode trên
Server Task để tạo một đối tượng kiểu MonitoredNode
Những phương thức chính.
NodeRunner
- JPPFClassLoader classLoader
- SocketWrapper nodeSocket
- MonitoredNode node
- void init()
- void runMain()
- MonitoredNode createNode()
- JPPFClassLoader getJPPFClassLoader()
- void shutdown()
39
init(): phương thức tạo applet
runMain(): phương thức thực thi việc chạy node, phương thức này gọi
tới hàm createNode để tạo node và chạy nó.
createNode(): sử dụng cơ chế classloader tải lớp JPPFNode trên Server
Task để tạo một node có kiểu là MonitoredNode.
getJPPFClassLoader(): phương thức này trả về classloader dùng trong
việc thực thi NodeRunner.
shutdown(): phương thức dừng chạy Node.
4.3.2 JPPFClassLoader
Một ClassLoader cho phép tải những lớp từ xa trong quá trình thực thi.
Những thuộc tính chính.
socket: socket kết nối tới remote host, để tải lớp
uuidPath: danh sách id của những ứng dụng được gửi lên Server Task
requestUuid: id của bundle task mà node thực hiện
Những phương thức chính.
Init(): tạo socket kết nối tới remote host
JPPFClassLoader
- SocketWrapper socketClient
- List uuidPath
- String requestUuid
- void init()
- void initSocketClient()
- Class findClass()
- JPPFResourceWrapper loadResourceData()
- JPPFResourceWrapper loadRemoteData()
40
initSocket(): thiết lập thông tin cho socket theo những thông tin trong file
cấu hình.
findClass(): phương thức này thực hiện tải class theo tên class được chỉ
định, nếu gặp lỗi nó sẽ gọi phương thức System ClassLoader, phương
thức này gọi tới phương thức loadResoureData() để lấy những thống tin
về class cần tải, và dùng phương thức defineClass() để môt tả class được
tải theo những thông tin lấy được nhờ phương thức loadResoureData().
loadResourceData(): phương thức này gọi tới phương thức
loadRemoteData() để đọc những thông tin về class được chỉ định thông
qua socket. Phương thức trả về một đối tượng JPPFResourceWrapper,
đối tượng này tóm lược những thông tin của class được chỉ định.
4.3.3 Node Applet Configuration
Cấu hình mạng
# IP address or host name of the server
jppf.server.host = my_host
# class loader port
class.server.port = 11111
# communication between node and server
node.server.port = 11113
Thông tin cấu hình này định nghĩa địa chỉ và cổng của Server Task mà
node sẽ kết nối tới.
Server discovery
# Enable or disable automatic discovery of JPPF drivers
jppf.discovery.enabled = true
# UDP multicast group to which drivers broadcast their connection parameters
jppf.discovery.group = 230.0.0.1
# UDP multicast port to which drivers broadcast their connection parameters
jppf.discovery.port = 11111
41
# How long in milliseconds the node will attempt to automatically discover a driver
# before falling back to the manual configuration parameters
jppf.discovery.timeout = 5000
Nếu giá trị jppf.discovery.enabled được gán bằng true, node sẽ tự động
tìm kiếm những Server Task có trong mạng để kết nối.
Recovery and failover
# number of seconds before the first reconnection attempt
reconnect.initial.delay = 1
# time after which the system stops trying to reconnect, in seconds
# a value of zero or less means it never stops
reconnect.max.time = 60
# time between two connection attempts, in seconds
reconnect.interval = 1
Cũng giống như Server Application, những thông tin cấu hình này mô
tả cơ chế thực hiện khôi phục kết nối khi bị ngắt.
Security policy
Chính này bảo mật sẽ giới hạn những việc node có thể làm trên máy
tính mà nó chạy.
Để kích hoạt chính sách này ta cần chỉ rõ đường dẫn tới file định nghĩa
những chính sách bảo mất.
# Path to the security file, relative to the current directory or classpath
jppf.policy.file = jppf.policy
Nếu giá trị này không được định nghĩa, chính sách bảo mật sẽ bị vô
hiệu hóa.
42
4.4 Một số ứng dụng tính toán
Chúng tôi đã xây dựng thử nghiệm bài toán giải mã DES trên hệ thống tính
toán. Bài toán đặt ra là chúng ta có một bản rõ và một bản mã hóa của bản rõ đó,
chúng ta cần tìn ra khóa đã dùng để mã hóa bả rõ đó. Để giải quyết bài toán này chúng
ta sử dụng phương thức duyệt toàn bộ, chúng ta sẽ duyệt lần lượt các giá trị có thể của
khóa, dùng khóa đó để giải mã bản mã hóa, sau đó so sánh với bản rõ để tìm ra khóa
đúng.
Bài toán cần được tính toán trên hệ thống tín toán phân tán để tăng năng suất
tính toán, vì thế bài toán cần được chia ra làm nhiều phần nhỏ, mỗi phần nhỏ này là
một task, một task ở đây chúng tôi định nghĩa là việc thử 100 khóa, kết quả trả về cho
server sẽ là false nếu 100 khóa đó đều sai, nếu có khóa đúng kết quả trả về sẽ là true
và giá trị của khóa đó.
Do điều kiện vật chất không cho phép, chúng tôi đã cho chạy thử ứng dụng trên
3 máy, và chạy thử 5000 task, kết quả cho thấy hệ thống đã có thể chia task cho từng
máy thực thi.
Hình 4.1 Mô tả phân chia task tới những máy tính Node
Thống kê thời gian thức thi cho thấy, khi chạy với 3 máy tính thời gian thực thi
đã nhanh hơn 1 máy tính.
Hình 4.2 là biểu đồ thời gian thực thi khi có một máy tính, đường màu đỏ cho
thấy thời gian thực thi trung bình khoảng 51ms.
43
Hình 4.2 Biểu đồ thời gian thực thi khi có một máy tính
Hình 4.3 là biểu đồ thời gian thực thi khi có 3 máy tính, ta thấy thời gian thực thi
trung bình khoảng 30ms
Hình 4.3 Biểu đồ thời gian thực thi khi có ba máy tính
44
Chương V – Tổng kết
Dựa trên những kiến thức đã tìm hiểu được về tính toán phân tán và việc phát
triển ứng dụng trên facebook. Chúng tôi đã phân tích và nắm bắt được kiến trúc cơ bản
của một hệ thống tính toán phân tán, cách thức hoạt động và triển khai một hệ thống
tính toán phân tán. Bên cạnh đó chúng tôi cũng nắm bắt được quy trình triển khai một
ứng dụng trên facebook. Từ những kết quả nghiên cứu đó, chúng tôi đã bước đầu xây
dựng một hệ thống tính toán phân tán kết hợp với ứng dụng facebook. Hệ thống có sử
dụng một ứng dụng mã nguồn mở về tính toán lưới làm nền tảng để phát triển đó là
ứng dụng JPPF [12]. Chúng tôi đã cải tiến ứng dụng tính toán lưới này để nó có thể
triển khai trên môi trường web, giúp cho việc tham gia của người dùng được dễ dàng
hơn. Chúng tôi cũng xây dựng một vài bài toán tính toán dựa trên hệ thống tính toán
phân tán này, để kiếm thử quá trình hoạt đống của nó. Và hệ thống đã có thể thực hiện
những bài toán trên môi trường lưới tính toán.
Do điều kiện vật chất cũng như thời gian hạn hẹp nên hệ thống mới chỉ được
triển khai trên quy mô nhỏ, nhưng chúng tôi tin rằng với việc phát triển của mạng máy
tính cũng như mạng xã hội như hiện nay, hệ thống sẽ dễ dàng được mở rộng và phát
triển.
Việc phát triển các ứng dụng tính toán phân tán sẽ còn được quan tâm nhiều
trong tương lai, vì đây là một giải pháp hữu hiệu để giải quyết nhứng bài toán khoa
học lớn. Trong tương lai chúng tôi sẽ xây dựng hệ thống với quy mô rộng lớn hơn. Cải
tiến những thuật toán của chương trình để chương trình có thể vận hành tốt hơn, chính
xác hơn, sử dụng tài nguyên của những máy tính trong lưới tính toán phù hợp hơn
nhằm tăng hiệu năng của hệ thống.
Về ứng dụng, chúng tôi sẽ cải tiến hệ thống API giúp cho những người phát triển
bài toán tính toán có thể dễ dàng triển khai ứng dụng của mình
Về ứng dụng facebook, chúng tôi sẽ cải tiến giao diện người dùng, giúp người
dùng dễ dàng tham gia vào những dự án tính toán, biến nó trở thành một cầu nối giữa
người dùng và dự án tính toán. Từ đó tạo điều kiện mở rộng dự án tính toán, tăng hiệu
năng thực thi. Sẽ là rất tốt khi mọi người cùng chung nhau chung sức hoàn thành
những dự án có ích cho toàn xã hội.
45
Tài liệu tham khảo
Tiếng Anh
[1] Clovis Chapman, Paul Wilson, Todd Tannenbaum, Matthew Farrellee, Miron
Livny, John Brodholt, Wolfgang Emmerich, Condor services for the Global Grid,
[2] David P. Anderson, Gilles Fedak, The Computational and Storage Potential
of Volunteer Computing,
per.pdf
[3] Derek Wright, BOINC and Condor – Scavenging the Scavenger,
[4] Jon Wakelin, Condor Globus and SRB: Tools for Constructing a Campus
Grid,
[5] Luis F. G. Sarmenta. Bayanihan: Web-Based Volunteer Computing Using
Java. Proc. of the 2nd International Conference on World-Wide Computing and
its Applications (WWCA'98), Tsukuba, Japan, March 3-4, 1998. Lecture Notes in
Computer Science 1368, Springer-Verlag, 1998. pp. 444-461.
[6] Parvin Asadzadeh, Rajkumar Buyya, Chun Ling Kei, Deepa Nayar, Srikumar
Venugopal, Global Grids and Software Toolkits:A Study of Four Grid
Middleware Technologies,
[7]
[8]
[9]
[10]
[11]
[12]
Tiếng việt
[13] PGS.TS. Vũ Đức Thi, PGS.TS. Trần Văn Lăng, PGS.TS. Nguyễn Thanh
Thuỷ, GS.TSKH. Phạm Kỳ Anh, PGS.TS. Lê Anh Dũng, Tính toán lưới và một
số vấn đề nghiên cứu, phát triển tính toán lưới ở Việt Nam, Hội thảo quốc gia lần
thứ XI: Một số vấn đề chọn lọc của CNTT - TT Huế, 12 – 13/6/2008
Các file đính kèm theo tài liệu này:
- khoa_luan_tot_nghiep_nguyen_chi_cong.pdf