1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Báo cáo cuối kì môn học hệ phân bố (3)

16 9 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 1,65 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 2

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 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 3

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

Trang 4

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 toàn xã hội, được kích hoạt bởi công nghệ Internet nói chung

Trang 5

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ủ 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 6

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

Trang 7

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

Trang 8

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

Trang 9

3 Cài đặt các chức năng chính

Trang 10

3.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 13

CHƯƠ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

Ngày đăng: 10/06/2022, 09:38

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w