.17 – Thiết kế chi tiết cơ sở dữ liệu

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Hệ thống quản trị máy ảo cho ứng dụng công nghệ điện toán đám mây trong doanh nghiệp (Trang 86)

4.18 Mô tả chi tiết về cơ sở dƣ̃ liê ̣u tƣơng ƣ́ng với đối tƣợng sƣ̉ du ̣ng

Thực thể Tên lớp Mô tả

Department Department Đa ̣i điê ̣n cho mô ̣t phòng ban, hay mô ̣t tổ chức trên thực tế. Ở trong mỗi mô ̣t tổ chức này, có nhu cầu sử dụng các máy ảo. Mỗi mô ̣t tổ chức khi được ta ̣o ra lần đầu sẽ gắn với mô ̣t Resource Pool trong hê ̣ thống.

Account Account Đa ̣i diê ̣n cho mô ̣t tài khoản người sử dụng trong hệ thống. Tài khoản này phải thuô ̣c mô ̣t Department cu ̣ thể nào đó. Tài khoản này khi truy cập sẽ được quyền khởi ta ̣o máy ảo ở trên Resource Pool với tên tương tự như tên của Department ở trên.

vCenter vCenter Đa ̣i diê ̣n cho mô ̣t máy chủ quản tri ̣ trong hê ̣ thống của VMware. Thông tin của máy chủ này sẽ được sử dụng để truy xuất, tìm kiếm các máy ảo cũng như tiến hành khởi tạo máy ảo trong hệ thống. VMTemplate VMTemplate Đa ̣i diê ̣n cho mô ̣t máy ảo hoă ̣c mô ̣t

template máy ảo trong hê ̣ thống. Đây là mô ̣t máy ảo với cấu hình về phần cứng và phần mềm được thiết lâ ̣p tiêu chuẩn, sẵn sàng cho quá trình khởi tạo ra các máy ảo mới từ nó.

VirtualServer VirtualServer Đa ̣i diê ̣n cho mô ̣t máy chủ ảo được khởi tạo từ VMTemplate. Đây là máy ảo được khởi ta ̣o bởi người sử du ̣ng trong hê ̣ thống với các cấu hình được tùy biến từ VMTemplate, như số lượng vi xử lý, dung lượng bô ̣ nhớ hay dung lượng ổ đĩa.

VMLease VMLease Đa ̣i diê ̣n cho mô ̣t máy ảo với thời gian sử dụng được chọn lựa trước. Khi máy ảo được khởi ta ̣o và bâ ̣t lần đầu tiên sẽ được tính là bắt đầu hoạt động. Thời gian thuê/sử du ̣ng thực tế được xác đi ̣nh ngay từ ban đầu. Mục đích chính của viê ̣c thiết lâ ̣p này là giúp tiết kiê ̣m tài nguyên ha ̣n chế của hê ̣ thống.

Constant Constant Đa ̣i diê ̣n cho mô ̣t số thông tin cố đi ̣nh được thiết lâ ̣p trong hê ̣ thống như quyền của người sử dụng.

Bảng 4.7 – Bảng mô tả chi tiết các bảng trong cơ sở dữ liệu và đối tượng tương ứng với các bảng

4.19 Mã hóa chi tiết một use-case điển hình

4.20 Thiết lâ ̣p kết nối tới controller trong struts-config.xml

Servlet controller nhâ ̣n các yêu cầu xử lý từ phía trình duyê ̣t web của máy trạm, đi ̣nh hướng cả yêu cầu tới các lớp đóng vai trò xử lý yêu cầu trong ứng du ̣ng . Trong Struts framework, struts-config.xml có chức năng như mô ̣t controller , sẽ đi ̣nh hướng các yêu cầu ở các URL cu ̣ thể vào các action class cu ̣ thể.

<form-bean name="templateListForm" type="viapp.vps.form.TemplateListForm"/> <action path="/ListTemplate" input="/vps/ListTemplate.jsp" attribute="templateListForm" name="templateListForm" parameter="do" scope="request" type="viapp.vps.action.TemplateListAction">

<forward name="showTemplateList" path="/vps/ListTemplate.jsp" />

<forward name="showRefreshTemplate" path="/ListTemplate.do?do=listTemplate"/> </action>

4.21 Mã hóa giao diện web

Giao diê ̣n web trong Struts framework bao gồm hai thành phần kết hợp với nhau là các trang Java Server Pages chứa mã HTML , Javascript, Stylesheet và mô ̣t lớp mở rô ̣ng từ lớp ActionForm có các thuô ̣c tính và phương thức tương ứng với các đối tượng trong trang Java Server Pages.

