Triển khai Web Services

Một phần của tài liệu Dự đoán hiệu năng Web Services sử dụng phân tích hồi quy Gaussion Process và mô hình hàng đợi (Trang 55)

Trong phần này chúng ta sẽ trình bày việc xây dựng một ứng dụng Web Service theo mô hình mạng hàng đợi. Hình dưới đây cho một cái nhìn tổng quan về dịch vụ Web này:

Hình 13: Sơ đồ mô tả dịch vụ Web được triển khai

Ta sẽ mô tả từng Web Service trong sơ đồ trên. Web Service số 1 nằm ở bên phải sơ đồ, dịch vụ này có chức năng cung cấp các thành phố tại Mĩ có số dân đông nhất trong giới hạn của yêu cầu đầu vào. Dịch vụ này đăng kí một hàm có tên là getTopCities, hàm này nhận đầu vào là giới hạn số thành phố cần lấy, xây dựng câu truy vấn tới cơ sở dữ liệu “cities” lưu trữ thông tin dân số các thành phố của Mĩ (trong bảng cities có 19.476 thành phố). Kết quả trả về từ câu truy vấn sẽ được xử lí và trả về cho người dùng nào kết nối để sử dụng dịch vụ 1. Web Service số 2 có chức năng là thống kê về giá nhà cho thuê trung bình của một số thành phố đông dân nhất. Vì cơ sở dữ liệu của dịch vụ 2 chỉ có thông tin về các nhà cho thuê ở các thành phố khác nhau mà không có thông tin về dân số các thành phố nên trong Web Service 2 sẽ sinh ra một Client 1 để gửi yêu cầu lấy thông tin các thành

Client 2 Yêu cầu (SOAP) Phản hồi (SOAP) Thành phố DB Yêu cầu(SOAP) Phản hồi (SOAP) Đăng kí hàm: getStatistic(limit) Client 1 Đăng kí hàm: getTopCities(limit) WS1 Truy vấn Kết quả Căn hộ DB Truy vấn Kết quả WS2

phố đông dân nhất ở Mĩ. Web Service 2 đăng kí một hàm có tên là getStatistic để các client thông qua đó kết nối vào sử dụng dịch vụ này. Kết quả trả về từ Web Service 1 sẽ được tiếp tục xử lí trong hàm getStatistic, xây dựng câu truy vấn phù hợp, kết nối vào cơ sở dữ liệu về các căn hộ cho thuê tạ Mĩ - “apartments”, cơ sở dữ liệu chứa thông tin các nhà cho thuê ở các thành phố của Mĩ với khoảng 6.911.958 bản ghi. Kết quả trả về từ câu truy vấn sẽ được tiếp tục xử lí và trả về cho người dùng sử dụngWeb Service 1. Các quá trình truyền thông giữa các Client với Server dịch vụ theo giao thức SOAP.

Hiện tại có nhiều framework mã nguồn mở giúp cho việc triển khai một Web Service, trong đó có thể kể tới như NuSOAP, PEAR-SOAP,PHP-SOAP là mã nguồn mở của ngôn ngữ PHP, SOAPpy là mã nguồn mở của ngôn ngữ Python. Để thể hiện tính chất độc lập với nền tảng máy tính ta sẽ sử dụng framework NuSOAP cho Web Service 1 và framework PEAR-SOAP cho Web Service 2.

Về môi trường cài đặt Web Services:

- Server: Sử dụng của công ty Cazoodle Việt Nam (Giám đốc Thầy Lê Quốc) - Public IP: 72.36.114.188

- CPU: Dual-Core AMD Opteron(tm) Processor 1210

- RAM: 4GB

- Operating System: Ubuntu 10.04.4 LTS; Linux kernel 2.6.32-38-generic - Apache/2.2.14; PHP 5.3.2; Mysql 5.1.41; NuSOAP 0.9.5; PEAR-SOAP 0.13.0 - Địa chỉ WS1: http://72.36.114.188/vuphung/WS/topCitiesRent?wsdl

- Địa chỉ WS2: http://72.36.114.188/vuphung/WS/topCitiesPopulation.php

Hệ thống có 2 hàng đợi cho mỗi dịch vụ. Để có thể sử dụng một Web Service, ví dụ Web Service 2 ta sẽ gửi một bản tin yêu cầu SOAP lên địa chỉ của WS2 ở trên. Nội dung của một bản tin yêu cầu sử dụng dịch vụ 2 như sau:

POST /vuphung/WS/topCitiesRent?wsdl HTTP/1.0 Host: 72.36.114.188

User-Agent: NuSOAP/0.9.5 (1.123)

Content-Type: text/xml; charset=ISO-8859-1 SOAPAction: ""

Content-Length: 509

<?xml version="1.0" encoding="ISO-8859-1"?>

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns4179:getStatistic xmlns:ns4179="http://tempuri.org">

<limit xsi:type="xsd:int">1</limit>

</ns4179:getStatistic> </SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Vì bản tin này được truyền theo giao thức HTTP nên phần đầu là phần HTTP header. Tiếp theo là nội dung bản tin SOAP viết theo ngôn ngữ XML. Ta quan tâm tới phần thân (body) của bản tin SOAP, qua đó ta biết được nội dung bản tin này yêu cầu gọi hàm “getStatistic” của Web Service 2 với tham số truyền vào là limit = 1. Yêu cầu này có nghĩa là lấy thông tin về thành phố có mức thuê nhà cao nhất tại Mĩ. Dịch vụ 2 sau khi nhận được yêu cầu này, sẽ thực hiện xử lí và trả về cho Client dưới dạng một bản tin SOAP như sau:

HTTP/1.1 200 OK

Date: Sat, 02 Jun 2012 07:35:01 GMT Server: Apache/2.2.14 (Ubuntu) X-Powered-By: PHP/5.3.2-1ubuntu4.15 Content-Length: 955

Vary: Accept-Encoding Connection: close

Content-Type: text/xml; charset=utf-8

<?xml version="1.0" encoding="UTF-8"?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost/vuphung/WS/topCitiesRent?wsdl" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:getStatisticResponse> <return xsi:type="ns2:Map"> <item>

<key xsi:type="xsd:string">result</key>

<value SOAP-ENC:arrayType="ns2:Map[1]" xsi:type="SOAP-ENC:Array"> <item xsi:type="ns2:Map">

<item>

<key xsi:type="xsd:string">city_state</key>

<value xsi:type="xsd:string">New York, NY</value>

</item> <item>

<key xsi:type="xsd:string">avg_price</key>

<value xsi:type="xsd:string">3260.68913723785</value> </item> </item> </value> </item> </return> </ns1:getStatisticResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Bảng 6 : Nội dung bản tin SOAP phản hồi từ dịch vụ 2

Phần đầu của bản tin này là HTTP header. Qua phần thân của bản tin phản hồi ở trên ta thu được kết quả là thành phố có giá thuê căn hộ cao nhất là New York, NY với giá trung bình là $3260 một tháng.

Một phần của tài liệu Dự đoán hiệu năng Web Services sử dụng phân tích hồi quy Gaussion Process và mô hình hàng đợi (Trang 55)