Trong đó các node trong lớp phủ tạo thành một tập hợp con của các node trong mạng vật lý.. Dữ liệu vẫn được trao đổi trực tiếp qua mạng TCP/IP bên dưới, nhưng ở các lớp ứng dụng ngang hà
Trang 1
MÔN HỌC: HỆ PHÂN BỐ
ĐỀ TÀI: ỨNG DỤNG WEB CHAT – PEER TO PEER
GVHD: NGUYỄN THIÊN BẢO THỰC HIỆN: NHÓM 5
TP Hồ Chí Minh, tháng 05 năm 2022
Trang 2MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI 3
CHƯƠNG 2: KHÁI NIỆM PEER TO PEER NETWORK 4
Khái niệm 4
Mô hình peer to peer 5
Mạng không có cấu trúc 5
Mạng có cấu trúc 6
Mô hình kết hợp 6
Ứng dụng của mạng ngang hàng Peer to peer 6
Cung cấp nội dung 6
Mạng chia sẻ file 7
CHƯƠNG 3: CÀI ĐẶT ỨNG DỤNG 8
1 Tải framework GUN 8
2 Tải extension Svelte cho VS Code 8
3 Cài đặt các chức năng chính 9
3.1 Cấu trúc ứng dụng 9
3.2 Chức năng Đăng kí - Đăng nhập 10
3.3 Chức năng Chat 11
3.4 Xác thực người dùng 12
CHƯƠNG 4: DEMO ỨNG DỤNG 13
Trang 3CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI
1 Tên đề tài: ỨNG DỤNG WEB CHAT – ứng dụng mạng ngang hàng PEER
TO PEER
2 Môi trường lập trình: Visual Studio Code
3 Ngôn ngữ lập trình: JavaScript
4 Các framework sử dụng:
- GUN.Js : Cơ sở dữ liệu Đồ thị Phân tán – P2P Database : Cơ sở dữ liệu
không lưu ở 1 máy chủ, được lưu ở các Peers (Node)
- Svelte : JavaScript Front-end frameworks
Trang 4CHƯƠNG 2: KHÁI NIỆM PEER TO PEER NETWORK
Khái niệm
Mạng peer to peer (P2P) là một kiến trúc ứng dụng phân tán nhằm phân vùng nhiệm vụ hoặc khối lượng công việc giữa các peer Các peer là những thiết bị tham gia trong ứng dụng có đặc quyền như nhau Chúng tạo thành một mạng lưới các node ngang hàng
Các peer tạo ra một phần tài nguyên của chúng, chẳng hạn như processing power, lưu trữ đĩa hoặc băng thông mạng, có sẵn cho những participant khác
mà không cần sự điều phối trung tâm của server hoặc host ổn định Các peer vừa là nhà cung cấp vừa là người tiêu thụ tài nguyên Nó khác với mô hình client-server truyền thống ở chỗ việc tiêu thụ và cung cấp tài nguyên được phân chia
Trước đây hệ thống Peer to peer đã được sử dụng trong nhiều lĩnh vực ứng dụng Kiến trúc này đã được phổ biến bởi hệ thống chia sẻ file Napster, phát hành vào năm 1999 Khái niệm này đã truyền cảm hứng cho các cấu trúc và triết lý mới trong nhiều lĩnh vực tương tác của con người Trong bối cảnh xã hội như vậy, peer-to-peer as meme đề cập đến mạng xã hội bình đẳng đã xuất hiện trong toàn xã hội, được kích hoạt bởi công nghệ Internet nói chung
Trang 5Mô hình peer to peer
Mạng peer to peer triển khai dạng mạng lớp phủ ảo trên cấu trúc liên kết mạng vật lý Trong đó các node trong lớp phủ tạo thành một tập hợp con của các node trong mạng vật lý Dữ liệu vẫn được trao đổi trực tiếp qua mạng TCP/IP bên dưới, nhưng ở các lớp ứng dụng ngang hàng có thể giao tiếp với nhau trực tiếp, thông qua các liên kết lớp phủ logic (mỗi liên kết tương ứng với một đường dẫn qua mạng vật lý bên dưới)
Lớp phủ được sử dụng để index và khám phá peer, đồng thời làm cho hệ thống Peer to peer độc lập với cấu trúc liên kết mạng vật lý Dựa trên cách các node được liên kết với nhau trong mạng lớp phủ và cách các tài nguyên được index
và định vị, chúng ta có thể phân loại mạng thành 2 loại là mạng không có cấu trúc hoặc mạng có cấu trúc (hoặc là sự kết hợp giữa hai mạng này)
Mạng không có cấu trúc
Mạng ngang hàng peer to peer không có cấu trúc không áp đặt một cấu trúc cụ thể lên mạng lớp phủ theo thiết kế, mà được tạo bởi các node hình thành các kết nối ngẫu nhiên với nhau (Gnutella, Gossip và Kazaa là những ví dụ về giao thức Peer to peer không có cấu trúc)
Vì không có cấu trúc nào được áp đặt trên toàn cầu nên các mạng không có cấu trúc rất dễ xây dựng và cho phép tối ưu hóa bản địa hóa cho các vùng khác nhau của lớp phủ Ngoài ra, bởi vì vai trò của tất cả các peer trong mạng là như nhau, các mạng không có cấu trúc rất mạnh và tốt khi đối mặt với tỷ lệ “churn” cao (khi một số lượng lớn các peer thường xuyên tham gia và rời khỏi mạng)
Tuy nhiên, những hạn chế chính của mạng phi cấu trúc cũng phát sinh từ sự thiếu cấu trúc này Đặc biệt, khi một peer muốn tìm một phần dữ liệu mong muốn trong mạng, truy vấn tìm kiếm phải được flood trong mạng để tìm càng nhiều peer chia sẻ dữ liệu càng tốt Flooding gây ra một lượng lớn lưu lượng báo hiệu trong mạng, sử dụng nhiều CPU hơn và không đảm bảo rằng các truy vấn tìm kiếm sẽ luôn được giải quyết
Hơn nữa, vì không có mối tương quan giữa một peer và nội dung do nó quản
lý, không có gì đảm bảo rằng flooding sẽ tìm thấy một peer có dữ liệu mong muốn Nội dung phổ biến có thể có sẵn ở một số peer và bất kỳ peer nào tìm kiếm nội dung đó đều có khả năng tìm thấy nội dung tương tự Nhưng nếu một
Trang 6peer đang tìm kiếm dữ liệu hiếm chỉ được chia sẻ bởi một số peer khác, thì khả năng thành công là rất cao
Mạng có cấu trúc
Trong mạng peer to peer có cấu trúc, lớp phủ được tổ chức thành một cấu trúc liên kết cụ thể và giao thức đảm bảo rằng bất kỳ node nào cũng có thể tìm kiếm file hoặc tài nguyên trên mạng một cách hiệu quả, ngay cả khi tài nguyên
đó cực kỳ hiếm
Loại mạng P2P có cấu trúc phổ biến nhất triển khai distributed hash
table (DHT), trong đó một biến thể của hash nhất quán được sử dụng để gán quyền sở hữu từng file cho một peer cụ thể Điều này cho phép các peer tìm kiếm tài nguyên trên mạng bằng hash table Nghĩa là, các cặp (key, value) được lưu trữ trong DHT và bất kỳ node nào tham gia đều có thể truy xuất value được liên kết với một key nhất định
Mô hình kết hợp
Các mô hình kết hợp là sự kết hợp của các mô hình client-server và mô hình peer-to-peer Kiểu mô hình kết hợp phổ biến là một server trung tâm giúp các peer tìm thấy nhau Spotify là một ví dụ về mô hình kết hợp Có rất nhiều mô hình kết hợp, tất cả đều tạo ra sự cân bằng giữa chức năng tập trung được cung cấp bởi mạng server/client có cấu trúc
Hiện tại, các mô hình kết hợp có hiệu suất tốt hơn so với mạng không có cấu trúc thuần túy Đó là vì một số chức năng nhất định, chẳng hạn như tìm kiếm, yêu cầu chức năng tập trung nhưng được hưởng lợi từ sự kết hợp không tập trung của các node do mạng không có cấu trúc cung cấp
Ứng dụng của mạng ngang hàng Peer to peer
Cung cấp nội dung
Trong mạng Peer to peer, client vừa cung cấp vừa sử dụng tài nguyên Không giống như hệ thống client -server, khả năng phục vụ nội dung của mạng peer to peer có thể tăng lên khi nhiều user bắt đầu truy cập nội dung (đặc biệt với các giao thức như Bittorrent yêu cầu user chia sẻ, tham khảo nghiên cứu đo lường hiệu suất) Thuộc tính này là một trong những lợi thế lớn của việc sử dụng mạng Peer to peer vì chi phí thiết lập thấp
Trang 7Mạng chia sẻ file
Nhiều mạng chia sẻ file ngang hàng, chẳng hạn như Gnutella, G2 và mạng eDonkey đã phổ biến các công nghệ peer to peer
Mạng phân phối nội dung peer to peer
Dịch vụ nội dung peer to peer, ví dụ: bộ nhớ cache để cải thiện hiệu suất, chẳng hạn như Correli Caches
Trang 8CHƯƠNG 3: CÀI ĐẶT ỨNG DỤNG
1 Tải framework GUN
lệnh trên terminal : npm install gun
2 Tải extension Svelte cho VS Code
Trang 93 Cài đặt các chức năng chính
Trang 103.2 Chức năng Đăng kí - Đăng nhập
<script>
import{user}from ./user' ;
letusername ;
letpassword ;
function login() {
user.auth( username , password , ({ err }) =>err&& alert( err ));
function signup() {
user.create( username , password , ({ err }) =>{
if ( err ) {
alert( err );
}else{
login();
}
} );
</script>
Trang 11
3.3 Chức năng Chat
+ Tự động cuộn thanh chat (khi có tin nhắn mới):
function autoScroll() {
setTimeout(() => scrollBottom?.scrollIntoView( { behavior: 'auto' } ), 50 );
unreadMessages=false ;
function watchScroll( e ) {
canAutoScroll= (e.target.scrollTop ||Infinity ) >lastScrollTop ;
lastScrollTop= e.target.scrollTop;
+ Tải dữ liệu các tin nhắn (qua mã xác thực E2E)
// Get Messages
db.get( 'chat' )
map( match )
once(async ( data , id ) =>{
if ( data ) {
// Key for end-to-end encryption
const key = #foo' ;
varmessage= {
// transform the data
who: await db user (data) get ('alias'), // a user might lie who they are! So let the user system detect whose data it is.
what: ( await SEA decrypt ( data what , key)) +'', // force decrypt as text.
when: GUN state is (data, 'what'), // get the internal timestamp for the what property.
};
if (message.what) {
messages= [ messages slice( 100 ), message ].sort(( a b ) => a.when - b.when);
if ( canAutoScroll ) {
autoScroll();
}else{
unreadMessages=true ;
}
}
}
} );
);
Trang 12+ Gửi tin nhắn:
function sendMessage() {
const secret = await SEA encrypt (newMessage, '#foo')
const message = user get ('all') set ( { what: secret} )
const index = new Date () toISOString ();
db.get( 'chat' ).get( index ).put( message );
newMessage='' ;
canAutoScroll=true ;
autoScroll();
import GUN from gun' ;
import gun/sea' ;
import gun/axe' ;
import{writable}from svelte/store' ;
// Database
export const db = GUN ();
// Gun User
export const user = db user () recall ( { sessionStorage: true} )
// Current User's username
export const username = writable ('')
user get( 'alias' ).on( v=> username.set( v ))
db on( 'auth' , async( event ) =>{
const alias = await user get ('alias'); // username string
username.set( alias );
console.log( `signed in as ${ alias } ` );
Trang 13CHƯƠNG 4: DEMO ỨNG DỤNG
+ Chạy ứng dụng :
Trang 14+ Mở ứng dụng ở local:
Đăng kí -> Đăng nhập
Trang 15+ Test các chức năng:
Trang 16+ TEST P2P: Đăng nhập vào 1 user khác -> thấy những tin nhắn của các user khác