<tableid="vtable"width="800"> <tr>

<td></td> <td>Name</td> <td>Description</td> <td>Action</td>

</tr><logic:iteratename="templateListForm"property="templates"id="vmtemplate"> <tr>

<tdalign="center">

<html:linkaction="/EditVMLease.do?do=editVMLease"

paramName="vmtemplate"

paramProperty="templateid"

paramId="templateid"><imgsrc="<html:rewritepage='/images/power/mycloud.png'/>">

Deploy</html:link>

<td><bean:writename="vmtemplate"property="name"/></td> <td><bean:writename="vmtemplate"property="description"/></td> <td><html:linkaction="/EditTemplate.do?do=editTemplate"

paramName="vmtemplate"

paramProperty="templateid"

paramId="templateid">Update</html:link> <html:linkaction="/EditTemplate.do?do=removeTemplate"

paramName="vmtemplate"

paramProperty="templateid"

paramId="templateid">Remove</html:link> </td>

</tr>

</logic:iterate> <tr>

<tdcolspan="4"align="left">* select icon to deploy virtual machine</td> </tr>

<logic:notPresentname="vmtemplate"> <tr>

<tdcolspan="9">No template found</td> </tr>

</logic:notPresent> </table>

Bảng 4.9 – Bảng mô tả mã hóa một trang jsp theo cách viết Struts

Lớp TemplateListForm gắn với danh sách các đối tượng trong Java Serve r Pages ở phần giao diê ̣n web.

publicclassTemplateListFormextends ActionForm {

private VMTemplate[] templates = new VMTemplate[0];

private Integer templateId;

public TemplateListForm() {super();}

public VMTemplate[] getTemplates(){returnthis.templates;}

publicvoid setTemplates(VMTemplate[] tpl){this.templates=tpl;}

publicvoid setTemplateid(Integer id){this.templateId = id;}

public Integer getTemplateid(){returnthis.templateId;}}

Bảng 4.10 – Bảng mô tả mã hóa đối tượng form trong Struts

Mô ̣t yêu cầu truy xuất từ giao diê ̣n Java Ser ver Pages ở trên , sẽ được xử lý tại controller thông qua việc chuyển hướng yêu cầu tới một phương thức của mô ̣t lớp mở rô ̣ng từ lớp Action hoă ̣c lớp DispatchAction.

publicclass TemplateListAction extends DispatchAction{ //Action {

/** Logger for this class and subclasses */

protectedfinal Logger log = Logger.getLogger(getClass());

private String serverURL = ""; //vCenter Server address

private String userName= "";

private String password= "";

private String serverIp="";

public ActionForward listTemplate(ActionMapping mapping, ActionForm inForm,

HttpServletRequest request, HttpServletResponse response) throws Exception{

log.debug("TemplateListAction.execute()");

HttpSession session = request.getSession();

Integer accountid =(Integer)session.getAttribute("CUST_ID");

TemplateListForm listForm = (TemplateListForm)inForm;

TemplateManager manager = new TemplateManager();

listForm.setTemplates(manager.getAllTemplates());

return mapping.findForward("showTemplateList"); }

public ActionForward loadTemplate(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response){

try{

System.out.println("updateTemplateFromVI");

//call VMware server, and update the vmtemplate table

HttpSession session = request.getSession();

Integer accountid =(Integer)session.getAttribute ("CUST_ID");

vCenterManager vCM = new vCenterManager();

Vcenter[] vcenters = vCM.getAllvCenters();

for(int i=0; i<vcenters.length;i++){

if(vcenters[i].getVcenter_ip()!=null){

serverURL = "https://" + vcenters[i].getVcenter_ip() + "/sdk";}else{

serverURL = "https://" + vcenters[i].getVcenter_name() + "/sdk";}

userName = vcenters[i].getVcenter_username();

password = vcenters[i].getVcenter_password();

VMInfo vmInfo = new VMInfo(vmc);

TemplateListForm listForm = (TemplateListForm)form; listForm.setTemplates(

vmInfo.getVMTemplateFromVI(accountid));

VMTemplate[] templates = listForm.getTemplates();

if(templates.length>0){

TemplateManager manager = new TemplateManager();

for(int j=0;j<templates.length;j++){

if(manager.getTemplateByUUid(

templates[j].getUuid())==null) manager.saveTemplate(templates[j]);

} }

}

}catch(Exception ex){ex.printStackTrace();}

return mapping.findForward("showRefreshTemplate"); }

}

Bảng 4.11 – Bảng mô tả mã hóa đối tượng action trong Struts

