Role-Based Security

Một phần của tài liệu Tìm hiểu tính toán lưới Peer-to-Peer và Framework Alchemi dựa trên .NET (Trang 26)

Mỗi chương trình kết nối với Manager phải cung cấp tên người dùng và mật khẩu hợp lệ. Ba tài khoản mặc định được tạo ra trong quá trình cài đặt:

executor (mật khẩu: executor), user (mật khẩu: user) và admin (mật khẩu: admin) thuộc nhóm 'Executors', 'Users' và 'Administrators' tương ứng.

Người dùng được quản lý thông qua tab Users của Alchemi Console (nằm trong Alchemi SDK). Chỉ Administrators mới có quyền quản lý người sử dụng, vì vậy bạn phải khởi tạo đăng nhập bằng tài khoản quản trị mặc định.

Console cho phép bạn thêm người dùng, thay đổi thành viên nhóm và thay đổi mật khẩu.

Nhóm Users (grp_id = 3) dành cho người sử dụng thực thi các ứng dụng lưới.

Nhóm Executors (grp_id = 2) dành cho Alchemi Executors. Theo mặc định, Executors cố gắng kết nối với Manager sẽ sử dụng tài khoản executor. Nếu bạn không muốn Executos kết nối ẩn danh, bạn có thể thay đổi mật khẩu cho tài khoản này.

4 Cross Platform Manager

Cross Platform Manager (XPManager) yêu cầu:

• Internet Information Services (IIS) • ASP.NET

Cài đặt

• Cài đặt dịch vụ web XPManager thông qua trình cài đặt Cross Platform Manager.

Cấu hình

• Nếu XPManager được cài đặt trên một máy tính khác máy quản lý, hoặc nếu cổng mặc định của Manager bị thay đổi, cấu hình dịch vụ web phải

được sửa đổi. XPManager được cấu hình thông qua tập tin ASP.NET Web.config nằm trong thư mục cài đặt (mặc định wwwroot\Alchemi\ CrossPlatformManager):

<appSettings>

<add key= "ManagerUri" value= "tcp://localhost:9000/Alchemi_Node"/> </appSettings>

Vận hành

• URL dịch vụ web XPManager có dạng http://[host_name]/[installation_path] • Do đó, mặc định là

http://[host_name]/Alchemi/CrossPlatformManager

• Dịch vụ web giao tiếp với Manager. Do đó Manager phải được chạy và khởi động để dịch vụ web hoạt động.

5 ExecutorCài đặt Cài đặt

• Alchemi Executor có thể được cài đặt trong hai chế độ o Như một ứng dụng Windows desktop thông thường

o Như một dịch vụ Windows. (Chỉ hỗ trợ trên Windows NT/2000/XP/2003)

• Để cài đặt executor như một ứng dụng Windows, sử dụng bộ cài đặt Executor Setup. Để cài đặt chế độ dịch vụ sử dụng Executor Service Setup. Các bước cấu hình là như nhau cho cả hai chế độ. Trong trường hợp chế độ dịch vụ, "Alchemi Executor Service" cài đặt và cấu hình để chạy tự động khi Windows khởi động. Sau khi cài đặt, quản lý điều khiển dịch vụ Windows có thể được sử dụng để diều khiển các dịch vụ. Ngoài ra chương trình Alchemi ExecutorServiceController cũng có thể được sử dụng. Bộ điều khiển dịch vụ Executor là một giao diện đồ họa, tương tự với ứng dụng Executor thông thường.

• Cài đặt Executor thông qua trình cài đặt Executor và thực hiện theo hướng dẫn trên màn hình.

Cấu hình và vận hành

Executor có thể chạy từ desktop hoặc Start -> Programs -> Alchemi -> Executor -> Alchemi Executor.

Executor được cấu hình từ ứng dụng riêng của mình. Bạn cần cấu hình 2 phần của Executor:

• Máy chủ và cổng kết nối của Manager.

• Thực thi dedicated / non-dedicated. Non-dedicated Executor thực thi grid thread trên cơ sở tự nguyện (nó yêu cầu thread để thực thi từ Manager), trong khi dedicated Executor luôn luôn được thực thi grid thread (nó được cung cấp trực tiếp grid thread để thực thi bởi Manager). Non-dedicated Executor làm việc phía sau tường lửa.

• Click vào nút "Connect" để kết nối Executor đến Manager.

• Nếu Executor được cấu hình để thực thi non-dedicated, bạn có thể bắt đầu thực thi bằng cách click vào nút "Start Executing" trong tab "Manager Execution".

