Thấy được nhu cầu trên, bọn em quyết định chọn đề tài “ỨNG DỤNG NHẮN TIN, CALL VIDEO PHÂN TÁN dApp.” Dựa trên công nghệ blockchain và smart contract, dApp cho phép truyền tải tin nhắn và
Giải pháp
Để có thể hoàn thành được đề tài thì cần phải nghiên cứu những nội dung như sau:
• Nghiên cứu, tìm hiểu và đánh giá các nghiên cứu liên quan đến ứng dụng phân tán Xem xét các khía cạnh về kiến trúc, giao thức, công nghệ và ứng dụng của các hệ thống phân tán đã được nghiên cứu trước đây
• Xác định rõ ràng yêu cầu và mục tiêu của đề tài Xây dựng một kiến trúc hệ thống phân tán dựa trên yêu cầu và mục tiêu đã xác định
• Thực hiện xây dựng và triển khai hệ thống phân tán theo kiến trúc đã thiết kế.
Mục tiêu đề tài
Khám phá và tìm hiểu về ứng dụng phân tán của các ứng dụng nhắn tin, call video phân tán (dApp) trong lĩnh vực truyền thông Nghiên cứu sẽ tập trung vào khía cạnh công nghệ, xã hội và giá trị đạo đức liên quan đến việc triển khai và sử dụng các hệ thống này
● Thực hiện được các chức năng cơ bản của một website nhắn tin, call video.
Phạm vi đề tài
Đồ án này tập trung vào phân tích công nghệ được sử dụng vào đồ án
• Đánh giá sơ lược những công nghệ ban sơ được sử dụng trong DCMVCA, như là blockchain, peer-to-peer networking, và các giao thức mã hóa
• Đánh giá, nhận xét về khả năng tăng tiến (scalability), quá trình thể hiện (performance) và những khía cạnh các có thể dựa vào của các hệ thống phi tập trung được so sánh với những bản đối chiếu tập trung của chúng.
Về việc xây dựng ứng dụng nhắn tin, call video phân tán(dApp)
Công cụ sử dụng : Visual Studio Code
Công cụ dùng để phân tích, thiết kế: draw.io, Figma
Công cụ quản lý dự án: Github
Công cụ soạn thảo: Excel, Word
GIỚI THIỆU VỀ ỨNG DỤNG PHÂN TÁN
Ứng dụng phi tập trung – Decentrailized application (dApp)
Ứng dụng phi tập trung (DApp, dApp, Dapp hoặc dapp) là một ứng dụng có thể hoạt động tự chủ, thường thông qua việc sử dụng các hợp đồng thông minh, chạy trên máy tính phi tập trung, blockchain hoặc hệ thống sổ cái phân tán khác Giống như các ứng dụng truyền thống, DApps cung cấp một số chức năng hoặc tiện ích cho người dùng Tuy nhiên, không giống như các ứng dụng truyền thống, DApp hoạt động mà không có sự can thiệp của con người và không thuộc sở hữu của bất kỳ thực thể nào, thay vào đó DApp phân phối mã thông báo đại diện cho quyền sở hữu Các mã thông báo này được phân phối theo một thuật toán được lập trình cho người dùng hệ thống, làm loãng quyền sở hữu và kiểm soát DApp Không có bất kỳ một thực thể nào kiểm soát hệ thống, ứng dụng do đó được phân cấp
Các ứng dụng phi tập trung (DApps) ngày càng trở nên phổ biến và được xây dựng trên các công nghệ sổ cái phân tán (DLT) Ngoài các công nghệ blockchain như Ethereum và Cardano, có nhiều công nghệ khác cũng được sử dụng để xây dựng DApps đa dạng và tiên tiến Các công nghệ này đa dạng về mô hình hoạt động, cơ chế chứng thực, và ứng dụng mục tiêu như: Gun.js, IPFS (InterPlanetary File System), Hyperledger Fabric, Holochain, Stellar, …
Các công nghệ sổ cái phân tán này cung cấp khả năng lưu trữ và chia sẻ dữ liệu một cách phân tán, tạo ra tính bảo mật và linh hoạt cho ứng dụng Chúng cho phép người dùng tương tác và chia sẻ thông tin mà không cần phải dựa vào một trung tâm duy nhất Điều này giúp tăng tính minh bạch, độ tin cậy và khả năng chống cenzorship trong các ứng dụng
Việc lựa chọn công nghệ sổ cái phân tán phù hợp phụ thuộc vào yêu cầu cụ thể của DApp và mục tiêu của người phát triển Mỗi công nghệ mang lại ưu điểm và tính năng độc đáo, đáp ứng các vấn đề khác nhau trong việc xây dựng và triển khai ứng dụng phi tập trung Định nghĩa
Có một loạt các tiêu chí phải được đáp ứng để một ứng dụng được coi là DApp Các định nghĩa truyền thống về một ứng dụng phi tập trung yêu cầu DApp phải là nguồn mở Nghĩa là, ứng dụng hoạt động tự chủ mà không cần một thực thể tập trung kiểm soát phần lớn các mã thông báo liên quan của ứng dụng DApps cũng có một blockchain công khai, phi tập trung được ứng dụng sử dụng để lưu giữ hồ sơ mật mã dữ liệu, bao gồm các giao dịch lịch sử
So sánh ứng dụng tập trung và ứng dụng phi tập trung:
Hình 1 So sánh ứng dụng tập trung và phi tập trung
Bảng 1 Bảng so sánh ứng dụng tập trung và phi tập trung Ứng dụng tập trung (App) Ứng dụng phi tập trung (dApp) Quản lý Ứng dụng được quản lý bởi một tổ chức trung gian, nhà cung cấp hoặc công ty Ứng dụng được triển khai trên một mạng phân tán và không có một tổ chức trung gian chịu trách nhiệm quản lý
Người dùng cần tin tưởng rằng dữ liệu cá nhân của họ được
Dữ liệu cá nhân được mã hóa và lưu trữ trên blockchain, đảm bảo tính bảo mật và không lạm dụng riêng tư và an toàn Độ tin cậy Ứng dụng phụ thuộc vào một máy chủ trung gian hoặc hạ tầng mạng để hoạt động Nếu máy chủ gặp sự cố, ứng dụng có thể bị gián đoạn Ứng dụng hoạt động trên nhiều nút mạng phân tán, loại bỏ sự phụ thuộc vào một điểm duy nhất Nếu một nút gặp sự cố, các nút khác vẫn tiếp tục hoạt động
Dữ liệu và hoạt động của người dùng có thể được theo dõi và sử dụng cho mục đích thương mại hoặc tiếp thị
Dữ liệu và hoạt động của người dùng được bảo mật và không thể truy cập một cách trái phép Người dùng giữ quyền kiểm soát dữ liệu của mình Phí giao dịch
Có thể có các phí giao dịch và phụ phí từ phía tổ chức trung gian hoặc công ty Ứng dụng dApp có thể sử dụng các giao thức hợp đồng thông minh để giảm thiểu hoặc loại bỏ các phí giao dịch trung gian
Mở rộng Quá trình mở rộng và phát triển của ứng dụng thường phụ thuộc vào sự quyết định và nỗ lực của tổ chức phát triển
Do tính phân tán của mạng, các ứng dụng dApp có thể phát triển và mở rộng một cách tự nhiên thông qua đóng góp của cộng đồng người dùng và nhà phát triển.
Công nghệ sổ cái phân tán
Công nghệ sổ cái phân tán (Distributed Ledger Technology - DLT) là một công nghệ được sử dụng để lưu trữ và chia sẻ dữ liệu một cách phân tán trên một mạng lưới ngang hàng (peer-to-peer network) Công nghệ này đóng vai trò quan trọng trong việc xây dựng ứng dụng phân tán (DApps) và có nhiều ứng dụng tiềm năng
Một số công nghệ sổ cái phân tán:
Một trong những công nghệ sổ cái phân tán nổi tiếng nhất và phổ biến nhất là blockchain Blockchain là một chuỗi các khối (blocks) chứa thông tin giao dịch và được xây dựng bằng cách sử dụng các thuật toán mã hóa mạnh mẽ Mỗi khối trong blockchain chứa thông tin về các giao dịch đã xảy ra và được liên kết với khối trước đó thông qua một hàm băm (hash function) đặc biệt Điều này tạo ra tính toàn vẹn dữ liệu và khả năng xác nhận giao dịch một cách đáng tin cậy
Directed Acyclic Graph (DAG): DAG là một cấu trúc dữ liệu phi chuỗi, trong đó các giao dịch được đại diện bởi các đỉnh và các liên kết giữa các đỉnh đại diện cho các phụ thuộc giữa các giao dịch DAG được sử dụng trong nhiều dự án phân tán như IOTA và Nano để cải thiện tốc độ giao dịch và khả năng mở rộng
Hashgraph: Hashgraph là một công nghệ sổ cái phân tán dựa trên thuật toán Gossip và Virtual Voting Nó sử dụng một đồ thị có hướng để lưu trữ và truyền tải thông tin giao dịch Hashgraph hứa hẹn cung cấp tốc độ giao dịch cực kỳ nhanh và khả năng mở rộng cao hơn so với blockchain truyền thống
Tangle: Tangle là một mạng lưới phân tán dựa trên DAG được sử dụng trong IOTA Thay vì sử dụng khối như blockchain, Tangle cho phép các giao dịch được xác nhận thông qua việc xử lý và xác nhận các giao dịch trước đó Tangle loại bỏ sự cần thiết của các nút khai thác (miners) và không có phí giao dịch, tạo ra một hệ thống giao dịch nhanh chóng và chi phí thấp
Holochain: Holochain là một nền tảng phân tán không sử dụng blockchain Thay vì lưu trữ toàn bộ lịch sử giao dịch trên mỗi nút, Holochain chỉ lưu trữ dữ liệu liên quan đến các ứng dụng cụ thể Điều này giúp giảm thiểu tải trọng và tăng hiệu suất của mạng Holochain được thiết kế để hỗ trợ việc xây dựng các ứng dụng phân tán có tính linh hoạt và tùy chỉnh cao
Corda: Corda là một nền tảng blockchain dành riêng cho các ứng dụng doanh nghiệp Nó tập trung vào việc cung cấp tính bảo mật và quyền riêng tư cho các giao dịch và hợp đồng thông minh Corda cho phép các tổ chức tạo và quản lý các mạng dữ liệu phân tán riêng tư giữa các bên tham gia.
Đặc điểm của ứng dụng phân tán
Ứng dụng phân tán có một số đặc điểm quan trọng, bao gồm:
− Phi trung gian (Decentralization): Một trong những đặc điểm quan trọng nhất của ứng dụng phân tán là sự loại bỏ hoặc giảm thiểu sự phụ thuộc vào các bên trung gian Thay vì dựa vào một tổ chức trung tâm duy nhất để kiểm soát và quản lý dữ liệu và giao dịch, ứng dụng phân tán cho phép các bên tham gia trực tiếp tương tác và chia sẻ thông tin một cách trực tiếp Điều này tạo ra tính minh bạch, độ tin cậy và độc lập
− Tính toàn vẹn dữ liệu (Data Integrity): Ứng dụng phân tán thường sử dụng các thuật toán mã hóa mạnh mẽ để đảm bảo tính toàn vẹn dữ liệu Dữ liệu được lưu trữ và xác nhận trên một mạng lưới ngang hàng, nơi mỗi thay đổi hoặc giao dịch mới được ghi vào một bản sao phân tán của sổ cái Điều này đảm bảo rằng dữ liệu không thể bị thay đổi một cách trái phép và cung cấp khả năng xác nhận giao dịch một cách đáng tin cậy
− Tính minh bạch (Transparency): Trong ứng dụng phân tán, thông tin về giao dịch và hoạt động được chia sẻ công khai và có thể được truy cập bởi tất cả các bên tham gia Điều này tạo ra tính minh bạch và khả năng kiểm tra lại các hoạt động Mọi người có thể xem và xác nhận thông tin một cách công khai, giúp ngăn chặn gian lận và lạm dụng
− Khả năng mở rộng (Scalability): Ứng dụng phân tán có khả năng mở rộng, cho phép xử lý và lưu trữ lượng dữ liệu lớn và xử lý số lượng giao dịch cao Môi trường phân tán cho phép nhiều nút hoạt động song song và chia sẻ công việc, giúp tăng hiệu suất và khả năng mở rộng của hệ thống
− An ninh (Security): Ứng dụng phân tán thường sử dụng mã hóa và cơ chế bảo mật tiên tiến để đảm bảo an toàn cho dữ liệu và giao dịch Mỗi giao dịch được xác nhận và chứng minh bằng các phương thức mật mã, đảm bảo tính bảo mật và độ tin cậy
− Tiết kiệm chi phí (Cost Efficiency): Ứng dụng phân tán có tiềm năng giảm thiểu hoặc loại bỏ sự cần thiết của các bên trung gian và thông qua đó giảm chi phí liên quan Việc loại bỏ các bên trung gian giúp tiết kiệm thời gian, công sức và phí giao dịch, đồng thời tăng tính hiệu quả và sự minh bạch trong các quy trình
Tóm lại, ứng dụng phân tán có những đặc điểm quan trọng như sự phi trung gian, tính toàn vẹn dữ liệu, tính minh bạch, khả năng mở rộng, an ninh và tiết kiệm chi phí Những đặc điểm này tạo ra một môi trường dữ liệu và giao dịch trực tiếp, tin cậy và hiệu quả, đồng thời giảm thiểu sự phụ thuộc vào các bên trung gian và tăng tính bảo mật cho hệ thống.
Lợi ích và ứng dụng của ứng dụng phân tán
Ứng dụng phân tán mang lại nhiều lợi ích và được áp dụng trong nhiều lĩnh vực khác nhau Dưới đây là một số lợi ích và ứng dụng chính của ứng dụng phân tán:
− Tăng tính minh bạch và tin cậy: Ứng dụng phân tán cho phép tất cả các bên tham gia truy cập và xem thông tin giao dịch một cách công khai Điều này tạo ra tính minh bạch cao và khả năng kiểm tra lại các hoạt động, giúp ngăn chặn gian lận và lạm dụng Lưu trữ dữ liệu trên một mạng lưới phân tán cũng đảm bảo tính toàn vẹn và độ tin cậy của thông tin
− Loại bỏ sự phụ thuộc vào bên trung gian: Ứng dụng phân tán giảm thiểu hoặc loại bỏ sự cần thiết của các bên trung gian trong các quy trình giao dịch Điều này giúp tiết kiệm thời gian, công sức và chi phí liên quan Các bên tham gia có thể tương tác trực tiếp và chia sẻ thông tin một cách an toàn mà không cần trung gian
− Tăng khả năng mở rộng và hiệu suất: Ứng dụng phân tán cho phép mở rộng hệ thống để xử lý lượng dữ liệu lớn và số lượng giao dịch cao Môi trường phân tán cho phép nhiều nút hoạt động song song và chia sẻ công việc, tăng hiệu suất và khả năng mở rộng của hệ thống
− Bảo mật và an toàn: Ứng dụng phân tán sử dụng các thuật toán mã hóa mạnh mẽ và cơ chế bảo mật để bảo vệ dữ liệu và giao dịch Mỗi giao dịch được xác nhận và chứng minh bằng các phương thức mật mã, đảm bảo tính bảo mật và độ tin cậy
− Ứng dụng trong lĩnh vực tài chính: Công nghệ sổ cái phân tán đã tạo ra sự đột phá trong lĩnh vực tài chính Các ứng dụng như tiền điện tử, thanh toán phân tán và giao dịch chứng khoán phân tán đang làm thay đổi cách thức giao dịch, giảm thiểu các bên trung gian và tăng tính bảo mật
− Ứng dụng trong lĩnh vực chuỗi cung ứng: Ứng dụng phân tán có thể cung cấp tính minh bạch và theo dõi trong chuỗi cung ứng Việc sử dụng công nghệ sổ cái phân tán cho phép ghi lại thông tin về nguồn gốc, vận chuyển và lưu trữ của sản phẩm, từ đó tăng cường sự minh bạch và độ tin cậy trong toàn bộ quá trình
− Ứng dụng trong lĩnh vực bầu cử và quản lý công: Công nghệ sổ cái phân tán có thể được sử dụng để tăng tính minh bạch và độ tin cậy trong quá trình bầu cử và quản lý công Việc sử dụng hệ thống phân tán giúp ghi lại thông tin về phiếu bầu, xác minh tính hợp lệ của phiếu và đảm bảo tính toàn vẹn của quá trình bầu cử
− Ứng dụng trong lĩnh vực Internet of Things (IoT): Với sự phát triển của IoT, việc quản lý và xử lý lượng lớn dữ liệu từ các thiết bị kết nối đã trở thành một thách thức Ứng dụng phân tán có thể giúp xử lý và quản lý dữ liệu từ các thiết bị IoT một cách hiệu quả và đáng tin cậy
− Ứng dụng trong lĩnh vực trí tuệ nhân tạo (AI): Trong việc huấn luyện và triển khai các mô hình trí tuệ nhân tạo phức tạp, việc sử dụng ứng dụng phân tán có thể giúp tăng tốc quá trình xử lý và chia sẻ dữ liệu giữa các nút tính toán
− Ứng dụng trong lĩnh vực trò chơi điện tử: Các ứng dụng phân tán cung cấp khả năng kết nối nhiều người chơi và chia sẻ dữ liệu trò chơi trực tuyến Điều này tạo ra trải nghiệm chơi game đa người chơi phong phú và tương tác.
Lợi thế và thách thức
Nhiều lợi thế của dApps tập trung vào khả năng bảo vệ quyền riêng tư của người dùng của chương trình Với các ứng dụng phi tập trung, người dùng không cần phải gửi thông tin cá nhân của mình để sử dụng chức năng mà ứng dụng cung cấp DApp sử dụng hợp đồng thông minh để hoàn thành giao dịch giữa hai bên ẩn danh mà không cần phải dựa vào cơ quan trung ương
Những người ủng hộ tự do ngôn luận chỉ ra rằng dApps có thể được phát triển như các nền tảng truyền thông xã hội thay thế Một nền tảng truyền thông xã hội phi tập trung có khả năng chống kiểm duyệt vì không có người tham gia nào trên blockchain có thể xóa hoặc chặn tin nhắn
Ethereum là một nền tảng linh hoạt để tạo ra các dApp mới, cung cấp cơ sở hạ tầng cần thiết cho các nhà phát triển để tập trung nỗ lực vào việc tìm kiếm các ứng dụng sáng tạo cho các ứng dụng kỹ thuật số Điều này có thể cho phép triển khai nhanh chóng các dApp trong một số ngành công nghiệp bao gồm ngân hàng và tài chính, chơi game, truyền thông xã hội và mua sắm trực tuyến
Việc sử dụng dApps vẫn còn trong giai đoạn đầu, và do đó nó là thử nghiệm và dễ bị một số vấn đề và ẩn số nhất định Có những câu hỏi về việc liệu các ứng dụng sẽ có thể mở rộng quy mô hiệu quả Có những lo ngại rằng một ứng dụng yêu cầu tính toán đáng kể sẽ làm quá tải mạng, gây tắc nghẽn mạng
Khả năng phát triển giao diện thân thiện với người dùng là một mối quan tâm khác Hầu hết người dùng ứng dụng được phát triển bởi các tổ chức tập trung truyền thống đều có kỳ vọng dễ sử dụng, khuyến khích họ sử dụng và tương tác với ứng dụng Để mọi người chuyển sang dApps sẽ yêu cầu các nhà phát triển tạo ra trải nghiệm người dùng cuối và mức hiệu suất cạnh tranh với các chương trình phổ biến và đã được thiết lập
Thách thức của việc sửa đổi mã là một hạn chế khác của dApps Sau khi được triển khai, dApp có thể cần những thay đổi liên tục để thực hiện các cải tiến hoặc sửa lỗi hoặc rủi ro bảo mật Theo Ethereum, các nhà phát triển có thể gặp khó khăn trong việc thực hiện các cập nhật cần thiết cho dApps vì dữ liệu và mã được xuất bản lên blockchain rất khó sửa đổi
Ứng dụng phi tập trung
Định nghĩa: Ứng dụng phi tập trung (Decentralized Application - DApp) là một loại ứng dụng máy tính được xây dựng và triển khai trên một mạng lưới ngang hàng (peer-to-peer network) phân tán thay vì dựa trên một máy chủ tập trung Điều này đồng nghĩa với việc dữ liệu và hoạt động của ứng dụng không được kiểm soát bởi một tổ chức duy nhất, mà thay vào đó được phân tán và lưu trữ trên nhiều nút trong mạng lưới
Mô hình Peer-to-Peer (P2P):
Peer-to-Peer (P2P) Các hệ thống phi tập trung đã trở nên phổ biến vào cuối những năm 1990 như một cách để mọi người chia sẻ âm nhạc và cuối cùng là tất cả các phương tiện truyền thông trên internet Bản chất phi tập trung của hệ thống cho phép tài liệu có bản quyền được chia sẻ qua internet giữa các cá nhân, khiến chủ sở hữu bản quyền chỉ có quyền kiện các cá nhân thay vì cơ quan trung ương Kiện mọi cá nhân đã chia sẻ tệp nhạc với giá $1 đã chứng tỏ không thể đứng vững.\
Các hệ thống loại này vẫn tồn tại, phổ biến nhất là BitTorrent Tuy nhiên, chuyển trọng tâm nhiều hơn theo hướng cơ sở dữ liệu, có Đạt và IPFS
Trong mạng ngang hàng (peer-to peer network), mỗi nút duy trì một tập hợp con của tất cả dữ liệu trong mạng cục bộ trên máy tính của nó Bạn cũng duy trì một danh sách các đồng nghiệp Khi bạn muốn dữ liệu bạn không có, bạn yêu cầu đồng nghiệp gửi dữ liệu đó cho bạn
Hệ thống ngoại tuyến đầu tiên Bạn có thể đọc hoặc ghi dữ liệu vào nút của riêng mình mà không cần kết nối Chia sẻ được thêm vào thông qua danh sách ngang hàng và cơ chế yêu cầu của mạng Các nút có thể biến mất và xuất hiện lại mà không có cảnh báo và hệ thống sẽ định tuyến lại cho bạn đến một nút khác có chứa dữ liệu bạn muốn
Hệ thống ngăn chặn các tác nhân độc hại chủ yếu bằng cách chỉ được nối thêm Khi dữ liệu nằm trong hệ thống, nó sẽ ở lại trong hệ thống cho đến khi nó bị loại bỏ khỏi tất cả các nút
Cơ sở dữ liệu đồ thị (Graph database - GDB) là cơ sở dữ liệu sử dụng cấu trúc đồ thị cho các truy vấn ngữ nghĩa với các nút, cạnh và thuộc tính để biểu diễn và lưu trữ dữ liệu Một khái niệm chính của hệ thống là đồ thị (hoặc cạnh hoặc mối quan hệ) Biểu đồ liên quan đến các mục dữ liệu trong cửa hàng với một tập hợp các nút và cạnh, các cạnh đại diện cho mối quan hệ giữa các nút Các mối quan hệ cho phép dữ liệu trong cửa hàng được liên kết trực tiếp với nhau và, trong nhiều trường hợp, được truy xuất bằng một thao tác Cơ sở dữ liệu đồ thị giữ mối quan hệ giữa dữ liệu làm ưu tiên Truy vấn các mối quan hệ nhanh chóng vì chúng được lưu trữ vĩnh viễn trong cơ sở dữ liệu Các mối quan hệ có thể được hình dung trực quan bằng cách sử dụng cơ sở dữ liệu đồ thị, làm cho chúng hữu ích cho dữ liệu được kết nối nhiều với nhau
Cơ sở dữ liệu đồ thị thường được gọi là NoSQL Cơ sở dữ liệu đồ thị tương tự như cơ sở dữ liệu mô hình mạng những năm 1970 ở chỗ cả hai đều đại diện cho đồ thị chung, nhưng cơ sở dữ liệu mô hình mạng hoạt động ở mức trừu tượng thấp hơn [3] và thiếu khả năng truyền qua dễ dàng trên một chuỗi các cạnh
Cơ chế lưu trữ cơ bản của cơ sở dữ liệu đồ thị có thể khác nhau Các mối quan hệ là một công dân hạng nhất trong cơ sở dữ liệu đồ thị và có thể được gắn nhãn, định hướng và đưa ra các thuộc tính Một số phụ thuộc vào một công cụ quan hệ và "lưu trữ" dữ liệu đồ thị trong một bảng (mặc dù bảng là một yếu tố logic, do đó cách tiếp cận này áp đặt một mức độ trừu tượng khác giữa cơ sở dữ liệu đồ thị, hệ thống quản lý cơ sở dữ liệu đồ thị và các thiết bị vật lý nơi dữ liệu thực sự được lưu trữ) Những người khác sử dụng kho lưu trữ khóa-giá trị hoặc cơ sở dữ liệu hướng tài liệu để lưu trữ, làm cho chúng vốn có cấu trúc NoSQL
Cơ sở dữ liệu đồ thị mô tả dữ liệu khi nó được xem về mặt khái niệm Điều này được thực hiện bằng cách chuyển dữ liệu vào các nút và các mối quan hệ của nó thành các cạnh
Cơ sở dữ liệu đồ thị là một cơ sở dữ liệu dựa trên lý thuyết đồ thị Nó bao gồm một tập hợp các đối tượng, có thể là một nút hoặc một cạnh:
• Nodes - nút: đại diện cho các thực thể hoặc phiên bản như người, doanh nghiệp, tài khoản hoặc bất kỳ mục nào khác cần theo dõi Chúng gần tương đương với bản ghi, quan hệ hoặc hàng trong cơ sở dữ liệu quan hệ hoặc tài liệu trong cơ sở dữ liệu lưu trữ tài liệu
• Edges – cạnh: còn được gọi là đồ thị hoặc mối quan hệ, là các đường kết nối các nút với các nút khác; đại diện cho mối quan hệ giữa họ Các mẫu có ý nghĩa xuất hiện khi kiểm tra các kết nối và kết nối của các nút, thuộc tính và cạnh Các cạnh có thể được định hướng hoặc không định hướng Trong một đồ thị không định hướng, một cạnh kết nối hai nút có một ý nghĩa duy nhất Trong một biểu đồ có hướng, các cạnh kết nối hai nút khác nhau có ý nghĩa khác nhau, tùy thuộc vào hướng của chúng Các cạnh là khái niệm chính trong cơ sở dữ liệu đồ thị, đại diện cho một sự trừu tượng không được thực hiện trực tiếp trong mô hình quan hệ hoặc mô hình lưu trữ tài liệu
• Properties – thuộc tính: là những thông tin liên quan đến các nút Ví dụ: nếu Wikipedia là một trong các nút, nó có thể được gắn với các thuộc tính như trang web, tài liệu tham khảo hoặc các từ bắt đầu bằng chữ w, tùy thuộc vào khía cạnh nào của Wikipedia là tiếng Đức đối với một cơ sở dữ liệu nhất định.
NextJS 20
Next.js là một framework phát triển ứng dụng web React, được xây dựng trên cơ sở của React.js Nó giúp đơn giản hóa quá trình phát triển ứng dụng React bằng cách cung cấp một cấu trúc dự án mặc định, hỗ trợ routing và nhiều tính năng khác giúp tăng cường hiệu suất và phát triển ứng dụng web
Dưới đây là một số đặc điểm quan trọng của Next.js:
• Server-Side Rendering (SSR): Next.js hỗ trợ SSR, cho phép bạn tạo ra trang web có thể được render trên server trước khi gửi đến trình duyệt Điều này giúp tăng tốc độ tải trang và cải thiện hiệu suất
• Static Site Generation (SSG): Next.js cung cấp khả năng tạo ra các trang tĩnh tại thời điểm build, giảm độ trễ khi người dùng truy cập trang web Điều này đặc biệt hữu ích cho các trang web với nội dung không thay đổi thường xuyên
• Hot Module Replacement (HMR): Next.js hỗ trợ HMR, giúp phát hiện và áp dụng các thay đổi trong mã nguồn của bạn mà không cần tải lại toàn bộ trang
• Routing tự động: Next.js sử dụng một hệ thống routing tự động dựa trên cấu trúc thư mục của bạn, giúp giảm bớt công việc cấu hình • API
Routes: Bạn có thể xây dựng các API routes bằng cách tạo thư mục pages/api Điều này giúp bạn dễ dàng xây dựng và triển khai các dịch vụ backend nhỏ mà không cần phải cấu hình nhiều
• Hỗ trợ CSS Modules và Styled-JSX: Next.js hỗ trợ CSS Modules và Styled-JSX để quản lý phong cách của bạn trong các thành phần React
• Plugin và Ecosystem: Có một cộng đồng lớn xung quanh Next.js, với nhiều plugin và thư viện mở rộng hỗ trợ việc phát triển ứng dụng • TypeScript: Next.js có sẵn hỗ trợ cho TypeScript, giúp kiểm soát loại và tăng tính nhất quán trong mã nguồn của bạn Đối với những người sử dụng React và muốn có một cấu trúc dự án tự động, hỗ trợ SSR và SSG, Next.js là một lựa chọn mạnh mẽ Nó giúp giảm đi nhiều công việc cấu hình, tối ưu hóa hiệu suất, và mang lại một trải nghiệm phát triển web mượt mà.
GunJS 21
GUN là một giao thức nhỏ, dễ dàng và nhanh chóng để đồng bộ hóa dữ liệu Vì GUN nhỏ, nó có thể được thêm vào ứng dụng của bạn để cải thiện một tính năng duy nhất Nhưng vì GUN rất dễ dàng, nó cũng có thể thay thế hàng trăm hoặc hàng nghìn dòng mã, cuộc gọi mạng, bản mẫu lưu trữ, định tuyến pub / sub, vô hiệu hóa bộ nhớ cache và hơn thế nữa Sức mạnh của GUN là nó trừu tượng hóa sự phức tạp này thành một API đơn giản thống nhất rất khác so với các hệ thống truyền thống, với mục đích giúp dễ dàng xây dựng các ứng dụng thú vị một cách nhanh chóng
• Offline first: Một hệ thống phi tập trung phải có khả năng hoạt động ngoại tuyến Bạn phải có khả năng tạo một phiên bản hoặc nút mới Hoặc, thông thường hơn, bạn phải có khả năng lấy một bản sao của một nút hiện có trong hệ thống Một khi bạn có một bản sao, bạn phải có khả năng đọc và viết vào bản sao của bạn Offline first giảm thiểu sự phụ thuộc của bạn vào mạng hoặc các nút khác Thuộc tính này rất quan trọng vì nó cho phép bạn rời khỏi hệ thống bất cứ lúc nào và bắt đầu "ngã ba" của riêng bạn hoặc hệ thống cạnh tranh Nếu không có ngoại tuyến trước, bạn phải chịu một cơ quan trung ương để đọc hoặc ghi Offline first "phân cấp" hệ thống Nếu không có offline first, một hệ thống phi tập trung được gọi là "hệ thống phân tán"
• Sharing: Offline first là cần thiết nhưng không đủ để phân cấp Một tệp trên máy tính của bạn là phi tập trung nhưng không phải là nhiều hệ thống Để trở thành một hệ thống, phiên bản hoặc nút của bạn cần giao tiếp với các nút khác, các tác nhân riêng lẻ trong hệ thống Làm thế nào để các nút truyền đạt các thay đổi? Làm thế nào để các nút đồng ý những thay đổi nào là hợp lệ? Có một loạt các mô hình chia sẻ khác nhau trong các hệ thống phi tập trung.
Firebase
Firebase là một nền tảng phát triển ứng dụng di động và web được cung cấp bởi Google Nó cung cấp một loạt các dịch vụ đám mây để phát triển ứng dụng di động, web và backend một cách dễ dàng và nhanh chóng Firebase cung cấp các tính năng như cơ sở dữ liệu thời gian thực, xác thực người dùng, lưu trữ tệp, phân tích, thông báo đẩy và nhiều hơn nữa
Dưới đây là một số thành phần và tính năng chính của Firebase:
• Realtime Database: Firebase Realtime Database là một cơ sở dữ liệu NoSQL thời gian thực Nó cho phép lưu trữ và đồng bộ dữ liệu trên nhiều thiết bị và máy chủ một cách tức thì Dữ liệu được lưu trữ dưới dạng cây JSON và các thay đổi trong dữ liệu sẽ được tự động đồng bộ đến tất cả các thiết bị kết nối
• Authentication: Firebase Authentication cung cấp các công cụ để quản lý xác thực người dùng Nó hỗ trợ nhiều phương thức đăng nhập như email/password, xác thực qua các nhà cung cấp bên thứ ba (Google, Facebook, Twitter, etc.), và xác thực với số điện thoại Firebase Authentication cung cấp tích hợp dễ dàng vào ứng dụng của bạn và giúp bảo vệ dữ liệu người dùng
• Cloud Firestore: Cloud Firestore là một cơ sở dữ liệu linh hoạt và mở rộng được cung cấp bởi Firebase Nó lưu trữ dữ liệu dưới dạng tài liệu (document) và bộ sưu tập (collection), cho phép truy vấn mạnh mẽ và đồng bộ dữ liệu trên các thiết bị và máy chủ
• Cloud Storage: Firebase Cloud Storage cung cấp một hệ thống lưu trữ tệp đám mây linh hoạt Bạn có thể lưu trữ và truy xuất các tệp như hình ảnh, video, tệp tin tài liệu và tệp tin khác một cách dễ dàng Nó tích hợp tốt với các dịch vụ khác của Firebase và cung cấp khả năng chia sẻ và quản lý tệp tin một cách bảo mật
• Cloud Functions: Firebase Cloud Functions cho phép bạn viết và triển khai mã logic backend mà không cần phải quản lý máy chủ riêng Bạn có thể tự động thực thi mã khi có sự kiện xảy ra trong ứng dụng của bạn, chẳng hạn như khi có thay đổi trong cơ sở dữ liệu hoặc khi có yêu cầu HTTP
• Analytics: Firebase Analytics cung cấp các công cụ phân tích để theo dõi và hiểu hành vi người dùng trong ứng dụng của bạn Bạn có thể theo dõi lượt tương tác, sự tương tác với mục tiêu, thông tin về người dùng và nhiều thông tin phân tích khác để cải thiện trải nghiệm người dùng và tối ưu hóa ứng dụng.
WebRTC
WebRTC (Web Real-Time Communication) là một dự án mã nguồn mở và miễn phí cung cấp các trình duyệt web và ứng dụng di động giao tiếp thời gian thực (RTC) thông qua các giao diện lập trình ứng dụng (APIs) Nó cho phép giao tiếp âm thanh và video hoạt động bên trong các trang web bằng cách cho phép giao tiếp ngang hàng trực tiếp (peer-to-peer communication), loại bỏ nhu cầu cài đặt plugin hoặc tải xuống ứng dụng gốc
Các thành phần chính của WebRTC bao gồm một số APIs JavaScript:
• getUserMedia thu thập phương tiện âm thanh và video (ví dụ: bằng cách truy cập máy ảnh và micrô của thiết bị)
• RTCPeerConnection cho phép giao tiếp âm thanh và video giữa các đồng nghiệp Nó thực hiện xử lý tín hiệu, xử lý codec, giao tiếp ngang hàng, bảo mật và quản lý băng thông
• RTCDataChannel cho phép giao tiếp hai chiều dữ liệu tùy ý giữa các đồng nghiệp Dữ liệu được vận chuyển bằng SCTP qua DTLS Nó sử dụng API tương tự như WebSockets và có độ trễ rất thấp
API WebRTC cũng bao gồm chức năng thống kê:
• getStats cho phép ứng dụng web truy xuất một bộ thống kê về các phiên WebRTC Những dữ liệu thống kê này đang được mô tả trong một tài liệu W3C riêng biệt Ứng dụng:
WebRTC cho phép các trình duyệt truyền tệp trực tiếp với nhau, giảm hoặc loại bỏ hoàn toàn nhu cầu lưu trữ tệp phía máy chủ WebTorrent sử dụng truyền tải WebRTC để cho phép chia sẻ tệp ngang hàng (peer-to-peer file) bằng giao thức BitTorrent trong trình duyệt Một số trang web chia sẻ tệp sử dụng nó để cho phép người dùng gửi tệp trực tiếp cho nhau trong trình duyệt của họ, mặc dù điều này yêu cầu người tải lên giữ tab mở cho đến khi tệp được tải xuống Một vài CDNs, chẳng hạn như Peer5 thuộc sở hữu của Microsoft, sử dụng băng thông của máy khách để tải phương tiện lên các đồng nghiệp được kết nối khác, cho phép mỗi peer hoạt động như một máy chủ biên
Mặc dù ban đầu được phát triển cho các trình duyệt web, WebRTC có các ứng dụng cho các thiết bị không phải trình duyệt, bao gồm nền tảng di động và thiết bị IoT
Ví dụ bao gồm điện thoại VoIP dựa trên trình duyệt, còn được gọi là điện thoại đám mây hoặc điện thoại web, cho phép thực hiện và nhận cuộc gọi từ bên trong trình duyệt web, thay thế yêu cầu tải xuống và cài đặt softphone.
Sơ đồ use-case
Hình 2 Sơ đồ Use-case
Bảng 2 Bảng mô tả Use-case
STT Chức năng Mô tả
1 Đăng nhập Người dùng đăng nhập vào để sử dụng ứng dụng
2 Đăng ký Người dùng đăng ký để tạo tài khoản trong hệ thống
3 Tìm kiếm người dùng Tìm kiếm những người dùng khác
4 Nhắn tin Nhắn tin cho những người dùng khác
5 Gọi điện Thực hiện gọi video trực tuyến
6 Gọi thoại Thực hiện gọi thoại trực tuyến
Đặc tả Use-case
Người dùng đã đăng ký tài khoản, có thể thực hiện đăng nhập qua Google hoặc Facebook
Ngay khi vào ứng dụng, người dùng thực hiện việc đăng nhập vào hệ thống thông qua các tài khoản Google hoặc Facebook đã được đăng ký
Người dùng chưa đăng ký tài khoản, có thể đăng ký thông qua tài khoản Google hoặc Facebook
Khi sử dụng ứng dụng lần đầu hoặc muốn sử dụng một tài khoản mới, người dùng đăng ký tài khoản mới, thông qua việc đăng nhập bằng tài khoản Google hoặc Facebook Hệ thống sẽ tự tạo tài khoản mới cho người dùng qua các tài khoản trên
Người dùng tra cứu, tìm kiếm người dùng khác để thực hiện cuộc hội thoại thông qua tên hoặc tài khoản Gmail của người dùng
Người dùng chọn thêm cuộc trò chuyện, sau đó tìm kiếm người dùng khác thông qua tên hoặc email người dùng Sau khi tìm kiếm, hệ thống trả về cho người dùng những tài khoản người dùng khác có thông tin trùng khớp với thông tin tìm kiếm của người dùng
Khi tra cứu thông tin không hợp lệ, hoặc không có tài khoản nào trùng khớp với thông tin tra cứu, hệ thống báo lại không có thông tin hợp lệ
Các người dùng có thể trao đổi thông tin, tin nhắn với nhau
Sau khi đăng nhập vào ứng dụng, người dùng có thể thực hiện việc nhắn tin, trao đổi với các người dùng khác khi sau khi tham gia vào cuộc hội thoại
Các người dùng có thể gọi video call trực tuyến cho nhau
Sau khi đăng nhập vào ứng dụng, người dùng có thể thực hiện việc gọi video call trực tuyến cho nhau
Các người dùng có thể gọi thoại trực tuyến cho nhau
Sau khi đăng nhập vào ứng dụng, người dùng có thể thực hiện việc gọi thoại trực tuyến cho nhau
Thiết kế kiến trúc
Hệ thống của ứng dụng nhắn tin, video call phân tán (dApp) DCHAT sử dụng thêm thư viện GunJS và WebRTC để thực hiện việc xây dựng nên ứng dụng phân tán
Vậy nên kiến trúc tổng quan của ứng dụng bao gồm các user (người dùng) hay gọi là cái peer ngang hàng với nhau và được sử dụng mô hình kiến trúc đồ thị (Graph) để lưu trữ và đồng bộ dữ liệu
Ngoài ra, để sử dụng tính năng chat video call trực tuyến: hệ thống sử dụng thêm firebase và WebRTC để thực hiện chat real-time:
Hình 3 Hình minh họa kiến trúc P2P
Peers là các thiết bị hoặc máy chủ tham gia vào mạng phân tán GunJS Mỗi Peer chứa một bản sao của dữ liệu và có khả năng truyền tải và nhận dữ liệu từ các Peer khác Peers có thể là các trình duyệt web, máy chủ hoặc các thiết bị IoT khác
Peer-to-Peer Connection: Peer-to-Peer Connection là kết nối trực tiếp giữa hai User Agents để truyền tải dữ liệu đa phương tiện và các dữ liệu khác Kết nối này được thiết lập thông qua quá trình trao đổi thông tin qua Signaling Server Khi kết nối được thiết lập, dữ liệu có thể truyền tải trực tiếp giữa các User Agents mà không cần thông qua máy chủ trung gian Các Peers trong mạng có thể giao tiếp và đồng bộ hóa dữ liệu thông qua liên kết này Mối liên kết này là mối liên kết ngang hàng trực tiếp không cần sự thông qua của máy chủ trung gian hay bất kỳ bên cung cấp thứ ba nào
4.3.1.3 Mô hình kiến trúc đồ thị (Graph):
Graph là một cấu trúc dữ liệu đồ thị được sử dụng bởi GunJS Nó được sử dụng để lưu trữ dữ liệu dưới dạng các nút (node) và liên kết (link) giữa các nút Mỗi nút đại diện cho một đối tượng hoặc một phần của dữ liệu và có thể có các thuộc tính và giá trị tương ứng Đồ thị GUN graph được phân phối trên tất cả các Peers tham gia vào mạng này Các trình duyệt ngang hàng nhau, sẽ sử dụng localStorage hoặc IndexedDB để chỉ lưu trữ một tập hợp con trong đồ thị mà chúng đã tham gia vào, tất cả được đồng bộ hóa bằng WebRTC, Websockets hoặc các phương tiện truyền tải khác
Toàn bộ cơ sở dữ liệu được coi là sự kết hợp của tất cả các peers ở trong đồ thị Tất cả các thiết bị ngang hàng đều thực hiện lưu trữ và đồng bộ hóa dữ liệu, ngay cả trình duyệt cũng giúp lưu trữ và phân phát dữ liệu cho các thiết bị ngang hàng dù chúng được kết nối trực tiếp hoặc gián tiếp Không có bất kỳ một máy nào điều khiển hệ thống Không có bất kỳ ai sở hữu ứng dụng, chính những người dùng là người sở hữu
WebRTC (Web Real-Time Communication) là một công nghệ ho phép truyền tải đa phương tiện và truyền dữ liệu thời gian thực trong trình duyệt web mà không cần sử dụng các plugin hay ứng dụng bên ngoài Nó cung cấp các API và giao thức để thiết lập kết nối trực tiếp giữa các trình duyệt web để truyền tải âm thanh, video và dữ liệu trực tiếp
Firebase là một nền tảng phát triển ứng dụng di động và web được cung cấp bởi Google Nó cung cấp một loạt các dịch vụ đám mây để phát triển ứng dụng di động, web và backend một cách dễ dàng và nhanh chóng Firebase cung cấp các tính năng như cơ sở dữ liệu thời gian thực, xác thực người dùng, lưu trữ tệp, phân tích, thông báo đẩy và nhiều hơn nữa
Trong hệ thống, firebase đóng vai trò hỗ trợ cùng với WebRTC để ứng dụng thực hiện chat realtime Firebase cho phép lưu trữ và thực hiện đồng bộ hóa dữ liệu trên nhiều thiết bị một cách tức thì Dữ liệu được lưu trữ và các thay đổi trong dữ liệu sẽ được tự động đồng bộ đến các thiết bị kết nối.
Thiết kế giao diện
Hình 4 Giao diện màn hình đăng nhập web
Hình 5 Giao diện màn hình đăng nhập trên điện thoại
Hình 6 Giao diện màn hình chính web
Hình 7 Giao diện màn hình chính điện thoại
Hình 8 Giao diện màn hình nhắn tin web
Hình 9 Giao diện màn hình nhắn tin điện thoại
PHÁT TRIỂN VÀ CÀI ĐẶT ỨNG DỤNG
Môi trường phát triển ứng dụng
• Ngôn ngữ: TypeScript, HTML/CSS
• Hệ quản trị cơ sở dữ liệu: Firebase
• Công cụ thiết kế: Figma
• Công cụ chạy ứng dụng: Visual Studio code
• Thư viện hỗ trợ: GunJS, WebRTC
Môi trường triển khai ứng dụng
• Hệ điều hành: Windows/ Linux/ MacOSX
• Môi trường chạy hệ thống: các công cụ duyệt web như Microsoft Egde (khuyến khích), Chrome ,Firefox, Yandex,…
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Hướng phát triển
• Trong tương lai, ứng dụng sẽ tích hợp và triển khai thêm những chức năng hỗ trợ thuận tiện cho người dùng
• Phát triển UI thêm animation
• Hỗ trợ ứng dụng trên các nền tảng, hệ điều hành khác
• Xây dựng thêm mạng xã hội liên kết với ứng dụng.
Link Github
https://github.com/hoanghy0112/dchat