4.22 Mã hóa truy xuất thông tin về các máy ảo mẫu từ hệ thống ảo hóa

Thiết lâ ̣p kết nối tới máy chủ ảo hóa vCenter Server:

publicstaticvoid openConnection(String url, String username, String password) throws Exception{

si = new ServiceInstance(new URL(url), username, password, true);}

Bảng 4.12 – Bảng mô tả kết nối với máy chủ ảo hóa

Một danh sách các máy ảo trong hệ thống được liệt kê dựa trên phép tìm kiếm các đối tượng được quản lý bởi vCenter Server:

public VirtualMachine[] getAllVirtualMachines(Folder rootFolder)throws Exception{

ManagedEntity[] vms = new InventoryNavigator(rootFolder)

.searchManagedEntities(new String[][]

{ {"VirtualMachine", "name" }, }, true);

if(vms.length>0){

VirtualMachine[] vm = new VirtualMachine[vms.length];

for(int i=0;i<vms.length;i++){

vm[i]=(VirtualMachine)vms[i]; }

return vm; }elsereturnnull; }

Thông tin chi tiết của các máy ảo được lấy từ máy chủ vCenter Server sẽ được phân tích và na ̣p vào đối tượng thuô ̣c kiểu VMTemplate.

VirtualMachine v = vmArray[j];

VirtualMachineConfigInfo vmInfo = v.getConfig();

VMTemplate vmTem = newVMTemplate();

vmTem.setAccountid(accountid);

Datacenter dc = _vmCon.getParentDatacenter(v);

vmTem.setDatacenter(dc.getName()); vmTem.setUuid(vmInfo.getUuid()); vmTem.setName(vmInfo.getName()); vmTem.setServerurl(VMConnection.getUrl()); vmTem.setGuestid(vmInfo.getGuestId()); vmTem.setAnnotation(vmInfo.getAnnotation()); vmTem.setGuestfullname(vmInfo.getGuestFullName()); vmTem.setVmpathname(vmInfo.getFiles().getVmPathName()); VirtualHardware vHw = vmInfo.getHardware(); vmTem.setNumcpu(vHw.getNumCPU()); vmTem.setMemorymb(vHw.getMemoryMB());

for(int k=0;k<vHw.getDevice().length;k++){

VirtualDevice vD = (vHw.getDevice())[k]; Description d = vD.getDeviceInfo();

if(d.getLabel().startsWith("Hard disk")){ VirtualDisk vDisk = (VirtualDisk)vD;

vmTem.setHddkb(vDisk.getCapacityInKB()); }

}

ComputeResource rs = (ComputeResource) new

InventoryNavigator(dc).searchManagedEntities("ComputeResource")[0];

ComputeResourceSummary rsSum = rs.getSummary(); Short maxvcpu = rsSum.getNumCpuCores();

Long maxmemmb = rsSum.getEffectiveMemory(); vmTem.setMaxvcpu(maxvcpu);

vmTem.setMaxmemmb(maxmemmb);

Bảng 4.14 – Bảng mô tả lấy thông tin chi tiết của các máy ảo từ máy chủ ảo hóa

4.23 Mã hóa quá trình lƣu trữ dữ liệu xuống cơ sở dữ liệu

Ứng dụng sử dụng Hibernate Framework để đơn giản hóa quá trình ghi dữ liê ̣u xuống cơ sở dữ liê ̣u . Các bước tiến hành để Hibernate hoạt động được cho trường hợp mã hóa bao gồm:

private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

Bảng 4.15 – Bảng mô tả tệp cấu hình của Hibernate

Đi ̣nh nghĩa cơ sở dữ liê ̣u cần truy xuất và các đối tượng cần thự c hiện ghi xuống cơ sở dữ liê ̣u.

<?xmlversion='1.0'encoding='UTF-8'?>

<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration> <session-factory>

<!-- mysql configuration -->

<propertyname="connection.url">jdbc:mysql://localhost/vapp</property> <propertyname="connection.username">vdc_admin</property>

<propertyname="connection.password">123456</property> <propertyname="connection.driver_class">com.mysql.jdbc.Driver

</property>

<propertyname="dialect">org.hibernate.dialect.MySQLDialect

</property>

<mappingresource="viapp/account/domain/Account.hbm.xml"/> <mappingresource="viapp/account/domain/Department.hbm.xml"/> <mappingresource="viapp/vps/domain/Row.hbm.xml"/>