Executor chỉ sử dụng CPU nhàn rỗi trên máy tính và không ảnh hưởng đến việc sử dụng CPU của chương trình đang chạy. Khi đóng lại, Executor nằm trong khay hệ thống. Tùy chọn khác như khoảng thời gian heartbeat executor (thời gian ping giữa các Manager) có thể được cấu hình thông qua tab Options.

Khi hoạt động ở chế độ dịch vụ, giao diện hiển thị trong hình trên được sử dụng để khởi động / dừng dịch vụ Executor. Dịch vụ này sẽ tiếp tục hoạt động ngay cả khi ứng dụng điều khiển dịch vụ thoát.

Executor Logging

Executor ghi lại thông báo và lỗi vào tập tin log là "alchemi-executor.log". Tập tin này có thể được sử dụng để gỡ lỗi executor / báo cáo lỗi / kiểm tra hoạt động thực thi. Tập tin log được đặt trong thư mục "dat" dưới thư mục cài đặt.

6 Software Development Kit

SDK có thể được giải nén vào vị trí thuận tiện. SDK bao gồm các phần sau:

Console (Alchemi.Console.exe) là công cụ quản lý và giám sát lưới. Console nằm trong thư mục bin.

Bảng “Summary” hiển thị thống kê hệ thống và biểu đồ thời sử dụng gian thực. Tab “Application”cho phép bạn theo dõi các ứng dụng đang chạy. Tab “Executor” cung cấp thông tin về Executors. Tab “Users” cho phép bạn quản lý người dùng.

Alchemi.Core.dll là một thư viện lớp để tạo ra ứng dụng lưới chạy trên lưới Alchemi. Nó nằm trong thư mục bin. Nó phải được tham chiếu từ tất cả các ứng dụng lưới của bạn.

Ví dụ

Thư mục examples chứa một số ví dụ ứng dụng lưới, cho phép bạn kiểm tra việc tạo lưới và minh họa lập trình lưới.

7 Kiểm tra cài đặt lưới

Bạn có thể kiểm tra việc cài đặt thành công của lưới bằng cách chạy một ứng dụng mẫu trên nó. Thư mục examples trong SDK chứa một số ứng dụng mẫu.

Một trong những ứng dụng mẫu là "PiCalculator" tính toán giá trị của Pi đến 100 chữ số:

• SDK\examples\PiCalculator\PiCalculatorExec\bin\debug\ PiCalculator.exe

PHẦN 4: LẬP TRÌNH LƯỚI

1 Giới thiệu về phần mềm lưới

Với mục đích phát triển ứng dụng lưới, lưới có thể được xem như là một tập hợp nhiều máy tính trừu tượng (mỗi máy tính có một hay nhiều CPU) họat động như một máy tính "ảo" có nhiều CPU.

Do tính chất của môi trường lưới (tài nguyên không đồng nhất kết nối qua môi trường không đáng tin cậy, độ trễ mạng cao), ứng dụng lưới có các tính năng sau đây:

• Chúng có thể được parallelised vào một số đơn vị tính toán độc lập • Đơn vị làm việc có thời gian tính toán cao so với tỷ lệ thời gian liên lạc

Alchemi hỗ trợ hai mô hình cho các thành phần ứng dụng song song.

Course-Grained Abstraction: File-Based Jobs

Việc triển khai lưới truyền thống chỉ cung cấp trừu tượng cấp cao của máy ảo, nơi mà các đơn vị nhỏ nhất thực hiện song song là một process. Đặc điểm của job được thực thi trên lưới ở cấp độ cơ bản nhất bao gồm các tập tin đầu vào, các tập tin đầu ra và file thực thi (process). Trong trường hợp này, viết phần mềm để chạy trên lưới liên quan đến giao tiếp với các tập tin, một cách tiếp cận có thể phức tạp và không linh hoạt.

Fine-Grained Abstraction: Grid Threads

Ngược lại, mô hình lập trình chính được hỗ trợ bởi Alchemi cung cấp trừu tượng ở mức độ thấp của lưới cơ bản bằng cách cung cấp mô hình lập trình hướng đối tượng mở đầu cho lập trình đa luồng truyền thống.

Đơn vị nhỏ nhất thực hiện song song trong trường hợp này là grid thread (đối tượng .NET).

Các nhà phát triển ứng dụng lưới chỉ quan tâm đến đối tượng .NET grid thread và grid application, điều này cho phép bạn tập trung vào ứng dụng riêng của mình mà không lo lắng chi tiết về "plumbing". Hơn nữa, trừu tượng ở cấp độ này cho phép sử dụng mô hình lập trình đơn giản với giao diện rõ ràng giữa từ xa và cục bộ.

