đồ án 2 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

92 0 0
Tài liệu đã được kiểm tra trùng lặp
đồ án 2 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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TINKHOA CÔNG NGHỆ PHẦN MỀM

Trang 2

LỜ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 4

3.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 5

3.2.2.6 Tuân thủ dữ liệu, sao lưu và khôi phục (Data Compliance, Backup &

Trang 6

CHƯƠ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 7

MỤ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 8

Hì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 9

Bả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 10

Bả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 11

CHƯƠ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 12

Việ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 13

cá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 14

CHƯƠ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 15

PostgreSQL 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 16

Prometheus 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 17

Grafana 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 18

CHƯƠ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 19

3.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 20

3.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 21

quả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 22

3.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 27

Mỗ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 28

3.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 29

Hì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 30

Hì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 32

Cù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 34

3.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 35

3.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 36

o 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 37

Việ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 38

File 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 39

3.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 40

Bảng 3.5 Entity GroupByName

Ngày đăng: 15/05/2024, 09:26

Tài liệu cùng người dùng

Tài liệu liên quan