Đang tải... (xem toàn văn)
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINKHOA CÔNG NGHỆ PHẦN MỀM
Trang 2LỜI CẢM ƠN
Chúng em muốn bày tỏ sự cảm ơn sâu sắc đến Cô Đỗ Thị Thanh Tuyền vì sự dẫn dắt
tận tình trong quá trình nhóm em thực hiện đồ án về Tối ưu cho tải trọng dữ liệu chohệ thống nhắn tin Sự kiên nhẫn và sự chỉ bảo từ Cô không chỉ giúp chúng em nắm
vững kiến thức mà còn mở ra sự hiểu biết sâu rộng cho chúng em trong lĩnh vực này.Hi vọng với sự chỉ bảo và góp ý từ Cô, nhóm đề tài có thể tiếp tục phát triển để ứngdụng vào trong thực tế và ngày càng được mở rộng để hỗ trợ cải thiện hiệu năng dànhcho người dùng Với những ý kiến, đóng góp từ Thầy Cô và các bạn sẽ giúp cho nhómchúng em ngày càng cải thiện được độ hiệu quả lên mức cao hơn nhằm đóng góp, cảithiện cho trải nghiệm người dùng ngày càng tốt hơn.
Chúng em xin trân trọng gửi lời cảm ơn đến Cô Đỗ Thị Thanh Tuyền đã hỗ trợ chonhóm thực hiện đề tài trên, và những góp ý của cô chúng em sẽ ghi nhận đồng thời sẽcải thiện thêm trong tương lai để giúp đề tài ngày càng phát triển hơn nữa.
Sinh viên thực hiệnNguyễn KhánhNguyễn Hoàng Ngọc Hải
Trang 43.1.1 Tổng quan thị trường 18
3.1.2 Hiện trạng của các nền tảng giao tiếp tin nhắn phổ biến 19
3.1.3 Ưu điểm của các nền tảng hiện tại 19
3.1.3.1 Khả năng tiếp cận dễ dàng 19
3.1.3.2 Đa dạng chức năng & công cụ hỗ trợ 20
3.1.3.3 Hỗ trợ lưu lượng người dùng lớn & độ trễ thấp 20
3.1.4 Nhược điểm của các nền tảng hiện tại 20
3.1.4.1 Bảo mật và quyền riêng tư 20
3.1.4.2 Sự minh bạch về dữ liệu người dùng 20
3.1.4.3 Khả năng tự vận hành & quản lý 21
3.1.5 Phương hướng giải quyết 21
3.1.5.1 Các vấn đề đồ án nhắm tới 21
3.1.5.2 Các nền tảng tương tự 21
3.2 Phân tích yêu cầu hệ thống 22
3.2.1 Yêu cầu tổng quan 22
3.2.1.1 Yêu cầu ứng dụng 22
3.2.1.2 Đối tượng sử dụng 22
3.2.1.3 Yêu cầu công nghệ & mục tiêu phát triển 22
3.2.1.4 Yêu cầu chức năng 23
3.2.1.5 Quản lý tin nhắn và trao đổi thông tin 24
3.2.1.6 Quản lý thông báo 24
3.2.1.7 Tìm kiếm 24
3.2.1.8 Quản lý bảo mật thông tin & bảo mật chức năng 24
3.2.1.9 Quản lý vai trò trong ứng dụng 24
3.2.2 Yêu cầu phi chức năng 25
3.2.2.1 Hiệu suất hệ thống (Performance) 25
3.2.2.2 Độ tin cậy & độ khả dụng của hệ thống (Reliability & Availability) 25
3.2.2.3 Khả năng vận hành (Usability) 26
3.2.2.4 Khả năng mở rộng (Scalability) 26
Trang 53.2.2.6 Tuân thủ dữ liệu, sao lưu và khôi phục (Data Compliance, Backup &
Trang 6CHƯƠNG 4: THỰC NGHIỆM HỆ THỐNG & ĐÁNH GIÁ 77
4.1 Backend & vận hành máy chủ 77
4.2 Thông số kiểm thử thu được 80
KẾT LUẬN & HƯỚNG PHÁT TRIỂN 88
Kết luận 88
Hướng phát triển 88
TÀI LIỆU THAM KHẢO & PHỤ LỤC 89
Trang 7MỤC LỤC HÌNH ẢNH
Hình 2.1 Biểu đồ số lượng người dùng khả dụng trong tháng đối với các ứng dụng social
network (tháng 10 năm 2023), Statista [1] 18
Hình 2.2 Biểu đồ số lượng tin nhắn được ứng dụng WhatsApp xử lý hằng ngày, xét theo từngquý của năm 2023, Statista [2] 19
Hình 2.3 Logo ứng dụng Signal, Element và Let’s Chat theo thứ tự 21
Hình 3.1 Software Architecture Diagram tổng quan 29
Hình 3.2 Benchmark FastAPI so với các framework phổ biến khác[4] 30
Hình 3.3 Bộ công cụ HTTP Gorilla Toolkit 31
Hình 3.4 Sử dụng Redis trong việc thiết kế bộ nhớ đệm 32
Hình 3.5 Cấu trúc ScyllaDB với 5 node, RF=3 và CL=1 33
Hình 3.6 Biểu đồ Venn của CAP Theorem 34
Hình 3.7 Phương thức Round Robin của load balancer 35
Hình 3.8 Software Architecture Diagram – phần API Backend 36
Hình 3.9 Software Architecture Diagram – phần Websocket backend 37
Hình 3.10 Entity Relationship Diagram 40
Hình 3.11 Application Workflow Diagram 45
Hình 3.12 Giao diện màn hình đăng nhập 60
Hình 3.13 Giao diện màn hình đăng ký 61
Hình 3.14 Màn hình chính 62
Hình 3.15 Thông tin người dùng 63
Hình 3.16 Cấu trúc của dữ liệu sau khi được băm bằng BCrypt 64
Hình 3.17 Ví dụ một cặp token trả về 65
Hình 3.18 Ví dụ một file môi trường của hệ thống 66
Hình 3.19 So sánh giữa cấu trúc máy ảo và container của Docker 67
Hình 3.20 Mối quan hệ giữa Prometheus và Grafana 68
Hình 3.21 Một output mẫu sau khi K6 hoàn thành test 70
Hình 3.22 Trực quan các phương pháp kiểm thử hiệu năng[5] 72
Hình 3.23 Chu trình thực hiện của testcase http-read.js 72
Trang 8Hình 3.24 Chu trình thực hiện của testcase ws-read-write.js 73
Hình 3.25 Chu trình thực hiện của testcase http-ws-read-write.js 74
Hình 3.26 Chu trình thực hiện của testcase signin.js 75
Hình 3.27 Chu trình thực hiện của testcase ws-connect.js 75
Hình 4.1 Backend service và Websocket service được tự động chạy trên Jenkins 77
Hình 4.2 Các container vận hành trên server được theo dõi qua Portainer 77
Hình 4.3 Grafana Dashboard cho RabbitMQ service trên hệ thống 78
Hình 4.4 Grafana Dashboard cho API Backend và WS Backend trên hệ thống 78
Hình 4.5 API Backend documentation cho các HTTP endpoint 79
Hình 4.6 Kết quả Breakpoint Test của testcase signin.js 80
Hình 4.7 Kết quả Breakpoint Test của testcase ws-connect.js 80
Hình 4.8 Kết quả Breakpoint Test của testcase http-read.js 81
Hình 4.9 Kết quả Load Test của testcase http-read.js 82
Hình 4.10 Kết quả Breakpoint Test của testcase ws-read-write.js 83
Hình 4.11 Kết quả Load Test của testcase ws-read-write.js 84
Hình 4.12 Kết quả Breakpoint Test của testcase http-ws-read-write.js 85
Hình 4.13 Kết quả Load Test của testcase http-ws-read-write.js 86
Hình 4.14 Lock và Unlock connection map trong quá trình đọc/ghi (WS Backend) 87
Trang 9Bảng 3.14 Bảng danh sách các Use case 45
Bảng 3.15 UC01 – Tạo tài khoản 46
Bảng 3.16 UC02 – Đăng nhập 48
Bảng 3.17 UC03 – Chỉnh sửa tài khoản 49
Bảng 3.18 UC04 – Tạo nhóm mới 50
Bảng 3.19 UC05 – Tham gia nhóm công khai 51
Bảng 3.20 UC06 – Xác nhận lời mời nhóm riêng tư 52
Bảng 3.21 UC07 – Gửi tin nhắn vào nhóm 53
Bảng 3.22 UC08 - Gửi tập tin vào nhóm 54
Bảng 3.23 UC09 – Rời nhóm 55
Bảng 3.24 UC10 – Xoá nhóm 56
Bảng 3.25 UC11 – Quản lý quyền Admin nhóm 57
Bảng 3.26 UC12 – Chỉnh sửa thông tin nhóm 58
Bảng 3.27 UC13 – Chỉnh sửa người tham gia nhóm 59
Bảng 3.28 Các thành phần của màn hình Đăng nhập 61
Bảng 3.29 Các thành phần của màn hình Đăng ký 61
Trang 10Bảng 3.30 Các thành phần của màn hình chính 62
Bảng 3.31 Các thành phần của màn hình Thông tin người dùng 63
Bảng 3.32 Bảng thông số cấu hình hệ thống thực nghiệm 68
Bảng 3.33 Bảng phân loại các phương pháp kiểm thử hiệu năng 71
Bảng 3.34 Bảng thông số hiệu suất đề ra 76
Hình 4.1 Bảng thông số tổng hợp thu được 87
Trang 11CHƯƠNG 1: TỔNG QUAN ĐỀ TÀI1.1 Tên đề tài
Tên đề tài: Xây dựng hệ thống nhắn tin thời gian thực tối ưu cho tải trọng dữ liệu
Tên sản phẩm: EchoChat
1.2 Lý do chọn đề tài
Ngày nay, cùng với sự phát triển của xã hội, nhu cầu giao tiếp nhanh chóng trên môitrường mạng đang ngày càng có một vai trò quan trọng hơn, từ đấy nhu cầu thiết kế cáchệ thống cho việc giao tiếp hiệu quả được tăng lên đáng kể, cùng với đó là các yêu cầuchặt chẽ về an toàn dữ liệu cho các đối tượng người dùng cụ thể cũng đang và được đềcao
Với sự gia tăng vượt bậc về giao tiếp trực tuyến và tốc độ Internet ngày càng tức thời,các hệ thống tin nhắn thời gian thực có tải trọng tốt và độ bảo mật cao sẽ đáp ứng nhucầu giao tiếp tiện lợi và an toàn của người dùng, đồng thời hỗ trợ trong nhiều lĩnh vựcnhư trò chuyện cá nhân, làm việc nhóm, hỗ trợ khách hàng cũng như nhiều tệp kháchhàng & hội nhóm với nhu cầu đa dạng.
Chọn đề tài xây dựng một ứng dụng nhắn tin trên môi trường mạng không chỉ là việcđáp ứng nhu cầu ngày càng cao về giao tiếp trực tuyến mà còn là sự hướng dẫn choviệc nghiên cứu và áp dụng các công nghệ mới nhất trong lĩnh vực phần mềm Trongthời đại số hóa mạnh mẽ, việc tạo ra một ứng dụng nhắn tin trên web đặt ra nhiều tháchthức kỹ thuật, từ việc xây dựng giao diện người dùng thân thiện đến việc tối ưu hóahiệu suất và đảm bảo an toàn thông tin.
Trang 12Việc lựa chọn đề tài này xuất phát từ mong muốn trong việc nắm vững, áp dụng cáckiến trúc nhằm đảm bảo tính liên tục và hiệu quả của các hệ thống giao tiếp trong môitrường mạng thời nay, cũng như đảm bảo độ an toàn, bảo mật của dữ liệu người dùng.
1.3 Mục tiêu của đồ án
Mục tiêu chính của đồ án là thiết kế và triển khai một hệ thống nhắn tin đa người dùngmạnh mẽ và linh hoạt, hỗ trợ đầy đủ các tính năng cần thiết để đáp ứng nhu cầu ngàycàng cao về giao tiếp trực tuyến Đặc biệt, chúng ta sẽ tập trung vào ba mục tiêu cụ thểquan trọng để đảm bảo sự thành công và sự chấp nhận từ phía người dùng:
1.3.1.Hiệu năng và khả năng mở rộng
Một trong những mục tiêu hàng đầu của dự án là thiết kế hệ thống với hiệu suấtcao và khả năng mở rộng linh hoạt Hệ thống cần được tối ưu hóa cấu trúc để đápứng được cả yêu cầu của các hạ tầng vừa và nhỏ, đồng thời tích hợp cấu trúc phântán để dễ dàng mở rộng khi nhu cầu tăng lên Việc này giúp đảm bảo rằng hệ thốngcó thể linh hoạt thích ứng với số lượng người dùng đồng thời và đảm bảo trảinghiệm người dùng mượt mà.
1.3.2.Bảo mật dữ liệu
Một yếu tố quan trọng không thể phớt lờ là đảm bảo an toàn và bảo mật của dữ liệungười dùng Hệ thống sẽ tích hợp các biện pháp bảo mật mạnh mẽ như mã hóa vàcấp quyền để đảm bảo sự bảo vệ các tính năng Ngoài ra, hệ thống sẽ có tuỳ chọntự vận hành và sử dụng cho các tổ chức, cá nhân có nhu cầu chặt chẽ tối đa.
1.3.3.Khả năng vận hành & quản lý
Một mục tiêu quan trọng khác là thiết kế hệ thống đảm bảo khả năng tự triển khaivà vận hành dễ dàng Hệ thống cần được đóng gói thành một bộ cài đặt đơn giản
Trang 13cách nhanh chóng mà không đòi hỏi kiến thức chuyên sâu về công nghệ Điều nàycũng sẽ tăng khả năng sử dụng hệ thống cho những tổ chức hoặc nhóm nhỏ cóNgyuen vọng tự quản lý và duy trì hệ thống của mình.
1.4 Phạm vi phát triển đề tài
Phạm vi phát triển & vận hành: hệ thống vận hành trên máy chủ tự quản lý hoặc
trên các nền tảng đám mây, được áp dụng các kĩ thuật để bảo đảm hiệu năng ứngdụng
Phạm vi truy cập: qua trình duyệt web ở các nền tảng hỗ trợ (máy tính,
smartphone, tablet, …)
Phạm vi tính năng: ứng dụng cung cấp các tính năng quản lý người dùng, tạo các
hội nhóm trò chuyện, gửi tin nhắn văn bản và tập tin đa phương tiện, cùng với cáctính năng phụ trợ (quản lý nhóm, thông báo, bảo mật dữ liệu, …)
Trang 14CHƯƠNG 2: CƠ SỞ LÝ THUYẾT2.1 Framework
ReactJS là một thư viện JavaScript được sử dụng rộng rãi để xây dựng giao diệnngười dùng, đặc biệt là trong các ứng dụng có nội dung động Được phát triển vàduy trì bởi Facebook, ReactJS tuân theo kiến trúc dựa trên thành phần, giúp tăngkhả năng tái sử dụng và dễ bảo trì Virtual DOM của nó cập nhật hiệu quả chỉnhững phần thay đổi trong DOM thực tế, giúp cải thiện hiệu suất ReactJS cũng hỗtrợ khái niệm luồng dữ liệu một chiều, giúp quản lý trạng thái và điều khiển dữ liệutrong ứng dụng một cách dễ dàng.
FastAPI là một web framework hiện đại, nhanh chóng (hiệu suất cao) được sửdụng để xây dựng API với Python 3.7+ dựa trên gợi ý kiểu dữ liệu tiêu chuẩn củaPython Nó được thiết kế để sử dụng dễ dàng, đồng thời cũng mạnh mẽ và chắcchắn FastAPI tận dụng sức mạnh của lập trình không đồng bộ, làm cho nó phù hợpcho việc xử lý một lượng lớn các yêu cầu đồng thời Với khả năng tự động tạoOpenAPI và JSON Schema, FastAPI đơn giản hóa việc thiết lập documentation vàkiểm tra API.
2.1.3.Gorilla Websocket
Gorilla Websocket là một thư viện WebSocket cho ngôn ngữ lập trình Golang,được sử dụng để xây dựng các ứng dụng thời gian thực và truyền tải dữ liệu mộtcách hiệu quả Với Gorilla Websocket, việc thiết lập và duy trì kết nối WebSockettrở nên đơn giản, giúp ứng dụng tương tác và giao tiếp trực tiếp với server.
2.2 Database
Trang 15PostgreSQL là hệ quản trị cơ sở dữ liệu mạnh mẽ và có khả năng mở rộng Đượcưa chuộng trong các dự án có yêu cầu về tính nhất quán, bảo mật, và độ tin cậycao, PostgreSQL hỗ trợ nhiều loại dữ liệu và cung cấp các tính năng như giao dịch,phân quyền, và truy vấn phức tạp, làm cho nó trở thành lựa chọn lý tưởng cho việclưu trữ dữ liệu trong các ứng dụng phức tạp.
Redis là hệ thống cơ sở dữ liệu lưu trữ key-value có hiệu suất cao, được sử dụngchủ yếu để lưu trữ dữ liệu tạm thời và cache Với khả năng xử lý dữ liệu nhanhchóng và hỗ trợ nhiều kiểu dữ liệu, Redis là một công cụ linh hoạt và mạnh mẽ choviệc quản lý và truy cập dữ liệu trong ứng dụng.
ScyllaDB là một hệ cơ sở dữ liệu NoSQL, sử dụng kiến trúc Apache Cassandra đểcung cấp hiệu suất cao và khả năng mở rộng tốt Với thiết kế phân tán và khả năngđồng bộ, ScyllaDB thích hợp cho các ứng dụng đòi hỏi xử lý dữ liệu lớn và đồngthời đảm bảo sự đồng nhất và tin cậy.
2.3 Công cụ hỗ trợ2.3.1.RabbitMQ
RabbitMQ là một dịch vụ message queue giúp các thành phần trong hệ thống giaotiếp và truyền thông tin một cách linh hoạt Với RabbitMQ, việc xử lý hàng đợi vàtruyền tải thông điệp giữa các ứng dụng trở nên dễ dàng, tăng tính ổn định và mởrộng của hệ thống.
2.3.2.Prometheus
Trang 16Prometheus là một hệ thống giám sát và cảnh báo mã nguồn mở, được thiết kế đểtheo dõi các thành phần trong hệ thống Prometheus tự động thu thập thông tin vàcung cấp giao diện để theo dõi hiệu suất, giúp quản trị viên hệ thống giữ cho ứngdụng luôn hoạt động mượt mà.
2.3.3.Grafana k6
Grafana k6 là một công cụ giám sát hiệu suất cho phép kiểm tra và đánh giá độ ổnđịnh của hệ thống Kết hợp giữa Grafana và k6, nó cung cấp thông tin chi tiết vềhiệu suất và khả năng chịu tải của ứng dụng, giúp nhận diện và khắc phục vấn đềnhanh chóng.
2.4 Vận hành & quản lý2.4.1.Ubuntu Server
Ubuntu Server là một hệ điều hành Linux phổ biến được sử dụng cho việc triểnkhai ứng dụng và quản lý máy chủ Với sự ổn định và hỗ trợ cộng đồng lớn,Ubuntu Server là một lựa chọn phổ biến cho việc vận hành hệ thống và triển khaiứng dụng.
Docker là một nền tảng ảo hóa dựa trên container, giúp đóng gói ứng dụng và tất cảcác phụ thuộc của chúng vào một container duy nhất Điều này tạo ra môi trườngđồng nhất và di động, giúp triển khai ứng dụng dễ dàng và hiệu quả.
Jenkins là một công cụ tự động hóa CI/CD (continuous integration/continuousdelivery) giúp quản lý và triển khai mã nguồn một cách liên tục Với Jenkins, quytrình phát triển và triển khai ứng dụng trở nên tự động và có thể lặp đi lặp lại, giúp
Trang 17Grafana là một công cụ giám sát và trực quan hóa dữ liệu, thường được sử dụng đểhiển thị và phân tích thông tin từ các nguồn khác nhau Grafana cung cấp giao diệnđồ họa mạnh mẽ và linh hoạt, giúp quản trị viên hệ thống theo dõi hiệu suất và đưara quyết định thông minh.
NGINX là một máy chủ web và reverse proxy rất phổ biến, được sử dụng để xử lývà chuyển hướng các yêu cầu HTTP Với khả năng xử lý tải cao và cấu hình linhhoạt, NGINX là một phần quan trọng trong việc triển khai ứng dụng web và cungcấp các dịch vụ proxy đáng tin cậy.
Trang 18CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ HỆ THỐNG3.1 Phân tích thực tế
3.1.1.Tổng quan thị trường
Ngày nay, thị trường giao tiếp tin nhắn trực tuyến đang cực kỳ đa dạng với nhiềusản phẩm có quy mô lớn đi kèm với số lượng người dùng đông đảo Có thể kể đếnnhiều nền tảng phổ biến như WhatsApp, Facebook Messenger, WeChat, Telegram,Discord, Zalo (tại Việt Nam), …, các ứng dụng này thu hút hàng tỷ người dùngtrên toàn thế giới, tạo ra sự cạnh tranh khốc liệt trong việc cung cấp trải nghiệmngười dùng tốt nhất và đáp ứng nhu cầu đa dạng của họ
Trang 193.1.2.Hiện trạng của các nền tảng giao tiếp tin nhắn phổ biến
Các nền tảng lớn hiện nay đã và đang tối ưu hệ thống của họ nhằm xử lý hàng tỷtin nhắn mỗi ngày từ người dùng theo thời gian thực, cùng với đó vẫn liên tục pháttriển các tính năng mới nhằm thu hút người dùng sử dụng.
Hình 2.2 Biểu đồ số lượng tin nhắn được ứng dụng WhatsApp xử lý hằng ngày, xéttheo từng quý của năm 2023, Statista [2]
Như ở hình trên, ứng dụng WhatsApp là một trong những ứng dụng tin nhắn có sốlượng người dùng lớn nhất trong các nền tảng social media hiện tại, và cũng vì thếsố lượng dữ liệu phải xử lý đằng sau hệ thống cũng là một con số khổng lồ, kể cảkhi xét trên vài năm về trước.
Tuy nhiên, việc sử dụng các nền tảng lớn kể trên hiện nay đều có những điểmmạnh và điểm yếu rõ ràng mà ta cần phân tích trước khi áp dụng.
3.1.3.Ưu điểm của các nền tảng hiện tại
3.1.3.1.Khả năng tiếp cận dễ dàng
Trong thực tế, các nền tảng như WhatsApp, Facebook Messenger và Telegramđều nổi bật với khả năng tiếp cận dễ dàng Các ứng dụng này đều có sẵn trênnhiều nền tảng, bao gồm cả điện thoại di động và máy tính, giúp người dùngkết nối mọi lúc, mọi nơi Ngoài ra, việc đăng nhập thông qua các tài khoảnmạng xã hội cũng giúp việc tiếp cận trở nên thuận tiện và nhanh chóng.
Trang 203.1.3.2.Đa dạng chức năng & công cụ hỗ trợ
Các nền tảng giao tiếp tin nhắn hiện tại đều hỗ trợ một loạt các chức năng vàcông cụ giúp người dùng trải nghiệm đa dạng Từ gửi tin nhắn văn bản, hìnhảnh, gắn thẻ người dùng đến cuộc gọi video và tạo nhóm, các ứng dụng nàyđáp ứng đầy đủ nhu cầu giao tiếp của người dùng hiện đại
Và cùng với đó các chức năng mới vẫn đang được phát triển liên tục, ví dụnhư tính năng nhắn tin ẩn và trò chơi hội nhóm tích hợp bên trong phòng chat.
3.1.3.3.Hỗ trợ lưu lượng người dùng lớn & độ trễ thấp
Với số lượng người dùng khổng lồ, các nền tảng như WhatsApp, FacebookMessenger và WeChat đã chứng minh khả năng hỗ trợ lưu lượng người dùngkhổng lồ mà vẫn giữ được độ trễ tối thiểu trong đường truyền của tin nhắnbằng sự đầu tư mạnh mẽ vào cơ sở hạ tầng và thiết kế của hệ thống Điều nàyđặc biệt quan trọng trong việc duy trì trải nghiệm người dùng mượt mà, hiệuquả và không gây khó chịu, từ đó giữ người dùng sử dụng nền tảng.
3.1.4.Nhược điểm của các nền tảng hiện tại
3.1.4.1.Bảo mật và quyền riêng tư
Mặc dù các nền tảng giao tiếp tin nhắn đã đưa ra nhiều biện pháp bảo mật,nhưng vẫn tồn tại những điểm yếu đối với quyền riêng tư và bảo mật dữ liệungười dùng Đặc biệt, những vấn đề như lỗ hổng trong chính sách chia sẻ dữliệu có thể tạo nên nguy cơ đối với sự riêng tư của dữ liệu người dùng.
3.1.4.2.Sự minh bạch về dữ liệu người dùng
Đi kèm với các chính sách ngầm phức tạp, mức độ minh bạch về việc thu thậpvà sử dụng dữ liệu người dùng cũng là một vấn đề gặp nhiều tranh cãi, nhất làkhi các tổ chức & công ty lớn như Meta (sở hữu WhatsApp, Messenger) vàTencent (sở hữu WeChat) thường không có lịch sử tốt về việc sử dụng dữ liệungười dùng
3.1.4.3.Khả năng tự vận hành & quản lý
Các ứng dụng kể trên không công khai kiến trúc, và việc sử dụng ứng dụngphải phụ thuộc vào hạ tầng của công ty sở hữu, điều đó gây khó khăn nếu
Trang 21quản lý toàn bộ dữ liệu nhằm tối đa khả năng bảo mật (ví dụ như dữ liệu nộibộ doanh nghiệp)
3.1.5.Phương hướng giải quyết
3.1.5.1.Các vấn đề đồ án nhắm tới
Phương hướng của đồ án sẽ nhắm đến việc học hỏi, áp dụng các điểm mạnhvề hiệu năng cũng như độ mở rộng của các hệ thống lớn có sẵn, cùng với đấylà thiết kế các cấu trúc, tính năng riêng để giải quyết các vấn đề bất cập vàphục vụ cho các nhóm người dùng cần những tính năng kể trên Ngoài ra, đồán cũng hướng tới việc cải thiện khả năng tự vận hành và quản lý từ phíangười dùng.
3.1.5.2.Các nền tảng tương tự
Chúng ta có thể tham khảo các nền tảng tin nhắn mã nguồn mở khá phổ biếnnhư:
Signal: hệ thống nhắn tin mã nguồn mở miễn phí cho iOS, Android và
desktop, tập trung vào khả năng bảo mật cực kỳ mạnh và tính năng đầy đủcho đa số nhu cầu người dùng.
Element: hệ thống nhắn tin mã nguồn mở miễn phí cung cấp khả năng mã
hoá end-to-end, cùng với việc tích hợp với các dịch vụ khác như Discord,Slack và cung cấp khả năng tự vận hành.
Let’s Chat: ứng dụng nhắn tin tự triển khai cho nhu cầu người dùng và hội
nhóm nhỏ có nhu cầu.
Hình 2.3 Logo ứng dụng Signal, Element và Let’s Chat theo thứ tự
3.2 Phân tích yêu cầu hệ thống3.2.1.Yêu cầu tổng quan
Trang 223.2.1.1.Yêu cầu ứng dụng
Phát triển được một ứng dụng nhắn tin trên nền tảng web cung cấp hệthống vận hành tối ưu cho việc xử lý số lượng người dùng cao và kết nốiđồng thời với nhiều người dùng
Cung cấp cho người dùng một nền tảng giao tiếp thời gian thực cho việctrao đổi tin nhắn văn bản và các tập tin đa phương tiện với đầy đủ các tínhnăng cho đa số nhu cầu sử dụng
Hệ thống cung cấp khả năng khởi chạy đơn giản và khả năng tự triển khai,vận hành cho các nhu cầu cá nhân, tổ chức
- Đối với backend: Sử dụng các framework có hiệu năng cao, hỗ trợ việc
thiết kế HTTP endpoint cho các yêu cầu cơ bản và Websocket endpointcho các yêu cầu thời gian thực, cùng với hỗ trợ các tính năng bảo mậtđường truyền và bảo vệ dữ liệu.
- Đối với hệ thống vận hành: áp dụng các biện pháp vận hành container,
cân bằng tải và bảo mật kết nối giữa các services; cùng với việc cung cấpcác công cụ theo dõi nhằm đảm bảo backend vận hành như mong muốn,cũng như phát hiện lỗi nếu có.
- Đối với frontend: Sử dụng framework có cấu trúc, tốc độ phát triển
nhanh cho việc demo và thiết kế MVP.
3.2.1.3.2.Mục tiêu phát triển
- Phát triển được một hệ thống hoàn chỉnh đầy đủ các thành phần backend,frontend và vận hành được trên máy chủ cũng như trên các nền tảng đámmây.
Trang 23- Source code phát triển có độ sạch sẽ cao, các thành phần được phân táchrõ ràng, cũng như được chú thích và cung cấp hướng dẫn cho nhu cầu tựvận hành của người dùng
3.2.1.4.Yêu cầu chức năng
3.2.1.4.2.Quản lý thông tin người dùng
- Người dùng có thể cung cấp và sửa đổi thông tin cho hồ sơ của họ, baogồm tên người dùng, mã số nhận dạng, ảnh đại diện và mô tả người dùng- Người dùng có quyền chỉnh sửa tên tài khoản, mật khẩu và email liên kết- Người dùng có thể yêu cầu xóa tài khoản, đi cùng với xóa các thông tin
cá nhân của người dùng
3.2.1.4.3.Quản lý hội nhóm
- Tạo nhóm: người dùng có thể tạo nhóm riêng và được cấp quyền quản
trị viên (admin) cho nhóm đó
- Xem thông tin nhóm: người dùng có thể xem tên, ảnh đại diện, người
tham gia nhóm và trạng thái của họ, cùng một vài thông tin khác
- Chỉnh sửa thông tin nhóm:
o Các admin nhóm có thể thay đổi tên nhóm, ảnh đại diện nhóm vàcài đặt hiển thị của nhóm (nhóm công khai hoặc riêng tư)
o Admin nhóm có thể chọn các thành viên khác trong nhóm cùnglàm admin
- Tham gia nhóm: người dùng có thể tự tham gia các nhóm công khai qua
liên kết nhóm, và có thể được mời tham gia các nhóm riêng tư qua lờimời của admin
- Rời nhóm: các thành viên nhóm có thể tự rời nhóm hoặc được admin
mời khỏi nhóm
3.2.1.5.Quản lý tin nhắn và trao đổi thông tin
Trang 24 Người tham gia nhóm có thể gửi nhiều loại tin nhắn vào nhóm:- Tin nhắn văn bản, đường liên kết
- Icon, biểu tượng cảm xúc
- Tập tin đa phương tiện (file, hình ảnh, video, …)
Người tham gia nhóm có thể ghim tin nhắn của bản thân hoặc của ngườikhác
3.2.1.6.Quản lý thông báo
Người dùng sẽ nhận được thông báo theo thời gian thực về:
Kết quả của các thao tác quan trọng (tạo nhóm mới, thêm/xoá thành viênkhỏi nhóm, …)
Lời mời tham gia nhóm mới Các tin nhắn mới trong nhóm
Các thông báo quan trọng từ hệ thống (cập nhật, bảo trì, …)
3.2.1.7.Tìm kiếm
Người dùng có thể tìm kiếm thông tin của những người dùng khác qua tên Người dùng có thể tìm kiếm các tin nhắn trong nhóm qua cụm từ tìm kiếm
3.2.1.8.Quản lý bảo mật thông tin & bảo mật chức năng
Người dùng khi đăng nhập thành công sẽ được cấp access token và refreshtoken để xác thực cho các tính năng trong hệ thống
Các nhóm riêng tư sẽ không thể được tìm kiếm từ bên ngoài, và ngườidùng không thể tham gia các nhóm riêng tư mà cần phải chấp nhận lời mờicủa Admin nhóm đó
3.2.1.9.Quản lý vai trò trong ứng dụng
User: người dùng đã đăng ký tài khoản trên hệ thống User là vai trò cơ
bản trong hệ thống, có quyền xem, chỉnh sửa thông tin cá nhân, tham giacác nhóm công khai hoặc các nhóm riêng tư có lời mời, xem thông tin vàgửi tin nhắn vào các nhóm đã tham gia, gửi báo cáo vi phạm, …
Group Admin (admin nhóm): bao gồm các quyền của User, cùng với đó
có quyền thêm / bớt người trong nhóm, chỉnh sửa thông tin và cài đặt hiểnthị của nhóm, gán / bỏ gán quyền admin cho các thành viên nhóm
Trang 25 Application Admin (admin hệ thống): có quyền xem thông tin nhật ký hệ
thống, theo dõi các thông số hệ thống, xem / thực thi hành động đối với cácbáo cáo vi phạm, thêm người khác làm admin hệ thống
3.2.2.Yêu cầu phi chức năng
3.2.2.1.Hiệu suất hệ thống (Performance)
Hệ thống cần được tối ưu về cả phần mềm lẫn phần cứng để chịu được tảitrọng giao tiếp cao, số lượng người dùng kết nối cùng lúc lớn trong giới hạnsức mạnh phần cứng
Các mức hiệu suất cần được kiểm tra bằng công cụ load test trong khoảng thờigian nhất định để đảm bảo rằng hệ thống có thể vận hành ổn định và khôngphát sinh lỗi.
3.2.2.2.Độ tin cậy & độ khả dụng của hệ thống (Reliability & Availability)
Hệ thống cần có tốc độ phản hồi giữa người dùng và các tính năng trongmức độ cho phép (trong khoảng từ 200ms tới dưới 1s được coi là trongmức độ cho phép, theo Google[3])
Dữ liệu hệ thống cần được đảm bảo cập nhật liên tục để tránh sự mất đồngbộ giữa các người dùng khác nhau.
Hệ thống cần có các chức năng quản lý lỗi, xử lý sự cố và tự động phục hồiđể tránh các trường hợp gây sập / tắc nghẽn hệ thống.
Cố gắng đảm bảo tỉ lệ uptime (tỉ lệ giữa thời gian vận hành và thời gianbảo trì, sửa lỗi) để đảm bảo sự ổn định, trơn tru trong việc sử dụng củangười dùng
3.2.2.3.Khả năng vận hành (Usability)
Đối với ứng dụng: cần đảm bảo giao diện trực quan, các câu lệnh request
có format rõ ràng, cùng với các ví dụ để tránh việc người dùng bị nhầmcông năng sử dụng
Đối với hệ thống:
- Thiết kế hệ thống được trình bày rõ ràng, đầy đủ tài liệu hướng dẫn khởichạy & mở rộng hệ thống cho các nhu cầu riêng của cá nhân / tổ chức
Trang 26- Cung cấp các cổng kết nối với công cụ quản lý bên thứ ba để cung cấpthêm khả năng quản lý và theo dõi thông số
Hệ thống cung cấp được các thông số về quá trình hoạt động của các thànhphần, cũng như sử dụng các công cụ trực quan để người quản lý dễ quansát, nhận biết các điểm tắc nghẽn (nút cổ chai) và nâng cấp nếu cần thiết
Trang 27Mỗi thành phần trong hệ thống cần cung cấp khả năng tạo replica (tạo bản saohoạt động song song) để giải quyết các vấn đề tắc nghẽn cụ thể về sau.
Trang 283.3 Thiết kế kiến trúc hệ thống
3.3.1.Tổng quan kiến trúc hệ thống
3.3.1.1.Các thành phần hệ thống
Client: các kết nối từ người dùng thông qua giao diện Frontend Tùy vào
chức năng người dùng sử dụng mà Frontend tạo ra loại kết nối tương ứng(HTTP hoặc Websocket)
Load balancer: điểm quản lý các kết nối giữa client và server, cũng như
thực hiện cân bằng tải (chia đều kết nối ra các thành phần song song) tronghệ thống
API backend: cung cấp API endpoint cho các tính năng cơ bản của ứng
dụng, quản lý kiểm tra dữ liệu đầu vào và đầu ra, thực hiện truy vấn và xửlý dữ liệu từ các database cluster
Websocket backend: cung cấp Websocket endpoint cho các tính năng gửi
& nhận thông báo tin nhắn theo thời gian thực
Các database: các cụm cơ sở dữ liệu được sử dụng riêng cho từng loại dữ
liệu cụ thể.
Notification queue: hàng chờ dữ liệu (message queue) để cập nhật các
thông báo mới của người dùng.
File server: service quản lý việc upload và tải file
3.3.1.2.Sơ đồ kiến trúc hệ thống
Trang 29Hình 3.1 Software Architecture Diagram tổng quan
3.3.2.Chi tiết kiến trúc hệ thống
3.3.2.1.Bộ công nghệ áp dụng
3.3.2.1.1.Giao diện người dùng (Frontend)
Framework: ReactJS được áp dụng để tái sử dụng các thành phần giao diệnvà tối ưu hiệu suất
ReactJS là một thư viện JavaScript mạnh mẽ được phát triển bởi Facebook,chuyên dụng trong việc xây dựng giao diện người dùng hiệu quả và linhhoạt Điểm nổi bật của ReactJS là khả năng tạo ra các thành phần(components) tái sử dụng, giúp quản lý mã nguồn một cách dễ dàng và duytrì ứng dụng một cách hiệu quả Nó sử dụng mô hình "one-way databinding" để tối ưu hóa hiệu suất và cung cấp một cách tiếp cận linh hoạttrong quản lý trạng thái ứng dụng
3.3.2.1.2.API Backend
Framework: FastAPI (Python) cùng các thư viện hỗ trợ và thiết lập môitrường
FastAPI là một micro-framework có hiệu suất cao với kiến trúc dựa trên
Starlette và Pydantic Việc FastAPI sử dụng chuẩn ASGI (AsynchronousServer Gateway Interface) hỗ trợ code bất đồng bộ cho server interface so
với các Python framework khác chỉ sử dụng WSGI, cùng với việc cung cấpsẵn các biện pháp kiểm tra dữ liệu đầu vào qua Pydantic đã giúp FastAPI cóhiệu năng vận hành nhanh hơn đáng kể.
Trang 30Hình 3.2 Benchmark FastAPI so với các framework phổ biến khác[4]
Gorilla Websocket là một thư viện Websocket nằm trong bộ Gorilla Toolkitđược Golang gợi ý sử dụng Thư viện cung cấp cấu trúc Websocket hoànthiện và đi kèm với documentation chi tiết, thích hợp cho việc thiết kế kếtnối Websocket ổn định và có cấu trúc.
Hình 3.3 Bộ công cụ HTTP Gorilla Toolkit3.3.2.1.4.Database
- PostgreSQL: dùng để chứa các dữ liệu về thông tin của người dùng
PostgreSQL là 1 hệ thống quản trị cơ sở dữ liệu SQL miễn phí và mã nguồnmở tiên tiến nhất hiện nay PostgreSQL tích hợp nhiều tính năng hỗ trợ cáccâu truy vấn phức tạp, quản lý commit/rollback transaction và khả năng bảomật đáng tin cậy (SCRAM-SHA256, LDAP, …).
Với việc được phát triển từ rất sớm, PostgreSQL có tính ổn định và độ tin
Trang 31- Redis: dùng để thiết kế bộ nhớ đệm quản lý token kết nối và lưu trữ
thông tin đệm của người dùng
Hình 3.4 Sử dụng Redis trong việc thiết kế bộ nhớ đệm
Redis là 1 cơ sở dữ liệu lưu trữ dữ liệu trên RAM (in-memory) dưới dạngkey-value rất mạnh mẽ và phổ biến Redis là một lựa chọn tuyệt vời cho nhucầu lưu trữ các dữ liệu với tốc độ cao cũng như để tối ưu hệ thống, nhờ vàotốc độ đọc dữ liệu từ RAM và cấu trúc key-value có độ phức tạp thuật toánthấp
Ngoài ra Redis cũng hỗ trợ các tính năng lưu dữ liệu vào ổ đĩa, cũng như saolưu dữ liệu nếu cần thiết.
- ScyllaDB: dùng để lưu trữ tin nhắn người dùng, dữ liệu hội nhóm và các
dữ liệu thời gian thực khác (thông báo, tin nhắn ghim, …)
ScyllaDB là 1 hệ thống cơ sở dữ liệu NoSQL phân tán dạng node mạnh mẽđược kế thừa từ Cassandra, một hệ thống cơ sở dữ liệu dạng node cực kỳphổ biến khác.
Với thiết kế theo dạng một chuỗi các node kết nối thành vòng tròn, một hệthống ScyllaDB có thể biến đổi theo thời gian bằng cách thêm/bớt node Dữ
liệu được phân bổ vào các node dựa trên Partition Key, với các phần tử dữ
liệu có cùng Partition Key sẽ nằm ở chung node (các tin nhắn của cùng mộtnhóm, các nhóm đã tham gia của cùng một người, …), từ đó tăng tốc việctruy vấn dữ liệu.
Trang 32Cùng với đó, việc thiết kế theo dạng node giúp cho ScyllaDB có các tính
năng bảo toàn dữ liệu như Replication Factor (RF - một phần tử dữ liệunằm ở nhiều node) và Consistency Level (CL - số lượng phần tử dữ liệu tối
thiểu để xác nhận dữ liệu tồn tại) rất mạnh mẽ.
Hình 3.5 Cấu trúc ScyllaDB với 5 node, RF=3 và CL=13.3.2.1.5.Các công nghệ hỗ trợ
- RabbitMQ là hệ thống thiết kế message queue hiệu suất, nhỏ gọn và khả
năng tải cao, thích hợp cho việc truyền tải thông tin giữa các service.
- NGINX là một trong những công cụ reverse proxy và load balancer phổ
biến nhất hiện tại, với khả năng chuyển hướng đa dạng và xác thực, bảomật thông tin đa dạng.
3.3.2.2.Phân tích kiến trúc hệ thống3.3.2.2.1.Database
Nền tảng của kiến trúc cơ sở dữ liệu của đồ án được dựa trên định lý CAP
(CAP Theorem) của Eric Brewer: Khi lỗi phân vùng mạng (networkpartition failure) xảy ra, hệ thống phải lựa chọn một trong hai phương ánsau đây:
- Hủy tác vụ: điều này làm giảm tính khả dụng (availability) nhưng đảm
bảo tính nhất quán (consistency) của hệ thống.
Trang 33- Tiếp tục thực hiện tác vụ: đảm bảo tính khả dụng nhưng có thể dẫn đến
không nhất quán trong dữ liệu trả về.
Hình 3.6 Biểu đồ Venn của CAP Theorem
Hệ cơ sở dữ liệu của đồ án được chia thành 2 loại chính:
- Relational (SQL): được sử dụng chính để lưu trữ các thông tin cá nhân
của người dùng Sử dụng SQL database sẽ đảm bảo consistency của dữliệu cá nhân, từ đó đảm bảo nền tảng để thực hiện các chu trình phức tạphơn Cùng với đó, các nền tảng SQL database thường có khả năng bảomật tốt hơn nhờ cấu trúc chắc chắn và thời gian phát triển lâu dài hơn.Nhóm sử dụng PostgreSQL làm relational database chính.
- Non-relational (NoSQL): được sử dụng để lưu trữ các thông tin về tin
nhắn cũng như hội nhóm của người dùng, cũng như dùng để thiết kế bộnhớ đệm và tối ưu truy vấn Nhóm sử dụng 2 loại non-relational databasechính:
o Database phân tán dạng node (ScyllaDB) để đảm bảo khả năngmở rộng cũng như tốc độ truy vấn cao do dữ liệu được lưu trữthành các partition Cùng với đó database phân tán cũng hỗ trợviệc tạo nhiều bản sao dữ liệu ở các node khác nhau nhằm đảmbảo tính Availability cho hệ thống nếu một vài node có vấn đề.o Database dạng key-value (Redis) để làm vùng nhớ đệm cho các
thao tác lặp lại và ít thay đổi, do cấu trúc nhỏ gọn và độ phức tạptruy vấn thấp.
Trang 343.3.2.2.2.Load balancer
Load balancer đóng vai trò điều hướng các request từ client tới đúng service/server thực thi, cũng như chia đều tải tới các replica nếu chạy nhiềuservice/server song song
Các phương thức chia tải phổ biến của load balancer:
- Round Robin: chia đều request cho các service, là phương thức cơ bản
Hình 3.7 Phương thức Round Robin của load balancer
- Weighted Round Robin: có thể đặt tỉ lệ để một vài service nhận ít hoặc
nhiều request hơn
- Least Connection: gửi request tới các service đang có ít kết nối nhất
Cùng với đó load balancer cũng có thể quản lý việc mã hoá đường truyềnbằng các giao thức SSL/TLS như HTTPS và WSS.
Việc áp dụng Load balancer sẽ hỗ trợ việc mở rộng hệ thống theo chiềungang cũng như thêm/tạo bản sao của các service để chia đều khối lượngcông việc về sau nếu có nhu cầu.
Trang 353.3.2.2.3.API backend
Hình 3.8 Software Architecture Diagram – phần API Backend
API backend trong hệ thống của nhóm có 3 công việc chính:
- Tạo các HTTP API endpoint để client tương tác với hệ thống: cácendpoint cho xác thực người dùng, thông tin cá nhân cũng như cho cáchành động với hội nhóm.
- Kết nối với các databases, thực hiện truy vấn và lưu trữ đệm nếu cầnthiết:
o Kết nối với Redis để lưu trữ / truy vấn thông tin người dùng trongbộ nhớ đệm và quản lý đăng xuất tài khoản (vô hiệu các tokenđăng nhập).
o Kết nối với PostgreSQL để thực hiện các chu trình liên quan đếnthông tin người dùng.
o Kết nối với ScyllaDB để thực hiện các chu trình liên quan đến hộinhóm, người tham gia và tin nhắn.
- Kết nối với các service khác (ở đây bao gồm Websocket backend và Fileserver) để truyền tải dữ liệu:
Trang 36o Gửi các thông báo tạo/xoá/sửa/… mới đến Websocket backendthông qua Notification queue.
o Truy xuất file từ file server.
3.3.2.2.4.Websocket backend
Hình 3.9 Software Architecture Diagram – phần Websocket backend
Websocket backend của hệ thống quản lý các kết nối Websocket thời gianthực giữa client và server 3 chức năng chính của kết nối WS là:
- Gửi các thông báo cho người dùng (thông báo tin nhắn mới, chỉnhsửa/thêm/xoá hội nhóm, …)
- Nhận và xử lý tin nhắn mới từ phía client
- Nhận và xử lý đánh dấu tin nhắn đã đọc từ phía clientWebsocket Manager của backend chứa một hashmap:
map{ID tài khoản; các kết nối khả dụng của tài khoản đó}
để điều hướng các thông báo mới từ hệ thống đến đúng người dùng, cũngnhư hỗ trợ nhận thông báo cho tất cả các kết nối đang khả dụng của ngườidùng (mở nhiều tab ứng dụng)
Trang 37Việc sử dụng Websocket backend ở ngôn ngữ Golang là do 2 lý do chính: - Hiệu năng của chức năng Websocket có sẵn trong FastAPI không cao và
cấu trúc thiết kế không rõ ràng
- Khả năng thiết kế goroutine (tương tự với asyncio trong Python) cho cácxử lý song song của Golang là rất mạnh mẽ và hiệu quả trong việc sửdụng tài nguyên hệ thống
3.3.2.2.5.Các database
Hệ thống sử dụng các thư viện ORM (Object Relational Mapping) tuỳ vàoframework thực hiện để đảm bảo xác thực các thuộc tính dữ liệu, cùng vớiđó là áp dụng transaction cho commit và rollback nếu có vấn đề xảy ra.Đối với dữ liệu người dùng được lưu trên PostgreSQL, dữ liệu của nhữngngười dùng sử dụng liên tục sẽ được lưu bản sao trên Redis để truy vấn vềsau, từ đó giảm được tải trọng đến database chính, cùng với đó là tăng tốccác công việc như xác thực token đăng nhập.
Đối với ScyllaDB, database cluster được thiết kế với 3 node kết nối vớinhau, cùng với Replication Factor 2 (mỗi phần tử dữ liệu có bản sao trong 2node) và Consistency Level 1 (truy vấn ít nhất 1 phần tử để xác nhận tồn tại)nhằm tăng tốc độ truy vấn và Availability của các node Cùng với đó cấutrúc dữ liệu hội nhóm và tin nhắn cũng được tối ưu Partition Key để đảmbảo khả năng truy vấn trên số lượng dữ liệu lớn
3.3.2.2.6.Các notification queue
Hệ thống sử dụng RabbitMQ để đảm bảo độ nhỏ gọn cũng như khả năngluân chuyển dữ liệu mạnh mẽ Ngoài ra RabbitMQ cũng cung cấp các côngcụ theo dõi phù hợp với kích cỡ đồ án.
RabbitMQ có cấu trúc gồm các hàng chờ Queue, trình gửi dữ liệu Producervà trình nhận dữ liệu Consumer Producer được thiết kế ở phía APIBackend, và WS Backend nhận các thông báo bằng cách dùng Consumerđọc từ trong queue.
3.3.2.2.7.File server
Trang 38File server có thể sử dụng các service bên thứ ba như S3 (AWS), GoogleCloud Storage, hoặc tự thiết kế service chạy trên hệ thống.
Ảnh và file từ phía người dùng sẽ được đẩy lên File server trước khi thựchiện các hành động liên quan Các service sẽ giao tiếp với nhau để xác nhậnfile tồn tại trước khi khởi chạy hành động tương ứng.
Trang 393.4 Thiết kế chức năng
3.4.1.Thiết kế quản lý dữ liệu
3.4.1.1.Tổng quan thiết kế
Hình 3.10 Entity Relationship Diagram
Các entity màu xanh đậm là dữ liệu người dùng được lưu trên PostgreSQL,với PK (Primary Key) là khoá chính và FK (Foreign Key) là khoá ngoại.Các entity màu xanh nhạt là dữ liệu liên quan đến hội nhóm được lưu trênScyllaDB cluster, với P (Partition Key) xác định phân vùng và C (ClusteringKey) xác định thứ tự sắp xếp các dòng dữ liệu bên trong 1 partition.
3.4.1.2.Các thuộc tính của entity
Trang 40Bảng 3.5 Entity GroupByName