Lưu ý: Application và thread có thể được xem là grid application và grid thread, trừ khi có quy định khác.

So sánh Grids Jobs và Grid Threads

Việc hỗ trợ để thực thi grid job được trình bày vì những lý do sau: • Ứng dụng Grid-enabling legacy hoặc non-.NET

• Khả năng tương tác với grid middleware trên các nền tảng khác (thông qua giao diện dịch vụ web)

Mô hình grid thread được ưa chuộng do dễ sử dụng, mạnh mẽ và linh hoạt nên được sử dụng cho các ứng dụng mới.

So sánh mô hình đa xử lý truyền thống và mô hình lưới

Để làm rõ các khái niệm được thảo luận, xem xét sự tương tự giữa lập trình đa luồng truyền thống và lập trình lưới:

Multiprocessor Machine Grid

Operating System Alchemi

Processor Executor

OS Services (High-Level) - System API Alchemi API

OS Services (Low-Level) Manager

Process Grid Application

Thread Grid Thread

2 Hướng dẫn lập trình lưới

Hướng dẫn này giới thiệu cơ bản về lập trình lưới với Alchemi. Tương tự với VS.NET và C #.

Viết một ứng dụng lưới đơn giản tạo ra các số nguyên tố. Ứng dụng này tạo ra một vài số lớn ngẫu nhiên và sử dụng lưới để kiểm tra xem chúng là nguyên tố hay không.

Thực hiện theo các bước sau để thiết lập một môi trường phát triển:

• Xây dựng một lưới tối thiểu (1 Manager và 1 Executor) trên máy phát triển và thử nghiệm nó bằng cách chạy PiCalculator

• Tải Alchemi SDK về và giải nén vào một vị trí thuận tiện

Như đã thảo luận, lưới Alchemi có thể được xem như một máy ảo với nhiều bộ xử lý. Ứng dụng lưới có thể lợi dụng điều này bằng cách tạo ra các đơn vị công việc độc lập được thực hiện song song trên lưới (mỗi đơn vị công việc được thực hiện bởi một Executor riêng biệt).

Đơn vị công việc được gọi là grid thread và phải là thể hiện của lớp có nguồn gốc từ Alchemi.Core.Owner, GThread. Đoạn mã đó được thực thi trên lưới được định nghĩa trong phương thức void Start().

Để viết một lớp grid thread, ta kế thừa lớp mới từ các Alchemi.Core.Owner, lớp GThread và override phương thức void Start(). Chúng ta cũng phải thêm thuộc tính Serializable vào lớp:

[Serializable]

class CustomGridThread : GThread {

public override void Start() {

} }

Quá trình kiểm tra xem một số là số nguyên tố hay không là tính toán chuyên sâu. Ngoài ra, quá trình này có thể được thực hiện cho một vài số song song. Do đó có thể được hiện thực như grid thread.

Để bắt đầu ta làm như sau:

• Tạo ra một dự án ứng dụng console mới "PrimeNumberGenerator"

• Thêm tham chiếu đến Alchemi.Core.dll (Alchemi.Core.dll phải được tham chiếu bởi bất kỳ dự án sử dụng API Alchemi)

Bây giờ chúng ta viết một grid thread để kiểm tra xem một số là số nguyên tố hay không. Chúng ta sẽ sử dụng một thuật toán đơn giản để đếm số lượng ước số từ 1 đến chính nó. Nếu số lượng ước số là 2 (1 và chính nó) thì theo định nghĩa, đó là số nguyên tố.

using System;

