Tải bản đầy đủ (.pdf) (87 trang)

Giải pháp sử dụng P2P như công cụ truyền thông cho các ứng dụng clientserver

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.43 MB, 87 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
--------------------------------------LƯƠNG QUY THỌ

GIẢI PHÁP SỬ DỤNG P2P NHƯ CÔNG CỤ TRUYỀN THƠNG
CHO CÁC ỨNG DỤNG CLIENT-SERVER

Chun ngành : Cơng nghệ thơng tin

LUẬN VĂN THẠC SĨ CƠNG NGHỆ THƠNG TIN

NGƯỜI HƯỚNG DẪN KHOA HỌC:
PGS.TS HÀ QUỐC TRUNG

Hà Nội – 2013


LỜI CAM ĐOAN
Tôi là Lương Quy Thọ, học viên cao học lớp 11BCNTT khóa 2011B do giáo viên
hướng dẫn là PGS.TS. Hà Quốc Trung hướng dẫn.
Tơi xin cam đoan tồn bộ nội dung được trình bày trong bản luận văn “Giải pháp
sử dụng P2P như công cụ truyền thông cho các ứng dụng Client-Server” này là kết
quả tìm hiểu và nghiên cứu của riêng tôi dưới sự hướng dẫn của PGS.TS. Hà Quốc
Trung. Các kết quả và dữ liệu được nêu trong luận văn là hoàn toàn trung thực và rõ
ràng. Mọi thơng tin trích dẫn đều được tn theo luật sở hữu trí tuệ, liệt kê rõ ràng các
tài liệu tham khảo. Tơi xin chịu hồn tồn trách nhiệm với những nội dung được viết
trong luận văn này.
Hà nội, ngày 18 tháng 12 năm 2013.
Học viên

Lương Quy Thọ



1


LỜI CẢM ƠN
Tôi xin gửi lời cám ơn sâu sắc tới PGS.TS Hà Quốc Trung, người đã tận tình hướng
dẫn để tơi có thể hồn thành luận văn.
Tơi cũng xin gửi lời cám ơn chân thành tới quý thầy cô viện Công nghệ thông tin và
truyền thông, viện Đào tạo sau đại học đã truyền dạy những kiến thức quý báu trong
khố học này.
Tơi xin gửi lời cám ơn tới ban tổ chức hội nghị khoa học ACM-SoICT 2013 đã cho
tơi cơ hội hồn thiện hơn các nghiên cứu của mình.
Cuối cùng, tơi xin gửi lời cám ơn tới gia đình, bạn bè, cơ quan cơng tác đã giúp đỡ
trong quá trình thực hiện luận văn này.
Hà nội, ngày 18 tháng 12 năm 2013.
Học viên

Lương Quy Thọ

2


MỤC LỤC

LỜI CAM ĐOAN .........................................................................................................................................1
LỜI CẢM ƠN ..............................................................................................................................................2
MỤC LỤC ...................................................................................................................................................3
DANH MỤC HÌNH VẼ, ĐỒ THỊ ....................................................................................................................5
CHƯƠNG I: TỔNG QUAN...........................................................................................................................6
CHƯƠNG II: CƠ SỞ LÝ THUYẾT ............................................................................................................... 10

2.1.

Mơ hình Client-Server ............................................................................................................ 10

2.2.1.

Phân loại server .............................................................................................................. 15

2.2.2.

Phân loại client.............................................................................................................. 16

2.2.4.

Ưu điểm và nhược điểm của mơ hình client-server .................................................. 21

2.2.1.

Mạng P2P....................................................................................................................... 24

2.2.3.

2.2.

Kiến trúc client-server ................................................................................................. 17

Mơ hình peer-to-peer ........................................................................................................... 23

2.2.2.


Định tuyến và dị tìm tài nguyên ................................................................................. 24

2.2.4.

Ứng dụng của P2P trong thực tế.................................................................................. 28

2.2.3.
2.3.

Phân loại mạng P2P ...................................................................................................... 24

Thuật toán thay thế trang .................................................................................................... 39

2.3.1.

Tổng quan...................................................................................................................... 39

2.3.3.

Quản lý trang trước kỳ hạn .......................................................................................... 41

2.3.2.

2.3.4.

2.3.5.

2.4.

Q trình tiền dọn sạch ................................................................................................ 40


Thuật tốn đánh dấu .................................................................................................... 41

Thuật tốn thay thế trang ............................................................................................ 42

Cơng nghệ triển khai ứng dụng P2P .................................................................................... 53

2.4.1.

2.4.2.

Công nghệ JXTA............................................................................................................. 53

Công nghệ WebRTC ...................................................................................................... 56

CHƯƠNG III: MƠ HÌNH CHIA SẺ CACHE SỬ DỤNG P2P .......................................................................... 60
3.1.

Caching model....................................................................................................................... 60

3


3.2.
3.3.

Local proxy model ................................................................................................................ 64
Shared-caching model .......................................................................................................... 65

CHƯƠNG IV: THIẾT KẾ ỨNG DỤNG CHIA SẺ FILE SỬ DỤNG MƠ HÌNH CHIA SẺ CACHE ......................... 69

