So sánh P2P và client-server.
So sánh P2P và client-server.
Chú thích: - Bài viết này được Blockchain VN dịch và biên tập lại từ một bài đăng trên Medium - Các thuật ngữ được giải thích ở cuối bài viết. - Image source: http://www.geocities.ws/.../5peertopeervs.clientserver.html
Bắt đầu:
P2P đã có lịch sử phát triển hơn 30 năm, nhưng chưa bao giờ nó lại có được sự công nhận và hưởng ứng từ cộng đồng đến thế, nhất là trong kỷ nguyên số của blockchain. Ngày nay P2P được tôn vinh trong việc luân chuyển tài sản số bởi tính an toàn, phân tán và đáng tin cậy của nó. P2P, blockchain và các ứng dụng phi tập trung (Dapps) chắc chắn sẽ còn phát triển hơn nữa trong tương lai.
Phía bên kia chiến tuyến, client-server tồn tại như một mô hình bị thất sủng trong luân chuyển tài sản số không bởi gì khác ngoài tính chất tập trung, dễ thao túng và kém an toàn. Điểm tập trung (server) trong mô hình này vừa là điểm mạnh, cũng vừa là điểm yếu vô cùng lớn.
Mô hình client-server sẽ đi về đâu trong sự trỗi dậy của P2P, blockchain và dapps? Câu trả lời là client-server vẫn sẽ giữ một vai trò quan trọng trong tương lai của blockchain vì những lý do sau: - (1) Trong nhiều tình huống, client-server hiệu quả hơn P2P. - (2) "Thin client" là xu hướng tất yếu. - (3) Blockchain public gateway đang và sẽ có vai trò quan trọng hơn nữa. - (4) Mạng lưới Ethereum có thể "turing complete" nhưng nó không phải là nơi lưu trữ hoàn hảo.

TỪ P2P TỚI CLIENT-SERVER (LỊCH SỬ RA ĐỜI CỦA P2P).

Trong mô hình P2P, mỗi máy tính thành viên vừa là client (Node), vừa là server (Information Storage). Hãng IBM tạo ra phiên bản đầu tiên của P2P với các máy tính được kết nối với nhau theo mô hình token-ring. Theo cách này, các máy tính có thể giao tiếp cũng như chia sẻ tài nguyên với nhau. Token-ring sau đó được nâng cấp bởi NetBIOS và giao thức SMB (Server Message Block) ra đời. SMB cho phép các máy tính kết nối trực tiếp với nhau thông qua Ethernet thay vì phải đi "vòng" qua Token-ring. Sự nâng cấp này là bước chân đầu tiên tiến tới mô hình client-server.
Mô hình client-server dạng LAN (Local Area Network) đầu tiên được thiết lập để giúp các hệ thống tách biệt (OS2, Novell Netware, Microsoft windows) giao tiếp với nhau thông qua giao thức SMB. SMB thông qua IP (và SMB trên bộ giao thức TCP/IP) - những bản nâng cấp sau này của SMB - cùng CIFS (Common Internet File System) từ đó trở thành tiêu chuẩn kết nối chung toàn cầu.
Xét theo ngữ cảnh của LAN, thì client-server là một sự cải tiến từ những điểm yếu của P2P theo nhiều góc độ như sau. - Xác thực và phân quyền có thể được tập trung trên máy chủ (server), điều này giúp tăng tốc giao thức. - Máy chủ thường nhanh và mạnh, điều này cho phép nhiều máy client tham gia và mở rộng mạng nhanh chóng. - Sự tập trung trên máy chủ cung cấp khả năng giám sát, truy vết hay chỉnh sửa với tốc độ cao. - Mô hình client-server cho phép thiết lập nhiều chức năng đa dạng cho hệ thống hơn cũng như xử lý nhiều giao dịch một cách đồng thời.

BLOCKCHAIN VÀ XU THẾ THIN-CLIENT (MÁY TÍNH CÁ NHÂN VỚI CẤU HÌNH TỐI GIẢN).

Cũng như LAN, xu hướng trong Blockchain rồi sẽ thuận theo sự phát triển của các thin-client. Thay vì mỗi nốt (node) mạng vừa nắm vai trò của cả client lẫn server, thin-client với cấu hình tối thiểu vừa đủ để giao tiếp với blockchain sẽ là lựa chọn phổ biến hơn. Ví dụ, phần mềm ví Bitcoin thế hệ đầu tiên phải tải về toàn bộ lịch sử giao dịch (sổ cái Bitcoin - hay Bitcoin blockchain) nhưng những phần mềm ví hiện nay không còn cần tới điều đó nữa. Thay thế là các dịch vụ ví với dung lượng thấp và dễ sử dụng. Tuy các thin-client này không thể tham gia xác thực tính đúng sai của một giao dịch được vì nó không hề chứa bản hoàn chỉnh của cuốn sổ cái nhưng chúng hoàn toàn có thể gửi yêu cầu xử lí các giao dịch phát sinh ngay trong phần mềm ví. Dung lượng cuốn sổ cái trên Bitcoin ở thời điểm của bài viết có dung lượng vào khoảng 200GB. Đây là một dung lượng quá lớn cho phần lớn người dùng và do đó, xu thế cho các thin-client là điều tất yếu.