using Alchemi.Core; namespace Tutorial {

[Serializable]

class PrimeNumberChecker : GThread {

public readonly int Candidate; public int Factors = 0;

public PrimeNumberChecker(int candidate) {

Candidate = candidate; }

public override void Start() {

// count the number of factors of the number from 1 to the number itself for (int d=1; d<=Candidate; d++)

{ if (Candidate%d == 0) Factors++; } } } ...

Lưu ý: Có những thuật toán hiệu quả hơn để kiểm tra xem một số là số nguyên tố không. Tuy nhiên, chúng ta không quan tâm đến thuật toán, mục đích của hướng dẫn này là dạy lập trình song song trong môi trường lưới sử dụng Alchemi.

Bây giờ chúng ta đã viết xong mã song song, chúng ta có thể viết mã để chạy nó trên lưới. Để làm điều này, chúng ta sử dụng lớp GApplication.

...

class PrimeNumberGenerator {

public static GApplication App = new GApplication(); [STAThread]

static void Main(string[] args) {

// create grid threads to check if some randomly generated large // numbers are prime

Random rnd = new Random(); for (int i=0; i<100; i++)

{

App.Threads.Add(new PrimeNumberChecker(rnd.Next(1000000))); }

// initialise application Init();

// start the application App.Start();

Console.ReadLine(); // stop the application App.Stop();

...

GApplication là một container để thực thi grid thread và được sử dụng để tương tác với lưới. Trong phương thức Main của ứng dụng, grid thread 100 PrimeNumberChecker được tạo ra và thêm vào thuộc tính Thread của ứng dụng lưới App.

Các ứng dụng được khởi tạo bằng cách gọi phương thức Init() và thực thi tất cả thread được khởi tạo bằng cách gọi phương thức Start().

...

private static void Init() {

// specify connection properties

App.Connection = new GConnection("localhost", 9000, "user", "user"); // grid thread needs to

App.Manifest.Add(new

ModuleDependency(typeof(PrimeNumberChecker).Module)); // subscribe to ThreadFinish event

App.ThreadFinish += new GThreadFinish(App_ThreadFinish); }

...

Trước khi một ứng dụng được bắt đầu, một số thuộc tính kết nối lưới phải được xác định (thông qua lớp GConnection) và thiết lập (thông qua thuộc tính Connection của ứng dụng). Đó là:

• Manager host • Manager port • Username • Password

Thuộc tính Manifest của GApplication cho phép bạn xác định phụ thuộc cho grid thread trong ứng dụng. Các phụ thuộc cho một ứng dụng cụ thể được tự động triển khai đến Executor khi thực thi thread thuộc về ứng dụng lần đầu tiên. Phụ thuộc cần thiết được thêm vào biểu hiện của ứng dụng là tập tin chứa hiện thực của grid thread. Điều này phải được xác định để Executor có thể tái tạo thread và thực thi nó. Lớp ModuleDependency cho phép bạn chỉ định một module cụ thể (.dll hay.Exe) là phụ thuộc.

Để thêm module chứa PrimeNumberChecker như một phụ thuộc vào ứng dụng, trước tiên chúng ta có đối tượng System.Type của PrimeNumberCheckers và sau đó sử dụng thuộc tính Module của Type.

Chúng ta đăng ký sự kiện ThreadFinish của Gapplication để kích hoạt khi một thread kết thúc thực hiện.

...

private static void App_ThreadFinish(GThread thread) {

// cast the supplied GThread back to PrimeNumberChecker PrimeNumberChecker pnc = (PrimeNumberChecker) thread; // check whether the candidate is prime or not

bool prime = false;

if (pnc.Factors == 2) prime = true; // display results

Console.WriteLine(

"{0} is prime? {1} ({2} factors)", pnc.Candidate, prime, pnc.Factors); }

} }

Thread hoàn thành được cung cấp như một tham số của xử lý sự kiện GThreadFinish. Trình xử lý sự kiện kiểm tra số lượng ước số để xác định xem số là nguyên tố hay không và cuối cùng hiển thị kết quả.

Lưu ý: Mã nguồn của hướng dẫn này có thể được tìm thấy trong thư mục examples\PrimeNumberGenerator.

KẾT LUẬN



Framework tính toán lưới dựa trên .NET cung cấp runtime machinery và môi trường lập trình hướng đối tượng để dễ dàng xây dựng desktop grid và phát triển các ứng dụng lưới. Tích hợp vào lưới cross-platform toàn cầu để thực thi grid job thông qua giao diện dịch vụ web và sử dụng thành phần broker.

Alchemi là một .Net Grid-computing framework dễ sử dụng nhằm mục đích giảm các rào cản gia nhập vào thế giới tính toán phân tán và tính toán lưới, bằng cách làm cho nó dễ dàng hơn để thiết lập, quản lý và duy trì lưới trên một mạng nội bộ hoặc mạng diện rộng.

Một lần nữa em xin gửi lời cảm ơn chân thành đến Thầy Nguyễn Phi Khứ. Thầy đã cung cấp cho chúng em rất nhiều kiến thức và kinh nghiệm quý báu cùng với sự hướng dẫn tận tình trong suốt thời gian môn học.

TÀI LIỆU THAM KHẢO



[1]Slide bài giảng của Thầy Nguyễn Phi Khứ

[2]Peer-to-Peer Grid Computing and a .NET-based Alchemi Framework, Akshay Luther, Rajkumar Buyya, Rajiv Ranjan, and Srikumar Venugopal

Một phần của tài liệu Tìm hiểu tính toán lưới Peer-to-Peer và Framework Alchemi dựa trên .NET (Trang 26)

Tải bản đầy đủ (DOC)

(43 trang)
w