Server Application

Một phần của tài liệu LUẬN VĂN: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 ppt (Trang 40 - 52)

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<JPPFTask> 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 (adsbygoogle = window.adsbygoogle || []).push({});

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

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 (adsbygoogle = window.adsbygoogle || []).push({});

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

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 (adsbygoogle = window.adsbygoogle || []).push({});

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<String> 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

41 (adsbygoogle = window.adsbygoogle || []).push({});

# 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 (adsbygoogle = window.adsbygoogle || []).push({});

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

44

Chương V – Tng 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 liu tham kho Tiếng Anh

[1] Clovis Chapman, Paul Wilson, Todd Tannenbaum, Matthew Farrellee, Miron Livny, John Brodholt, Wolfgang Emmerich, Condor services for the Global Grid, http://www.cs.wisc.edu/condor/doc/condor-ogsa-2004.pdf

[2] David P. Anderson, Gilles Fedak, The Computational and Storage Potential of Volunteer Computing, http://boinc.berkeley.edu/boinc_papers/internet/pa- per.pdf

[3] Derek Wright, BOINC and Condor – Scavenging the Scavenger, http://bolt.berkeley.edu/ws_06/boinc_and_condor.pdf

[4] Jon Wakelin, Condor Globus and SRB: Tools for Constructing a Campus Grid, http://www.nesc.ac.uk/talks/556/02_Wakelin_condorGlobus.ppt

[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, http://www.buyya.com/papers/gmchapter.pdf

[7] http://abcathome.com/ [8] http://boinc.berkeley.edu/wiki/User_manual [9] http://setiathome.berkeley.edu/ [10] http://pleiad.umdnj.edu/IBM/ [11] http://www.tnsglobal.com/_assets/files/TNS_Market_Research_5.pdf [12]http://jppf.org/ 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

Một phần của tài liệu LUẬN VĂN: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 ppt (Trang 40 - 52)