intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

CÔNG NGHỆ GRID COMPUTING VÀ ỨNG DỤNG THỬ NGHIỆM TRONG BÀI TOÁN QUẢN TRỊ MẠNG - 10

Chia sẻ: Cao Tt | Ngày: | Loại File: PDF | Số trang:23

116
lượt xem
20
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Phụ lục Ở đây định nghĩa các kiểu của các thành phần add và addResponse. Trên đây vừa trình bày sơ nét về cấu trúc cơ bản của file GWSDL, có thể thêm các kiểu mới, mở rộng bằng cách tham khảo các không gian tên đã được định nghĩa sẵn. C. Kỹ thuật cài đặt các chức năng cơ bản của Grid Service C.1. Kỹ thuật cài đặt Operation Provider Như đã giới thiệu, GT3 hỗ trợ 2 cách cài đặt interface trong ngôn ngữ lập trình, cách thứ nhất là kỹ thuật sử dụng tính kế thừa, ở đây lớp MathImpl kế...

Chủ đề:
Lưu

Nội dung Text: CÔNG NGHỆ GRID COMPUTING VÀ ỨNG DỤNG THỬ NGHIỆM TRONG BÀI TOÁN QUẢN TRỊ MẠNG - 10

  1. Phụ lục &lt!-- Messages --> &lt!-- PortType --> Ở đây định nghĩa các kiểu của các thành phần add và addResponse. Trên đây vừa trình bày sơ nét về cấu trúc cơ bản của file GWSDL, có thể thêm các kiểu mới, mở rộng bằng cách tham khảo các không gian tên đã được định nghĩa sẵn. C. Kỹ thuật cài đặt các chức năng cơ bản của Grid Service C.1. Kỹ thuật cài đặt Operation Provider Như đã giới thiệu, GT3 hỗ trợ 2 cách cài đặt interface trong ngôn ngữ lập trình, cách thứ nhất là kỹ thuật sử dụng tính kế thừa, ở đây lớp MathImpl kế thừa từ lớp GridServiceImpl, do GridServiceImpl có tất cả các chức năng cơ bản nên MathImpl chỉ cần cài đặt tất cả các phương thức của Math portType là đủ. Như trên hình 0-1, lớp MathImpl chứa tất cả các hàm cài đặt cho các phương thức của portType (Lưu ý, ở đây có nhiều hàm hơn). Tuy nhiên, cài đặt tất cả các phương thức của portType chỉ trong một lớp có thể gây ra nhiều bất tiện đặc biệt là đối với các portType lớn, có nhiều phương thức. Và kỹ thuật này, đối với Java, lớp MathImpl không thể kế thừa từ một lớp nào nữa, điều này hạn chế việc tái sử dụng mã. - 193 -
  2. Phụ lục Hình 8-1 Lớp triển khai interface của Grid service bằng kỹ thuật kế thừa. GT3 đưa một hướng tiếp cận mới để giải quyết khuyết điểm của kỹ thuật sử dụng tính kế thừa, đó là kỹ thuật uỷ quyền. Hướng tiếp cận này cho phép phân tán các nhóm phương thức vào các lớp khác nhau, các lớp này được gọi là Operation Provider. Như trên hình 0-2, có thể chia lớp MathImpl thành 3 lớp, ứng với từng nhóm phương thức. Hình 8-2 Cài đặt intrface củaGrid service bằng kỹ thuật Operation Provider Lưu ý là 3 lớp này không thừa kế từ lớp nào hết, chúng chỉ cài đặt một interface tên là Operation Provider. Lúc này các chức năng của lớp GridServiceImpl không được kế thừa từ đây mà được yêu cầu Grid service container cung cấp thông qua bản đặc tả triển khai. Khi tiến hành cài đặt theo cách tiếp cận này, có một số thay đổi nhỏ so với kỹ thuật sử dụng tính kế thừa, như trình bày dưới đây. Lớp cung cấp hoạt động (Operation Provider) ở đây gọi là MathProvider cũng giống như các lớp của MathImpl trước đây, chỉ khác là ở đây cài đặt thêm interface OperationProvider, file : $GRIDSER_DEMO/org/globus/progtutorial/services/core/providers/impl /MathProvider.java - 194 -
  3. Phụ lục package org.globus.progtutorial.services.core.providers.impl; import org.globus.ogsa.GridServiceBase; import org.globus.ogsa.GridServiceException; import org.globus.ogsa.OperationProvider; import java.rmi.RemoteException; import javax.xml.namespace.QName; //Luu y o day cai dat OperationProvider public class MathProvider implements OperationProvider { // Cac thuoc tinh cua Operation provider //Khai bao namespace private static final String namespace = "http://www.globus.org/namespaces/2004/02/progtutorial/MathService"; //Khai bao ten cac phuong thuc duoc cung cap, tuong ung voi file GWSDL private static final QName[] operations = new QName[] { new QName(namespace, "add"), new QName(namespace, "subtract"), new QName(namespace, "getValue") }; private GridServiceBase base; // Cac phuong thuc cua Operation Provider public void initialize(GridServiceBase base) throws GridServiceException { this.base = base; } public QName[] getOperations() { return operations; } //Cai dat private int value = 0; public void add(int a) throws RemoteException { value = value + a; } //-------- tuong tu MathImpl---------- } File đặc tả triển khai cũng có một số thay đổi, file : $GRIDSER_DEMO/org/globus/progtutorial/services/core/providers/serv er-deploy.wsdd - 195 -
  4. Phụ lục Các thao tác khác để triển khai service hoàn toàn tương tự như đã giới thiệu ở trên. C.2. Thêm thành phần dữ liệu (Service Data Element (SDE)) Như đã biết, mỗi Grid service đều có các SDE của riêng mình, phần này sẽ xem xét kỹ thuật thêm SDE cho một service. Ở đây chúng ta thêm một SDE có tên là MathData chứa các thông tin như giá trị hiện tại (value), phép toán thực hiện cuối cùng (lastOp), số phép toán đã thực hiện (numOp), MathData chỉ có một và chỉ một giá trị (cardinality = 1..1) được mô tả trên hình 0-3: Hình 8-3 Ví dụ về SDE của MathService + Đặc tả SDE Việc định nghĩa một SDE cho một service thông qua file đặc tả GWSDL, tuy nhiên MathData là một kiểu phức tạp nên mặc dù có thể đặc tả kiểu này trong file GWSDL, chúng ta có thể đặc tả trong một file khác. File : $GRIDSER_DEMO/schema/progtutorial/MathService_sd/MathSDE.xsd - 196 -
  5. Phụ lục Bây giờ, chúng ta sẽ đặc tả lại inteface của service bằng cách tạo một file GWSDL mới, file này có nội dung và cấu trúc gần giống với file GWSDL cũ, một số phần thay đổi được trình bày ở đây. File : $GRIDSER_DEMO/schema/progtutorial/MathService_sd/Math.gwsdl. + Xác định lại namespace, + Nhập file MathSDE.xsd định nghĩa MathData vào + Khai báo SDE trong đặc tả interface + Cài đặt SDE File : $GRIDSER_DEMO/org/globus/progtutorial/services/core/servicedata/im pl/MathImpl.java Ở đây khai báo lớp không thay đổi: public class MathImpl extends GridServiceImpl implements MathPortType Lớp cài đặt này có thêm 2 thuộc tính private mới : private ServiceData mathDataSDE; //La SDE private MathDataType mathDataValue; //Chua gia tri cua SDE - 197 -
  6. Phụ lục Việc tạo lập các SDE nằm trong hàm postCreate, ở đây chúng ta có thể để các giá trị khởi tạo cho SDE. public void postCreate(GridContext context) throws GridServiceException { // Goi ham postCreate lop co so super.postCreate(context); //Duoi day la cac buoc tao mot SDE va dua vao Service Data Set // Tao Service Data Element mathDataSDE = this.getServiceDataSet().create("MathData"); // Tao mot doi tuong MathDataType va khoi tao cac gia tri mathDataValue = new MathDataType(); mathDataValue.setLastOp("NONE"); mathDataValue.setNumOps(0); mathDataValue.setValue(0); // Dua cac gia tri vao doi tuong MathDataType mathDataSDE.setValue(mathDataValue); // Them SDE vao Service Data Set this.getServiceDataSet().add(mathDataSDE); } Các hàm add(), substract() có thêm các lệnh mới để cập nhật lại SDE: public void add(int a) throws RemoteException { //Cac ham setLastOp(),setValue(),setNumOps(), getNumOps() duoc tu //dong phat sinh tu file dac ta MathSDE.xsd mathDataValue.setLastOp("Addition"); incrementOps(); mathDataValue.setValue(mathDataValue.getValue() + a); } // Ham nay cap nhat MathData SDE tang so phep toan len 1 private void incrementOps() { int numOps = mathDataValue.getNumOps(); mathDataValue.setNumOps(numOps + 1); } + Đặc tả cài đặt Trong file đặc tả chỉ cần thay đổi lại các giá trị tương ứng tên các file mới vừa tạo ra. - 198 -
  7. Phụ lục + Client truy xuất SDE //Khai bao import giong nhu tren //----------------------------- public class Client { public static void main(String[] args) { try { // Lay tham so dong lenh URL GSH = new java.net.URL(args[0]); int a = Integer.parseInt(args[1]); // Lay GSR cua Math PortType MathServiceGridLocator mathServiceLocator = new MathServiceGridLocator(); MathPortType math = mathServiceLocator.getMathServicePort(GSH); // Lay SDE "MathData", su dung phuong thuc findServiceData cua GridServiceImpl ExtensibilityType extensibility = math.findServiceData(QueryHelper.getNamesQuery("MathData")); ServiceDataValuesType serviceData = AnyHelper.getAsServiceDataValues(extensibility); MathDataType mathData = (MathDataType) AnyHelper.getAsSingleObject(serviceData, MathDataType.class); // Xuat cac gia tri cua SDE ra man hinh System.out.println("Value: " + mathData.getValue()); System.out.println("Previous operation: " + mathData.getLastOp()); System.out.println("# of operations: " + mathData.getNumOps()); // Goi phuong thuc cua service. math.add(a); }catch(Exception e) { System.out.println("ERROR!"); e.printStackTrace(); } } } C.3. Cài đặt cơ chế Notification Như đã biết, cơ chế Notification cho phép client biết được những gì đang xảy ra ở một Grid service instance. Cơ chế Notification liên quan mật thiết đến các SDE của service. Trong GT3, cơ chế Notification hoạt động theo sơ đồ sau với các bước: - 199 -
  8. Phụ lục Hình 8-4 Sơ đồ hoạt động của cơ chế Notification trong GT3. 1. addListener : Các client yêu cầu service thông báo cho mình khi có sự thay đổi của SDE xác định trong lời gọi. 2. notifyChange : Khi có sự thay đổi, MathService sẽ yêu cầu SDE tương ứng gửi thông báo cho các client đã yêu cầu. 3. deliverNotification : SDE thông báo cho client. Ở đây các giá trị của SDE được gửi về cho client, do đó client không cần thực hiện thêm bất cứ truy vấn nào nữa. Có thể thấy đây là cơ chế “push” notification, GT3 chỉ hỗ trợ duy nhất dạng này. Dưới đây, chúng ta sẽ xem xét chi tiết kỹ thuật cài đặt notification này trong GT3 với MathService. + Khai báo sử dụng Notification trong portType Thêm cơ chế Notification ảnh hưởng đến interface do chúng ta cần cung cấp một số phương thức mới ra bên ngoài. Tất nhiên, chúng ta không cần cài đặt các phương thức này mà chỉ cần khai báo sử dụng lại portType NotificationSource có sẵn, portType này chứa đầy đủ các phương thức liên quan đến cơ chế Notification. Do đó file GWSDL ở trên chỉ cần sửa lại như sau: File : $GRIDSER_DEMO/schema/progtutorial/MathService_sd_notif/Math.gwsdl gwsdl:portType name="MathPortType" extends="ogsi:GridService ogsi:NotificationSource"> + Cài đặt Chúng ta chỉ cần thêm một lệnh duy nhất trong các hàm cài đặt. File : $GRIDSER_DEMO/org/globus/progtutorial/services/core/notifications/ impl/MathImpl.java public void add(int a) throws RemoteException { - 200 -
  9. Phụ lục mathDataValue.setLastOp("Addition"); incrementOps(); mathDataValue.setValue(mathDataValue.getValue() + a); //Yeu cau thong bao cho cac client mathDataSDE.notifyChange(); } + Đặc tả cài đặt Hoàn toàn giống như trước, chỉ thêm một dòng mới. File: $GRIDSER_DEMO/org/globus/progtutorial/core/notifications/server- config.wsdd + Client Client ở đây phức tạp hơn so với các ví dụ trước. Client trong Java (hay đúng hơn là lớp nhận các thông báo) phải cài đặt phương thức deliverNotification, phương thức này sẽ được Grid service gọi khi có sự thay đổi trong SDE của mình. Mã nguồn client như sau, file : $GRIDSER_DEMO/org/globus/progtutorial/clients/MathService_sd_notif /ClientListener.java //Cac khai bao import public class ClientListener extends ServicePropertiesImpl implements NotificationSinkCallback { public static void main(String[] args) { // Lay tham so dong lenh HandleType GSH = new HandleType(args[0]); ClientListener clientListener = new ClientListener(GSH); } public ClientListener(HandleType GSH) throws Exception { // Bat dau dang ky va lang nghe MathService NotificationSinkManager notifManager = NotificationSinkManager.getManager(); notifManager.startListening(NotificationSinkManager.MAIN_THREAD); String sink = notifManager.addListener("MathData", null, GSH, this); System.out.println("Listening..."); // Cho nguoi dung nhan phim System.in.read(); // Ket thuc lang nghe notifManager.removeListener(sink); notifManager.stopListening(); System.out.println("Not listening anymore!"); - 201 -
  10. Phụ lục } //Khi co thay doi trong SDE,ham nay se duoc Grid service goi, se xuat ra man // hinh cac gia tri cua SDE public void deliverNotification(ExtensibilityType any) throws RemoteException { try { // SDE da thay doi, lay gia tri moi ServiceDataValuesType serviceData = AnyHelper.getAsServiceDataValues(any); MathDataType mathData = (MathDataType) AnyHelper.getAsSingleObject(serviceData, MathDataType.class); // Xuat ra man hinh System.out.println("Current value: " + mathData.getValue()); System.out.println("Previous operation: " + mathData.getLastOp()); System.out.println("# of operations: " + mathData.getNumOps()); }catch(Exception exc) { System.out.println("ERROR!"); exc.printStackTrace(); } } } C.7. Cài đặt kỹ thuật tạo service động (Transient service) Làm cho một service có khả năng được tạo lập một cách động (chuyển service thành transient service) là một trong những việc dễ dàng nhất trong GT3, chúng ta không cần thay đổi portType cũng như cài đặt của nó. Mọi thứ cần làm là sửa lại file đặc tả cài đặt. + Đặc tả cài đặt Để có thể thấy rõ hơn về sự thay đổi, chúng ta xem lại file WSDD cũ: - 202 -
  11. Phụ lục Dưới đây là file WSDD đã sửa đổi theo mô hình tạo service động với một factory. Lưu ý, chúng ta sẽ khai báo một service factory tĩnh (persistent service) để chịu trách nhiệm tạo ra các MathService instance động (transient service). File : $GRIDSER_DEMO/org/globus/progtutorial/services/core/first/server- deploy.wsdd Một chút khác biệt giữa 2 bản đặc đặc tả: + Trước hết, chúng ta đã thêm tiền tố “instance-” vào name, schemaPath, baseClassName, và className, bằng cách này, chúng ta cho container biết đây là những tham số để truyền vào khi tạo các instance MathService thông qua Factory. - 203 -
  12. Phụ lục + Sau đó chúng ta thêm các tham số mới vào “khối tham số chung”, để ý lúc này, schemaPath, baseClassName, và className tham khảo đến mã thực thi của Factory (cung cấp bởi GT3), không phải bất cứ mã thực thi nào do chúng ta tạo ra. + Có thể thấy, việc thêm khả năng tạo lập động cho bất kỳ service nào, đơn giản chỉ gồm 2 bước, thêm các tiền tố “instance-” và sửa lại “khối tham số chung” + Đối với client Có thể sử dụng lại các client cũ. Ở đây, chúng ta viết một client để demo khả năng tạo lập, sử dụng và huỷ một service instance thông qua Factory. File : $GRIDSER_DEMO/org/globus/progtutorial/clients/MathService/FactoryC lient.java package org.globus.progtutorial.clients.MathService; import org.gridforum.ogsi.OGSIServiceGridLocator; import org.gridforum.ogsi.Factory; import org.gridforum.ogsi.LocatorType; import org.globus.ogsa.utils.GridServiceFactory; import org.globus.progtutorial.stubs.MathService.service.MathServiceGridLocator; import org.globus.progtutorial.stubs.MathService.MathPortType; import java.net.URL; public class FactoryClient { public static void main(String[] args) { try { // Lay tham so dong lenh URL GSH = new java.net.URL(args[0]); int a = Integer.parseInt(args[1]); // Lay GSR cua MathService Factory OGSIServiceGridLocator gridLocator = new OGSIServiceGridLocator(); Factory factory = gridLocator.getFactoryPort(GSH); GridServiceFactory mathFactory = new GridServiceFactory(factory); // Tao mot MathService instance moi va lay GSR cua no LocatorType locator = mathFactory.createService(); MathServiceGridLocator mathLocator = new MathServiceGridLocator(); MathPortType math = mathLocator.getMathServicePort(locator); // Goi phuong thuc Add() math.add(a); System.out.println("Added " + a); int value = math.getValue(); System.out.println("Current value: " + value); // Huy service instance sau khi su dung math.destroy(); }catch(Exception e) { System.out.println("ERROR!"); e.printStackTrace(); - 204 -
  13. Phụ lục } } } C.5. Kỹ thuật Logging (Ghi vết) Logging là một kỹ thuật quan trọng trong phát triển và bảo trì phần mềm, cho phép theo dõi các sự kiện đặc biệt của hệ thống, các sự kiện ghi nhận có thể được kết xuất ra màn hình. GT3 cung cấp khả năng logging theo mô hình Apache Jakarta Commons Logging (http://jakarta.apache.org/commons/logging/). Mô hình này đưa ra 6 cấp độ thông tin logging, gồm Debug, Trace, Info, Warn, Error, Fatal. Việc quyết định thông tin nào ở mức độ nào là tuỳ thuộc vào người lập trình ứng dụng. Ở đây chúng ta sẽ thêm tính năng logging vào MathService, sử dụng lại ví dụ đầu tiên. Khi thêm tính năng logging, chúng ta không cần sửa lại portType, chỉ cần thêm các lệnh cần thiết vào mã cài đặt portType. + Cài đặt File: $GRIDSER_DEMO/org/globus/progtutorial/services/core/logging/impl/M athImpl.java // ... import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; // ... public class MathImpl extends GridServiceImpl implements MathPortType { // Tao logger cho class nay static Log logger = LogFactory.getLog(MathImpl.class.getName()); // ... public void add(int a) throws RemoteException { logger.info("Addition invoked with parameter a=" + String.valueOf(a)); if (a==0) logger.warn("Adding zero doesn't modify the internal value!"); value = value + a; } //... public int getValue() throws RemoteException { logger.info("getValue() invoked"); return value; } } + Xem các kết xuất log Để xem kết xuất log của MathService, thêm dòng sau vào cuối file: $GLOBUS_LOCATION/ogsilogging.properties(Đây là file cấu hình Log của GT3) - 205 -
  14. Phụ lục #Cho biet can xuat cac log o cap do Info ra man hinh console, co the sua #lai cac cap do khac, va ghi ra file org.globus.progtutorial.services.core.logging.impl.MathImpl=console,in fo C.6. Kỹ thuật quản lý chu trình sống của service (Lifecycle Management) Như đã biết việc quản lý chu trình sống của các service instance được tạo lập động rất quan trọng. GT3 cung cấp các công cụ hữu ích để quản lý các service như phương thức callback (callback method), theo dõi chu trình sống (lifecycle monitor). Ở đây chúng ta sẽ sử dụng lại các ví dụ trong phần transient service và logging để demo 2 kỹ thuật trên. + Kỹ thuật Callback method. Một cách đơn giản để quản lý chu trình sống bằng callback method (tương tự các hàm sự kiện khi lập trình với MS Windows). Các phương thức callback được gọi trong một số thời điểm xác định trong chu trình sống của service. GT3 hỗ trợ các hàm callback sau: Hàm Thời điểm được gọi preCreate Khi quá trình tạo lập Grid Service bắt đầu, lúc này tất cả cấu hình chưa được nạp. postCreate Khi service đã được tạo ra và cấu hình service đã được tạo lập. activate Tất cả Grid service đều mặc định ở trạng thái “không kích hoạt”(deactivated), hàm này được gọi khi service được kích hoạt. deactivate Khi service trở về trạng thái “không kích hoạt” preDestroy Ngay trước khi service bị huỷ. Bảng 8-2 Các hàm callback trong GT3. File : $GRIDSER_DEMO/org/globus/progtutorial/services/core/lifecycle/impl /MathImpl.java // ... import org.globus.ogsa.GridServiceCallback; // ... public class MathImpl extends GridServiceImpl implements MathPortType, GridServiceCallback { // ... // Cai dat cac phuong thuc Callback, chi can su dung lai cac ham cai san cua lop cha GridServiceImpl public void preCreate(GridServiceBase base) throws GridServiceException { super.preCreate(base); logger.info("Instance is going to be created (preCreate)"); } public void postCreate(GridContext context) throws GridServiceException { - 206 -
  15. Phụ lục super.postCreate(context); logger.info("Instance has been created (postCreate)"); } public void activate(GridContext context) throws GridServiceException { super.activate(context); logger.info("Instance has been activated (activate)"); } public void deactivate(GridContext context) throws GridServiceException { super.deactivate(context); logger.info("Instance has been deactivated (deactivate)"); } public void preDestroy(GridContext context) throws GridServiceException { super.preDestroy(context); logger.info("Instance is going to be destroyed (preDestroy)"); } } + Kỹ thuật Lifecycle Monitor Kỹ thuật Callback Method khá tốt, tuy nhiên nó khó có thể sử dụng lại. Giả sử chúng ta có 2 hàm preCreate() và postCreate() và muốn sử dụng lại trong tất cả các Grid Service, với kỹ thuật Callback Method, chỉ có cách đưa nó vào một lớp cha, rồi cho tất cả các lớp Grid Service khác thừa kế từ nó. Tất nhiên đây có sự hạn chế như đã giới thiệu trong phần Operation Provider. GT3 đưa ra giải pháp mới là Lifecycle Monitor. Một lifecycle monitor là một lớp triển khai interface ServiceLifeCycleMonitor, một interface với các hàm callback được gọi tại các thời điểm quan trọng trong thời gian sống của Grid service. Chúng ta không cần kế thừa hay tham thảo interface này trực tiếp từ mã nguồn. Chúng ta chỉ cần thêm một dòng vào bản đặc tả triển khai yêu cầu lớp lifecycle monitor phải được gọi khi có sự kiện đặc biệt xảy ra. Do đó, chúng ta có thể dùng cùng một lifecycle monitor cho nhiều Grid service khác nhau. Dưới đây là một lớp lifecycle monitor đơn giản, file : $GRIDSER_DEMO/org/globus/progtutorial/services/core/lifecycle/impl /MathLifecycleMonitor.java package org.globus.progtutorial.services.core.lifecycle.impl; import org.globus.ogsa.GridServiceException; import org.globus.ogsa.ServiceLifecycleMonitor; import org.globus.ogsa.GridContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class MathLifecycleMonitor implements ServiceLifecycleMonitor { // Tao logger cho lop static Log logger = LogFactory.getLog(MathLifecycleMonitor.class.getName()); //Cac phuong thuc can callback public void create(GridContext context) throws GridServiceException { logger.info("Instance is going to be created (create)"); } - 207 -
  16. Phụ lục public void destroy(GridContext context) throws GridServiceException { logger.info("Instance is going to be destroyed (destroy)"); } public void preCall(GridContext context) throws GridServiceException { logger.info("Service is going to be invoked (preCall)"); } public void postCall(GridContext context) throws GridServiceException { logger.info("Service invocation has finished (postCall)"); } public void preSerializationCall(GridContext context) { logger.info("Input parameters are going to be deserialized (preSerializationCall)"); } public void postSerializationCall(GridContext context) { logger.info("Input parameters have been deserialized (postSerializationCall)"); } } Và thêm dòng sau vào file đặc tả triển khai (.WSDD) D. Các interface của một OGSI Service Bảng 0-3 tóm tắt các interface của một Grid Service được định nghĩa trong OGSI 1.0: Interface Loại Tên chi tiết Diễn giải Định nghĩa các ứng xử cơ bản của một service. Grid Service SDE interface Danh sách tên (QName) các interface của service. Danh sách tên (QName) các serviceDataName SDE của service (động và tĩnh) Vị trí (ogsi:LocatorType) của factoryLocator factory tạo ra service instance này Zero hoặc nhiều GSH của gridServiceHandle service instance Một hoặc nhiều GSR của gridServiceReference service instance - 208 -
  17. Phụ lục Tập các phương thức mở findServiceDataExtensibility rộng của phương thức findServiceData Tập các phương thức mở setServiceDataExtensibility rộng của phương thức setServiceData Thời gian dự kiến kết thúc terminationTime của service instance. Phương Truy vấn thông tin của findServiceData thức service. Cho phép thay đổi giá trị các setServiceData SDE được phép thay đổi giá trị. (modifiable= “true”) Yêu cầu thay đổi requestTerminationAfter terminationTime của service instance. Phương thức này xác định thời gian kết thúc sớm nhất có thể được. Yêu cầu thay đổi requestTerminationBefore terminationTime của service instance. Phương thức này xác định thời gian kết thúc trễ nhất có thể được. Huỷ tường minh service destroy instance. Thực hiện ánh xạ từ GSH sang GSR SDE Tập các URI xác định lược handleResolverScheme đồ GSH sử dụng để phân giải thành GSR. Handle Resolver Phương Trả về vị trí findByHandle thức (ogsi:LocatorType) chức các GSR tương với GSH đươc yêu cầu. Cho phép các client đặt các yêu cầu cung cấp các thông báo SDE Tập các QName của SDE notifiableServiceDataName được yêu cầu thông báo mỗi khi có sự thay đổi. Tập các phương thức mở subscribeExtensibility Notification rộng của phương thức Source subscribe Phương Yêu cầu phải được thông báo subscribe thức mỗi khi có sự thay đổi của các SDE xác định trong notifiableServiceDataName. Định nghĩa phương thức phân phối các thông điệp - 209 -
  18. Phụ lục Định nghĩa phương thức phân phối các thông điệp Notification SDE Không có Sink Phương deliverNotification Phân phối các thông báo. thức Xác định mối quan hệ giữa một cặp NotificationSource và NotificationSink SDE subscriptionExpression Notification sinkLocator Subscription Phương Không có thức Cung cấp các cách thức chuẩn để tạo các service instance SDE Tập các phương thức mở createServiceExtensibility rộng của phương thức Factory createService Phương createService Tạo service instance mới. thức Cho phép client quản lý một nhóm các service. SDE Là một cấu trúc liên kết một membershipContentRule portType với một tập các QName. Mỗi service instance nếu muốn là thành viên của Service nhóm phải có một hoặc nhiều interface xác định trong SDE Group này. Biểu diễn thông tin về một entry thành viên của ServiceGroup. Phương Không có thức Cho phép thêm và loại bỏ các Grid service instance trong các ServiceGroup, SDE Tập các phương thức mở addExtensibility rộng của phương thức add Tập các phương thức mở removeExtensibility Service rộng của phương thức Group remove Registration Phương Tạo một ServiceGroupEntry add thức và đưa vào ServiceGroup. Loại bỏ ServiceGroupEntry remove thoả yêu cầu đưa vào. Định nghĩa mối quan hệ thành viên của service instance với ServiceGroup. Service SDE Chứa vị trí Group memberServiceLocator (ogsi:LocatorType) của Entry service instance được tham khảo đến. - 210 -
  19. Phụ lục Cung cấp một số thông tin về content service instance đang chứa. Phương Không có thức Bảng 8-3 Các interface của một OGSI Service E. Cấu trúc một chứng chỉ điện tử Một chứng chỉ điện tử bao gồm các phần chính : một subject (distinguished name (DN)) duy nhất trong không gian tên của hệ thống Grid xác định người hoặc đối tượng mà chứng chỉ đại diện, một khóa công khai đi kèm với subject, phần nhận dạng CA thực hiện ký chứng nhận chứng chỉ, chữ ký của CA và phần mở rộng chứa thông tin về cá nhân hay host được chứng nhận. Một số thông tin có thể là địa chỉ email, tên tổ chức, … Hình vẽ sau mô tả chi tiết cấu trúc một chứng chỉ điện tử: Hình 8-5 Cấu trúc một chứng chỉ điện tử. * Việc lấy chứng nhận cho một người dùng (lưu ý có thể là người dùng thật sự hay host) trong Grid bao gồm các bước: 1. Người dùng Grid phát sinh một cặp khoá (khóa bí mật và khóa công khai tương ứng), và một bản yêu cầu chứng nhận chứa khoá công khai và các thông tin cần thiết theo yêu của CA. - 211 -
  20. Phụ lục 2. Sau đó, người dùng gửi bản yêu cầu đến CA. Còn khóa bí mật được giữ lại và lưu trữ một cách cẩn thận. 3. CA (hay mở rộng ra là RA) thực hiện xác minh thông tin trong bản yêu cầu là đúng sự thật, tức là tìm cách chứng minh user gửi yêu cầu chính là chủ sở hữu của khóa công khai trong bản yêu cầu. Việc này có thể thực hiện bằng nhiều cách khác nhau, có thể thông qua điện thoại, email, hay bằng con đường tiếp xúc trực tiếp giữa hai bên,… 4. Sau khi kiểm tra xong, CA tạo một chứng chỉ bằng cách ký tên vào bản yêu cầu, và gửi chứng chỉ này lại cho người dùng đã yêu cầu chứng nhận. Việc yêu cầu chứng thực trên trên đây chỉ cần thực hiện một lần duy nhất, từ khi nhận được chứng chỉ, người dùng có thể dùng nó đế đại diện cho mình khi giao tiếp với bất kỳ hệ thống nào có yêu cầu chứng thực. - 212 -
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
31=>1