<mappingresource="viapp/vps/domain/GroupServer.hbm.xml"/> <mappingresource="viapp/vps/domain/VirtualServer.hbm.xml"/> <mappingresource="viapp/vps/domain/VMTemplate.hbm.xml"/> <mappingresource="viapp/vps/domain/Vcenter.hbm.xml"/> <mappingresource="viapp/utility/Constant.hbm.xml"/> <mappingresource="viapp/vps/domain/VMLease.hbm.xml"/> </session-factory>

</hibernate-configuration>

Bảng 4.16 – Bảng mô tả nội dung tệp cấu hình trong Hibernate

Đi ̣nh nghĩa tê ̣p cấu hình với t ên chính xác như tên của lớp cần ghi xuống cơ sở dữ liê ̣u , với viê ̣c đi ̣nh nghĩa tên cô ̣t trong cơ sở dữ liê ̣u tương ứng với tên thuô ̣c tính cần ghi la ̣i và chính xác kiểu dữ liê ̣u tương ứng với cơ sở dữ liê ̣u.

<?xmlversion="1.0"encoding='UTF-8'?>

<!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mappingpackage="viapp.vps.domain">

<classname="VMTemplate"table="VMTemplate"> <idname="templateid"

column="templateid"type="java.lang.Integer"> <generatorclass="increment"/> </id>

<propertyname="serverurl"

column="serverurl"type="java.lang.String"/> <propertyname="datacenter"

column="datacenter"type="java.lang.String"/> <propertyname="vmpathname"

column="vmpathname"type="java.lang.String"/> <propertyname="uuid"

column="uuid"type="java.lang.String"/> <propertyname="name"

column="name"type="java.lang.String"/> <propertyname="guestfullname"

column="guestfullname"type="java.lang.String"/> <propertyname="annotation"

column="annotation"type="java.lang.String"/> <propertyname="guestid"

column="guestid"type="java.lang.String"/> <propertyname="description"

column="description"type="java.lang.String"/> <propertyname="accountid"

column="accountid"type="java.lang.Integer"/> <propertyname="numcpu"

column="numcpu"type="java.lang.Integer"/> <propertyname="memorymb"

column="memorymb"type="java.lang.Integer"/> <propertyname="hddkb"

column="hddkb"type="java.lang.Long"/> <propertyname="maxvcpu"

column="maxvcpu"type="java.lang.Short"/> <propertyname="maxmemmb"

column="maxmemmb"type="java.lang.Long"/> </class>

</hibernate-mapping>

Bảng 4.17 – Bảng mô tả định nghĩa thông tin về đối tượng VMTemplate

Quá trình tiến hành ghi dữ liệu từ một đối t ượng xuống cơ sở dữ liệu thực hiê ̣n hoàn toàn tự đô ̣ng thông qua Hibernate.

/* a Hibernate session */

Session session = null;

/* we always need a transaction */

Transaction tx = null;

/* get session of the current thread */

session = HibernateSessionFactory.currentSession();

tx = session.beginTransaction();

VMTemplate tpl = new VMTemplate();

BeanUtils.copyProperties(tpl,tplValue);

session.save(tpl); tx.commit();

4.24 Chạy thử nghiệm chƣơng trình

4.25 Truy xuất hê ̣ thống với vai trò ngƣời quản tri ̣ hê ̣ thống

Hình 4.18 – Màn hình truy cập tới hệ thống VMMS

Màn hình đăng nhập với vai trò người quản trị hiển thị các chức năng như quản trị vCenter Server, quản trị các Catalogs và quản tri ̣ người sử du ̣ng.

Hình 4.19 –Màn hình sau khi đăng nhập hê ̣ thống

 Truy xuất tính năng quản tri ̣ vCenter Server

Hình 4.20 – Thông tin về máy chủ truy cập hê ̣ thống ảo hóa vCenter

Sửa hoă ̣c thêm mới thông tin về vCenter Server

Hình 4.21 – Màn hình nhập thông tin vCenter

 Truy xuất tính năng quản tri ̣ các Catalog

Sau khi cho ̣n vào liên kết quản tri ̣ Catalog , hê ̣ thống cho ta truy xuất tới danh mục các Catalog đang tồn tại trong hệ thống.

Hình 4.22 – Danh sách các máy ảo tiêu chuẩn trong hê ̣ thống

Để câ ̣p nhâ ̣t thêm các catalog mới từ hê ̣ thống , nhấp vào liên kết truy vấn các template máy ảo từ các vCenter đang đăng ký trong hê ̣ thống.

Hình 4.23 – Người quản tri ̣ sẽ duyê ̣t máy ảo tiêu chuẩn mới

Người quản tri ̣ sẽ làm công tác duyê ̣t các template chuẩn và cho phép template đó được sử du ̣ng.

