Hiện có nhiều hệ thống bản đồ nhưng còn có hạn chế: đều sử dụng mô hình máy chủ - khách, điều này khiến cho dữ liệu trao đổi có thể bị mất mát hoặc không được đáp ứng trong thời gian yêu
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ - ĐHQGHN
KHOA CÔNG NGHỆ THÔNG TIN
CÔNG TRÌNH DỰ THI GIẢI THƯỞNG “SINH VIÊN NGHIÊN CỨU KHOA HỌC”
NĂM 2014
Tên công trình: Giao thức XMPP và khai thác dữ liệu bản đồ phân tán
Họ và tên sinh viên: Nam, Nữ:
Lớp: QH-2011-I/CQ-C-CLC Khoa: Công nghệ thông tin Giáo viên hướng dẫn: PGS TS Nguyễn Việt Hà
Giáo viên đồng hướng dẫn: ThS Vũ Quang Dũng
Trang 2Tóm t t/L i nói đ u ắt/Lời nói đầu ời nói đầu ầu
Sự phát triển của công nghệ thông tin dẫn đến nhu cầu sử dụng và hiển thị dữ liệu bản đồ trực tuyến ngày càng tăng cao Hiện có nhiều hệ thống bản đồ nhưng còn có hạn chế: đều sử dụng
mô hình máy chủ - khách, điều này khiến cho dữ liệu trao đổi có thể bị mất mát hoặc không được đáp ứng trong thời gian yêu cầu và gây quá tải lên máy chủ Trước thực trạng đó, nhóm sinh viên chúng tôi đề xuất đề tài: “Giao thức XMPP và khai thác dữ liệu bản đồ
phân tán” nhằm xây dựng hệ thống trao đổi dữ liệu bản đồ sử dụng phương thức XMPP Từ
đó giảm tải cho máy chủ và giảm thời gian trao đổi dữ liệu đảm bảo tính ổn định và đáp ứng thời gian yêu cầu cho hệ thống Bên cạnh đó chúng tôi áp dụng phương pháp hiển thị theo lớp(layer) giúp hiển thị dữ liệu bất kỳ và tối ưu cho việc tách biệt các dữ liệu Quá trình nghiên cứu và phát triển đề tài này là tiền đề để chúng tôi tiếp tục áp dụng cho nghiên cứu trực quan liên quan tới chiều không/thời gian trong tương lai
Từ khóa: XMPP, GIS, OpenLayers, lớp, dữ liệu bản đồ, phân tán
Trang 3Mục lục
Tóm tắt/Lời nói đầu
Mục lục
Danh sách hình vẽ
Đặt vấn đề
Giải quyết vấn đề
Trao đổi dữ liệu giữa các Client
Phát biểu bài toán
XMPP và Websocket
Xây dựng máy chủ hỗ trợ XMPP/Websocket Hiển thị dữ liệu bản đồ
Phát biểu bài toán
Công nghệ sử dụng
Công nghệ Web OpenLayers Open Street Map GeoServer Hiển thị
Thực nghiệm
Môi trường thực nghiệm
Môi trường máy chủ
Máy khách
Kết quả
Kết luận
Kết quả thu được
Hạn chế
Hướng đi tương lai:
Nâng cấp hệ thống
Bản đồ trục thời gian (TimeMap)
Khai thác tri thức bản đồ phân tán
Tài liệu tham khảo
Trang 4Danh sách hình vẽ
Trang 51 Đ t v n đ ặt vấn đề ấn đề ề
Với sự phát triển của hệ thống hạ tầng mạng, nhu cầu sử dụng các ứng dụng bản đồ trực tuyến đang tăng cao Các ứng dụng này yêu cầu dữ liệu phải liên tục được cập nhật mới Bên cạnh
đó sự bùng nổ của thiết bị di động như máy tính bảng, điện thoại thông minh dẫn đến việc dữ liệu trao đổi tăng về lượng và cần linh hoạt và gọn nhẹ hơn Nhu cầu kết nối, tương tác giữa người dùng cũng ngày càng nhiều: người dùng cần có các phương thức kết nối, trao đổi, tương tác với bạn bè, đối tác dễ dàng và nhanh chóng
Hiện có nhiều ứng dụng bản đồ, như Google Maps, Here Maps, iOS Maps, etc Nhưng các ứng dụng này đều có 2 hạn chế:
● Hầu hết sử dụng mô hình máy chủ - máy khách thuần túy Dữ liệu ở máy khách khi cần thiết đều phải lấy từ máy chủ Khi số lượng người dùng là lớn, nhiều yêu cầu dữ liệu được gửi đến, máy chủ sẽ quá tải, khiến dữ liệu có thể mất mát hoặc đáp ứng với thời gian chậm
● Không có các phương thức cho phép các máy khách tương tác, trao đổi dữ liệu trực tiếp, nhanh chóng và đơn giản
Từ đó chúng tôi đề xuất một hệ thống hiển thị dữ liệu bản đồ, trong đó việc trao đổi dữ liệu không chỉ được thực hiện giữa máy chủ và máy khách mà còn giữa các máy khách, thông qua một máy chủ thứ 2
Mô hình hoạt động của hệ thống tổng quát được thể hiện ở sơ đồ sau:
Cụ thể, khi có yêu cầu về dữ liệu, clients sẽ thực hiện các bước:
Trang 61 Gửi yêu cầu đến các clients còn lại thông qua XMPP server
2 Nếu nhận được dữ liệu yêu cầu(từ clients khác), đến bước 4 Nếu không nhận được đến bước 3
3 Nếu không có, gửi yêu cầu đến Web Server
4 Nhận yêu cầu
5 Kết thúc
Bài toán cụ thể chúng tôi cài đặt để minh họa cho hệ thống ở đây là:
Tài liệu được chia làm 4 phần:
1 Đặt vấn đề
2 Giải quyết vấn đề
3 Thực nghiệm
4 Kết luận: Đạt được, hạn chế và phương hướng tương lai
Trang 72 Gi i quy t v n đ ải quyết vấn đề ết vấn đề ấn đề ề
2.1 Trao đ i d li u gi a các Client ổi dữ liệu giữa các Client ữ liệu giữa các Client ệu giữa các Client ữ liệu giữa các Client
2.1.1. Phát biểu bài toán
Trong các ứng dụng truyền thống: Khi máy khách có nhu cầu cần phải lấy dữ liệu mới hoặc cập nhật dữ liệu, máy khách sẽ gửi yêu cầu đến máy chủ Máy chủ sẽ xử lý yêu cầu, sau đó gửi lại cho máy khách theo mô hình sau
Hệ thống của chúng tôi đề xuất sử dụng mô hình trao đổi dữ liệu như trong mô hình sau:
<Mô hình trao đổi XMPP, visio>
Trong đó, cốt lõi của hệ thống là giao thức XMPP với công nghệ Websocket, một công nghệ mới có trong HTML5
2.1.2 XMPP và Websocket
XMPP là viết tắt của eXtensible Messaging and Presence Protocol, là một công nghệ XML mở
cho phép giao tiếp thời gian thực, nó có thể đáp ứng một số lượng lớn các ứng dụng bao gồm tin nhắn nhanh (instant messaging), trạng thái trực tuyến (presence), đàm phán đa phương tiện (media negotiation), bảng tương tác (whiteboarding), sự công tác (collaboration), máy kết nối đơn giản (lightweight middleware), thống nhất nội dung (content syndication), và định tuyến XML tổng quát (generalized XML routing) - theo xmpp.org
XMPP sử dụng các luồng XML để truyền tải thông tin XML là một phần của chuỗi tiến hóa của các ngôn ngữ đánh dấu (markup language) (ngôn ngữ với các cặp dấu ngoặc) Chữ X trong XML viết tắt của eXtensible nghĩa là khả mở và XMPP tận dụng tính khả mở đó, nó sử dụng XML để tạo ra các không gian tên (namespace) để thuận tiện trao đổi các loại thông điệp khác nhau
Truyền thông trên XMPP thực chất là trao đổi các khổ XML (stanza), chúng tôi sử dụng triệt để khả năng mở rộng này của XMPP để truyền dữ liệu và các thông điệp điều khiển giữa các client
Websocket [1] là công nghệ được phát triển như một phần của HTML5, được cung cấp dưới
dạng một interface (Websocket Javascript interface), nó cho phép định nghĩa một kết nối socket đơn, song công mà thông qua đó thông điệp có thể được truyền giữa máy chủ và máy khách Chuẩn Websocket cho phép đơn giản hóa tối đa những rườm rà của giao tiếp bán song công của web và sự quản lý kết nối - theo websocket.org
Trang 82.1.2 Xây dựng máy chủ hỗ trợ XMPP/Websocket
a Chiến lược kết nối
Có một khó khăn nảy sinh khi chúng tôi thực hiện nghiên cứu này liên quan đến chuẩn
sử dụng XMPP thông qua websocket (XMPP/WS) Cho đến thời điểm này, vẫn chưa có một chuẩn chính thức nào về XMPP/WS được công nhận vì vậy việc tìm ra một mô hình mẫu để học tập, cải biên cho đúng với mục đích sử dụng là một vấn đề lớn Do đó, một thực tế rõ ràng là chiến lược kết nối và xây dựng máy chủ XMPP/WS trong phần nghiên cứu của chúng tôi không phải chiến lược kết nối chuẩn, nhưng nó là một trong các chiến
lược đã được khuyến nghị trong cuốn The Definitive Guide to HTML5 WebSocket của
Vanessa Wang, Frank Salim, and Peter Moskovits
(http://www.websocket.org/book.html)
Chiến lược kết nối của chúng tôi là sử dụng một gateway hỗ trợ websocket làm trung gian giữa máy khách và máy chủ XMPP Mô hình của chiến lược kết nối này như sau:
- Client: Sử dụng strophe.js [7] là một module phát triển trên nền javascript, hỗ
trợ các phương thức xmpp từ phía client
- XMPP Server: Sử dụng ejabberd, phần mềm cung cấp dịch vụ xmpp
- Gateway: Sử dụng module node-xmpp-bosh[4] do dhruvbird phát triển, là module của notejs[6], tương thích với strophe.js từ phía client
b Tiến hành cài đặt (thực hiện trên HĐH ubuntu server)
- Cài đặt ejabberd (sử dụng apt-get của ubuntu), sau đó config cổng admin từ 5820 thành một cổng khác (sửa trong file ejabberd.cfg) Việc này sẽ giúp tránh được xung đột
do module node-xmpp-bosh (gateway) cũng giao tiếp trên cổng 5820
- Cài phiên bản mới nhất của nodejs
Trang 9sudo apt-get install python-software-properties
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
- Cài module node-xmpp-bosh theo hướng dẫn chi tiết từ nhà phát triển module này https://github.com/dhruvbird/node-xmpp-bosh
2.2 Hi n th d li u b n đ ển thị dữ liệu bản đồ ị dữ liệu bản đồ ữ liệu giữa các Client ệu giữa các Client ản đồ ồ
2.2.1. Phát biểu bài toán
Dữ liệu nhận được từ server và từ clients khác cần được hiển thị đến người dùng dưới dạng hình ảnh trực quan
Ở đây ta có 2 dạng dữ liệu:
1 Dữ liệu bản đồ từ server: Dữ liệu này sẽ được lấy về ngay từ khi tải trang web, và sẽ được update trong qua trình sử dụng thông qua request HTTP
2 Dữ liệu về vị trí từ người dùng từ clients: Dữ liệu này sẽ được gửi đến các clients còn lại khi có sự thay đổi về trang thái của client
Các dữ liệu này sẽ được xử lý hiển thị về phía người dùng
2.2.2. Co'ng nghệ sử dụng
2.2.2.1 Co'ng nghệ Web
HTML5 là phiên bản thứ 5, mới nhất của chuẩn HTML, ngôn ngữ cấu trúc và trình bày nội dung
cho World Wide Web
HTML5 có nhiều tính năng mới hỗ trợ việc đưa vào và quản lý các nội dung đa phương tiện và
đồ họa, không còn phụ thuộc vào các plugin và API
Cùng với HTML5 là thế hệ tiếp theo của CSS (Cascading Style Sheets) – CSS3 CSS là những
đặc tả hiển thị hỗ trợ cho trình duyệt Web trong việc trình bày một trang HTML CSS3 là phiên bản mới nhất của CSS
2.2.2.2 OpenLayers
Openlayers[2] là một thư viện thuần JavaScript hỗ trợ cho việc hiển thị dữ liệu bản đồ trên hầu
hết các trình duyệt web mà không phụ thuộc vào phía server OpenLayers cài đặt một tập các hàm API JavaScript hỗ trợ việc xây dựng các ứng dụng bản đồ trên nền web, cũng tương tự như các hàm API của Google Maps và MSN MSN Virtual Earth, nhưng với sự khác biệt quan trọng – OpenLayers là phần mềm mã nguồn mở, được phát triển bởi cộng đồng phần mềm mã nguồn mở
Có hai khái niệm quan trong cần được hiểu rõ khi làm việc với OpenLayers để hiện xây dựng bản đồ:
1 Map: Map là nơi để lưu giữ các thông tin về hệ quy chiếu, đơn vị,… của bản đồ.
2 Layers: Bên trong bản đồ, dữ liệu được hiển thị thông qua Layer Một Layer là một
nguồn dữ liệu, nó cho biết OpenLayers nên yêu cầu và hiển thị dữ liệu như thế nào Trong một Map có thể chứa một hoặc nhiều ‘Layer’ chồng lên nhau Dữ liệu được hiện thị trong một Layer có thể là dạng raster hoặc vector
Trang 10OpenLayers cung cấp một tập các điều khiển (controls) cho lập trình viên có các thao tác linh
hoạt trên bản đồ Các điều khiển là các lớp trong OpenLayers, chúng cho phép định nghĩa các trạng thái, hành vi của bản đồ Hoặc hiển thị các thông tin bổ sung cho người dùng Các điều khiển là giao diện chính cho phép tương tác với bản đồ
2.2.2.3 Open Street Map
Open Street Map[3] là một dự án bản đồ mở, cho phép tất cả mọi người cùng đóng góp, tùy
chỉnh, để xây dựng dữ liệu bản đồ thế giới chi tiết tới mọi vùng miền Khác với Google Map, Open Street Map cung cấp trực tiếp dữ liệu bản đồ dưới nhiều định dạng, và cho phép người dùng sử dụng mà không đòi hỏi thông qua API hay ràng buộc hạn chế
Một trong số những định dạng bản đồ mà Open Street Map cung cấp là ảnh bản đồ tĩnh (Static Map Tile) Định dạng này phù hợp để vẽ đồ thị lên trên vì bản đồ khi đó là một phần của không gian đồ họa
2.2.2.4 GeoServer
Geoserver [5] là một dự án mã nguồn mở, phát triển trên ngôn ngữ Java Geoserver cho phép
người dùng chia sẻ, sửa đổi các dữ liệu bản đồ
Geoserver cho phép lấy nguồn dữ liệu từ nhiều nguồn, và cho phép các ứng dụng khác truy cập thông qua giao thức HTTP
Geoserver hỗ trợ nhiều định dạng dữ liệu bản đồ chuẩn như: Open Geospatial Consortium (OGC) Web Feature Service (WFS) and Web Coverage Service (WCS), Web Map Service (WMS)
2.2.3. Hiển thị
Dữ liệu bản đồ được lấy trực tiếp từ Open Street Map OpenStreetMap cung cấp nhiều định dạng dữ liệu bản đồ Ở hệ thống, ảnh được cung cấp dưới định dạng “.png”, kích thước 256x256px, các ô ảnh bản đồ nhỏ được xếp cạnh nhau để tạo thành một bản đồ có kích thước lớn
Open Street Map cung cấp ảnh bản đồ thông qua các đường
dẫn (URL), cụ thể:
http://b.tile.openstreetmap.org/15/26019/14425.png
sẽ cho hình ảnh sau:
- URL ảnh bản đồ Open Street Map cung cấp có cấu trúc như sau:
o [abc] : subdomain ( a.tile , b.tile , c.tile )
o zoom : mức zoom ( 0-18)
o x, y : toạ độ của ô ảnh trong mảng Cụ thể :
Trang 11Ở mức zoom=0, toàn bộ bản đồ trái đất
chỉ gồm 1 ô ảnh
Ở mức zoom=1, mỗi chiều ô ảnh được
chia làm 2, cho 4 ô ảnh bản đồ Với x,y là
toạ độ ô ảnh, có 4 ô xác định bởi bộ 3 số
zoom,x,y :
[1,0,0] , [1,1,0] , [1,0,1] , [1,1,1]
Tương tự với các mức zoom tiếp theo
Việc hiển thị dữ liệu được xử lý thông qua thư viện Openlayers Openlayers sử dụng các layer
để hiển thị dữ liệu
Thế mạnh của việc hiển thị sử dụng layer là khả năng tách biệt hóa Mỗi layers có một nhiệm vụ riêng, hiển thị dữ liệu riêng Từ đó việc quản lý, thay đổi các layer để hiển thị đến người dùng là linh hoạt và không ảnh hưởng đến layer khác
Mô hình hiển thị đến người dùng được mô tả như sau:
Ở đó:
● Layer OSM hiện thị nền bản đồ, lấy nguồn từ Open Street Maps hoặc Geoserver
● Vector layer hiển thị dữ liệu vector
● Marker layer hiển thị các marker
Trang 12Kết quả cho ta giao diện của hệ thống với người dùng:
Trong đó, ở view bản đồ người dùng, có các thao tác:
● Di chuyển: Bằng chuột
● Zoom: Bằng cuộn chuột, controller
● Đánh dấu(mark): click chuột
Sau khi đã kết nối, bản đồ của người dùng sẽ hiển thị và liên tục được cập nhật thông qua xmpp và hiển thị ở view bản đồ của client khác trên client còn lại
3 Thực nghiệm
3.1. Mo'i trường thực nghiệm
3.1.1. Mo'i trường máy chủ
Trong phần nghiên cứu của mình, chúng tôi sử dụng một máy chủ vật lý làm nơi lưu trữ và chạy các máy chủ web, XMPP server, Geoserver
Chúng tôi cần máy chủ cung cấp được 2 dịch vụ là dịch vụ web và dịch vụ XMPP Bởi vì hai dịch vụ này chạy trên 2 cổng khác nhau và không xung đột nên trong phạm vi nghiên cứu, chúng chạy trên cùng một máy chủ Khi ứng dụng nghiên cứu này vào thực tế thì tùy vào điều kiện cụ thể mà ta có thể thay đổi số lượng máy chủ
HP
Trang 133.1.2 Máy khách
Sự lựa chọn môi trường máy khách có tính linh động cao, miễn là máy khách có cung cấp trình duyệt web cho người sử dụng Trong quá trình kiểm thử, hệ thống của chúng tôi chạy tốt với các trình duyệt phổ thông như Internet Explorer của Microsoft, Chrome của Google và Firefox của Mozilla
Firefox v27
Firefox v27
3.2. Kết quả
Hệ thống chạy ổn định và không gặp vấn đề gì trong việc trao đổi dữ liệu Khi có sự thay đổi từ client, client còn lại nhận được dữ liệu và cập nhật tức thời Điều này thể hiện qua việc cập nhật liên tục vị trí client ở cửa sổ “partner” và tính toán khoảng cách giữa 2 điểm đánh dấu
<Thêm ảnh demo>
4 Kết luận
4.1 K t qu thu đ ết quả thu được ản đồ ược c
Qua thực nghiệm, hệ thống đã thành công trong việc trao đỗi dữ liệu giữa 2 clients thông qua giao thức XMPP và máy chủ XMPP Dữ liệu được trao đổi không thông qua server thuần túy, giảm tải cho server
4.2. Hạn chế
Hiện tại hệ thống còn 2 hạn chế:
1 Chỉ hỗ trợ 2 clients
2 Dữ liệu trao đổi chưa phong phú: Mới chỉ là địa điểm hiện tại và địa điểm được đánh dấu
Trang 144.3 H ướng đi tương lai: ng đi t ương lai: ng lai:
4.3.1. Nâng cấp hệ thống
Chúng tôi sẽ nâng cấp hệ thống để khắc phục các hạn chế hiện tại:
1 Hỗ trợ hệ thống gồm n - clients, sử dụng cơ chế xác thực của XMPP: XMPP ID để xác thực người dùng
2 Trao đổi thông tin phong phú hơn, bao gồm: Dữ liệu ảnh bản đồ(không phải yêu cầu đến OSM hay geoserver nếu clients khác có)
4.3.2 B n đ tr c th i gian (TimeMap) ản đồ ồ ục thời gian (TimeMap) ời gian (TimeMap)
Trong tương lai, chúng tôi đề xuất một hệ thống lưu trữ dữ liệu theo 3 chiều:
1 02 Chiều không gian
2 Chiều thời gian
cho phép người dùng hiển thị dữ liệu theo dạng bản đồ 2 chiều thông thường Nhưng bên cạnh
đó là khả năng hiển thị trục thời gian của tọa độ/vị trí/đối tượng Theo trục thời gian này, người dùng có thể xem được đối tượng/tọa độ/vị trí đó đã có những biến cố gì, sự kiện gì xảy ra trong lịch sử
Với hệ thống này, chúng tôi mong muốn người dùng sẽ có trải nghiệm thú vị hơn, là một cách trực quan, hứng thú để quan sát lịch sử Nhất là với lớp trẻ Việt Nam, ngày càng thiếu kiến thức
và quan tâm đến lịch sử của nước nhà
4.3.3 Khai thác tri th c b n đ phân tán ức bản đồ phân tán ản đồ ồ
Một hướng đi nữa của nghiên cứu này là ứng dụng vào việc khai thác tri thức bản đồ phân tán Nói một cách dễ hiểu là với nghiên cứu này, những thông tin trên đường của mạng lưới người dùng sẽ được chia sẻ cho nhau và từ đó có được thông tin chính xác nhất về tình trạng giao thông hiện tại Ý tưởng của hướng đi này dựa trên ý tưởng của thuật toán distance-vector trong định tuyến mạng của các router
Nếu như hướng đi này được hiện thực hóa, nó sẽ trở thành một giải pháp đắc lực cho việc giải quyết các vấn đề của giao thông đô thị Việt Nam, vốn đang là bài toán khó đối với toàn
xã hội
Để trực quan hóa hướng đi này, chúng tôi đưa ra một tình huống trong giải quyết tắc đường Giả sử như mọi người dân Hà Nội đều sử dụng smartphone và trên đó có ứng dụng để khai thác bản đồ phân tán, khi đó, với tri thức có được từ mạng lưới người dùng, ứng dụng có thể biết được tình trạng thực tế của các tuyến đường và từ đó gợi ý cho người dùng tuyến đường hợp lý nhất (mật độ thấp nhất, hiện đang không sửa chữa, chất lượng đường chấp nhận được ) Khi đó, nếu nhìn toàn cục giao thông ở Hà Nội, ta sẽ thấy một sự “tự điều chỉnh” vô cùng hợp lý và hiệu suất của các tuyến đường được khai thác một cách tối đa
Tài liệu tham khảo
[1] The Definitive Guide to HTML5 WebSocket by Vanessa Wang, Frank Salim, and Peter
Moskovits
[2] “Openlayers” [Online] Available: http://openlayers.org/
[3] “Open Street Maps” [Online] Available: http://www.openstreetmap.org/
[4] “node-xmpp-bosh” [Online] Available: https://github.com/dhruvbird/node-xmpp-bosh/
[5] “Geoserver” [Online] Available: http:// geoserver org