BLOCKCHAIN VÀ XU THẾ PUBLIC GATEWAYS.

Tương tự như thin-client, public gateways cho phép người dùng tham gia mạng P2P blockchain mà không cần tới các full node cấu hình cao. Public gateways là sự trở lại của mô hình client-server trong các hệ thống blockchain. Thật vậy, public gateways cung cấp các công cụ cần thiết để người cùng có thể đọc/ghi lên blockchain mà không cần tới việc vận hành một full node. Public gateways tạo điều kiện cho các zero-client (thiết bị với cấu hình còn tối giản hơn cả thin-client) tham gia mạng blockchain. Những zero-client này sãn sàng đặt niềm tin vào các public gateways để đổi lấy sự tiện lợi và gọn nhẹ khi phải kết nối vào mạng Blockchain (mạng JSON-RCP, REST hay bất cứ Websocket nào). Public gateways hoạt động như các cổng kết nối tới các "nông trại full node" - một cộng đồng người dùng chạy full node với khả năng mở rộng để đáp ứng nhu cầu cho hàng ngàn zero-client. Các full node này được quản lí hoàn toàn bởi nhà cung cấp public gateway. Hơn thế nữa, để cung cấp thêm hàm lập trình ứng dụng cho các giao thức bảo mật lớp (TLS), public gateways thường được nâng cấp phần mềm để có thêm các chức năng định tuyến cao cấp, bộ nhớ đệm và điều chỉnh thông lượng. Một số public gateways thậm chí còn hỗ trợ thêm khả năng tra cứu nhanh dữ liệu tới các hệ thống lưu trữ bên ngoài blockchain. Với public gateways, truy xuất tới mạng blockchain bằng việc cài đặt fullnode không còn cần thiết nữa.
Đơn giản hóa thao tác cho người dùng blockchain là một trong những động lực khiến public gateways được sử dụng, và cái giá ở đây là niềm tin người dùng đặt tại các public gateways. Tuy nhiên, sự đánh đổi này nếu được xem xét một cách khách quan, cũng giống như niềm tin người dùng đặt tại phần mềm fullnode. Đa số người dùng phổ thông không thể và không quan tâm tới việc bên trong phần mềm fullnode mà họ cài đặt có thể chứa những rủi ro tiềm tàng nào. Đơn giản bởi vì không phải ai cũng có kỹ năng để đọc hiểu và đánh giá phần mềm. Do đó, ngày càng có nhiều người chọn public gateways để giảm đi sự phiền toái trong việc sử dụng blockchain và họ trở thành các zero-client.
Các ví dụ về blockchain public gateways rất nhiều, trong đó phải kể đến Infura và Cloudfare. Ví Metamask sử dụng public gateway mà Infura cung cấp (cách tiếp cận theo hướng zero-client) để có thể phục vụ hàng triệu người dùng. Cả Infura và Cloudfare đều cung cấp public gateways cho cả Ethereum và IPFS (InterPlanetary File System) - một hệ thống lưu trữ cho các nền tảng điện toán phi tập trung. Cả 2 gateways này đều hỗ trợ các tính năng như TLS 2 chiều, TLS dùng chung, nhằm đảm bảo sự an toàn cho bất cứ người dùng nào khi kết nối tới Blockchain. Cả 2 gateways đều hỗ trợ truy xuất bằng bộ nhớ đệm (điều này giúp tăng tốc độ truy xuất). Tới đây, ta có thể thấy rằng public gateways đang mang mô hình client-server trở lại với thế giới số mà P2P đã xây dựng đồng thời lấp đầy khoảng cách giữa internet truyền thống và thế hệ internet mới trên mô hình P2P.

ETHEREUM CÓ THỂ "TURING COMPLETE", NHƯNG ETHREUM JSON-RPC KHÔNG CUNG CẤP KHẢ NĂNG TRUY XUẤT DỮ LIỆU BẰNG INDEX, LỌC HAY TÌM KIẾM NHƯ CÁC CƠ SỞ DỮ LIỆU KHÁC.