4.1.
4.2.

Giới thiệu ứng dụng .............................................................................................................. 69
Thiết kế ứng dụng ................................................................................................................. 70

4.2.1.

4.2.2.

4.2.3.

4.3.
4.4.

Thiết kế chức năng ....................................................................................................... 70

Thiết kế module ............................................................................................................ 71

Tổ chức dữ liệu ............................................................................................................. 74

Công nghệ sử dụng ............................................................................................................... 78
Thử nghiệm ........................................................................................................................... 80

CHƯƠNG V: KẾT LUẬN ........................................................................................................................... 84

4


DANH MỤC HÌNH VẼ, ĐỒ THỊ

Hình 2.1: Mơ hình Client-Server............................................................................................................. 10
Hình 2.2: Trao đổi dữ liệu giữa Client và Server trong chế độ bị phong tỏa ......................................... 12
Hình 2.3: Năng lực xử lý của Nginx so với Apache web server .............................................................. 13
Hình 2.4: So sánh khả năng quản lý bộ nhớ giữa Nginx và Apache web server .................................... 14
Hình 2.5: Cơ chế hoạt động của blocking-server ................................................................................... 14
Hình 2.6: cơ chế hoạt động của non-blocking server [ref] .................................................................... 15
Hình 2.7: Phân loại client ....................................................................................................................... 17
Hình 2.8: Phân loại Client-Server theo kiến trúc logic ........................................................................... 18
Hình 2.9: Kiến trúc Client-Server 2 tầng................................................................................................. 19
Hình 2.10: Kiến trúc Client-Server 3 tầng............................................................................................... 20
Hình 2.11: Kiến trúc Client-Server n tầng............................................................................................... 21
Hình 2.12: Mạng phi cấu trúc ................................................................................................................. 25
Hình 2.13: Mơ hình mạng có cấu trúc .................................................................................................... 26
Hình 2.14: Cơ chế của bàng băm phân tán DHT .................................................................................... 26
Hình 2.15: Mơ hình ứng dụng Spotify .................................................................................................... 31
Hình 2.16: Mơ hình mạng Napster ......................................................................................................... 35
Hình 2.17: Mơ hình mạng Gnutella ........................................................................................................ 37
Hình 2.18: Kiến trúc JXTA ....................................................................................................................... 55
Hình 2.19: Kiến trúc WebRTC ................................................................................................................. 58
Hình 3.1: Caching model ........................................................................................................................ 60
Hình 3.2: Cơ chế hoạt động mơ hình Caching model ............................................................................ 62
Hình 3.3: Mơ hình Local-Proxy ............................................................................................................... 65
Hình 3.4: Shared-caching Model ............................................................................................................ 66
Hình 3.5: Cơ chế hoạt động mơ hình Shared-caching model ................................................................ 68
Hình 4.1: Mơ hình hoạt động ứng dụng Quicknode .............................................................................. 69
Hình 4.2: Các module trong ứng dụng Quicknode ................................................................................. 74
Hình 4.3: Tốc độ download P2P và Client-Server................................................................................... 82
Hình 4.4: Đồ thị thời gian và tốc độ download file (kích thước 48,11MB) ............................................ 83

5



CHƯƠNG I: TỔNG QUAN
Mơ hình client-server là mơ hình triển khai ứng dụng phân tán phổ biến hiện nay
bởi khả năng phát triển và triển khai ứng dụng dễ dàng. Trong mơ hình này, thành phần
cung cấp các dịch vụ hay tài nguyên được gọi là server, thành phần gọi các service
được cung cấp bởi server gọi là client. Thông thường các client và server được đặt trên
các máy vật lý khác nhau và giao tiếp với nhau thông qua hệ thống mạng. Một máy
server chạy một hoặc nhiều ứng dụng server, các ứng dụng server chia sẻ tài nguyên
với các client. Một client không chia sẻ bất cứ tài nguyên nào với các client khác ngoại
trừ việc gửi truy vấn tới các dịch vụ của máy server.
Mơ hình client-server được phát triển bởi Xerox PARC vào năm 1970. Các ứng
dụng Email, WWW là các ví dụ điển hình của mơ hình client-server. Đặc điểm nổi bật
của kiến trúc client-server gồm:
• Quản lý tập trung: dữ liệu được lưu trữ tập trung trên server thay vì nằm rải
rác trên nhiều máy, giúp đơn giản hóa việc truy xuất và cập nhật dữ liệu.
• Dễ bảo trì: nhờ khả năng quản lý tập trung mà cơng việc bảo trì cũng trở nên
dễ dàng hơn vì phần lớn việc bảo trì chỉ cần thực hiện trên server. Trong
trường hợp hệ thống có nhiều server với thiết bị dự phịng, q trình bảo trì
(như sửa chữa, thay thế server) có thể diễn ra hồn tồn trong suốt với client.
• Bảo mật: dữ liệu tập trung trên server đồng nghĩa với việc kiểm soát dễ dàng
và an toàn hơn.
Các ưu điểm trên khiến ứng dụng phát triển theo mơ hình Client-Server trở nên dễ
dàng và linh hoạt:

6