Hình 4.24 – Màn hình cập nhật thông tin về máy ảo tiêu chuẩn mới

Ở màn hình dưới, sẽ chọn thêm chỉ một máy ảo là Demo -AD đóng vai trò là template mới của hê ̣ thống, các máy ảo khác không được đăng ký vào hệ thống.

4.26 Truy xuất hê ̣ thống với vai trò ngƣời sƣ̉ du ̣ng thuô ̣c mô ̣t tổ chƣ́c trong hê ̣ thống

Màn hình truy cập của người sử dụng có sự khác biệt ở so với người quản trị là họ chỉ được xem da nh sách các template có trong hê ̣ thống cũng như danh mu ̣c các máy ảo của ho ̣ đã khởi ta ̣o . Ngườ i sử du ̣ng không có quyền đăng ký các template máy ảo trong hê ̣ thống.

 Người sử du ̣ng truy câ ̣p danh mu ̣c các template

Người sử du ̣ng xem được danh sách các template đang có trong hê ̣ thống, tuy nhiên không có quyền sửa thông tin liên quan tới template đang có.

Hình 4.26 – Giao diê ̣n danh mục các máy ảo tiêu chuẩn ở phía người sử dụng

Để triển khai mô ̣t máy ảo mới dựa trên template , người sử du ̣ng sẽ nhấn vào biểu tượng Deploy ở phía trái của template . Trong ví du ̣ này , để đơn giản DOS template sẽ được lựa cho ̣n.

Hình 4.27 – Người sử dụng chọn triển khai máy ảo mới

Hê ̣ thống sẽ ra lê ̣nh cho vCenter Server thực hiê ̣n linked clone máy ảo DOS trong pool tài nguyên thuô ̣c nhóm HR Department , pool này đóng vai trò trung tâm dữ liệu ảo của một tổ chức trong hệ thống.

Màn hình hiển thị danh sách máy ảo của ngườ i sử du ̣ng hiê ̣n ra với máy ảo mới được tạo, người sử du ̣ng có thể ra lê ̣nh bâ ̣t máy ảo từ đây.

Sau khi cho ̣n nút check box phía bên phải, và nhấn vào nút Power On.

Hình 4.29–Máy ảo chuyển sang trạng thái hoạt động

Ở phía màn hình của vCenter, máy ảo đã hoạt động như ra lệnh.

4.27 Tổng kết

Chương trình được thực hiê ̣n được những tính năng cơ bản cho phép tương tác với hạ tầng ảo hóa VMware vSphere , cho phép người sử du ̣ng có thể đi ̣nh nghĩa được các máy ảo tiêu chuẩn dưới dạng máy ảo tiêu chuẩn . Ngoài ra , chương trình cho phép người sử du ̣ng đơn giản hóa quá trình khởi ta ̣o máy ảo theo nhu cầu , thông qua viê ̣c truy xuất trên giao diê ̣n Web quen thuô ̣c , không cần sự tham gia quản tri ̣ của người quản tri ̣ hê ̣ thống.

Do mu ̣c đích đă ̣t ra khi ph át triển chương trình ở giai đoạn làm luận văn nên tôi chỉ tâ ̣p trung vào phát triển những tính năng cơ bản , vì vậy một số nhược điểm cần hoàn thiê ̣n thêm đó là chương trình ở mức khá cơ bản , giao diê ̣n Web đơn giản, khả năng tương tác chưa thân thiê ̣n . Còn nhiều tính năng khác có thể bổ xung thêm cho chương trình mang tính ứng du ̣ng sát thực tế hơn nữa như là hoạch định dung lượng lưu trữ cho mỗi trung tâm dữ liê ̣u ảo , xác định dung lượng lưu trữ cò n đủ để máy ảo có thể khởi ta ̣o không, cho phép xác đi ̣nh máy ảo được khởi tạo có thực sự hoạt động hay không, hoă ̣c những khả năng như sau giai đoa ̣n máy ảo hoa ̣t đô ̣ng quá thời ha ̣n thì các hướng xử lý như là tắt máy ảo , xóa khỏi hệ thống hoặc sao lưu ra vùng dữ liệu khác.

KẾT LUẬN

5.1 Đánh giá

Qua quá trình thực hiê ̣n luâ ̣n văn, tôi đã đa ̣t được những kết quả sau:

 Tìm hiểu tổng quan được quá trình hình thành , khái niệm, các ứng nhược điểm của mô hình điện toán đám mây. Song song với quá trình này nghiên cứu

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) Hệ thống quản trị máy ảo cho ứng dụng công nghệ điện toán đám mây trong doanh nghiệp (Trang 86)

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

(107 trang)