Một trong những tiềm năng của Ethereum là nó cho phép lập trình hoàn chỉnh bất cứ chương trình phức tạp nào (turing completeness) cũng như triển khai các hợp đồng thông minh lên Blockchain. Thế nhưng tiềm năng này lại bị giới hạn bởi tốc độ truy xuất lên Ethereum blockchain. Các lập trình viên do đó cũng gặp nhiều khó khăn trong việc hiện thực hóa các ý tưởng của họ chỉ với công cụ lập trình hợp đồng thông minh mà Ethereum cung cấp. Các ứng dụng phức tạp yêu cầu hệ thống phải có khả năng truy xuất dữ liệu nhanh, lọc cũng như phân trang (pagination - không biết dịch sao khác nữa : )) ). Đây là những tính năng mà các hàm lập trình ứng dụng JSON-RPC trên Ethereum không cho phép. Không còn lựa chọn khác, các nhà phát triển phần mềm phải kết hợp hợp đồng thông minh trên Blockchain với các dịch vụ lưu trữ bên ngoài - hệ thống lưu trữ song song nơi có tốc độ truy xuất dữ liệu cao - để có thể tạo ra những ứng dụng thông minh và gần gũi với cuộc sống hơn là những ứng dụng phân tán theo mô hình P2P thuần túy.
Một giải pháp khác cho những ứng dụng phức tạp trên Ethereum là tiến hành triển khai dịch vụ web lên các fullnode (thiết bị này hỗ trợ bộ nhớ đệm và truy xuất tốc độ cao). Theo cách này, lập trình viên có thể dựa trên thông tin yêu cầu tại dịch vụ web ở trên và từ dữ liệu của Blockchain tạo ra hệ thống dữ liệu truy xuất nhanh lên các bộ nhớ đệm. Vệc truy xất từ các ứng dụng lên Blockchain nhờ đó cũng trở nên dễ dàng và nhanh chóng hơn. Một nâng cấp từ những dịch vụ web trên là việc đưa vào sử dụng các private gateway cho việc bầu chọn các dịch vụ web. Thay vì gọi tới những dịch vụ web được dàn trải trên hệ thống node trong Blockchain, các dịch vụ web đa dạng hơn có thể được gọi thông qua các API gateway (cổng kết nối có hỗ trợ làm lập trình ứng dụng) để phục vụ cho các ứng dụng trên thiết bị đầu cuối cho người dùng phổ thông.
Một lần nữa, ta có thể thấy rằng mặc kệ những nỗ lực để bảo toàn mô hình P2P cho các ứng dụng trên blockchain, sự tận dụng private gateway vô hình chung lại cuốn chúng ta theo xu hướng ngược lại - xu hướng client-server. Public gateways hay private gateways đều là những giải pháp mang tính client-server mà dù chúng ta có cố gắng để rời bỏ đến chừng nào đi chăng nữa, vẫn sẽ hiện hữu như một tham số nhằm cân bằng cho các hệ thống blockchain. Có vẻ như mô hình client-server sẽ không những không biến mất, mà còn giữ một vai trò rất quan trọng trong tương lai của blockchain.
Tóm tắt: Trong một vài khía cạnh, mô hình client-server đưa ra những cải thiện ưu việt so với mô hình mạng P2P. Nhưng, xu hướng của thin-client, zero-client, public gateways, private gateways trong không gian clockchain cho thấy client-server sẽ luôn tồn tại như một giải pháp tối ưu cho mô hình P2P. Hơn nữa, để phát triển nên các ứng dụng phức tạp trên Ethereum (và cả những blockchain khác), con người ta dường như sẽ lại quay về với mô hình mạng client-server. Như vậy, thay vì bài trừ client-server, tại sao chúng ta không chủ động tận dụng nó?
Thuật ngữ: - P2P: Peer to Peer - một giao thức/mô hình luân chuyển thông tin/tài sản không có điểm tập trung. - Client-server: Một giao thức/mô hình luân chuyển thông tin/tài sản có điểm tập trung (server). - Blockchain: Cơ sở dữ liệu dưới dạng nhiều khối thông tin được kết nối tuần tự với nhau. - Dapp: Decentralized application - ứng dụng phi tập trung trên hệ thống Blockchain. - Turing complete: Trong một hệ thống, tính chất này ảnh hưởng tới độ phức tạp và khả năng hoàn thiện của ứng dụng trên đó. - Thin-client: Thiết bị với cấu hình chỉ "đủ dùng". - Zero-client: Zero-client ám chỉ thiết bị đầu cuối với cấu hình còn khiêm tốn hơn cả thin-client. - Ethereum: Một mạng lưới Blockchain. - JSON-RPC: Đây là ngôn ngữ mà các node mạng Ethereum sử dụng để giao tiếp với nhau. - Node: Máy tính tham gia một mạng lưới kết nối. - Full node: Thiết bị máy tính có thể làm cả server lẫn client. - Public gateway: "Một cánh cổng dẫn tới một hệ thống máy tính". - IBM: Hãng sản xuất máy tính.
Tác giả: Blockchain VN