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, quá trình bảo trì (như sửa chữa, thay thế server) có thể diễn ra hoàn toà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 • Tuân 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 toá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. Ngoà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 toà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 yê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 khoá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 Client- Server, mô hình P2P, thuật toá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. 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.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 yê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 nguyên 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).2: Trao đổi dữ liệu giữa Client và Server trong chế độ bị phong tỏa Quá 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). 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.