BÁO CÁO CUỐI KỲ
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
SVTH:
MSSV:
VÕ ĐÌNH VĨNH CHƯƠNG
19133012
TƠN THẤT GIA BẢO
19133009
DƯƠNG THANH TUẤN19133004
NGUYỄN ĐỨC TỒN
19133058
TP. Hồ Chí Minh, tháng 05 năm 2022
MỤ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.
3.2.
3.3.
3.4.
Cấu trúc ứng dụng.................................................................................................................... 9
Chức năng Đăng kí - Đăng nhập..............................................................................................10
Chức năng Chat...................................................................................................................... 11
Xác thực người dùng.............................................................................................................. 12
CHƯƠNG 4: DEMO ỨNG DỤNG........................................................................................13
CHƯƠ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
CHƯƠ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 tồn xã hội, được kích hoạt bởi cơng nghệ Internet nói chung.
Mơ 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ủ. Ngồ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ẽ ln đượ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
peer đ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.
Mạ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
CHƯƠ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
3. Cài đặt các chức năng chính
3.1.
Cấu trúc ứng dụng
3.2.
Chức năng Đăng kí - Đăng nhập
<script>
import { user } from './user';
let username;
let password;
function login() {
user.auth(username, password, ({ err }) => err && alert(err));
}
function signup() {
user.create(username, password, ({ err }) => {
if (err) {
alert(err);
} else {
login();
}
});
}
</script>
<label for="username">Username</label>
<input name="username" bind:value={username} minlength="3" maxlength="16" />
<label for="password">Password</label>
<input name="password" bind:value={password} type="password" />
<button class="login" on:click={login}>Login</button>
<button class="login" on:click={signup}>Sign Up</button>
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';
var message = {
// 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;
}
}
}
});
});
+ 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();
}
3.4.
Xác thực người dùng
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}`);
});
CHƯƠNG 4: DEMO ỨNG DỤNG
+ Chạy ứng dụng :
+ Mở ứng dụng ở local:
Đăng kí -> Đăng nhập
+ Test các chức năng:
+ 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