setenv TACOMAPATH /users/dag/TACOMA/src/tacoma setenv TACOMAPORT 1
3.1.4. Tổng quan về mô hình mạng JXTA
Hình 3.3
Các đặc tính của JXTA
+ Khả năng phối hợp hoạt động (Interoperability):Đây là một đặc tính quan trọng của JXTA, tức là các peer dễ dàng định vị lẫn nhau và dễ dàng trao đổi thông tin với nhau cũng như các peer dễ dàng tham gia vào các hệ thống P2P khác nhau. Do vậy các hệ thống P2P khác nhau có thể dễ dàng phối hợp hoạt động với nhau.
Ví dụ: - có thể phối hợp hệ thống P2P chia sẻ file nói chung (Gnuttela) và chia sẻ nhạc (Napster)
+ Không phụ thuộc vào platform (Platform independence ) Tức là nó không phụ thuộc vào ngôn ngữ lập trình, không phụ thuộc vào hệ điều hành và không phụ thuộc vào thủ tục mạng, giao thức mạng (TCP/IP, Bluetooth…) Tóm lại JXTA có thể chạy trên nhiều ngôn ngữ lập trình, nhiều giao thức và hệ điều hành khác nhau
+Tính phổ biến (Ubiquity):Tức là JXTA có thể hoạt động trên tất cả các thiết bị có tính toán số (digital device)
- Thiết bị điện tử dân dụng - Sensor - PDA - Mobile phone - PC Kiến trúc JXTA: Hình 3.4
+ Lớp lõi( JXTA core): Phụ trách việc tạo peer, xóa peer, quảng bá peer …Đồng thời lớp này cũng có nhiệm vụ quản lí truyền thông giữa các peer với nhau trong mạng
- Định tuyến (routing) - Thăm dò (plumbing)
Hình 3.5
+ Lớp dịch vụ (JXTA Services):Cung cấp dịch vụ cho các ứng dụng P2P - Tìm kiếm (Search)
- Chỉ mục (Indexing) - Chia sẻ file (file sharing) - Discovery
- Membership
+ Lớp ứng dụng (JXTA Applications):Quản lí các ứng dụng P2P do người dùng xây dựng và tích hợp các ứng dụng P2P, có thể phối hợp các ứng dụng P2P khác nhau
Hình 3.7
Giao thức JXTA: Trong JXTA có rất nhiều giao thức đó là :
+ Giao thức phát hiện peer (Peer discovery protocol): Cho phép một peer tìm thấy thông báo quảng bá (advertisement) trên các peer khác hoặcbdùng để tìm bất cứ peer, nhóm peer hay thông báo quảng bá nào.
+ Giao thức phân tích địa chỉ peer(Peer resolver protocol): Cho phép một peer gửi và nhận các truy vấn (queries) để tìm (find, search) peer, nhóm peer, ống và các thông tin khác.
+ Giao thức thông tin peer (Peer information protocol): Cho phép một peer tìm hiểu được khả năng và trạng thái của peer khác.
- VD: lệnh ping
+ Giao thức hội nhóm (Rendezvous Protocol): Cho phép một Peer phát tán thông điệp trong phạm vi của một nhóm peer.
+ Giao thức nối ống (Pipe Binding protocol): Cho phép các peer thiết lập kênh truyền thông ảo như một đường ống (pipe) giữa chúng và các peer khác. Các peer gửi thông điệp qua ống.
+Giao thức định tuyến điểm cuối (Endpoint routing protocol): Cho phép một peer hỏi một peer định tuyến về các đường chuyển thông điệp tới một peer đích. Peer định tuyến (router peer): là peer thực hiện các thủ tục định tuyến điểm cuối (Endpoint routing protocol).
Như vậy chúng ta có thể phân cấp cho các gaio thức JXTA như hình vẽ sau:
Hình 3.8
Công nghệ trong JXTA:
+ XML: JXTA sử dụng XML để mã hóa thông điệp và có thể chuyển đổi dễ dàng nếu không dùng XML nữa
+ An ninh:
- Mã hóa MD5, RC4, RSA
- Cơ chế kiểm sóat đăng nhập(authentication) PAM). - Quản lí thâm nhập (access control) dựa vào nhóm peer. - Truyền tải SSL,TLS.
- Tương tác giao diện dòng lệnh JXTA Shells.
Các phiên bản JXTA:
JXTA 1.0 (2001)
- Chỉ hỗ trợ J2ME
- Hỗ trợ ngôn ngữ C, Java
JXTA 2.0 (2004)
- Hỗ trợ cho J2SE, J2ME - JXTA cho PersonalJava:
- Hỗ trợ các ngôn ngữ Java, C, Perl, Python, Ruby
Tương lai JXTA:
Cộng đồng phát triển mở:
- JXTA là dự án mã nguồn mở
- Xây dựng bởi rất nhiều chuyên gia trên thế giới
- Môi trường cộng tác phát triển trên nền web (jxta.org) - Được sự hỗ trợ rất lớn của cộng đồng các nhà phát triển P2P
Ứng dụng ngày càng rộng rãi:
- Truyền thông không dây: JXTA for J2ME - Chính phủ: Video conference, e-Government
- Giải trí: Game online, Music sharing
- Các ứng dụng truyền thông và cộng tác : File sharing, IM, Document Sharing…
3.2. Java JXTA:
Nền tảng của Java JXTA là tập hợp các lớp và các ứng dụng có khả năng quản lý và truyền các ứng dụng và điều khiển dữ liệu giữa các nền tảng JXTA tương ứng. Các dịch vụ nhân được dùng để tạo ra các ứng dụng P2P.
Ban đầu JXTA không được xây dựng như một Java API, lúc đầu JXTA được xây dựng như một tập các cách thức và thông điệp. Các thông điệp được định nghĩa như tài liệu XML với ngôn ngữ và hệ điều hành độc lập. Phiên bản JXTA cho Java chỉ là một phần của giao thức JXTA. Chúng bao gồm các giao thức được viết trên Java, C, Perl, ...
API có thể làm ẩn đi nhiều chi tiết của giao thức. Sự khác biệt giữa API JXTA cho Java và giao thức JXTA là sự chi tiết của các thao tác. Ví dụ khi thực hiện việc định tuyến, các cách thức định tuyến được ẩn đi nhờ các ứng dụng và ta không cần quan tâm đến chúng. Mục tiêu của JXTA không phải là chạy trên mọi nền tảng như Java, nhưng phải cần kết nối P2P ở mọi nơi. Bản bổ sung cho Java của JXTA cũng tương thích với các phiên bản khác hay các ngôn ngữ khác như C, Perl, ...
Peer JXTA và Java
Peer là một nút của mạng JXTA. Mỗi peer thuộc một hoặc nhiều nhóm và thực thi đầy đủ các dịch vụ như cho phép các peer khác tương tác với nó, hay tương tác qua nó. Trong phần lớn các ứng dụng ban đầu, peer đồng nghĩa với người dùng mặc dù điều đó không phải là đúng đắn lắm.
Mỗi peer JXTA được kết nối đầy đủ với một máy ảo Java (JVM). Thông thường mỗi thiết bị - như PC - chẳng hạn là một peer, bạn cũng có thể khởi động nhiều JVM để tạo ra nhiểu peer cho mỗi PC, nhưng làm thế không tốt lắm khi debug và thử nghiệm. Nếu bạn muốn chạy nhiều bản của một ứng dụng JXTA, bạn cần làm nó trên các thư mục riêng biệt và sử dụng các cổng liên kết khác nhau để tránh tranh chấp giữa các ứng dụng.
Tổng quan về giao thức JXTA trong Java API
Giao thức JXTA được xây dựng từ các message XML, mỗi message là một tài liệu XML, tài liệu XML được định nghĩa như một phần của liên kết (communication) và dữ liệu của liên kết. Các message XML được truyền giữa các peer để chuyển thông tin hoặc trao đổi như một phần của liên kết với các querry
và các response.
JXTA cho Java giữ nguyên những mặt mạnh của JXTA và mở rộng khả năng quản lý, điều khiển bằng cách thêm vào các đặc tính hướng đối tượng của Java.
Sơ lược về API
Để thực thi hệ thống P2P chúng ta cần một số dịch vụ cơ bản bao gồm discovery, membership và communication. Giao thức JXTA chia communication làm 3 loại pipe binding, endpoint và các giao thức phân tích. Ngoải ra còn có giao thức thông tin giữa các peer khác, nó chỉ đơn giản như lệnh ping trong mạng, chỉ khác nó còn mang thêm những thông tin khác của peer.
Modul Peer Group, Dịch vụ và ứng dụng
Mỗi peer group có một lớp dịch vụ riêng. Có một dịch vụ nhân thường được cài đặt để hỗ trợ giao thức JXTA. Mỗi dịch vụ là một modul, đơn giản như một file nhỏ có thể tự chạy. Ứng dụng cũng có thể trở thành một kiểu modul.
Hinh 3.9
Những dịch vụ nhân được hỗ trợ bằng cách tham chiếu những dịch vụ nhân tương ứng từ platform. Hình dưới mô tả việc hỗ trợ đó (chú ý MembershipService
là lớp trừu tượng và không có giao diện): Modul (net.jxta.platform)
+init(group: PeerGroup, asignID: ID, ImplAdv: Advertisement): void +startApp(args: String[]):int +stopApp():void Service (net.jxta.service) +getImplAdvertisement(): Advertisement +getInterface(): Service Application (net.jxta.platform)
Hình 3.10
Sơ lược về Java API dành cho giao thức JXTA
Giao thức JXTA được dùng để giúp các peer tìm kiếm, tương tác với nhau và quản lý các ứng dụng P2P. Bản thân các giao thức này không phải là ứng dụng và chúng cần nhiều dòng lệnh hơn những gì chúng thực sự làm được. API ẩn đi nhiều chi tiết của mạng P2P, và nó làm cho việc viết ứng dụng JXTA đơn giản hơn.Sau đây là một số loại API:
API tìm kiếm peer
Service (net.jxta.service) Module (net.jxta.platform) RendezvousService (net.jxta.rendezvous) EndpointService (net.jxta.endpoint) PipeService
(net.jxta.pipe) (net.jxta.discovery)DiscoveryService
ResolveService (net.jxta.resolve) PeerInfoService (net.jxta.peer) MembershipService (net.jxta.membership)
Tìm kiếm peer là việc tìm địa chỉ máy với cache cục bộ và khả năng chuyển tiếp yêu cầu. Gốc của API tìm kiếm là lớp DiscoveryService, lớp này có thể hiểu như một phần của lớp PeerGroup vì bản thân việc tìm kiếm chỉ được giới hạn trong group chứa nó.
API phân tích peer
API phân tích được sử dụng bới các API khác cần request hay respond định dạng. API này được truy cập qua giao diện của lớp ResolverService. Nó được hiểu như một query trong mạng rộng, nó sẽ truy vấn nhóm của peer thay vì truy vấn peer cụ thể.
API thông tin peer
API thông tin peer là một cách request thông tin trạng thái của peer, nó được truy cập thông qua PeerInfoService.
Giao thức chứng thực peer
API chứng thực peer giống như API tìm kiếm, chỉ có thể dùng trong peer group. Nó bao gồm hai phần Chứng thực và Xác nhận peer. Phần xác nhận peer được sử dụng trong phần lớn tin nhắn, để xác nhận peer đó đúng là thành viên của nhóm. Giao thức chứng thực peer được truy cập qua lớp trừu tượng
MembershipService. Có thể giao diện của lớp này sẽ được thay đổi trong các phiên bản tới của JXTA Java API.
Pipe binding API
Đây là một trong những API động, lý do là vì nó sử dụng nhiều dạng khác nhau của pipe, nó được truy cập thông qua lớp PipeService. Nên nhớ rằng dịch vụ pipe sử dụng đến các dịch vụ phân tích và endpoint. Modul EnpointRounter sẽ định hương pipe. Lớp PipeService không định nghĩa các pipe, nó chỉ tạo ra và quản lý các pipe, các pipe được định nghĩa đầy đủ trong giao diện các lớp
InputPipe và OutputPipe.
Peer endpoint API
API này thường được ẩn đi với các nhà phát triển ứng dụng JXTA bởi vì nó thực ra chỉ là sự hỗ trợ cho rounter. Có vô số rounter được dùng trong các tập
đoàn và trên mạng Internet, chúng thực sự vô hình với những người viết trình duyệt hay các phần mềm mạng khác. Tuy nhiên API này có thể được sử dụng để định hướng bởi các ứng dụng có khả năng tạo ra những ứng dụng mạnh hơn. Nó còn nắm chìa khóa để truy cập vào các khả năng vận chuyển đến các dịnh vụ khác, như các pipe và dịch vụ phân tích. Sự khác biệt giữa router vả endpoint router là router là được thực hiện trên peer thay vì các phần đặc biệt của phần cứng và phần mềm. Trong tương lai có thể sẽ xuất hiện router JXTA chuyên dụng nhưng có thuận lợi lớn là bạn có thể sẽ tự mình định tuyến. API này chắc chắn là có hiệu quả thấp hơn so với router chuyên dụng, nhưng endpoint router được xây dựng để định tuyến trong những điều kiện xấu nhất của mạng LAN, firewall, proxy server, ... Router dùng dịch vụ phân tích để truy vấn đến các peer khác thuộc quyền quản lý của ronter đó. Giao thức endpoint, như TCP và HTTP, cũng được định nghĩa và quản lý ở đây. API endpoint được truy cập thông qua giao diện của lớp EndpointService.
Peer ID
Peer ID được khởi tạo trong lúc cấu hình ban đầu của JXTA platform. Lớp Configurator tạo ra một đối tượng PeerAdvertisement và gọi phương thức setPeerID của đối tượng này với ID được lấy từ gói IDFactory. Đoạn code sau mô tả IDFactory hoạt động như thế nào, bạn có thể thấy ID của group World được dùng trong lời gọi hàm, nó đăng ký ID như là một thành viên của group World:
IDFactory.newPeerID(PeerGroupID.worldPeerGroupID)
Nhớ rằng khi một peer là thành viên của một group, nó có thể được định vị thông qua dịch vụ tìm kiếm bởi các peer khác trong group đó. Tất cả các peer đểu là thành viên của group World nên chúng đều có thể nhìn thấy các peer khác bằng dịch vụ tìm kiếm peer của group World. Lý do là ID của peer được dùng kết hợp với ID của group.
Các lớp Peer
Các peer được mô tả bằng các thông báo peer trong lớp PeerAdvertisement của Java JXTA API. Trong phiên bản của JXTA cho Java, phần lớn các giao thức hỗ trợ luôn luôn tách rời vào 2 package riêng biệt. Trong trường hợp này, lớp
PeerAdvertisement có những phương thức để đồng bộ hóa các đặc tả XML của thông báo peer. Lớp PeerAdv có thêm những tính năng được dùng hoàn toàn cho bản bổ sung cho Java. Hình dưới là các lớp peer được sử dụng trong ứng dụng JXTA và quan hệ giữa chúng.
PeerAdvertisement (net.jxta.protocol) +clone(): Object +getAdvertisementType(): String +getDebugLevel(): String +getID(): ID +getName(): String +getPeerGroupID(): PeerGroupID +getPeerID(): PeerID
+getServiceParam(key: ID): StructureDocument +getServiceParams(): Hashtable
+putServiceParam(key: ID, param: Element): void +removeServiceparam(key: ID): StructureDocument +setDebugLevel(debugLevel: String): void
+setDescription(description: String): void +setName(name: String): void
+setPeerGroupID(gid: PeerGroupID): void +setPeerID(pid: PeerID): void
+setServiceparams(params: Hashtable): void
PeerAdv
(net.jxta.impl.protocol)
+getDocument(encodeAs: MimeMediaType): Document +initialize(root: Element): void
+PeerAdv(root: Element): void +PeerAdv()
Hình 3.11
Chú ý : Có 2 kiểu package khác nhau trong ứng dụng JXTA. Đó là API và các bổ sung. API hầu hết là các lớp trừu tượng hay các giao diện. Các package là bổ sung (implementation) có code nền tảng tường minh. Bởi vì API còn rất mới nên không phải tất cả các implementation đều được ánh xạ trong API, nên một số implementation cần có cách truy cập riêng. Thực tế không cần sử dụng các lớp implementation trừ khi nó là phần mở rộng thực sự của API.
Tóm lại JXTA là một công nghệ mới giúp chung ta có thể xây dựng hệ thống. Nó chỉ ra cách mà các thiết bị trong hệ thống liên lạc với nhau như thế nào. JXTA là phổ biến cho mọi ngôn ngữ.
PeerID
(net.jxta.impl.id.UUID) +clone(): Object
+equals(target: Object): Boolean +getIDFormat(): String
+getPeerGroupID(): ID +getUniqueValue(): URL +getURL(): URL
+hashCode(): int
+PeerID(groupUUID: UUID, peerUUID: UUID) +PeerID(id: ID) +PeerID() +PeerID(groupID: PeerGroupID) PeerID (net.jxta.peer) +getPeerGroupID(): ID