• Ứng dụng sau khi được phân tích nghiệp vụ sẽ thiết kế được protocol chuẩn
giao tiếp giữa client và server

• Tn theo protocol, ứng dụng client và server có thể phát triển độc lập, và có
thể sử dụng các công nghệ khác nhau với rất nhiều tùy chọn linh hoạt (server:
Java, Python, Ruby; client: Java Swing, C# Winform, HTML5, Mobile). Các
ứng dụng client-server được phát triển độc lập cũng đảm bảo khả năng dễ nâng
cấp, bảo trì.
• Ứng dụng client-server cịn dễ dàng phát triển ở chỗ: có rất nhiều tùy chọn giao
thức kết nối giữa client-server và các tùy chọn này đều hỗ trợ mặc định trong
các ngôn ngữ phát triển. Các giao thức phổ biến có thể kể đến như: TCP/IP,
UDP, HTTP.
• Việc triển khai ứng dụng cũng dễ dàng: cài đặt server trên máy chủ vật lý. Các
ứng dụng client được phân phối qua mạng và được người dùng cài đặt vào máy
của mình. Các cơng nghệ: web application, Java Webstart, .NET Oneclick cho
phép ứng dụng tự động nâng cấp khi có thay đổi trên server.
Bên cạnh các ưu điểm của mơ hình client-server, các đặc điểm của mơ hình này
cũng tạo ra các yếu điểm đó là server bottleneck. Server bottleneck có thể xử lý bằng
các giải pháp scale-up ứng dụng như: nâng cấp server, sử dụng load balancing[1] để
phân tải ra nhiều máy chủ vật lý. Tuy nhiên các giải pháp trên thường có chi phí rất
cao. Với các ứng dụng chia sẻ giao tiếp thời gian thực (Audio, Video) hay các ứng
dụng chia sẻ file cũng cần server có băng thơng rất lớn.
Bên cạnh giải pháp scale-up hệ thống, giải pháp sử dụng cache tại client là giải
pháp thường sử dụng nhất. Dữ liệu được chuyển qua client sẽ được cache lại phục vụ
cho lần sử dụng tiếp theo, một cơ chế cache hiệu quả có thể cải thiện đáng kể hiệu năng
truy cập service từ server. Các thuật toán cache được gọi là: “page replacement
algorithm”[5]. Tuy nhiên nếu cache miss xảy ra, client vẫn phải liên lạc với server để
lấy dữ liệu. Như vậy tính co giãn của hệ thống vẫn khơng được đảm bảo. Ngoài ra sử
7


dụng cache có thể khơng giải quyết được bài tốn chia sẻ dữ liệu realtime, khi có nhiều
client cùng đăng ký nhận thơng tin broadcast từ server.

Giải pháp khác có thể giải quyết bottleneck ở server là triển khai ứng dụng theo
mơ hình Peer-to-peer (P2P). P2P là một mơ hình triển khai ứng dụng phân tán, trong
đó mỗi node trong mạng (được gọi là “peer”) vừa đóng cả vai trị là node cung cấp lẫn
node sử dụng dịch vụ, khác với mơ hình client-server trong đó client chỉ sử dụng dịch
vụ cung cấp bởi server. Việc mỗi node trong mô hình P2P vừa đóng vai trị là node sử
dụng lẫn cung cấp dịch vụ dẫn đến các xử lý trên toàn bộ hệ thống được phân chia ra
các node trong mạng do đó giải quyết vấn đề bottleneck của mơ hình client-server, đặc
biệt khi ứng dụng chia sẻ dữ liệu lớn, băng thông hệ thống được chia ra trên các máy,
đảm bảo khả năng mở rộng hệ thống với chi phí tối ưu.
Tuy nhiên mơ hình P2P cũng có yếu điểm đó là: triển khai phức tạp hơn do các
thao tác: tìm kiếm dữ liệu, lưu trữ phân tán dữ liệu trên các node và các cơ chế đảm
bảo dữ liệu sẵn sàng khi có số lượng node nhất định rời khỏi hệ thống. Mặt khác mơ
hình P2P cũng khó khăn hơn trong việc bảo trì và nâng cấp hệ thống so với ứng dụng
client-server xử lý tập trung trên server. Ngồi ra 1 điểm khác làm cho P2P khơng phải
lựa chọn số 1 cho các ứng dụng phân tán là tính an tồn của dữ liệu được lưu trữ phân
tán tại nhiều node. Một số ứng dụng thậm chí khơng thể triển khai theo mơ hình P2P
do u cầu an toàn và lưu trữ tập trung dữ liệu: các ứng dụng có dữ liệu nhạy cảm: ứng
dụng ngân hàng core-banking, ứng dụng chứng khốn, ứng dụng mail…
Qua các tìm hiểu ta có thể trên rút ra:
• Ứng dụng dựa trên mơ hình Client-Server dễ phát triển nhưng gặp server
bottleneck và giới hạn băng thơng.
• Ứng dụng dựa trên mơ hình P2P làm hệ thống có tính co dãn cao nhưng khó
triển khai do: lookup service, protocol phức tạp,cơ chế phân tán dữ liệu trên các
node và đảm bảo tính dữ liệu sẵn sàng cao phức tạp.

8


Đề tài tôi chọn nghiên cứu trong luận văn là “Giải pháp sử dụng P2P như công cụ
truyền thông cho các ứng dụng Client-Server”. Mơ hình được tơi nghiên cứu trong luận

văn sử dụng mơ hình P2P kết hợp với Client-Server và Cache để scale-out hệ thống,
giải quyết bottleneck của server cũng như sự phức tạp trong triển khai ứng dụng P2P
đồng thời vẫn tận dụng được tính đơn giản của mơ hình Client-Server và khả năng co
giãn cao của hệ thống dựa trên P2P. Ngoài ra hướng tiếp cận đề xuất trong luận văn
của tôi hướng tới việc nâng cấp ứng dụng Client-Server có sẵn để sử dụng thêm kết nối
P2P và Cache.
Trong phần thử nghiệm, tôi tiến hành áp dụng mơ hình đề xuất vào ứng dụng chia
sẻ file để đưa ra các số liệu về hiệu năng của mơ hình cũng như khả năng ứng dụng mơ
hình vào các hệ thống sử dụng mơ hình Client-Server đã có.

9


CHƯƠNG II: CƠ SỞ LÝ THUYẾT
Trong phần này tơi trình bày về cơ sở lý thuyết liên quan đến mô hình ClientServer, mơ hình P2P, thuật tốn thay thế trang (page replacement algorithm[5]) sử dụng
trong quản lý cache và các công nghệ sử dụng trong triển khai ứng dụng P2P.
Dựa trên cơ sở lý thuyết này, tôi sẽ đề xuất mơ hình lý thuyết và ứng dụng thí
nghiệm được trình bày trong các phần sau của luận văn.
2.1.
Mơ hình Client-Server
Trong khoa học máy tính, mơ hình Client-Server là một mơ hình ứng dụng phân tán
mà các dịch vụ được xử lý và cung cấp bởi ứng dụng gọi là server; các ứng dụng gửi
yêu cầu cung cấp dịch vụ tới server gọi là client. Thông thường client và server giao
tiếp với nhau thơng qua hệ thống mạng máy tính trên các máy vật lý khác nhau, tuy
nhiên cả client và server vẫn có khả năng chạy trên cùng một máy vật lý. Một server
vật lý có thể chạy một hoặc nhiều ứng dụng server và chia sẻ tài nguyên với các client.
Một client không chia sẻ bất cứ tài nguyên nào của nó ngoại trừ thơng qua việc gửi dữ
liệu yêu cầu cung cấp dịch vụ tới server. Do đó, client là ứng dụng khởi tạo phiên kết
nối tới server và server là ứng dụng luôn thực hiện chờ kết nối từ client.


Hình 2.1: Mơ hình Client-Server

10


Mơ hình Client-Server được phát triển bởi Xerox PARC vào những năm 1970. Hiện
tại mơ hình rất phổ biến trong các ứng dụng mạng. Email, WWW là các ứng dụng điển
hình của mơ hình này.
Client-Server mơ tả mối quan hệ cộng tác giữa nhiều ứng dụng trong một hệ thống.
Thành phần server cung cấp dịch vụ cho một hoặc nhiều client khi nhận được u cầu.
Trong mơ hình này, mỗi máy tính trong mạng giữ một trong hai vai trị: client hoặc
server. Server là máy tính chia sẻ có chọn lọc tài nguyên mà nó quản lý; client là một
máy tính hoặc chương trình khởi tạo liên lạc với server để sử dụng các tài nguyên mà
server cung cấp. Dữ liệu, CPU, máy in, thiết bị lưu trữ dữ liệu là một vài trong số các
tài nguyên mà một server thường cung cấp.
Chia sẻ tài ngun máy tính trong mơ hình Client-Server cịn gọi là time-sharing
bởi nó cho phép nhiều ứng dụng sử dụng cùng tài nguyên được chia sẻ tại cùng một
thời điểm.
Một máy tính cho dù là client hay server hay cả 2, nó đều có thể thực hiện nhiều
chức năng như: chạy ứng dụng máy chủ web, file server cùng lúc để cung cấp các loại
dữ liệu khác nhau cho từng yêu cầu khác nhau từ client. Ứng dụng client cũng có thể
giao tiếp với ứng dụng server trên cùng một máy vật lý. Giao tiếp giữa 2 ứng dụng máy
chủ, chẳng hạn như thực hiện đồng bộ hóa dữ liệu, gọi là giao tiếp server-to-server.
Client và Server trao đổi thông điệp theo cơ chế request-response: client gửi yêu
cầu; server nhận và trả về kết quả. Để thực hiện giao tiếp giữa các máy tính, trước tiên
chúng cần phải sử dụng cùng một ngôn ngữ, tuân theo một quy tắc giao tiếp đã định
sẵn. Ngôn ngữ và quy tắc giao tiếp gọi chung là giao thức giao tiếp. Tất cả các giao
thức Client-Server được xử lý ở tầng ứng dụng (application layer).

11



Hình 2.2: Trao đổi dữ liệu giữa Client và Server trong chế độ bị phong tỏa
Q trình trao đổi thơng điệp giữa client và server có thể diễn ra theo hai chế độ: bị
phong tỏa (blocking) và không bị phong tỏa (non-blocking).
a. Chế độ bị phong tỏa:
Trong chế độ bị phong tỏa, khi tiến trình client hoặc server phát ra lệnh gửi dữ
liệu, việc thực thi của tiến trình sẽ tạm ngừng cho tới khi tiến trình nhận phát ra
lệnh nhận dữ liệu. Tương tự với tiến trình nhận dữ liệu, nếu tiến trình nào đó
(client hoặc server) phát ra lệnh nhận dữ liệu mà tại thời điểm đó chưa có dữ
liệu gửi tới thì việc thực thi của tiến trình cũng sẽ bị tạm ngừng cho tới khi có
dữ liệu gửi tới
b. Chế độ không bị phong tỏa
Trong chế độ này, khi tiến trình client hay server phát ra lệnh gửi dữ liệu, việc
thực thi của tiến trình vẫn được tiến hành mà khơng quan tâm đến việc có tiến
trình nào phát ra lệnh nhận và phản hồi dữ liệu đó hay khơng. Tương tự cho
trường hợp nhận dữ liệu, khi tiến trình phát ra lệnh nhận dữ liệu, nó sẽ nhận dữ
liệu hiện có, việc thực thi của tiến trình vẫn được tiến hành mà khơng quan tâm
đến việc có tiến trình nào phát ra lệnh gửi dữ liệu tiếp hay không.
Rất nhiều nền tảng cho phép phát triển các ứng dụng client-server sử dụng requestresponse theo chế độ: bị phong tỏa. Các cơng nghệ có thể kế đến như Java Socket,
12


.NET Socket, PHP. Phát triển ứng dụng ở chế độ này dễ dàng cho người phát triển do:
thực hiện request tại một nơi và chờ nhận được kết quả (hoặc exception nếu timeout)
ngay tại đó. Tuy nhiên yếu điểm của chế độ này là việc các thread bị block cho tới khi
có kết quả của thao tác (hoặc exception) do đó khi hoạt động hệ thống có thể tồn tại rất
nhiều thread chờ dẫn tới làm chậm ứng dụng (đặc biệt là ứng dụng server). Để khắc
phục yếu điểm của chế độ này, các nền tảng như: Java, .NET đưa ra các cài đặt hiệu
quả cho phép sử dụng đồng thời các cơ chế sau để cải thiện hiệu năng hệ thống:

• Tập các thread gọi là ThreadPool để kiểm tra dữ liệu (đã nhận, đã gửi hoặc đã
có kết quả chưa)
• Cơ chế wait/ notify sẽ đóng băng thread khi cần phải chờ dữ liệu và kích hoạt
thread trở lại khi dữ liệu đã sẵn sàng. Việc kích hoạt được thực hiện bởi các
thread trong ThreadPool.
Các cơ chế trên cải thiện rất nhiều hiệu năng hệ thống, tuy nhiên để hiệu năng đạt
tới cấp độ cao hơn, Non-block thường được sử dụng.
Các nền tảng cho phép phát triển ứng dụng Non-blocking như: .NET asynchronous
IO, Java Vert.x và Nodejs[2]. Bên cạnh đó 1 số server cũng được phát triển theo hướng
tiếp cận này, điển hình là Nginx. Hình vẽ sau so sánh khả năng đáp ứng và quản lý bộ
nhớ của web server Nginx và Apache (blocking-server):

Hình 2.3: Năng lực xử lý của Nginx so với Apache web server
13


Hình 2.4: So sánh khả năng quản lý bộ nhớ giữa Nginx và Apache web server
Khác biệt về cơ chế hoạt động giữa server blocking và non-blocking có thể thấy qua
hình vẽ sau:

Hình 2.5: Cơ chế hoạt động của blocking-server
Blocking server thường sử dụng 1 thread để xử lý 1 request, do đó để phục vụ hàng
nghìn request tại một thời điểm, cần có hàng nghìn thread tương ứng. Mặt khác tài
nguyên sử dụng để tạo và duy trì 1 thread khơng nhỏ nên blocking server có hiệu năng
sử dụng tài nguyên thấp hơn.
Xử lý request trong non-blocking server không ánh xạ 1-1 với thread. Thay vào đó
server non-blocking sử dụng vòng lặp IO (input-output) và cơ chế event-driven để xử
lý request. Khi có request, event driven server phát ra sự kiện và đưa vào IO Loop, IO
14



Loop sử dụng 1 thread duy nhất trên mỗi core CPU để lặp qua và xử lý tất cả các sự
kiện được đưa đến cho tới khi xử lý xong và loại bỏ sự kiện ra khỏi vịng lặp.

Hình 2.6: cơ chế hoạt động của non-blocking server [ref]
Đặc điểm của server triển khai theo cơ chế này:
• Server khơng phải tạo và quản lý nhiều thread. Không phải lo tới threadsafe
hoặc deadlock như blocking server nên hiệu năng hệ thống cao hơn.
• Ứng dụng khó phát triển hơn do tính bất đồng bộ: gửi yêu cầu tại 1 nơi, nhận kết
quả tại một nơi khác.
2.2.1.
Phân loại server
Server được chia làm 2 loại như sau:
a. Interactive server: server phục vụ các client một cách tuần tự, sau khi phục vụ
client này xong, sẽ phục vụ cho các yêu cầu của client khác. Q trình phục vụ
tn theo vịng lặp:
Chờ đợi u cầu từ client  Xử lý yêu cầu và trả lại kết quả cho client  Quay
lại bước 1
Interactive server có thiết kế khá đơn giản và phù hợp nhất với cho các ứng
dụng có thời gian trả lời ngắn. Nếu thời gian phục vụ cho 1 yêu cầu dài thì thời
gian phải chờ đợi là khơng thể chấp nhận được.

15


b. Concurrent server: server có thể phục vụ cho nhiều client tại một thời điểm. Q
trình phục vụ theo vịng lặp như sau:
Chờ đợi yêu cầu từ client  Khởi tạo một tiến trình để xử lý yêu cầu của client
 Quay lại bước 1
Để sử dụng concurrent server có thể dùng một trong 2 cách sau:

Mỗi triến trình phục vụ riêng 1 client
Sử dụng ThreadPool: tạo ra một tập các triến trình để có thể xử lý các u cầu
của client.
2.2.2.

Phân loại client

Dựa trên các chức năng và khối lượng cơng việc mà client thực hiện, client có thể
được phân thành hai loại:
a. Fat client: là các client có đủ sức mạnh và hoạt động hạn chế sự phụ thuộc vào
các server
Fat client (hay còn gọi là heavy, rich hoặc thick client) là một máy vật lý
trong mơ hình client-server hoặc trong hệ thống mạng, cung cấp nhiều xử lý độc
lập với máy chủ trung tâm.
So với Thin client, Fat client vẫn yêu cầu một kết nối thường xuyên tới máy
chủ trung tâm (hoặc kết nối vào 1 mạng), nhưng thường nó được đặc trưng bởi
khả năng thực hiện nhiều tính tốn mà khơng cần kết nối tới server. Tương phản
với thin client luôn tránh các xử lý nhiều nhất có thể và gửi yêu cầu xử lý tới
server mỗi lần dữ liệu được nhập và cần xử lý hoặc validate.
b. Thin client: là các client rất hạn chế chức năng và phụ thuộc nhiều vào server
Thin client (hay còn gọi là lean client hoặc slim client) là một máy vật lý hoặc
một chương trình có hoạt động phụ thuộc rất nhiều vào các máy tính hoặc
chương trình khác (server). Khác với các fat client được thiết kế để thực hiện
công việc tương đối độc lập với server (các yêu cầu xử lý ở server ít và thường

16


không phức tạp). Ở thin client, server cung cấp dịch vụ cho client từ lưu trữ dữ
liệu tới xử lý dữ liệu client gửi lên.

Thin client là một thành phần của một hạ tầng ứng dụng lớn, trong đó rất
nhiều client chia sẻ thực hiện u cầu tính tốn tới cùng một server. Do đó,
nhìn theo kiến trúc hướng dịch vụ (Service Oriented Architecture-SOA) thin
client cũng có thể được xem như là hệ thống cung cấp các dịch vụ xử lý nghiệp
vụ thông qua các giao diện người dùng mà nó cung cấp.
Điện tốn sử dụng thin-client cũng làm giảm đáng kể chi phí phần cứng và
bản quyền phần mềm cho toàn bộ hệ thống khi các máy client cần chạy cấu hình
thấp với các phần mềm rất cơ bản (hệ điều hành nguồn mở, trình duyệt, các
phần mềm hỗ trợ khác)
Hầu hết các hệ thống sử dụng thin-client là các máy có năng lực tính tốn
thấp và chỉ cung cấp giao diện đồ họa cho người sử dụng, ngoài ra các xử lý
khác được cung cấp bởi server.

Hình 2.7: Phân loại client
2.2.3.

Kiến trúc client-server

Về mặt logic, một ứng dụng client-server thường được chia thành 3 tầng:
• Tầng trình diễn: chị trách nhiệm hiển thị các thông tin và tương tác với người
dùng. Tầng trình diễn nằm ở Client.

17


• Tầng nghiệp vụ: xử lý các yêu cầu nghiệp vụ và phối hợp ứng dụng. Tầng này
thường nằm ở server với các ứng dụng sử dụng thin-client. Với các ứng dụng sử
dụng fat-client, tầng này có thể nằm ở cả client và server.
• Tầng cơ sở dữ liệu: quản lý dữ liệu của chương trình. Tầng này nằm ở server.


Hình 2.8: Phân loại Client-Server theo kiến trúc logic
Tuy nhiên tùy thuộc vào mức độ phức tạp và cách thiết kế, ứng dụng client server
có thể là ứng dụng: 2-tầng, 3-tầng hoặc n-tầng.
a. Client-server 2 tầng
Kiến trúc client server đơn giản nhất là kiến trúc hai tầng. Một ứng dụng hai
tầng cung cấp nhiều trạm làm việc với một tầng trình diễn thống nhất, tầng này
truyền tin với tầng lưu trữ dữ liệu tập trung. Tầng trình diễn thơng thường là
client, và tầng lưu trữ dữ liệu là server.

18


Hầu hết các ứng dụng Internet như là email, telnet, ftp thậm chí là cả Web là
các ứng dụng hai tầng.
Trong ứng dụng hai tầng truyền thống, khối lượng công việc xử lý được
dành cho phía client trong khi server chỉ đơn giản đóng vai trị như là chương
trình kiểm soát luồng vào ra giữa ứng dụng và dữ liệu. Kết quả là không chỉ
hiệu năng của ứng dụng bị giảm đi do tài nguyên hạn chế của PC, mà khối
lượng dữ liệu truyền đi trên mạng cũng tăng theo. Khi toàn bộ ứng dụng được
xử lý trên một PC, ứng dụng bắt buộc phải yêu cầu nhiều dữ liệu trước khi đưa
ra bất kỳ kết quả xử lý nào cho người dùng. Nhiều yêu cầu dữ liệu cũng làm
giảm hiệu năng của mạng. Một vấn đề thường gặp khác đối với ứng dụng hai
tầng là vấn đề bảo trì. Chỉ cần một thay đổi nhỏ đối với ứng dụng cũng cần phải
thay đổi lại toàn bộ ứng dụng client và server.

Hình 2.9: Kiến trúc Client-Server 2 tầng
b. Client-server 3 tầng
Ta có thể tránh được các vấn đề của kiến trúc client server hai tầng bằng
cách mở rộng kiến trúc thành ba tầng. Một kiến trúc ba tầng có thêm một tầng
mới tách biệt việc xử lý dữ liệu ở vị trí trung tâm


19


Hình 2.10: Kiến trúc Client-Server 3 tầng
Theo kiến trúc ba tầng, một ứng dụng được chia thành ba tầng tách biệt nhau
về mặt logic. Tầng đầu tiên là tầng trình diễn thường bao gồm các giao diện đồ
họa. Tầng thứ hai, còn được gọi là tầng trung gian hay tầng tác nghiệp. Tầng thứ
ba chứa dữ liệu cần cho ứng dụng. Tầng thứ ba về cơ bản là chương trình thực
hiện các lời gọi hàm để tìm kiếm dữ liệu cần thiết. Tầng trình diễn nhận dữ liệu
và định dạng nó để hiển thị. Sự tách biệt giữa chức năng xử lý với giao diện đã
tạo nên sự linh hoạt cho việc thiết kế ứng dụng. Nhiều giao diện người dùng
được xây dựng và triển khai mà không làm thay đổi logic ứng dụng.
Tầng thứ ba chứa dữ liệu cần thiết cho ứng dụng. Dữ liệu này có thể bao
gồm bất kỳ nguồn thông tin nào, bao gồm cơ sở dữ liệu như Oracale, SQL
Server hoặc tài liệu XML.
c. Client-server n tầng
Kiến trúc n-tầng được chia thành các tầng như sau:
• Tầng giao diện người dùng: quản lý tương tác của người dùng với ứng dụng
• Tầng logic trình diễn: xác định cách thức hiển thị giao diện người dùng và các
yêu cầu của người dùng được quản lý như thế nào.

20


• Tầng logic tác nghiệp: mơ hình hóa các quy tắc tác nghiệp,
• Tầng các dịch vụ hạ tầng: cung cấp một chức năng bổ trợ cần thiết cho ứng
dụng như các thành phần (truyền thông điệp, hỗ trợ giao tác).

Hình 2.11: Kiến trúc Client-Server n tầng

Ưu điểm của mơ hình 3 tầng, n tầng (nhiều tầng) là:
• Tăng khả năng linh động, việc thay đổi các tầng logic là độc lập với
nhau
• Tăng tính bảo mật
• Tăng hiệu năng khi các tác vụ được chia sẻ giữa các tầng
Nhược điểm của mơ hình nhiều tầng là:
• Tăng sự phức tạp trong triển khai và kiểm thử
• Tăng sự cần thiết của việc cân bằng tải và chịu lỗi
2.2.4.

Ưu điểm và nhược điểm của mơ hình client-server

a. Ưu điểm

21


• Tập trung: tài nguyên tập trung làm cho nó dễ dàng hơn để sao lưu
các tập tin, bảo vệ chống lại các mối đe dọa độc hại và chia sẻ tài
ngun. Trong một mơ hình client-server, máy in và các ổ đĩa lưu trữ
có thể được chia sẻ. Thay vì cài đặt một máy in cho mỗi máy tính, các
cơng ty có thể cài đặt máy in ở cấp độ máy chủ, cho phép các máy in
được chia sẻ như một tài nguyên. Điều này giúp tiết kiệm không chỉ là
tiền, mà cịn là khơng gian có giá trị. Một khơng gian lưu trữ tập trung
làm cho nó dễ dàng hơn để sao lưu và lấy các tập tin trong trường hợp
mất dữ liệu. Ngồi ra, máy chủ có thể quản lý chính sách mạng, làm
cho một mạng client-server an tồn hơn.
• Tính linh hoạt: một lợi thế quan trọng khác sinh ra trong quản lý tập
trung là nó rất dễ dàng để triển khai cập nhật hoặc nâng cấp. Một
mạng client-server có thể tự động triển khai tồn hệ thống thay đổi

khác nhau, từ một nâng cấp lớn cho hệ điều hành mới để cập nhật
thường xuyên như các tập tin dữ liệu chống virus hoặc các bản vá lỗi
của Microsoft với sự can thiệp của người dùng tối thiểu. Nâng cấp và
cập nhật cũng có thể làm việc trong nền mà khơng có người sử dụng
biết rằng các chương trình đang được cập nhật hoặc nâng cấp.
• Khả năng mở rộng: trong một mơ hình client-server, một quản trị viên
có thể dễ dàng kết hợp các máy tính vào mạng và cài đặt tất cả các
ứng dụng cần thiết. Tất cả mọi thứ cần thiết có thể được đẩy dễ dàng
từ server đến các client.
• Nó có thể làm tăng khả năng của máy nhỏ, giúp các máy nhỏ thực
hiện được những công việc mà trước đây chỉ thực hiện được trên các
máy lớn, từ đó dẫn tới giảm chi phí thiết bị
b. Nhược điểm
22


• Chi phí cho server lớn: thơng thường, các máy chủ trung tâm phải đủ
mạnh để duy trì và chia sẻ tài nguyên với các máy tính khác trên
mạng. Điều này địi hỏi một chi phí đáng kể.
• Sự phụ thuộc: mơ hình mạng client-server dựa trên chức năng và
server. Nếu server gặp vấn đề, tồn bộ mạng khơng thể hoạt động.
• Thắt cổ chai: server phải xử lý phần lớn cơng việc điều này có thể gây
ra tắc nghẽn mạng trên mạng và làm chậm thời gian trả lời cho các
client
• Bảo trì: mơ hình Client Server thường địi hỏi một đội ngũ nhân viên
với ít nhất một quản trị viên mạng lưới duy nhất để quản lý và duy trì
các thiết bị và mạng. Trong mơ hình khác, chẳng hạn như peer-topeer, không yêu cầu một quản trị để duy trì máy móc, cơng việc này
được phân phối cho các peer.
• An tồn: bởi vì tất cả các thông tin quan trọng được lưu trữ trên server, điều
này tạo ra một mối quan tâm an ninh. Tập trung các thông tin và dữ liệu này

phải được bảo vệ từ tin tặc nguy hiểm, sự cố, các mối đe dọa tiềm năng.
2.2.
Mơ hình peer-to-peer
Mạng ngang hàng là kiến trúc mạng phi tập trung và phân tán trong đó các node
trong mạng (được gọi là peer) vừa đóng vai trị là node cung cấp lẫn sử dụng tài
nguyên, khác với mơ hình tập trung của client-server trong đó các node client yêu cầu
truy cập tài nguyên cung cấp bởi server trung tâm.
Trong một hệ thống mạng ngang hàng, các tác vụ (như là: tìm kiếm file, streaming
video/ audio) được chia sẻ giữa các node được kết nối với nhau, mỗi peer dành một
phần tài nguyên của mình (như năng lực xử lý, khả năng lưu trữ, băng thông mạng) cho
các thành viên khác trong mạng mà không cần tới server trung tâm.

23


2.2.1.

Mạng P2P

Mạng P2P được thiết kế để đảm bảo vai trò của một node vừa là client, vừa là
server đối với 1 node khác trong mạng. Sắp xếp mạng trong P2P khác với client-server
ở chỗ: mơ hình client-server một giao tiếp thông thường đến và đi từ một server trung
tâm. Ví dụ điển hình của ứng dụng truyền file theo mơ hình client-server là sử dụng
giao thức FTP (File Transfer Protocol), trong đó ứng dụng client và server phân biệt
nhau: client khởi tạo việc truyền file, server đáp ứng các u cầu liên quan của client.
2.2.2.

Định tuyến và dị tìm tài nguyên

Một cách tổng quát, mạng P2P chính là một dạng mạng phủ trên nền các cấu trúc

liên kết mạng vật lý, trong đó các node trong mạng phủ tạo thành tập con của các node
trong mạng vật lý. Dữ liệu vẫn được trao đổi thông qua mạng TCP/IP nằm dưới nhưng
ở tầng ứng dụng, các peer có thể giao tiếp trực tiếp với peer khác thông qua các liên kết
logic mà mạng phủ cung cấp (mỗi liên kết tương ứng với một đường đi trong mạng vật
lý) .
Mạng phủ sử dụng để đánh chỉ mục và dị tìm các peer, và cũng làm cho hệ thống
P2P độc lập với cấu trúc liên kết mạng vật lý. Dựa vào cách thức liên kết các node và
cách đánh chỉ mục cũng như bố trí tài nguyên, mạng P2P được chia ra: mạng có cấu
trúc và phi cấu trúc (hoặc phiên bản lai giữa 2 loại này).
2.2.3.

Phân loại mạng P2P

a. Mạng phi cấu trúc

24


×