1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services

128 23 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Tác giả Lê Đức Phong, Nguyễn Lương Phú Gia
Người hướng dẫn ThS. Trương Quang Phúc
Trường học Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh
Chuyên ngành Hệ thống nhúng và IoT
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2024
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 128
Dung lượng 7,44 MB

Cấu trúc

  • CHƯƠNG 1. TỔNG QUAN (16)
    • 1.1 GIỚI THIỆU ĐỀ TÀI (16)
      • 1.1.1 Đặt vấn đề (16)
      • 1.1.2 Tính cấp thiết của đề tài (17)
    • 1.2 MỤC TIÊU ĐỀ TÀI (18)
    • 1.3 TỔNG QUAN TÌNH HÌNH NGHIÊN CỨU (19)
      • 1.3.1 Tình hình nghiên cứu trong nước (19)
      • 1.3.2 Tình hình nghiên cứu ngoài nước (20)
    • 1.4 PHƯƠNG PHÁP NGHIÊN CỨU (21)
    • 1.5 BỐ CỤC ĐỀ TÀI (23)
  • CHƯƠNG 2. CƠ SỞ LÝ THUYẾT (24)
    • 2.1 TỔNG QUAN VỀ NODEJS (24)
      • 2.1.1 Giới thiệu về NodeJS (24)
      • 2.1.2 Ưu nhược điểm của NodeJS (26)
    • 2.2 TỔNG QUAN VỀ NODEJS FRAMEWORK EXPRESS (27)
      • 2.2.1 Giới thiệu về ExpressJS (27)
      • 2.2.2 Ưu nhược điểm của ExpressJS (28)
    • 2.3 TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB (29)
      • 2.3.1 Giới thiệu về MongoDB (29)
      • 2.3.2 Cách thức hoạt động của MongoDB (30)
      • 2.3.3 Ưu nhược điểm của MongoDB (31)
    • 2.4 TỔNG QUAN VỀ REACT NATIVE VÀ EXPO (32)
      • 2.4.1 Giới thiệu về React Native và Expo (32)
      • 2.4.2 Những ưu nhược điểm của React Native và Expo (33)
    • 2.5 TỔNG QUAN VỀ FIREBASE CLOUD MESSAGING (35)
    • 2.6 TỔNG QUAN VỀ JWT - JSONWEBTOKEN (36)
    • 2.7 TỔNG QUAN VỀ DOCKER (38)
      • 2.7.1 Giới thiệu về Docker (38)
      • 2.7.2 Ưu nhược điểm của Docker (40)
    • 2.8 TỔNG QUAN VỀ KUBERNETES (41)
      • 2.8.1 Các thành phần chính của Kubernetes (42)
      • 2.8.2 Ưu và nhược điểm của Kubernetes (45)
    • 2.9 TỔNG QUAN VỀ AMAZON WEB SERVICE (46)
      • 2.9.1 Giới thiệu về AWS (46)
      • 2.9.2 Điểm mạnh của AWS (47)
      • 2.9.3 Nhược điểm của AWS (48)
    • 2.10 TỔNG QUAN VỀ TERRAFORM (48)
      • 2.10.1 Giới thiệu về Terraform (48)
      • 2.10.2 Ưu nhược điểm của Terraform (50)
  • CHƯƠNG 3. THIẾT KẾ HỆ THỐNG (52)
    • 3.1 YÊU CẦU HỆ THỐNG (52)
    • 3.2 ĐẶC TẢ HỆ THỐNG (52)
      • 3.2.1 Mô hình tổng quát của hệ thống (52)
      • 3.2.2 Sơ đồ khối hệ thống (54)
    • 3.3 THIẾT KẾ PHẦN MỀM (55)
      • 3.3.1 Thiết kế kiến trúc hệ thống máy chủ (55)
      • 3.3.2 Hệ thống mô phỏng cảm biến triển khai bằng AWS (62)
      • 3.3.3 Thiết kế chức năng hệ thống (64)
      • 3.3.4 Thiết kế cơ sở dữ liệu (80)
      • 3.3.5 Thiết kế giao diện ứng dụng (84)
    • 3.4 THIẾT KẾ KIẾN TRÚC CƠ SỞ HẠ TẦNG (96)
      • 3.4.1 Xây dựng ứng dụng Docker chạy trên môi trường Kubernetes (96)
      • 3.4.2 Triển khai lên môi trường Kubernetes (99)
      • 3.4.3 Xây dựng tài nguyên cơ sở hạ tầng Amazon Web Services (102)
      • 3.4.4 Thiết kế tự động hóa quy trình phát triển phần mềm (103)
  • CHƯƠNG 4. KẾT QUẢ THỰC HIỆN (108)
    • 4.1 KẾT QUẢ MÔ PHỎNG CẢM BIẾN (108)
    • 4.2 KẾT QUẢ PHẦN MỀM (111)
      • 4.2.1 Kết quả giao diện quản lý cảm biến (111)
      • 4.2.2 Kết quả của giao diện hiển thị màn hình chính của ứng dụng (115)
      • 4.2.3 Kết quả của giao diện màn hình thông báo hệ thống (118)
      • 4.2.4 Kết quả chức năng gọi điện khi có cảnh báo nổ (119)
  • CHƯƠNG 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (122)
    • 5.1 KẾT LUẬN (122)
      • 5.1.1 Kết quả đạt được (122)
      • 5.1.2 Hạn chế (123)
    • 5.2 HƯỚNG PHÁT TRIỂN (124)
  • TÀI LIỆU THAM KHẢO (125)

Nội dung

1.1.2 Tính cấp thiết của đề tài Hệ thống báo cháy luôn là ưu tiên trong việc đảm bảo an toàn cho mọi công trình xây dựng, có khả năng phát hiện sớm nguy cơ cháy nổ và cảnh báo cho mọi n

TỔNG QUAN

GIỚI THIỆU ĐỀ TÀI

Cháy nổ luôn là vấn đề đã và đang gây ra hậu quả nghiêm trọng về người và tài sản Theo thống kê của Bộ Công an, trong 5 năm qua, số liệu cho thấy rằng hơn 17.000 vụ cháy đã xảy ra trên toàn quốc, khiến hơn 433 người thiệt mạng, hơn 700 người bị thương, và thiệt hại về tài sản ước tính lên đến hàng nghìn tỷ đồng Vấn đề về chữa cháy, phòng cháy mặc dù luôn được chú ý và cải thiện nhưng nó vẫn hiện đang là một trong những thách thức lớn của nhà nước ta [1]

Cháy nổ ở các khu vực đô thị, đặc biệt là trong các cộng đồng dân cư cao tầng và khu vực phức hợp dân cư và sản xuất kinh doanh, gây ra thiệt hại nghiêm trọng Nhiều vụ cháy đặc biệt nghiêm trọng về người thường xảy ra trong các khu nhà trọ, nhà ở và căn hộ mini, nơi mà cư dân có mức thu nhập từ trung bình đến thấp Đáng chú ý, các hệ thống báo cháy được sử dụng trong những khu vực này thường là công nghệ lạc hậu, đã xuất hiện từ nhiều thập kỷ trước và chưa được cập nhật hay cải tiến, góp phần vào mức độ rủi ro cao và hậu quả nặng nề của các vụ cháy Những khu vực trên tiềm ẩn nguy cơ phát sinh nhiều nguồn cháy khác nhau do người dân có đa dạng thói quen sinh hoạt, hạn chế về kiến thức và kỹ năng phòng cháy chữa cháy và tính chất địa hình thường rất khó để thoát hiểm, gây nhiều khó khăn cho quá trình ứng cứu và chữa cháy của lực lượng cứu hỏa khi có cháy xảy ra

Việc phòng chống hỏa hoạn và giảm thiểu các nguy cơ cháy nổ là công việc định kỳ, bắt buộc và đóng vai trò quan trọng trong việc đảm bảo an toàn trong cuộc sống thường nhật Trong các khu chung cư ở nước ta hiện nay, việc này đặc biệt được nhấn mạnh, bởi đây là nơi sinh sống tập trung của nhiều người, mật độ dân cư cao và thường là nhà cao, nhiều tầng Khi có hỏa hoạn xảy ra, ngọn lửa lan nhanh giữa các tầng nhà, khói độc tỏa ra khiến nhiều người bị ngạt, mắc kẹt tại chỗ khó thoát ra ngoài gây khó khăn trong việc cứu hộ, cứu nạn

Vì thế các hệ thống cảnh báo, phát hiện cháy nổ đóng vai trò quan trọng trong việc thông báo, cảnh báo trực tiếp đến người dân khi có sự cố xảy ra giúp người dân có thể kịp thời phản ứng và nhanh chóng sơ tán đến nơi an toàn, mà còn nâng cao ý thức phòng cháy, tự giám sát, chủ động hơn trong công tác phòng ngừa, tự bảo vệ mình trước các nguy cơ cháy nổ xảy ra

1.1.2 Tính cấp thiết của đề tài

Hệ thống báo cháy luôn là ưu tiên trong việc đảm bảo an toàn cho mọi công trình xây dựng, có khả năng phát hiện sớm nguy cơ cháy nổ và cảnh báo cho mọi người thông qua các thiết bị báo động như loa báo cháy, còi báo cháy, còi hú, đèn chớp, và có thể tự động kích hoạt liên hệ với cứu hỏa và có thể cung cấp vị trí của nơi xảy ra cháy nổ với các bên có liên quan Tuy nhiên, việc bảo dưỡng và kiểm tra tình trạng hoạt động định kỳ cho các hệ thống báo cháy hiện tại mất rất nhiều thời gian và công sức Ngoài ra, việc triển khai một mô hình tập trung để quản lý lượng dữ liệu lớn gửi về từ các thiết bị cảm biến Điều này dẫn đến việc xây dựng một hệ thống có khả năng xử lý dữ liệu từ nhiều thiết bị, cung cấp cảnh báo trạng thái hoạt động hoặc kiểm tra tình trạng hoạt động của hệ thống bất cứ lúc nào một cách dễ dàng là cực kì cần thiết.

Nghiên cứu và sử dụng thiết bị báo cháy đã có những tiến bộ đáng kể Các công nghệ báo cháy, thiết bị báo cháy nhiệt và báo khói ngày càng chính xác và hiện đại hơn, vì vậy việc phát triển hệ thống cần được chú trọng hơn để đảm bảo tính chính xác, giảm thiểu độ trễ, an toàn và thân thiện với người dùng Ngoài ra, sự bùng nổ của công nghệ Internet of Things đang mang lại những tiềm năng lớn để cải thiện khả năng tích hợp với nhiều thiết bị thông minh khác nhau Điều này sẽ tạo ra một hệ sinh thái kết nối giữa thiết bị và đám mây, cũng như giữa thiết bị với nhau

Hệ thống báo cháy sử dụng công nghệ IoT có mạng lưới cảm biến không dây, được lắp đặt tại các vị trí quan trọng trong khu vực có nguy cơ xảy ra cháy nổ cao như hầm xe, nơi lắp đặt hệ thống điện Các cảm biến này có khả năng thu thập dữ liệu về nhiệt độ, khói, khí gas và các yếu tố nguy cơ cháy nổ khác một cách liên tục và chính xác giúp nâng cao chất lượng giám sát và kịp thời đưa ra các cảnh báo về bất kỳ dấu hiệu bất thường tiềm ẩn nguy cơ cháy nổ và gửi tin báo cháy đến trung tâm thông tin phòng cháy chữa cháy là hoàn toàn mang tính khả thi và cấp thiết.

Với tính tiện ích và sự phổ biến, điện thoại thông minh đã trở thành một phần không thể thiếu trong cuộc sống hàng ngày của con người Hệ thống báo cháy kết hợp công nghệ IoT và cơ sở hạ tầng Cloud, bao gồm gửi thông báo, SMS, Email, gọi điện, và quản lý các node cảm biến được xây dựng trên nền tảng ứng dụng điện thoại thông minh là một giải pháp thiết thực Cách tiếp cận này sẽ gia tăng tỷ lệ người dùng có thể nhanh chóng nhận được thông tin cảnh báo cháy nổ, đồng thời cải thiện tính hiệu quả trong thời gian xử lý và khắc phục sự cố.

MỤC TIÊU ĐỀ TÀI

Mục tiêu của đề tài là phát triển hệ thống hệ thống giám sát và phản ứng cháy nổ thông qua ứng dụng điện thoại di động Hệ thống giúp người dùng có thể tự theo dõi, giám sát các sự thay đổi và dấu hiệu cảnh báo về nguy cơ có thể xảy ra cháy nổ trong không gian sinh hoạt cá nhân điển hình như căn hộ, phòng trọ, chung cư Nhóm thực hiện đề tài đã tập trung vào các vấn đề chính như sau:

- Thu thập và theo dõi dữ liệu từ các thiết bị cảm biến liên quan như cảm biến khói, gas, nhiệt độ, cảm biến lửa Ứng dụng cung cấp giao diện để người dùng giám sát các chỉ số này

- Phát hiện và cảnh báo, thông báo cho người dùng nếu có các thay đổi trạng thái cảnh báo cháy, các thông báo này thể hiện trên điện thoại thông qua thông báo đẩy, các dạng âm thanh cảnh báo, tin nhắn, số điện thoại và email

- Xác định được vị trí chính xác của vụ cháy xảy ra, ở địa điểm nào trong căn hộ, tầng nào, số nhà nào, địa chỉ của tòa nhà, khu dân cư, từ đó giúp cho lực lượng chữa cháy biết được vị trí chính xác và người dùng ứng dụng cũng có thể nhanh chóng khoanh vùng vị trí cháy nổ trong nhà của mình để có thể thực hiện các biện pháp ứng phó đầu tiên

- Tích hợp các giải pháp, dịch vụ của hệ thống đám mây AWS để cải thiện hiệu suất và tính linh hoạt của phần mềm Việc sử dụng các dịch vụ đám mây không chỉ giúp giảm thiểu rủi ro mất dữ liệu mà còn tăng khả năng mở rộng của hệ thống khi cần thiết

Bằng cách đạt được các mục tiêu trên, hệ thống dự kiến sẽ nâng cao nhận thức về nguy cơ cháy nổ cho người dùng, đồng thời giúp phát hiện và ứng phó kịp thời với các nguy cơ cháy nổ, cũng như đưa ra các phương pháp khắc phục phù hợp, góp phần hạn chế thiệt hại về người và tài sản.

TỔNG QUAN TÌNH HÌNH NGHIÊN CỨU

Trong mục tình hình nghiên cứu, nhóm thực hiện đề tài sẽ trình bày về các đề tài nghiên cứu trước đây của trong nước cũng như nước ngoài, nêu rõ ưu điểm và nhược điểm của các hệ thống đã có, đồng thời rút ra những kinh nghiệm để làm nền tảng cho việc hình thành và phát triển đề tài của nhóm Trên cơ sở đó, nhóm sẽ đề xuất các phương án thực hiện hiệu quả và tối ưu, nhằm đảm bảo đề tài được xây dựng một cách khoa học, chuyên nghiệp và toàn diện cho toàn bộ hệ thống

1.3.1 Tình hình nghiên cứu trong nước

Về nghiên cứu trong nước, hiện nay đã và đang có nhiều đề tài nghiên cứu về lĩnh vực phòng cháy chữa cháy, bao gồm các nghiên cứu về phòng cháy chữa cháy cho khu vực dân cư, nhà ở, và kết hợp với sản xuất kinh doanh Một số đề tài tiêu biểu về lĩnh vực thiết kế hệ thống cảnh báo cháy nổ có thể kể đến như:

Nghiên cứu khoa học "Thiết kế hệ thống cảnh báo cháy trong tòa nhà cao tầng" của các tác giả Phạm Ngọc Pha và Nguyễn Trọng Hiếu, thuộc Viện Nghiên cứu Sáng chế và Khai thác Công nghệ, Trường Đại học Công Nghệ, Đại học Quốc gia

Hà Nội, nhằm phát triển một thiết bị phát hiện và cảnh báo cháy hiệu quả cho môi trường trong nhà Bài báo đặc biệt tập trung vào việc nghiên cứu và phát triển các giải pháp để phát hiện khói từ đám cháy, thu thập dữ liệu hình ảnh từ khu vực cháy, và phát triển một hệ thống cảnh báo sớm Ngoài ra, bài báo cũng khám phá cách thức truyền dữ liệu thu thập được về trung tâm điều khiển thông qua mạng của các node cảm biến, từ đó cải thiện khả năng giám sát và phát hiện cháy nổ tại các vị trí khác nhau trong tòa nhà [2]

Trong lĩnh vực phát triển thiết bị báo cháy, nghiên cứu "Nghiên cứu, phát triển thiết bị báo cháy thông minh" của nhóm tác giả Trần Như Chí và Trần Hoài An từ Trường Đại học Công nghệ, Đại Học Quốc Gia Hà Nội, đã tập trung vào việc thiết kế một hệ thống báo cháy thông minh, nhỏ gọn và có chi phí thấp, thích hợp cho cả các tòa nhà cao tầng và hộ gia đình Hệ thống này bao gồm cảm biến phát hiện khói, bo mạch điện tử, và một vỏ hộp được sản xuất bằng công nghệ in 3D và chế tạo mạch điện tử đa lớp Nó không chỉ phát hiện và cảnh báo cháy tại chỗ qua còi báo động mà còn có khả năng tự động gửi tin nhắn và gọi điện đến số điện thoại được cài đặt trước để báo động nguy cơ hỏa hoạn Ngoài ra, hệ thống còn được trang bị nguồn dự phòng, đảm bảo hoạt động liên tục ngay cả khi có sự cố mất điện đột ngột [3]

Các nghiên cứu trên tập trung vào việc nghiên cứu và phát triển thiết bị phát hiện cháy thông minh và hệ thống cảnh báo cháy với mục tiêu tăng cường khả năng phát hiện và xử lý dấu hiệu cháy nổ Tuy nhiên, các dự án này hiện chỉ mang tính cục bộ, được xử lý và đưa ra cảnh báo cháy tại một khu vực cố định Chúng chưa có sự tích hợp với hệ thống quản lý, ứng dụng giao tiếp người dùng trên nhiều thiết bị, nhằm tạo ra một giao diện thân thiện để tăng cường sự tương tác và thông tin trao đổi giữa các thiết bị và người sử dụng tại nhiều cơ sở hạ tầng cũng như các khu vực khác nhau

Như đã đề cập, công nghệ IoT đã và đang được nghiên cứu và ứng dụng hàng ngày trong cuộc sống, cho phép các thiết bị có khả năng tương tác và giao tiếp lẫn nhau trên môi trường Internet Thêm vào đó, với sự ra đời và phát triển nhanh chóng của cơ sở hạ tầng điện toán đám mây (Cloud Computing), việc tích hợp các thiết bị này lại với nhau, giúp chúng có khả năng giao tiếp và được quản lý tập trung trên một giao diện người dùng, trở nên hoàn toàn khả thi Điều này nâng cao tính chính xác và khả năng cảnh báo cháy nổ tới mức tối đa

1.3.2 Tình hình nghiên cứu ngoài nước

Về tình hình nghiên cứu ngoài nước các nghiên cứu về hệ thống báo cháy, phản ứng cháy nổ là chủ đề được đề cập trong nhiều nghiên cứu về phát triển các đề tài nghiên cứu về phát triển dựa trên công nghệ IoT điển hình như đề tài [4] nhóm tác giả tập trung xây dựng một hệ thống sử dụng IoT gồm các nút cảm biến được phân bố khắp các khu vực cần lắp đặt, mỗi nút này có chứa một vi điều khiển ESP8266 Nodemcu xử lý cảm biến khí CO2, lửa, khói, độ ẩm và nhiệt độ, để liên tục theo dõi môi trường xung quanh để phát hiện sự tồn tại của đám cháy Các nút này thiết lập mạng không dây riêng của chúng và kết nối với một hệ thống trung tâm dựa trên vi điều khiển Raspberry Pi với một mô-đun 4G Advance LTE Khi một nút phát hiện một đám cháy, nó gửi tín hiệu đến một nút trung tâm, đảm bảo rằng tin nhắn SMS được gửi đến phòng cứu hỏa và người dùng, và cũng thông báo thông qua cuộc gọi và kích hoạt còi báo Hệ thống đề xuất thực hiện thành công các chức năng cần thiết với một độ trễ trung bình là 20 giây Đây là một hệ thống có thể là hoàn chỉnh về mặt thu thập dữ liệu và xử lý thông tin về cảnh báo cháy bằng hệ thống node cảm biến có khả năng liên kết và mở rộng, cho phép truyền tải thông tin về sự cố cháy một cách hiệu quả và nhanh chóng qua mạng 4G Advance LTE Tuy nhiên độ trễ trung bình của hệ thống khi thực nghiệm là 20 giây, có thể là một khoảng thời gian lớn trong một tình huống khẩn cấp như đám cháy Việc giảm thiểu độ trễ sẽ là một yếu tố quan trọng để cải thiện hiệu suất và độ tin cậy của hệ thống

Trong [5] tác giả đề cập đến việc kết hợp hai công nghệ chính là Internet of Things (IoT) và Trí Tuệ Nhân Tạo (AI) AI tích hợp các cảm biến với bo mạch Arduino Nano để chuyển đổi dữ liệu tương tự thành dữ liệu kỹ thuật số để ra quyết định Công nghệ IoT gửi các dữ liệu số đã chuyển đổi đến cơ quan hoặc người dùng phù hợp Hệ thống bao gồm các cảm biến nhiệt độ, khói, gas và GPS, kết hợp với một mô-đun GSM SIM900, hệ thống có khả năng phát hiện cháy, lửa, rò rỉ khí và khói, và gửi thông báo SMS chứa vị trí chính xác của sự cố đến người dùng Hệ thống cũng có khả năng ngắt nguồn cho tòa nhà khi phát hiện cháy và được đặt ngưỡng cho mỗi cảm biến để kích hoạt cảnh báo

Có thể thấy việc áp dụng được AI trong việc xử lý tệp dữ liệu từ cảm biến giúp ta hiệu quả hơn trong việc dự đoán, xử lý dữ liệu từ cảm biến và loại bỏ những dữ liệu nhiễu gây ra việc gửi thông báo giả và đây cũng là xu hướng khi phát triển các hệ thống báo cháy nếu sử dụng AI đưa ra các quyết định cảnh báo, giúp hệ thống phản ứng nhanh hơn, hiệu quả hơn.

PHƯƠNG PHÁP NGHIÊN CỨU

❖ Xác định mục tiêu nghiên cứu: Mục tiêu nghiên cứu là tạo ra một hệ thống có khả năng tích hợp các thiết bị cảnh báo cháy có sẵn trong mô hình kết nối vạn vật (IoT), đảm bảo tối ưu hiệu suất của hệ thống và có khả năng cung cấp cảnh báo nguy cơ cháy nổ một cách nhanh chóng và hiệu quả, gia tăng tối đa an toàn cho người dùng

❖ Nghiên cứu về xây dựng hệ thống IoT: Nhóm phát triển đề tài đã tiến hành nghiên cứu bằng cách tìm hiểu các tài liệu liên quan đến thiết kế kết nối IoT và thiết kế web, ứng dụng và việc xây dựng mô hình cho hệ thống như sau:

• Sử dụng mô hình thiết kế ứng dụng Web phổ biến được sử dụng trong lĩnh vực IoT đó là MERN stack (MongoDB, ExpressJS, ReactJS/ React Native, NodeJS) đáp ứng việc xử lý các dữ liệu từ sensor, phần cứng IoT, cung cấp khả năng xử lý dữ liệu thời gian thực, phù hợp với yêu cầu của hệ thống cảnh báo cháy nổ, đồng thời đảm bảo tính khoa học và hiệu quả

• Nghiên cứu về các giao thức truyền thông như HTTP, MQTT, Websocket được chúng tôi sử dụng giữa các thiết bị IoT và hệ thống để có thể xây dựng một hệ thống IoT đáng tin cậy có thể kết hợp với các hệ thống phần cứng về cảnh báo cháy nổ khác nhau, giúp truyền tải thông tin một cách hiệu quả giữa các thiết bị và hệ thống phần mềm

❖ Phân tích, tham khảo các kiến trúc hệ thống đám mây AWS:

Tham khảo các kiến trúc phù hợp để đảm bảo rằng hệ thống có thể mở rộng và linh hoạt trong việc xử lý lưu lượng dữ liệu từ các thiết bị IoT và cung cấp các tính năng bổ sung như an ninh, sao lưu và khôi phục

• Sử dụng các dịch vụ của AWS như AWS EC2, AWS IoT Core, AWS SNS, AWS S3, AWS DynamoDB, VPC

• Tìm hiểu các quy trình triển khai ứng dụng và cơ sở hạ tầng bằng Docker, Kubernetes, Terraform cùng các công cụ Automation, bổ trợ cho quá trình phát triển phần mềm khác

❖ Đánh giá và kiểm thử: Đánh giá hoạt động của các chức năng ứng dụng và đánh giá khả năng tương thích và hiệu quả Bằng các quy trình unit test, kiểm thử cũng là quy trình quan trọng trong quá trình nghiên cứu để giảm thiểu các lỗi, sai sót trong quá trình thực hiện đề tài và những vấn đề cần được cải tiến.

BỐ CỤC ĐỀ TÀI

Chương này trình bày cái nhìn tổng quan về đề tài, bao gồm tính cấp thiết, lý do chọn đề tài, mục tiêu, tình hình nghiên cứu, phương pháp nghiên cứu, và bố cục của đề tài

• Chương 2: Cơ sở lý thuyết

Trong chương này giới thiệu sơ lược về công cụ phần mềm chính được sử dụng trong đề tài bao gồm MERN Stack, giao thức truyền thông HTTP, MQTT, Websocket, các dịch vụ Amazon Web Services như EC2, IoT Core, SNS, S3, DynamoDB Đồng thời chương này cũng giới thiệu về Docker, Kubernetes và Terraform, các công cụ quan trọng để tự động hóa quy trình triển khai ứng dụng và quản lý hạ tầng của hệ thống.

• Chương 3: Thiết kế hệ thống

Trình bày về thiết kế hệ thống, thiết kế mô phỏng dữ liệu của nhiều cảm biến, tính toán thiết kế từng khối hoạt động ở backend, giới thiệu giao diện frontend, chức năng của ứng dụng di động giao tiếp với người dùng, quy trình thực hiện một sản phẩm phần mềm IoT và triển khai trên môi trường Amazon Cloud Services.

Chương này trình bày kết quả các thành phần chức năng của hệ thống, phương thức phát hiện, cảnh báo và thông báo về ứng dụng của người dùng

• Chương 5: Kết luận và hướng phát triển

Tóm tắt những kết quả chính và kết luận về đề tài nghiên cứu, đồng thời đề xuất những hướng mở rộng, phát triển tiếp theo của đề tài trong tương lai, bao gồm cả những ý tưởng mới và tiềm năng ứng dụng thực tế.

CƠ SỞ LÝ THUYẾT

TỔNG QUAN VỀ NODEJS

NodeJS là một môi trường chạy mã nguồn mở phổ biến được sử dụng cho các ứng dụng web và đa nền tảng NodeJS cho phép các nhà phát triển và tận dụng nó để tạo các ứng dụng web có tính linh hoạt và mạnh mẽ nhờ sử dụng đồng bộ hóa, xử lý đa luồng và xử lý dữ liệu trên máy chủ Ngoài ra, NodeJS, một nền tảng JavaScript, cho phép các nhà phát triển tạo ra các ứng dụng web bằng cách sử dụng các ngôn ngữ lập trình phổ biến như JavaScript, HTML và CSS [6]

• Lịch sử hình thành của NodeJS

Node.js là một phần của Công cụ JavaScript V8 của Google Chrome Ryan Dahl đã phát triển Node.js vào năm 2009 và nó sử dụng vòng lặp sự kiện và API I/O cấp thấp để quản lý nhiều kết nối đồng thời Điều này làm cho nó trở nên lý tưởng cho các ứng dụng liên quan đến thời gian thực, chẳng hạn như trò chuyện trực tuyến và trò chơi trực tuyến Node.js đã trở thành một trong những nền tảng phổ biến nhất để tạo ứng dụng web Netflix, Uber và PayPal là một số công ty lớn đã sử dụng nó [7]

Dưới đây là một số mốc quan trọng trong lịch sử phát triển của Node.js:

- 2009: Node.js được phát hành lần đầu tiên

- 2010: Trình quản lý gói npm được giới thiệu

- 2011: Phiên bản Windows gốc của Node.js được phát hành

- 2012: Ryan Dahl bước sang một bên và Isaac Schlueter trở thành người quản lý dự án

- 2014: io.js, một nhánh của Node.js, được tạo ra

- 2015: Node.js Foundation được thành lập và Nodejs và io.js được hợp nhất lại với nhau

- 2018: Demo, một thay thế Node.js dựa trên TypeScript, được phát hành

- 2019: JS Foundation và Node.js Foundation hợp nhất để tạo thành OpenJS Foundation

Node.js vẫn đang được phát triển và cải thiện và là một nền tảng mạnh mẽ và linh hoạt có thể được sử dụng để xây dựng nhiều loại ứng dụng web [6]

Hình 2 1 Kiến trúc của NodeJS [6]

Node.js áp dụng mô hình xử lý đơn luồng dựa trên sự kiện, khác với mô hình đa luồng mà nhiều môi trường runtime khác sử dụng Trong mô hình đa luồng, mỗi yêu cầu sẽ được xử lý bởi một luồng riêng lẻ cho đến khi tất cả các luồng có sẵn bị chiếm dụng, buộc máy chủ phải chờ đợi cho đến khi một luồng trở nên rảnh rỗi Điều này có thể làm chậm ứng dụng và giảm hiệu quả, gây ảnh hưởng tiêu cực đến trải nghiệm người dùng Ngược lại, Node.js xử lý tất cả các yêu cầu từ ứng dụng bởi duy nhất một luồng xử lý chính, sử dụng vòng lặp sự kiện để thực hiện các hoạt động I/O không đồng bộ, từ đó tăng cường hiệu suất xử lý đồng thời cải thiện tốc độ, phản hồi về ứng dụng [7]

- Event Queue: hàng đợi sự kiện là nơi tất cả các sự kiện (event) đã đi vào sẽ lần lượt được xử lý theo cơ chế FIFO, tức là các sự kiện đến server trước sẽ được NodeJS xử lý trước, các sự kiện đến server sau sẽ được xử lý sau

- Callbacks: là các thao tác, các xử lý, các hàm sẽ được thực hiện sau khi đã thực thi hoàn thành một hàm định nghĩa callback Việc sử dụng callback giúp cho lập trình viên quản lý các vấn đề về

- Message: nội dung thông báo tương ứng với từng callback

- Blocking I/O: là một cơ chế được sử dụng trong nhiều ngôn ngữ bên cạnh server Nó quản lý các yêu cầu gửi đến server và lần lượt thực hiện các yêu cầu của yêu cầu tiếp theo sau khi yêu cầu đang xử lý đã hoàn thành

- Thread Pool là một chương trình được viết bởi ngôn ngữ lập trình C++, được tích hợp vào NodeJS cho phép xử lý nhiều luồng Đây là môi trường xử lý chung và đóng vai trò chính cho tất cả các tác vụ được xử lý bởi server NodeJS, và các tác vụ này được xử lý trên nhiều luồng

- Event Loop: là một vòng lặp vô tận chuyển các yêu cầu đã nhận được sang Threadpool đồng thời tự động đăng ký một Callback cho mỗi yêu cầu Mỗi khi yêu cầu được xử lý xong, hàm Callback tương ứng sẽ được thực thi [8]

2.1.2 Ưu nhược điểm của NodeJS

Node.js được thiết kế dựa trên mô hình hướng sự kiện, điều này nhằm giúp I/O không đồng bộ nhưng vẫn hoạt động hiệu quả, xử lý nhiều sự kiện đồng thời trong một luồng đơn Điều này giúp Node.js trở nên nhẹ, nhanh, có thể mở rộng và hiệu quả trong việc xử lý các tác vụ I/O và dữ liệu lớn, rất phù hợp cho một số ứng dụng web nhất định Với những lợi thế này, Node.js được sử dụng rất phổ biến trong các ứng dụng, nghiên cứu về lĩnh vực IoT [9] Dưới đây là một số ưu điểm nổi bật của Node.js:

- Internet of Things (IoT): IoT là một mạng lưới các thiết bị như cảm biến, các thiết bị nhúng có chứa các vi xử lý, vi điều khiển, cho phép tạo ra nhũng kết nối giữa các thiết bị này và trao đổi dữ liệu lẫn nhau nhằm phục vụ các ứng dụng IoT trên nền tảng từ các thiết bị điện tử Với kiến trúc dựa trên sự kiện và xử lý không đồng bộ, các máy chủ Node.js rất thích hợp cho các tác vụ I/O nặng trong hệ thống IoT, có thể bao gồm hàng nghìn thiết bị Khi Node.js được sử dụng nó đại diện một lớp ứng dụng giữa các thiết bị, cảm biến tạo ra cơ sở dữ liệu lưu trữ dữ liệu giúp hiệu suất được cải thiện đáng kể

- Trò chuyện thời gian thực: Node.js cung cấp mọi thành phần cần thiết để xây dựng các ứng dụng trò chuyện thời gian thực với mức độ phức tạp khác nhau API sự kiện mạnh mẽ của Node.js cho phép tạo các bộ phát sự kiện và sau đó phân tán các sự kiện được đặt tên cho bộ xử lý sự kiện Tính năng này hỗ trợ triển khai các thông báo đẩy, thường được sử dụng trong nhắn tin trong ứng dụng cần tính nhanh chóng, lập tức

- Fullstack JavaScript: Trước khi Node.js ra đời, JavaScript chỉ được sử dụng cho phát triển phía khách hàng Việc sử dụng các ngôn ngữ lập trình khác nhau cho phía máy chủ và máy khách là cần thiết Tuy nhiên, với sự xuất hiện của Node.js, JavaScript đã trở thành một ngôn ngữ fullstack, cho phép các nhà phát triển sử dụng cùng một ngôn ngữ cho cả front-end và back-end Điều này làm cho việc phát triển ứng dụng web trở nên dễ dàng và hiệu quả hơn nhiều [9]

Bên cạnh những lợi ích mà NodeJS mang lại, nó cũng có một số nhược điểm, bao gồm:

- Đa luồng chưa tốt: NodeJS được biết đến là một platform đơn luồng, vì vậy nó chỉ xử lý tất cả các yêu cầu bằng một luồng Nói cách khác, NodeJS xử lý kém các ứng dụng có các tình huống cần xử lý đa luồng

- NodeJS thường được sử dụng để phát triển các ứng dụng nhiều I/O Do đó, nó không phù hợp với các ứng dụng sử dụng nhiều CPU NodeJS sẽ không phù hợp với các ứng dụng sử dụng nhiều CPU

TỔNG QUAN VỀ NODEJS FRAMEWORK EXPRESS

Một framework phổ biến được xây dựng dựa trên Nodejs là Expressjs Nó cung cấp các khả năng vượt trội cho phát triển web và ứng dụng di động Các API mạnh mẽ và dễ sử dụng được tạo ra bởi Expressjs, được hỗ trợ bởi các phương pháp HTTP và middleware [8]

- Phát triển máy chủ: ExpressJS có khả năng cung cấp nhiều phương thức và các hàm, thư viện để xử lý các nhu cầu tạo ra tác vụ lập trình web phổ biến, đồng thời tối ưu hóa cú pháp lập trình

- Hệ thống định tuyến (Routing): Hệ thống định tuyến mạnh mẽ của ExpressJS cung cấp khả năng xác định các tuyến đường để xử lý yêu cầu và phản hồi từ người dùng một cách hiệu quả Điều này giúp dễ dàng sắp xếp, quản lý các phần của ứng dụng, và nâng cao trải nghiệm người dùng

- Middleware: Hỗ trợ việc sử dụng middleware cho các công việc thêm chức năng trung gian trong các quá trình xử lý yêu cầu và phản hồi Middleware mang tính linh hoạt cao, hỗ trợ nhiều nhiệm vụ như xác thực người dùng, xử lý lỗi, nén dữ liệu, và nhiều tác vụ khác

- Cấu hình môi trường: ExpressJS không chỉ cung cấp phương tiện để cấu hình môi trường cho cả giai đoạn phát triển và sản xuất, mà còn cho phép người dùng linh hoạt thiết lập các biến môi trường, định dạng và quy tắc cấu hình Điều này giúp tạo ra các ứng dụng có thể thích ứng và phát triển một cách hiệu quả trên nhiều môi trường và mục tiêu cụ thể khác nhau

- Xử lý lỗi: Cơ chế xử lý lỗi của ExpressJS cho phép bạn kiểm soát và xử lý các lỗi xảy ra trong quá trình xử lý yêu cầu, tạo middleware để xử lý lỗi và phản hồi bằng các thông báo lỗi tùy chỉnh [8]

2.2.2 Ưu nhược điểm của ExpressJS

- Linh hoạt: ExpressJS là một framework linh hoạt, không áp đặt bất kỳ một cấu trúc ứng dụng cụ thể nào, cho phép các nhà phát triển tự do tạo ra các giải pháp tùy biến theo nhu cầu cụ thể của dự án Điều này thúc đẩy sự sáng tạo và cho phép các lập trình viên thích ứng với nhiều loại dự án khác nhau

- Hỗ trợ Middleware mạnh mẽ: ExpressJS cung cấp một hệ thống middleware mạnh mẽ, giúp quản lý các tác vụ như xác thực người dùng, ghi nhật ký hoạt động, nén dữ liệu và xử lý các yêu cầu vào/ra một cách hiệu quả Hệ thống này tạo điều kiện cho việc xây dựng các ứng dụng phức tạp trở nên đơn giản hơn

- Hiệu suất cao và Tính mở rộng: Dựa trên nền tảng của Node.js, ExpressJS tận dụng hiệu quả khả năng xử lý non-blocking của Node.js để xử lý nhiều yêu cầu cùng một lúc Điều này không chỉ cải thiện hiệu suất mà còn tăng cường khả năng mở rộng của ứng dụng

- Quản lý và mở rộng: Trong khi linh hoạt mang lại lợi ích, nó cũng có thể trở thành một thách thức khi ứng dụng phát triển lớn hơn và phức tạp hơn Việc thiếu một cấu trúc ứng dụng rõ ràng có thể gây khó khăn trong việc duy trì mã nguồn, đặc biệt khi làm việc trong các nhóm lớn hoặc khi chuyển giao dự án cho nhà phát triển mới

- Hỗ trợ từ cộng đồng và tích hợp framework: Mặc dù ExpressJS có một cộng đồng hỗ trợ rộng lớn và nguồn tài liệu dồi dào, nó không có sự tích hợp sâu với các framework front-end như Angular hoặc React như một số lựa chọn khác (ví dụ như NestJS) Điều này có thể làm tăng độ phức tạp và thời gian phát triển khi tích hợp các công nghệ này

- Bảo mật: Trong khi ExpressJS cung cấp cơ bản cho việc xây dựng ứng dụng web, các nhà phát triển cần phải tự mình triển khai các biện pháp bảo mật Điều này đòi hỏi hiểu biết sâu sắc về các vấn đề bảo mật và có thể gây ra rủi ro nếu không được thực hiện đúng cách.

TỔNG QUAN VỀ HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU MONGODB

MongoDB là một hệ thống quản lý cơ sở dữ liệu NoSQL có mã nguồn mở, được phát triển bởi công ty MongoDB Inc Hệ thống này sử dụng giấy phép ServerSide Public License (SSPL) và là một trong những giải pháp lưu trữ dữ liệu phổ biến nhất trong lĩnh vực công nghệ hiện nay Với đặc điểm lưu trữ dữ liệu theo dạng tài liệu JSON, MongoDB mang lại sự linh hoạt vượt trội cho các ứng dụng, cho phép chúng thích ứng nhanh chóng với các yêu cầu thay đổi của dữ liệu MongoDB được thiết kế để hỗ trợ lưu trữ phân tán, điều này không chỉ giúp cải thiện độ tin cậy và sẵn sàng của dữ liệu, mà còn tăng khả năng mở rộng của hệ thống Các tính năng chính của MongoDB bao gồm indexing để nâng cao hiệu quả truy vấn, replication đảm bảo tính sẵn sàng và độ bền của dữ liệu, sharding để quản lý lượng dữ liệu lớn, và map-reduce hỗ trợ xử lý và phân tích dữ liệu lớn một cách hiệu quả [10]

2.3.2 Cách thức hoạt động của MongoDB

MongoDB hoạt động dưới dạng tiến trình dịch vụ ngầm; nó liên tục mở cổng (cổng mặc định là 27017) để xử lý các yêu cầu truy vấn và thao tác từ các ứng dụng gửi vào trước khi bắt đầu xử lý

Hình 2 2 Kiến trúc của MongoDB [11]

Hình 2.1 minh họa kiến trúc sharding của MongoDB, một cơ chế phân tán dữ liệu hiệu quả nhằm tăng cường hiệu suất và khả năng mở rộng Trong kiến trúc này, các ứng dụng giao tiếp với MongoDB thông qua driver và gửi yêu cầu tới các query router, hay còn gọi là mongos Mongos có nhiệm vụ định tuyến các truy vấn đến shard phù hợp, mỗi shard đại diện cho một phần dữ liệu của cơ sở dữ liệu Trong mỗi shard, node Primary chịu trách nhiệm xử lý các thao tác ghi, trong khi các node Secondary sao chép dữ liệu từ Primary để đảm bảo độ bền và sự sẵn sàng của dữ liệu Cấu trúc này không chỉ giúp quản lý hiệu quả các lượng lớn dữ liệu mà còn tối ưu hóa quá trình truy vấn, đồng thời đảm bảo tính ổn định và an toàn cho dữ liệu

MongoDB không yêu cầu một cấu trúc cơ sở dữ liệu cố định, điều này mang lại tính linh hoạt cao cho các ứng dụng, đặc biệt là khi cần xử lý các thay đổi dữ liệu thường xuyên hoặc với những ứng dụng không có cấu trúc dữ liệu cố định Mỗi bản ghi trong MongoDB được tự động gán một trường có tên '_id' với kiểu dữ liệu ObjectId, giúp thực hiện các thao tác tìm kiếm và truy vấn sau này cũng như phân biệt các bản ghi với nhau Trường '_id' này luôn được đánh index để tăng tốc độ truy vấn Khi truy vấn dữ liệu, các bản ghi được ghi đệm vào bộ nhớ RAM, cho phép truy vấn nhanh hơn trong các lần truy vấn tiếp theo mà không cần phải đọc lại từ ổ cứng [11]

2.3.3 Ưu nhược điểm của MongoDB

- Tính linh hoạt: Không giới hạn bởi một mô hình cơ sở dữ liệu quan hệ cụ thể, MongoDB cho phép lưu trữ dữ liệu một cách linh hoạt, không yêu cầu một cấu trúc cố định Điều này tạo điều kiện thuận lợi để lưu trữ dữ liệu ở bất kỳ dạng nào, bất kỳ khi nào, giúp thích ứng tốt với nhu cầu thay đổi liên tục của các ứng dụng hiện đại

- Khả năng mở rộng: Với tính năng sharding, MongoDB có thể phân chia và lưu trữ dữ liệu trên nhiều máy chủ, điều này không chỉ giúp cải thiện hiệu suất mà còn làm tăng khả năng mở rộng của hệ thống một cách hiệu quả

- Tốc độ truy xuất nhanh: MongoDB có khả năng xử lý các truy vấn dữ liệu nhanh hơn so với các hệ thống cơ sở dữ liệu quan hệ truyền thống, đảm bảo tốc độ truy xuất dữ liệu nhanh chóng và hiệu quả

- Tính khả dụng cao: MongoDB hỗ trợ các tính năng sao lưu và phục hồi dữ liệu, cùng với các biện pháp bảo vệ dữ liệu khỏi các mối đe dọa không mong muốn, giúp đảm bảo tính khả dụng cao của hệ thống dữ liệu

- Dễ sử dụng: MongoDB cung cấp các công cụ quản lý dữ liệu trực quan và dễ sử dụng, giúp người dùng dễ dàng quản lý, theo dõi và tối ưu hóa dữ liệu mà không cần nhiều chuyên môn kỹ thuật phức tạp [10]

Những ưu điểm này làm cho MongoDB trở thành một giải pháp cơ sở dữ liệu NoSQL hấp dẫn, đặc biệt phù hợp với các ứng dụng yêu cầu tính linh hoạt cao và khả năng mở rộng lớn

MongoDB, mặc dù nổi tiếng về tính linh hoạt và khả năng mở rộng, có một số hạn chế cần được xem xét Đầu tiên, việc phân trang dữ liệu phải thực hiện thủ công, có thể gây khó khăn trong xử lý hiệu suất truy vấn khi làm việc với dữ liệu lớn Thiếu một thiết kế cơ sở dữ liệu ban đầu chi tiết cũng có thể dẫn đến truy vấn không hiệu quả và lỗi Ngoài ra, MongoDB đòi hỏi một lượng lớn bộ nhớ để lưu trữ dữ liệu, tăng chi phí phần cứng Cuối cùng, giới hạn kích thước tài liệu 16MB có thể là một rào cản trong việc quản lý và lưu trữ dữ liệu lớn [10].

TỔNG QUAN VỀ REACT NATIVE VÀ EXPO

2.4.1 Giới thiệu về React Native và Expo

React Native là một framework mã nguồn mở được phát triển bởi Facebook, cho phép phát triển ứng dụng di động đa nền tảng (Android, iOS, Web) bằng cách sử dụng React - một thư viện JavaScript nổi tiếng React Native được thiết kế để giải quyết các thách thức về hiệu năng của các giải pháp ứng dụng hybrid và giảm chi phí phát triển bằng cách cho phép viết một mã nguồn chung cho cả Android và iOS Điều này không chỉ giúp tiết kiệm thời gian và nguồn lực mà còn đảm bảo tính nhất quán trong tính năng giữa các nền tảng React Native cung cấp trải nghiệm gần gũi với ứng dụng gốc, nhờ sử dụng các thành phần giao diện người dùng bản địa, từ đó nâng cao hiệu suất ứng dụng Cộng đồng phát triển của React Native rất mạnh mẽ, cung cấp nhiều thư viện và công cụ hỗ trợ, giúp rút ngắn thời gian phát triển và cải thiện chất lượng sản phẩm [12]

• Môi trường phát triển React Native - Expo

Expo là một framework bổ trợ cho React Native, giúp đơn giản hóa và tăng tốc quá trình phát triển ứng dụng di động đa nền tảng Expo cung cấp một lớp API bổ sung, giúp tương tác với React Native dễ dàng hơn và bao gồm các công cụ hỗ trợ khởi tạo, kiểm thử và triển khai ứng dụng mà không cần cài đặt các công cụ phức tạp như Android Studio hay Xcode Nó cũng hỗ trợ cập nhật ứng dụng trực tiếp

"over-the-air" và có một loạt các API cho các tính năng phổ biến như camera, định vị GPS, và cảm biến chuyển động Đặc biệt, Expo cung cấp một dịch vụ push notification tích hợp sẵn, giảm bớt đáng kể sự phức tạp của việc thiết lập thông báo đẩy trên các nền tảng khác nhau Điều này làm cho Expo trở thành một giải pháp lý tưởng cho cả nhà phát triển mới và những người có kinh nghiệm, nhờ khả năng giảm thiểu rào cản kỹ thuật và tối ưu hóa quá trình phát triển ứng dụng [13]

2.4.2 Những ưu nhược điểm của React Native và Expo

❖ Ưu nhược điểm của React Native

- Tái sử dụng mã nguồn: Một trong những lợi thế lớn nhất của React Native là khả năng tái sử dụng mã nguồn trên nhiều nền tảng Nhà phát triển có thể sử dụng cùng một mã nguồn để tạo ra ứng dụng cho cả iOS và Android, giúp tiết kiệm thời gian và công sức đáng kể

- Hiệu suất gần như ứng dụng gốc: Mặc dù React Native không phải là mã gốc 100%, nhưng nó cho phép tích hợp các thành phần gốc thông qua cầu nối JavaScript, điều này giúp ứng dụng chạy nhanh và mượt mà gần như ứng dụng gốc

- Hỗ trợ cộng đồng mạnh mẽ: Với sự hỗ trợ của Facebook và một cộng đồng lớn, các nhà phát triển có quyền truy cập vào một loạt các thư viện, công cụ và hỗ trợ, làm cho quá trình phát triển nhanh chóng và hiệu quả hơn

Nhanh chóng cập nhật và triển khai: React Native hỗ trợ cập nhật nóng và cập nhật từ xa, điều này có nghĩa là nhà phát triển có thể đẩy các bản cập nhật trực tiếp đến người dùng mà không cần qua quá trình phê duyệt của cửa hàng ứng dụng [12]

- Khả năng tương thích với nền tảng: Mặc dù React Native cho phép phát triển đa nền tảng, nhưng việc duy trì tính tương thích khi iOS hoặc Android phát hành các bản cập nhật có thể gặp khó khăn Các bản cập nhật này đôi khi thay đổi các API hoặc thêm các tính năng mới mà React Native có thể chưa hỗ trợ ngay lập tức, dẫn đến sự chậm trễ trong việc triển khai các tính năng mới hoặc cần phải cập nhật thư viện thường xuyên

- Yêu cầu kỹ năng cao: Phát triển ứng dụng hiệu quả bằng React Native đòi hỏi kiến thức sâu về JavaScript và React, cũng như hiểu biết cơ bản về các nền tảng di động cụ thể Điều này có thể là một rào cản đối với các nhà phát triển không có nền tảng vững chắc trong các kỹ năng này, làm tăng độ khó trong việc tuyển dụng và đào tạo đội ngũ phát triển

❖ Ưu nhược điểm của Expo

Expo CLI là một công cụ giúp phát triển ứng dụng React Native Nó cung cấp một môi trường phát triển toàn diện, bao gồm tất cả các công cụ cần thiết để bắt đầu phát triển ứng dụng React Native

• Ưu điểm của Expo CLI

Dễ sử dụng: Expo CLI cung cấp một môi trường phát triển toàn diện, bao gồm tất cả các công cụ cần thiết để bắt đầu phát triển ứng dụng React Native Điều này giúp cho người mới bắt đầu dễ dàng tiếp cận với React Native

Nhanh chóng: Expo CLI có thể giúp thiết lập và chạy ứng dụng React Native chỉ trong vài phút Điều này giúp tiết kiệm thời gian và công sức trong quá trình phát triển ứng dụng

Có nhiều tính năng tích hợp sẵn: Expo CLI cung cấp nhiều tính năng tích hợp sẵn, chẳng hạn như bộ định tuyến, quản lý trạng thái, lưu trữ cục bộ giúp tiết kiệm thời gian và công sức trong việc phát triển các tính năng cơ bản của ứng dụng

• Nhược điểm của Expo CLI

Expo CLI là một công cụ phát triển mạnh mẽ hỗ trợ việc xây dựng ứng dụng React Native, nhưng nó cũng có những nhược điểm nhất định mà các nhà phát triển cần lưu ý

Giới hạn truy cập vào API : Mặc dù Expo cung cấp một lớp trừu tượng hóa cho phép truy cập dễ dàng vào nhiều tính năng bản địa của điện thoại, nhưng nó không hỗ trợ toàn bộ các API bản địa mà chỉ có thể sử dụng thông qua các ứng dụng được viết hoàn toàn bằng React Native

TỔNG QUAN VỀ FIREBASE CLOUD MESSAGING

Firebase Cloud Messaging (FCM) là một dịch vụ nhắn tin miễn phí do Google cung cấp, hỗ trợ các nhà phát triển trong việc gửi thông báo đến các ứng dụng trên nền tảng Android, iOS, và web Dịch vụ này cho phép gửi tin nhắn có dung lượng tối đa lên đến 4KB FCM được sử dụng rộng rãi để gửi thông báo đẩy và cập nhật nội dung, giúp tăng cường tương tác người dùng ngay cả khi ứng dụng không đang hoạt động trực tiếp [14]

- Miễn phí: FCM là một dịch vụ miễn phí, với mức sử dụng tối đa 100.000 tin nhắn mỗi tháng

- Đa nền tảng: FCM hỗ trợ các nền tảng Android, iOS và web

- Đáng tin cậy: FCM sử dụng các giao thức đáng tin cậy để đảm bảo rằng tin nhắn được gửi thành công

- Tùy chỉnh: FCM cho phép các nhà phát triển tùy chỉnh tin nhắn theo nhu cầu của ứng dụng

FCM có thể được sử dụng cho nhiều mục đích khác nhau, bao gồm:

- Gửi thông báo đẩy: FCM là một cách hiệu quả để gửi thông báo đẩy đến người dùng, ngay cả khi họ không sử dụng ứng dụng Thông báo đẩy có thể được sử dụng để thông báo cho người dùng về các sự kiện mới, cập nhật hoặc nội dung khác [14]

- Cập nhật nội dung ứng dụng: FCM có thể được sử dụng để cập nhật nội dung ứng dụng, chẳng hạn như thông tin về sản phẩm, giá cả hoặc sự kiện Điều này cho phép các nhà phát triển giữ cho ứng dụng của họ luôn cập nhật mà không cần người dùng phải khởi động lại ứng dụng

- Tương tác với người dùng: FCM có thể được sử dụng để tương tác với người dùng, chẳng hạn như để khảo sát ý kiến hoặc thu thập phản hồi

Hình 2 3 Dịch vụ gửi thông báo đến Client App dùng FCM [14]

FCM hoạt động theo cách sau:

- Ứng dụng khách đăng ký một chủ đề Chủ đề là một chuỗi định danh duy nhất xác định nhóm các ứng dụng khách có thể nhận được tin nhắn

- Máy chủ ứng dụng phát sóng tin nhắn đến tất cả các ứng dụng khách đã đăng ký chủ đề đó

- Máy chủ FCM chuyển tiếp tin nhắn đến ứng dụng khách cụ thể [14].

TỔNG QUAN VỀ JWT - JSONWEBTOKEN

JSON Web Token (JWT) là một tiêu chuẩn (RFC 7519) cho việc truyền an toàn thông tin giữa hai bên trong định dạng JSON JWT thường được sử dụng để xác thực và trao đổi thông tin trong các ứng dụng web, đặc biệt là trong việc xây dựng các API bảo mật [15]

Một JWT được cấu tạo từ ba phần, được tách biệt bởi dấu chấm (.), bao gồm:

- Header: Phần này chứa thông tin về loại token (thường là JWT) và thuật toán mã hóa được sử dụng, ví dụ như HMAC SHA256 hoặc RSA

- Payload: Chứa các tuyên bố (claims) chứa thông tin cần truyền đạt Các tuyên bố này có thể là thông tin về người dùng, quyền truy cập của token, hoặc bất kỳ thông tin nào khác mà nhà phát triển muốn bao gồm

- Signature: Để tạo chữ ký này, thuật toán được chỉ định trong header sẽ mã hóa header, payload cùng với một 'secret' mà chỉ máy chủ biết để đảm bảo tính xác thực của token khi được nhận

Hình 2 4 Cấu trúc của JWT [15]

- Tính di động: Do JWT là một chuỗi mã hóa, nó có thể được gửi qua URL, tham số POST, hoặc trong HTTP header, giúp dễ dàng trong việc truyền thông tin qua các dịch vụ và ứng dụng khác nhau

- Tự chứa: Tất cả thông tin cần thiết để xác thực người dùng được tự chứa trong token, giảm bớt sự cần thiết phải truy vấn cơ sở dữ liệu nhiều lần

- Hiệu suất: Giảm thiểu sự cần thiết phải sử dụng session, do thông tin xác thực được mã hóa ngay trong token, từ đó giảm tải cho cơ sở dữ liệu và cải thiện hiệu suất ứng dụng

Tuy nhiên, JWT cũng có một số nhược điểm cần lưu ý:

- Bảo mật: Nếu không được bảo mật kỹ lưỡng, token có thể bị giả mạo hoặc bị xem như thông tin bên trong nếu sử dụng thuật toán mã hóa không đủ mạnh

- Quản lý token: Việc quản lý token hết hạn và xoá token khi không còn cần thiết có thể phức tạp, đặc biệt nếu token được lưu trữ trên máy khách

JWT là một công cụ mạnh mẽ trong việc xây dựng các ứng dụng web hiện đại, nhưng cần được triển khai một cách cẩn thận để tối đa hóa lợi ích và giảm thiểu các rủi ro tiềm ẩn.

TỔNG QUAN VỀ DOCKER

Docker là một nền tảng cung cấp các công cụ và dịch vụ giúp các nhà phát triển và quản trị ứng dụng, hỗ trợ cho việc xây dựng, triển khai và vận hành các ứng dụng thông qua container Với khẩu hiệu "Build once, run anywhere" Có thể hiểu đơn giản hơn, thay vì phải thiết lập một môi trường chạy cho ứng dụng, chúng ta chỉ cần sử dụng Docker [16]

Hình 2 5 Kiến trúc của Docker [16]

Dựa vào sơ đồ bên trên, có thể hiểu các container thực chất chỉ là một không gian người dùng bao gồm ứng dụng, các tệp nhị phân của hệ thống và thư viện, mà không yêu cầu hệ điều hành khách hoặc ảo hóa phần cứng như máy ảo (VMs) Đây là điều làm cho container nhẹ và nhanh hơn Chúng được vận hành trên một nền tảng công nghệ đặc biệt, đó là Docker Engine [16]

• Các thành phần của Docker

Các thành phần chính của Docker Engine bao gồm:

- Server hay còn được gọi là Docker Daemon: Đây là trái tim của Docker Engine, chịu trách nhiệm tạo và quản lý các đối tượng Docker như images, containers, networks, và volumes Docker Daemon liên tục chạy trên nền hệ thống và xử lý các yêu cầu dịch vụ liên quan đến Docker [16]

- REST API: Docker Daemon cung cấp một API dạng REST cho phép các ứng dụng khách (clients) tương tác với Docker API này là cầu nối giữa các client và server, cho phép thực hiện các thao tác như tạo, chạy, dừng containers, quản lý images và cấu hình network [16]

- Client: Là thành phần đầu cuối (CLI - Command Line Interface) mà người dùng sử dụng để tương tác với Docker thông qua các câu lệnh Client gửi các yêu cầu đến Docker Daemon qua REST API Đây là giao diện chính mà người dùng dùng để thực hiện các thao tác Docker, từ đóng gói ứng dụng trong một container đến triển khai trên môi trường sản xuất

• Cách thức hoạt động của Docker

Quy trình hoạt động của Docker bao gồm tạo Dockerfile, xây dựng image từ Dockerfile, chạy container từ image và quản lý container

Hình 2 7 Cách thức hoạt động của Docker [17]

Docker sử dụng cgroups và namespaces của kernel Linux để cung cấp tách biệt và quản lý tài nguyên, đảm bảo mỗi container hoạt động một cách độc lập và an toàn, từ đó cung cấp một môi trường nhất quán cho việc phát triển, thử nghiệm và triển khai ứng dụng

- Docker Images: Đây là bản mẫu chỉ dùng để đọc, chứa ứng dụng và các thư viện phụ thuộc của nó, được tạo từ Dockerfile, một file cấu hình mô tả mọi yếu tố cần thiết để thiết lập ứng dụng

- Docker Container: Là thành phần được tạo từ Docker Image, cung cấp môi trường cách ly cho ứng dụng, cho phép quản lý trạng thái của ứng dụng qua các câu lệnh như khởi chạy, dừng và di chuyển container [18]

- Docker Daemon: Là tiến trình nền chịu trách nhiệm quản lý các đối tượng của Docker như images, containers, và networks Docker Daemon xử lý các yêu cầu từ Docker Client [18]

- Docker Client: Là giao diện dòng lệnh cho phép người dùng tương tác với Docker, gửi yêu cầu đến Docker Daemon [17]

- Docker Registries: Là nơi lưu trữ các Docker images, nơi người dùng có thể tải lên hoặc tải xuống images để sử dụng [17]

2.7.2 Ưu nhược điểm của Docker

Docker cung cấp nhiều ưu điểm thiết thực cho người dùng, đặc biệt là các nhà phát triển, quản trị viên hệ thống và kiến trúc sư

- Tiện lợi: Docker giảm thiểu thời gian và phức tạp liên quan đến việc cài đặt và cấu hình môi trường phát triển, đặc biệt khi cần nhiều công nghệ và phiên bản khác nhau như Ruby, Rails, Redis, MySQL, Nginx, v.v Giảm thiểu xung đột giữa các ứng dụng và thư viện, ngăn chặn các vấn đề phát sinh do các chương trình cũ đã cài trên máy

- Tốc độ: Containers của Docker khởi động rất nhanh, giúp tạo và chạy các container chỉ trong vài giây, là một lợi thế so với thời gian khởi động của máy ảo truyền thống

- Cộng đồng: Docker Hub hoạt động như một kho lưu trữ với hàng ngàn Docker images công khai được cộng đồng tạo ra, khiến cho việc tìm kiếm và sử dụng các hình ảnh này trở nên đơn giản và dễ dàng

- Môi trường chạy và khả năng mở rộng: Docker hỗ trợ chạy trên đa nền tảng, cho phép liên kết và mở rộng dễ dàng Cập nhật và mở rộng các thành phần riêng biệt mà không làm ảnh hưởng đến nhau, giúp duy trì tính ổn định và khả năng mở rộng của hệ thống

- Bảo mật: Tất cả các container chia sẻ cùng một kernel hệ điều hành sẽ có thể dẫn đến những rủi ro về bảo mật nếu một container bị tấn công, và gây ảnh hưởng đến các container khác

- Quản lý tài nguyên: Docker sử dụng tài nguyên hệ thống ngay cả khi các container không hoạt động gây lãng phí tài nguyên nếu không được quản lý hiệu quả

TỔNG QUAN VỀ KUBERNETES

Kubernetes là một nền tảng mã nguồn mở và có thể mở rộng, được thiết kế để quản lý các ứng dụng container hoá một cách hiệu quả, với khả năng quản lý trên quy mô lớn

Nó tự động hóa việc cấu hình và triển khai ứng dụng, giảm thiểu việc triển khai chứng thủ công trên từng máy chủ Kubernetes cho phép các ứng dụng chạy trên hàng nghìn nút máy tính, hoạt động như một máy tính khổng lồ, với Kubernetes, việc đơn giản hóa quá trình phát triển, triển khai và quản lý ứng dụng cho các nhóm phát triển và vận hành trở nên rất dễ dàng

Hình 2 8 Kiến trúc của Kubernetes [19]

2.8.1 Các thành phần chính của Kubernetes

Trong Kubernetes (K8S), các node được phân chia thành hai loại chính: Master Node (còn gọi là Control Plane) và Worker Node (Data Plane)

- Master Node (Control Plane): Đây là các node chịu trách nhiệm điều khiển và quản lý toàn bộ cluster Chúng thực hiện các nhiệm vụ quản lý trung tâm như lập lịch các ứng dụng, duy trì trạng thái mong muốn, tự động hóa các quá trình triển khai, và quản lý cấu hình

- Worker Node (Data Plane): Các node này là nơi thực sự chạy các ứng dụng dưới dạng container Chúng cung cấp tài nguyên phần cứng và môi trường mạng cần thiết để duy trì hoạt động của các ứng dụng

Thành phần trên Master Node (Control Plane) Master Node (Control Plane) chứa các thành phần quản lý cụm, điều phối tài nguyên và đảm bảo cluster hoạt động ổn định:

- kube-api-server: Là điểm tương tác chính của cluster, xử lý các yêu cầu API và làm điểm kết nối cho tất cả các thành phần khác trong cluster

- etcd: Lưu trữ tất cả dữ liệu cấu hình của cluster, là cơ sở dữ liệu phân tán và an toàn cho tất cả dữ liệu trong trạng thái của Kubernetes

- kube-scheduler: Phân phối các containers mới đến các node phù hợp dựa trên tài nguyên có sẵn và các yêu cầu khác của container

- kube-controller-manager: Quản lý các controller khác nhau, ví dụ như node controller, endpoints controller, namespace controller, v.v

- cloud-controller-manager (optional): Tương tác với các API của nhà cung cấp dịch vụ đám mây, cho phép quản lý các tài nguyên liên quan đến đám mây trong cluster [20]

Hình 2 9 Thành phần chính của Master Node

Trên các Worker Node trong một cụm Kubernetes gồm thành phần cơ bản sau, mỗi thành phần đều đóng vai trò quan trọng trong việc chạy và quản lý các container và dịch vụ:

- Kubelet: Là một agent chạy trên mỗi Worker Node, kubelet đảm bảo rằng các container trong các Pod đang chạy và hoạt động theo đặc tả được cung cấp trong các đối tượng Pod Kubelet nhận chỉ thị từ Master Node, giám sát tình trạng sức khoẻ của các container, và quản lý chu kỳ sống của chúng dựa trên các chính sách được định nghĩa

- Kube-proxy: Là một network proxy chạy trên mỗi Worker Node, kube- proxy quản lý việc điều hướng lưu lượng mạng tới các Pod từ mạng ngoài hoặc từ các Pod khác trong cụm Nó đảm bảo rằng lưu lượng mạng tới các dịch vụ được định tuyến chính xác theo các quy tắc mạng trong cluster

- Container Runtime Interface (CRI): CRI cho phép kubelet tương tác với các container runtime khác nhau, chẳng hạn như Docker, containerd, CRI-O, v.v CRI xử lý việc khởi tạo và chạy các container theo yêu cầu từ kubelet, cung cấp một giao diện thống nhất để quản lý container [20]

Vòng đời của Pod (Pod lifecycle)

Trong Kubernetes, Pod là đơn vị cơ bản nhất của một ứng dụng; nó bao gồm một hoặc nhiều container hoạt động chung trên một không gian mạng và lưu trữ Đây chính là thành phần quan trọng đóng vai trò trực tiếp trong việc cho phép các ứng dụng chạy trên containers và được điều phối bởi Kubernetes

Vậy làm sao để khởi tạo và chạy một pod (gồm các containers)?

Khi tạo một Pod mới, thì cơ bản các sự kiện diễn ra và các thành phần tham gia và các sự kiện đó như sau [21]:

Hình 2 10 Khởi tạo pod (containers) [21]

Ngược lại, khi muốn xóa pod (hay containers), thì cơ bản các sự kiện diễn ra và các thành phần tham gia và các sự kiện đó như sau [21]:

2.8.2 Ưu và nhược điểm của Kubernetes

- Điều hành, phân bố container trên nhiều máy chủ đồng thời

- Khả năng kiểm soát, tự động triển khai và cập nhật ứng dụng liên tục

- Quản lý các dịch vụ, đảm bảo các ứng dụng được triển khai theo đúng quy trình

- Mở rộng ứng dụng chứa trong các container, đảm bảo tính sẵn sàng của ứng dụng

- Tận dụng phần cứng để tối đa hóa tài nguyên cần thiết cho việc chạy các ứng dụng trong doanh nghiệp lớn

- Độ phức tạp: Kubernetes có kiến trúc phức tạp Việc cài đặt, cấu hình và quản lý một cluster Kubernetes đòi hỏi kiến thức sâu về hệ thống mạng, bảo mật, và kiến trúc phần mềm

- Chi phí tài nguyên: Việc duy trì và vận hành một cluster Kubernetes có thể đắt đỏ, Kubernetes thường cần nhiều tài nguyên hệ thống hơn so với việc chạy các ứng dụng trực tiếp trên máy chủ Việc điều phối container và duy trì tính sẵn sàng cao có thể tiêu tốn nhiều CPU và bộ nhớ

TỔNG QUAN VỀ AMAZON WEB SERVICE

Công nghệ điện toán đám mây (Cloud Computing) là thuật ngữ quen thuộc với nhiều người, thuật ngữ này dùng để chỉ mô hình điện toán sử dụng các công nghệ máy tính và được phát triển dựa vào Internet

Dịch vụ điện toán đám mây cho phép các khách hàng thuê công nghệ và sử dụng chúng thông qua kết nối Internet, họ chỉ phải trả tiền cho những gì họ thực sự sử dụng Cách tiếp cận này là khác biệt so với các cách tiếp cận truyền thống, khi mà các khách hàng thường mua cả phần cứng và phần mềm, sau đó tự cài đặt và bảo trì chúng

Amazon Web Services (AWS) là một nền tảng điện toán đám mây toàn diện và rộng khắp, được cung cấp bởi Amazon.com AWS cung cấp một loạt các dịch vụ trực tuyến cho các tổ chức và cá nhân, giúp hỗ trợ các ứng dụng dựa trên nền tảng đám mây

Ra mắt vào năm 2006, AWS đã phát triển thành một trong những nền tảng điện toán đám mây lớn nhất thế giới, cung cấp hơn 200 dịch vụ đầy đủ các tính năng từ trung tâm dữ liệu trên toàn cầu [22].Các dịch vụ của AWS bao gồm máy chủ ảo EC2, lưu trữ đối tượng S3, và cơ sở dữ liệu quan hệ RDS, cùng với nhiều dịch vụ khác như điện toán không máy chủ, trí tuệ nhân tạo, học máy, và điện toán biên AWS cung cấp khả năng mở rộng và độ tin cậy cao, cho phép người dùng thuê tài nguyên máy tính, lưu trữ, và các dịch vụ khác, giúp giảm chi phí và tăng tốc độ phát triển ứng dụng

Nền tảng này không chỉ giúp các doanh nghiệp giảm bớt gánh nặng về quản lý cơ sở hạ tầng và tập trung vào việc đổi mới và mở rộng kinh doanh mà còn cung cấp khả năng bảo mật, tuân thủ và bảo vệ dữ liệu hàng đầu AWS đã trở thành lựa chọn phổ biến cho nhiều loại hình doanh nghiệp, từ các startup đến các tập đoàn lớn, nhờ vào sự đa dạng và mức độ tích hợp cao của các dịch vụ của mình

- Dễ sử dụng: AWS được thiết kế để cung cấp và lưu trữ các ứng dụng một cách nhanh chóng và an toàn, bất kể đó là các ứng dụng hiện có hay các ứng dụng mới dựa trên mô hình doanh nghiệp có sẵn Có nhiều cách khác nhau để có thể truy cập nền tảng lưu trữ ứng dụng của AWS thông qua trang web chính thức của AWS hoặc sử dụng các API dịch vụ web được cung cấp bởi AWS [22]

- Đáng tin cậy: Với AWS, cơ sở hạ tầng điện toán được phát triển trên toàn cầu, có độ an toàn và tin cậy cao Cơ sở hạ tầng này là trụ cột của hoạt động kinh doanh trực tuyến trị giá hàng tỷ đô la của Amazon, đã được mài giũa và tối ưu hóa trong hơn một thập kỷ Do đó, có thể hoàn toàn yên tâm về mức độ bảo mật mà AWS cung cấp [22]

- Linh hoạt: Trong khi các mô hình truyền thống thường yêu cầu đầu tư lớn vào xây dựng kiến trúc cơ sở hạ tầng, ngôn ngữ lập trình và lựa chọn hệ điều hành, AWS lại cung cấp tính linh hoạt để lựa chọn mô hình lập trình, ngôn ngữ và hệ điều hành tùy theo nhu cầu dự án Thêm vào đó, việc triển khai các ứng dụng cũ được chạy ở môi trường truyền thống sang đám mây với AWS cũng rất dễ dàng và tiết kiệm chi phí dựa trên các dịch vụ có sẵn khác nhau mà AWS cung cấp

- Tiết kiệm chi phí: Nền tảng đám mây cho phép loại bỏ chi phí xây dựng cơ sở hạ tầng như trung tâm dữ liệu, máy chủ vật lý, và chỉ phải trả cho những tài nguyên CNTT thực sự được sử dụng AWS còn cung cấp cho người dùng 750 giờ sử dụng miễn phí, làm cho việc tiếp cận với điện toán đám mây trở nên dễ dàng hơn, kể cả đối với những người mới bắt đầu [22]

Cũng giống như các công nghệ khác, mặc dù thời gian xây dựng và phát triển trong nhiều năm nhưng AWS vẫn có những nhược điểm của riêng nó

- Thiếu chuyên gia: AWS là một nền tảng điện toán đám mây phức tạp và hiện đại, yêu cầu các công ty phải có sự hỗ trợ của các chuyên gia có kiến thức chuyên sâu Mặc dù nhiều công ty đã sẵn sàng đầu tư vào AWS, họ vẫn gặp khó khăn trong việc tìm kiếm các chuyên gia phù hợp để nâng cao hiệu suất của doanh nghiệp Đây là một thách thức lớn về thời gian và chi phí cho các doanh nghiệp [22]

- Biến động giá cả: Giá của các dịch vụ AWS có thể thay đổi tùy theo vị trí địa lý, phụ thuộc vào yếu tố như chi phí đất đai, cáp quang, điện và thuế AWS cung cấp ba gói dịch vụ là Developer, Business và Enterprise, với mức giá nhiều biến đổi, chi phí tổng thể của người dung có thể bị ảnh hưởng.

TỔNG QUAN VỀ TERRAFORM

Terraform có thể xem là một ngôn ngữ lập trình dành cho việc thiết lập cơ sở hạ tầng trên môi trường Cloud Được thiết kế để giúp các nhà phát triển và quản trị hệ thống tự động hóa việc tạo, Terraform giúp thay đổi và quản lý cơ sở hạ tầng của doanh nghiệp một cách hiệu quả thông qua việc quản lý dựa trên source code [23]

Là một phương pháp mà qua đó, hạ tầng IT được quản lý và cấu hình thông qua mã nguồn, thay vì thực hiện thủ công trên các giao diện đồ họa Trong ngành công nghệ thông tin, "hạ tầng" thường bao gồm các thành phần như máy chủ, mạng, cổng thông tin (gateway), cơ sở dữ liệu, và các dịch vụ khác cần thiết để triển khai một ứng dụng trên môi trường máy chủ IaC là một phương pháp lý tưởng cho việc

Hình 2 13 Cách thức hoạt động của Terraform [23]

Terraform là một trong những công cụ phổ biến nhất hiện nay trong lĩnh vực Infrastructure as Code (IaC), được phát triển bởi HashiCorp Công cụ này được thiết kế để giúp tự động hóa việc cung cấp và quản lý hạ tầng bằng việc sử dụng cú pháp dễ hiểu trong các tệp cấu hình, cho phép người dùng mô tả cơ sở hạ tầng của họ chỉ đơn giản bằng cách khai báo (declarative) [24] Khái niệm này có nghĩa là chỉ cần mô tả "cái gì" muốn tạo ra thay vì "làm thế nào" để tạo ra nó Terraform sẽ xử lý phần còn lại, đảm bảo rằng hạ tầng được triển khai chính xác theo đúng mô tả trong tệp cấu hình

Hình 2 14 Tự động hóa quản lý hạ tầng IT với IaC và Terraform [24]

Có nhiều công cụ khác nhau cũng làm được việc này Nhưng để tập trung cho mảng IaC, Terraform hiện là một trong những lựa chọn ưu tiên hàng đầu

Hình 2 15 Các công cụ hàng đầu cho IaC [24]

2.10.2 Ưu nhược điểm của Terraform

- Mã nguồn mở và miễn phí: Terraform là một công cụ mã nguồn mở, miễn phí cho cộng đồng cùng sử dụng

- Dễ sử dụng: Terraform có cú pháp đơn giản và dễ hiểu, giúp người dùng dễ dàng mô tả và quản lý cơ sở hạ tầng một cách chặt chẽ và hiệu quả

- Tối ưu thời gian triển khai tài nguyên: Terraform sử dụng đa luồng (concurrency) để tối ưu hóa thời gian triển khai tài nguyên, giúp các quá trình diễn ra nhanh chóng hơn

- Hỗ trợ nhiều nền tảng cloud: Terraform hỗ trợ nhiều nhà cung cấp dịch vụ đám mây khác nhau, cho phép quản lý tài nguyên trên nhiều nền tảng

- Dễ dàng tích hợp CI/CD: Terraform có thể dễ dàng tích hợp vào các quy trình Continuous Integration/Continuous Deployment (CI/CD), giúp tự động hóa quy trình phát triển và triển khai

- Các tính năng collab và bảo mật chỉ có sẵn trong các gói doanh nghiệp đắt tiền: Một số tính năng liên quan đến hợp tác (collaboration) và bảo mật chỉ có sẵn trong các phiên bản doanh nghiệp của Terraform, đòi hỏi chi phí cao

- Không có cơ chế xử lý lỗi: Terraform không cung cấp cơ chế tự động xử lý lỗi khi triển khai tài nguyên, terraform yêu cầu cần phải thực hiện các biện pháp khắc phục lỗi thủ công

- Không tự động rollback nếu những thay đổi tài nguyên không chính xác: Trong trường hợp có lỗi xảy ra trong quá trình triển khai một tài nguyên, Terraform không tự động rollback các thay đổi không chính xác Thay vì thế, người dùng cần phải thực hiện việc này thủ công bằng cách xóa các tài nguyên đã khởi tạo trước đó.

THIẾT KẾ HỆ THỐNG

YÊU CẦU HỆ THỐNG

Thiết kế một hệ thống giám sát các cảm biến đo nhiệt độ, độ ẩm, khói và lửa nhằm theo dõi điều kiện môi trường và phát hiện các dấu hiệu cháy nổ gây hỏa hoạn ở không gian sinh hoạt cá nhân điển hình như căn hộ, phòng trọ, chung cư Dữ liệu thu thập từ các cảm biến sẽ được gửi đến một máy chủ xử lý được triển khai trên nền tảng đám mây AWS, đảm bảo tính linh hoạt, khả năng mở rộng và phục hồi nếu có sự cố xảy ra Hệ thống này phải luôn sẵn sàng phản ứng nhanh chóng với bất kỳ nguy cơ gây cháy nổ nào, và liên tục cung cấp thông tin trên giao diện ứng dụng điện thoại Các yêu cầu được đặt ra ban đầu cho hệ thống như sau:

- Hệ thống cho phép theo dõi trạng thái hoạt động và các chỉ số môi trường như nhiệt độ, độ ẩm, mức độ khói/khí độc từ mỗi cảm biến được lắp đặt trong khu vực giám sát

- Hệ thống lưu trữ toàn bộ lịch sử cảnh báo cháy từ các cảm biến, bao gồm thời gian, vị trí và loại cảnh báo Dữ liệu lịch sử này giúp người dùng dễ dàng phân tích và nhận diện các khu vực thường xuyên xảy ra sự cố cháy nổ

- Khi hệ thống phát hiện dấu hiệu tín hiệu cháy nổ từ các cảm biến, nó sẽ kích hoạt cảnh báo ngay lập tức và gửi thông báo đến người dùng Thông báo cảnh báo bao gồm vị trí chính xác của cảm biến cảnh báo trên mặt cắt căn hộ, giúp xác định khu vực xảy ra sự cố một cách nhanh chóng và chính xác

- Ngoài gửi cảnh báo đến ứng dụng, hệ thống cũng hỗ trợ gửi thông báo đẩy đến thiết bị di động của người dùng Việc nhận thông báo đẩy giúp người dùng luôn cập nhật kịp thời về tình hình, ngay cả khi không đang sử dụng ứng dụng

- Hệ thống được triển khai trên nền tảng đám mây AWS tận dụng các dịch vụ sẵn có đảm bảo tính linh hoạt, khả năng mở rộng, bảo mật thông tin thông qua mã hóa dữ liệu, khả năng phục hồi, đồng thời tối ưu hóa chi phí triển khai và vận hành.

ĐẶC TẢ HỆ THỐNG

3.2.1 Mô hình tổng quát của hệ thống

Dưới đây là hình 3.1 mô tả mô hình các khối chính được thiết kế trong hệ thống báo cháy tích hợp với nền tảng đám mây:

Hình 3 1 Mô hình tổng quát hệ thống

- Khối dữ liệu cảm biến: Đây là nơi các cảm biến phát hiện lửa và khói được gắn và liên tục theo dõi các dấu hiệu của cháy Khối này có nhiệm vụ thu thập dữ liệu từ các cảm biến và gửi đến khối nhận dữ liệu cảm biến

- Khối nhận dữ liệu (MQTT Broker): Đây là nơi trung tâm để quản lý và phân phối dữ liệu trong hệ thống MQTT Broker nhận dữ liệu từ cảm biến và chuyển tiếp dữ liệu đến các khối cảnh báo và hiển thị để xử lý

- Khối xử lý trung tâm: Khối này chịu trách nhiệm phân tích dữ liệu cảm biến nhận được từ Broker server Nó sẽ liên tục phân tích dữ liệu và đồng thời phân phối thông tin đến khối hiển thị Nếu phát hiện có dữ liệu cháy, khối này sẽ kích hoạt hệ thống gửi cảnh báo và đồng thời gửi thông tin đến người dùng và các cơ quan chức năng liên quan và bằng các giao thức như HTTP, Websocket

- Khối Cảnh Báo: Khi nhận được thông báo từ khối xử lý trung tâm, khối này sẽ kích hoạt các cảnh báo như gửi thông báo, gọi điện hoặc gửi tin nhắn về người dùng cuối

- Khối hiển thị: Đây là nơi hiển thị thông tin về trạng thái hiện tại của hệ thống, cảnh báo và thông tin khẩn cấp cho người dùng thông qua một giao diện người dùng thân thiện

3.2.2 Sơ đồ khối hệ thống

Dựa trên các yêu cầu đã đưa ra, nhóm đã thiết kế sơ đồ khối chi tiết của hệ thống như sau:

Hình 3 2 Sơ đồ khối hệ thống

Hình 3.2 trình bày mô hình tổng thể hệ thống gồm các khối thành phần như sau:

- Khối mô phỏng dữ liệu cảm biến: Bao gồm các dữ liệu cảm biến phát hiện cháy nổ như cảm biến khí gas, cảm biến nhiệt, cảm biến hồng ngoại, cảm biến lửa Tham chiếu với dữ liệu từ cảm biến thực và tạo ra dữ liệu cho từng loại cảm biến mô phỏng, dữ liệu cảm biến được gửi về khối xử tiếp nhận dữ liệu

- Khối IoT Broker: Chịu trách nhiệm tiếp nhận dữ liệu từ các cảm biến, xử lý thông tin, đồng thời truyền tải dữ liệu thời gian thực của cảm biến đến hệ thống backend thông qua phương thức MQTT

- Khối Backend: Đối với khối Backend, sẽ sử dụng Nodejs với framework Express và thư viện Socket.IO hỗ trợ WebSocket để xây dựng API server xử lý các request HTTP từ client, WebSocket server cho giao tiếp realtime, cũng như xử lý và kết nối với cơ sở dữ liệu

- Khối API: Là cầu nối trao đổi dữ liệu thông qua giao thức HTTP, cung cấp các phương thức tương tác như GET, POST, PUT

- Khối xử lý real-time: Đây là mô-đun quyết định, phân tích dữ liệu từ cảm biến và gửi cảnh báo khi phát hiện dấu hiệu cháy nổ, đồng thời cho phép theo dõi trực tiếp và cập nhật trạng thái an toàn của căn hộ trong thời gian thực

- Khối cảnh báo: Chịu trách nhiệm thông báo ngay lập tức cho người dùng qua nhiều phương thức như websocket, HTTPS, Amazon SNS, Email, tin nhắn hoặc cuộc gọi, giúp hạn chế thiệt hại đến mức thấp nhất có thể

- Khối Frontend: Nơi giao tiếp với người dùng cuối thông qua ứng dụng di động và website Người dùng có thể nhận thông tin cảnh báo, theo dõi trạng thái an toàn của căn hộ của mình, và quản lý thiết bị cảnh báo cũng như nhận thông tin cảnh báo của các căn hộ trong tòa nhà

- Cơ sở dữ liệu (Database): Lưu trữ tất cả dữ liệu liên quan từ lịch sử cảnh báo, phân tích cháy nổ đến thông tin người dùng và thông tin liên hệ khẩn cấp, và các thông tin khác

- Cơ sở hạ tầng đám mây (Cloud Infrastructure): Triển khai hệ thống máy chủ trên dịch vụ đám mây của Amazon, cung cấp khả năng chịu tải và mở rộng Hệ thống được thiết kế để đáp ứng nhu cầu lớn từ các thiết bị IoT, có khả năng phục hồi và mở rộng liên tục, đồng thời giảm thiểu rủi ro sự cố hoặc đứt quãng dịch vụ, đảm bảo gửi thông báo liên tục và kịp thời cho người dùng.

THIẾT KẾ PHẦN MỀM

3.3.1 Thiết kế kiến trúc hệ thống máy chủ

Kiến trúc hướng sự kiện (Event Driven Architecture) là một mô hình kiến trúc phần mềm trong đó các thành phần của hệ thống tương tác thông qua việc gửi và nhận các sự kiện Mỗi sự kiện đại diện cho một sự thay đổi hoặc một hành động trong hệ thống, và các thành phần có thể phản ứng và xử lý các sự kiện nhận được Kiến trúc hướng sự kiện thường được sử dụng trong các hệ thống phân tán, ứng dụng IoT, ứng dụng theo thời gian thực, các hệ thống microservices Nó giúp tạo ra các hệ thống linh hoạt, phản ứng, và dễ dàng mở rộng để đáp ứng yêu cầu thay đổi của doanh nghiệp.

Dựa trên ý tưởng xây dựng hệ thống áp dụng kiến trúc hướng sự kiện, nhóm đã thiết kế hệ thống máy chủ cho hệ thống cảnh báo cháy nổ theo mô hình hướng sự kiện như sau:

Hình 3 3 Sơ đồ tổng quát hệ thống áp dụng mô hình kiến trúc hướng sự kiện. Các sự kiện được tạo ra từ dữ liệu cảm biến gửi về AWS IoT Core - nền tảng đóng vai trò như một MQTT Broker Khi nhận được dữ liệu cảm biến, IoT Core sẽ gửi sự kiện về cho phía Backend Hệ thống máy chủ Backend sau đó sẽ tiếp nhận và xử lý sự kiện này thông qua các thành phần chính như:

• Khối xử lý Real-time: Liên tục theo dõi và nhận dữ liệu từ IoT Core, sử dụng logic xử lý để đánh giá mức độ rủi ro, cập nhật vào cơ sở dữ liệu

• Khối cảnh báo: Phân tích dữ liệu dựa trên ngưỡng định nghĩa, quyết định khi nào cần phát cảnh báo cháy

• Khối API: Cung cấp giao diện để ứng dụng client truy cập, thực hiện các tác vụ như xem dữ liệu, cập nhật thông tin

Kiến trúc hệ thống được thiết kế theo hướng sự kiện, các thành phần xử lý hoạt động độc lập, tăng tính linh hoạt, dễ mở rộng Các thành phần này sẽ được tương tác với nhau thông qua việc nhận/gửi sự kiện, cung cấp phản ứng tức thì với các thay đổi từ cảm biến, đảm bảo hiệu năng xử lý thời gian thực Với logic được lập trình sẵn, hệ thống sẽ đưa ra các cảnh báo gửi đến người dùng, thông tin đến các cơ quan có thẩm quyền và ban quản lý tòa nhà, nhằm đối phó nhanh chóng và hiệu quả với tình huống cháy nổ cần xử lý Để hiểu sâu hơn về cách mà kiến trúc này được triển khai như thế nào, nhóm sẽ giải thích rõ hơn ở các thành phần chính của hệ thống máy chủ sau đây:

❖ Khối xử lý Real-Time

Khối xử lý thời gian thực là một trong những thành phần chủ chốt của hệ thống máy chủ Nó đóng vai trò nòng cốt trong việc phân tích và xử lý dữ liệu bằng cách liên tục tiếp nhận dữ liệu từ các thiết bị cảm biến

Hình 3 4 Lưu đồ thuật toán khối xử lý real-time.

Sử dụng các logic đã được lập trình trước, khối xử lý này không chỉ ghi dữ liệu vào cơ sở dữ liệu mà còn cung cấp thông tin đầu vào cho module cảnh báo Sơ đồ hình 3.4 minh họa luồng xử lý dữ liệu cảm biến trong hệ thống báo cháy IoT:

• Sensor Data: Đầu tiên, dữ liệu từ các cảm biến như nhiệt độ, khói, và khí gas được thu thập Các cảm biến này liên tục ghi nhận và gửi dữ liệu về môi trường xung quanh thông qua giao thức MQTT

• IoT Broker: Sau khi thu thập, dữ liệu được gửi đến một MQTT Broker, trong trường hợp này là AWS IoT Core Broker này có nhiệm vụ nhận dữ liệu cảm biến, xử lý sơ bộ, và phân phối dữ liệu đến các thành phần xử lý tiếp theo trong hệ thống

• Hàm nhận dữ liệu realtime: Một hàm (có thể là AWS Lambda hoặc một microservice khác) được cài đặt để nhận dữ liệu thời gian thực từ IoT Broker Hàm này có nhiệm vụ lọc và kiểm tra tính hợp lệ của dữ liệu, đồng thời xác định liệu dữ liệu có phải là báo động giả mạo hay không

• Amazon SQS Broker: Nếu dữ liệu được xác nhận là chính xác và có liên quan, nó sẽ được chuyển đến Amazon SQS Amazon SQS là một dịch vụ hàng đợi tin nhắn, cho phép tích hợp và phân tách tin nhắn giữa các dịch vụ khác nhau Trong hệ thống này, nó giúp quản lý luồng tin nhắn đến frontend thông qua WebSocket, cũng như đến các dịch vụ xử lý khác

• Hàm xử lý dữ liệu cảm biến: Sau khi dữ liệu được chuyển tới Amazon SQS, hàm xử lý dữ liệu này có trách nhiệm chuẩn hóa và kiểm tra các dữ liệu nhận được

Nó sẽ phân tích dữ liệu để xác định liệu có phải là trường hợp cháy hay không bằng cách sử dụng các thuật toán để phát hiện các mẫu dữ liệu bất thường như nhiệt độ cao đột ngột hoặc sự gia tăng nồng độ khí gas vượt ngưỡng định sẵn Nếu xác định là cháy, hàm sẽ chuyển dữ liệu đến hàm cảnh báo cháy

• Hàm cảnh báo cháy: Thành phần phân tích dữ liệu cháy từ quyết định của hàm xử lý, và thực hiện xử lý gửi dữ liệu báo cháy đến khối cảnh báo

❖ Khối API (Application Protocol Interface)

Trong đề tài, mô hình hoạt động của API được thể hiện khi người dùng gửi một HTTP request, hệ thống sẽ đầu tiên xác minh tính hợp lệ của request đó qua apikey để đảm bảo tính bảo mật và xác thực Sau khi đã được xác nhận, request sẽ được chuyển tiếp đến máy chủ, nơi diễn ra các quá trình xử lý như thực hiện truy vấn đối với cơ sở dữ liệu để lấy ra hoặc cập nhật thông tin phù hợp với yêu cầu của người dùng.

Hình 3 5 Lưu đồ thuật toán khối xử lý chính - API. Hoạt động của của khối API được thể hiện qua các bước sau:

THIẾT KẾ KIẾN TRÚC CƠ SỞ HẠ TẦNG

3.4.1 Xây dựng ứng dụng Docker chạy trên môi trường Kubernetes

Sau khi hoàn tất quá trình phát triển ứng dụng, nhóm phát triển đề tài sẽ chuyển sang giai đoạn kiểm thử mã và triển khai ứng dụng Ứng dụng sẽ được đóng gói trong container sử dụng công cụ Docker Dưới đây là các bước để tiến hành thực hiện:

Viết Dockerfile để xác định các bước cần thiết để xây dựng hình ảnh Docker cho ứng dụng Dockerfile mà nhóm đề tài xây dựng bao gồm các chỉ dẫn như:

Hình 3 29 Thiết kế dockerfile cho ứng dụng

● FROM https://public.ecr.aws/docker/library/node:16.20.2:

Dockerfile bắt đầu bằng cách chỉ định hình ảnh cơ sở, nhóm chọn hình ảnh Node.js phiên bản 16.20.2 từ Amazon Elastic Container Registry (ECR) để cung cấp môi trường Node.js cần thiết khi chạy ứng dụng

Thiết lập thư mục làm việc trong container là /app Tất cả các lệnh tiếp theo sẽ được thực thi trong thư mục này

Sao chép các file package json và package-lock json từ thư mục làm việc hiện tại trên máy host vào thư mục làm việc trong container Các file này chứa thông tin về các dependencies của ứng dụng

Thực hiện lệnh npm install để cài đặt tất cả các dependencies được xác định trong package json Tạo ra thư mục node_modules chứa các module cần thiết cho ứng dụng

Sao chép toàn bộ nội dung từ thư mục làm việc hiện tại trên máy host vào thư mục làm việc trong container bao gồm mã nguồn và các file khác cần thiết để chạy ứng dụng

Khai báo cổng 5000 để container lắng nghe Điều này không thực sự mở cổng, nhưng giúp người dùng hiểu rằng ứng dụng bên trong container sẽ chạy trên cổng này

● CMD ["npx", "nodemon", "server"]: Đặt lệnh mặc định để chạy khi container khởi động chạy nodemon, một công cụ giám sát thay đổi trong mã nguồn và tự động khởi động lại ứng dụng Ứng dụng sẽ được khởi động với file server

Sau khi quá trình xây dựng Dockerfile hoàn tất, nhóm sẽ sử dụng lệnh Docker

“build” để xây dựng và chạy thử hình ảnh Docker trên môi trường cục bộ Quá trình nhằm để đảm bảo kiểm tra và xác nhận rằng ứng dụng chạy đúng trong container

❖ Đẩy Docker Image lên registry:

Tiến hành xác nhận ứng dụng chạy đúng trên môi trường cục bộ, sau đó đăng nhập vào Docker Hub, gắn thẻ và đẩy Image lên Docker Hub để chuẩn bị cho việc triển khai

Bước vào công đoạn cuối, chúng tôi sẽ triển khai ứng dụng container của mình trên môi trường Kubernetes Quá trình này bao gồm việc kéo Image từ Docker Hub, khởi chạy container và kiểm tra lại ứng dụng để đảm bảo mọi thứ hoạt động chính xác

3.4.2 Triển khai lên môi trường Kubernetes

Khi image đã có sẵn trên DockerHub, nhóm sẽ tiến hành triển khai container lên môi trường Kubernetes Kubernetes là một nền tảng mã nguồn mở dùng để quản lý các container một cách hiệu quả, đảm bảo tính mở rộng và khả năng chịu tải cao Kiến trúc xây dựng ứng dụng trên môi trường Kubernetes sẽ được nhóm tham khảo và thiết kế theo các bước chi tiết dưới đây:

Hình 3 30 Sơ đồ khối kiến trúc master node của Kubernetes

Thiết lập và cấu hình một cluster Kubernetes, bao gồm các thành phần chính như API server, etcd, controller manager, và scheduler Để xây dựng và triển khai hệ thống ứng dụng trên Kubernetes, môi trường ứng dụng phải đảm bảo cấu hình có sẵn

2 thành phần: Master Node và Worker Node

Hình 3 31 Sơ đồ khối kiến trúc tổng quan môi trường chạy của ứng dụng trên

Khối Master đóng vai trò như bộ não của hệ thống, điều khiển các hoạt động trên Worker Node Khi triển khai một container lên hệ thống Kubernetes, Master

Node sẽ kiểm tra tài nguyên hiện có trên Worker Node, xây dựng các dependencies và cấu hình cần thiết cho việc khởi tạo ứng dụng, sau đó quyết định triển khai container lên Worker Node

Khối Worker Node là nơi quan trọng trong việc chạy các container ứng dụng, đảm bảo rằng chúng luôn sẵn sàng để xử lý dữ liệu và yêu cầu từ bên ngoài Như quan sát trong hình, khối này bao gồm các container ứng dụng, được nhóm phát triển xây dựng và đóng gói trong quá trình xây dựng Docker containers Các container này hoạt động giống như một máy tính, khởi tạo ứng dụng chạy ở Port 5000 với hệ thống

KẾT QUẢ THỰC HIỆN

KẾT QUẢ MÔ PHỎNG CẢM BIẾN

Hệ thống mô phỏng dữ liệu cảm biến được trang bị giao diện trực quan, được xây dựng dựa trên kiến trúc do nhóm phát triển và sử dụng các dịch vụ AWS được trình bày ở Chương 3 GUI này bao gồm hai trang chính:

❖ Device Types: Trang này dùng để cấu hình thông số cần thiết cho cảm biến mô phỏng:

● Tạo loại cảm biến: Tạo các loại cảm biến mô phỏng mới bằng cách đặt tên cho thiết bị, tạo topic MQTT để cảm biến mô phỏng sẽ truyền dữ liệu Topic này đóng vai trò là đường dẫn để truyền tải thông tin cảm biến đến các thành phần của hệ thống báo cháy

● Quản lý cảm biến: Xem các thông số về cảm biến hiện có, chỉnh sửa thông tin cảm biến

Hình 4 1 Thông số cảm biến mô phỏng cho hệ thống báo cháy

Sau khi tạo các loại cảm biến dựa vào các thông số cần thiết cho hệ thống

Hình 4 2 Danh sách các loại cảm biến mô phỏng cho hệ thống báo cháy

Hình 4 3 Giao diện điều khiển mô phỏng cảm biến cho hệ thống báo cháy

Hình 4.3 mô tả trang “Simulations” cho phép quản lý và chạy các loại cảm biến đã tạo ở trang “Device Types”

● Quản lý mô phỏng: Xem danh sách các mô phỏng đang chạy, điều chỉnh được số lượng cảm biến đang chạy và xóa khi không cần thiết

● Bắt đầu/Dừng mô phỏng: Điều khiển trạng thái hoạt động của các mô phỏng, bắt đầu tạo dữ liệu cảm biến mô phỏng hoặc tạm dừng chúng

● Xem thông tin mô phỏng: Xem thông tin về trạng thái và các topic đang nằm trong mô phỏng đang chạy

Mỗi tiến trình mô phỏng có khả năng tạo ra cùng lúc hàng trăm cảm biến khác nhau, cung cấp dữ liệu đầu vào quan trọng cho hệ thống máy chủ hệ thống cảnh báo cháy phân tích

Sau khi cấu hình và khởi chạy các mô phỏng cảm biến thành công trên giao diện GUI, hệ thống sẽ bắt đầu tạo ra dữ liệu giả lập từ các loại cảm biến khác nhau

Dữ liệu này mô phỏng các giá trị thực tế mà các cảm biến sẽ gửi đến hệ thống báo cháy trong điều kiện vận hành bình thường và tình huống khẩn cấp Hình 4.4, 4.5 minh họa một ví dụ về dữ liệu mô phỏng nhận được từ một cảm biến nhiệt độ và một cảm biến khói

Hình 4 4 Dữ liệu mô phỏng nhận được từ cảm biến nhiệt độ

Hình 4 5 Dữ liệu mô phỏng nhân được từ cảm biến khói

KẾT QUẢ PHẦN MỀM

Sau khi người dùng đã đăng nhập, đăng ký vào hệ thống và nhập các thông tin về người dùng Hệ thống yêu cầu người dùng cung cấp các thông tin cơ bản như tên, số điện thoại, địa chỉ email và địa chỉ nhà để đảm bảo rằng trong trường hợp xảy ra cháy, thông báo có thể được gửi đến đúng người và địa chỉ cần thiết Các giao diện người dùng được nhóm thiết kế thân thiện, dễ sử dụng, giúp người dùng dễ dàng quản lý thông tin cá nhân và thiết bị cảm biến

4.2.1 Kết quả giao diện quản lý cảm biến

Sau khi hoàn tất quá trình mô phỏng và xác minh các thông số kỹ thuật của hệ thống cảm biến tiếp theo nhóm đã tích hợp các cảm biến này vào hệ thống máy chủ xử lý và hiển thị trạng thái của chúng lên ứng dụng báo cháy trên nền tảng di động Nhóm đã tập trung thiết kế các giao diện màn hình với các chức năng chủ yếu về mặt quản lý và theo dõi thiết bị, cảm biến đầu vào của hệ thống, những thiết cảm biến này được gắn với từng nơi khác nhau và từng căn hộ khác nhau và chúng được quản lý bởi người dùng Hình 4.6 thể hiện về kết quả ứng dụng cảnh báo cháy khi phát hiện thiết bị cảm biến có dấu hiệu cảnh báo

Hình 4 6 Kết quả giao diện màn hình quản lý cảm biến khi có cảnh báo

Khi người dùng đăng nhập vào tài khoản liên kết với các cảm biến hiện có trong nhà, ứng dụng sẽ hiển thị trạng thái của các cảm biến một cách nhanh chóng và gần như lập tức Màn hình giao diện quản lý cảm biến sẽ thể hiện các thông tin chi tiết về từng cảm biến, bao gồm loại cảm biến, trạng thái hiện tại, và các cảnh báo nếu có

Trong trạng thái bình thường, các cảm biến sẽ hiển thị trạng thái "Normal" và không có cảnh báo nào được kích hoạt Ví dụ:

Trong trường hợp này, người dùng có thể an tâm rằng hệ thống cảm biến hoạt động bình thường và không có nguy cơ cháy nổ hay sự cố xảy ra

❖ Trạng thái cảnh báo (Alarm)

Khi một cảm biến phát hiện dấu hiệu bất thường, chẳng hạn như nhiệt độ tăng cao đột ngột hoặc có khói, trạng thái của cảm biến sẽ chuyển sang "Alarm" và số lượng cảnh báo sẽ được cập nhật Ví dụ:

● Heat and Rate-of-Rise Detector

Trong trạng thái cảnh báo, ứng dụng sẽ làm nổi bật cảm biến có vấn đề, có dấu hiệu gây cháy nổ bằng cách sử dụng màu nền màu vàng để người dùng có thể dễ dàng nhận biết và hành động kịp thời Người dùng có thể nhận được thông báo từ hệ thống chi tiết về vị trí và loại cảnh báo ngay khi nhận thấy có sự thay đổi về trạng thái cảm biến

Nhờ vào việc cập nhật trạng thái cảm biến một cách liên tục và chính xác, ứng dụng giúp người dùng luôn được thông báo kịp thời về tình hình an toàn trong nhà, từ đó nâng cao khả năng phản ứng và giảm thiểu thiệt hại do cháy nổ hoặc các sự cố khác Bên cạnh thể hiện các trạng thái cảm biến nhóm cũng thiết kế màn hình để thể hiện chi tiết về thông tin cảm biến và lịch sử qua các lần cảnh báo gần đây của từng cảm biến trong nhà, căn hộ

(a) Thông tin chi tiết cảm biến ở trạng thái bình thường (b) Thông tin chi tiết cảm biến ở trạng thái cảnh báo

Hình 4 7 Màn hình thông tin chi tiết cảm biến

Hình 4.7 thể hiện chi tiết hơn về thông tin trạng thái của từng cảm biến ở trạng thái bình thường hay ở trạng thái cảnh báo và vị trí của cảm biến trong căn hộ

● Tại (1) thể hiện trạng thái "Status" thể hiện tình trạng hoạt động của cảm biến Ví dụ, trong hình (a), trạng thái của cảm biến là "Normal," nghĩa là cảm biến đang hoạt động bình thường, tương tự nếu trạng thái là "Alarm" (b) điều này cho biết cảm biến đã phát hiện dấu hiệu cảnh báo như nhiệt độ tăng cao hoặc có khói

● Tại (2) được đánh dấu trên hình ảnh mặt cắt căn hộ để minh họa vị trí cụ thể của cảm biến Khi trạng thái của cảm biến thay đổi từ "Normal" sang "Alarm" biểu tượng trên hình ảnh mặt cắt sẽ thay đổi để người dùng dễ dàng nhận biết vị trí và tình trạng hiện tại của cảm biến Ví dụ, một cảm biến trong trạng thái "Alarm" có thể được đánh dấu bằng biểu tượng trong hình (b) để chỉ ra nguy cơ cảm biến này đang trong trạng thái cảnh báo và được lắp đặt tại phòng khách của căn hộ

Hình 4 8 Lịch sử cảnh báo của cảm biến

Hình 4.8 thể hiện lịch sử cảnh báo của từng cảm biến màn hình này cho phép người dùng theo dõi các sự kiện cảnh báo đã xảy ra trong quá khứ, giúp dễ dàng kiểm tra và phân tích tình hình hoạt động của hệ thống Mục "History" chứa danh sách của 10 cảnh báo gần nhất đã được ghi nhận bởi cảm biến này, bao gồm:

● Số thứ tự cảnh báo: Được đánh số từ 1 đến 10, với số 1 là cảnh báo gần nhất

● Thời gian cảnh báo: Hiển thị ngày và giờ cụ thể khi cảnh báo được kích hoạt

4.2.2 Kết quả của giao diện hiển thị màn hình chính của ứng dụng

Hình 4.9 thể hiện màn hình chính của ứng dụng, cung cấp một cái nhìn tổng quan về trạng thái hiện tại của các cảm biến trong nhà, căn hộ và các cảnh báo gần đây

Hình 4 9 Màn hình chính của ứng dụng báo cháy

● Trạng thái cảm biến của hệ thống (Status):

Tại (1) hiển thị biểu đồ thể hiện trạng thái của các cảm biến đang hoạt động trong nhà, hiển thị tổng quan trạng thái, số lượng cảm biến ở trạng thái "Normal" (màu xanh) và "Alert" (màu đỏ), tương ứng với hình 4.6 có 3 cảm biến đang ở trạng thái "Normal" và 2 cảm biến ở trạng thái "Alert."

● Cảnh báo gần đây (Recent Alerts):

Danh sách cảnh báo: Hiển thị danh sách các cảnh báo gần nhất (2) bao gồm loại cảm biến, thời gian cảnh báo và trạng thái cảnh báo ("Alert") Ví dụ:

- Heat Detector: 30 May 2024, 01:01 am - Alert

- Smoke Detector: 30 May 2024, 01:04 am - Alert

Theo dõi trạng thái: Người dùng có thể dễ dàng kiểm tra trạng thái tổng quan của hệ thống cảm biến trong nhà

Theo dõi các cảnh báo: Cảnh báo gần đây giúp người dùng nhận biết và phản ứng nhanh chóng với sự cố đồng thời giúp người dùng xem lại những cảm biến nào trong nhà hay xảy ra cảnh báo, có nguy cơ cháy nổ để kịp thời khắc phục, sửa chữa

❖ Màn hình chi tiết cảnh báo gần đây của căn hộ

Ngày đăng: 26/09/2024, 14:37

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] H. Phạm, "Nỗi ám ảnh hỏa hoạn," 14 09 2023. [Online]. Available: https://nld.com.vn/goc-nhin/noi-am-anh-hoa-hoan-20230913214947771.htm.[Accessed 10 02 2024] Sách, tạp chí
Tiêu đề: Nỗi ám ảnh hỏa hoạn
[2] P. N. Pha, N. T. Hiếu và P. M. Hiển, “Thiết kế hệ thống cảnh báo cháy trong tòa nhà cao tầng,” Viện Nghiên cứu sáng chế và Khai thác công nghệ, 2020 Sách, tạp chí
Tiêu đề: Thiết kế hệ thống cảnh báo cháy trong tòa nhà cao tầng
[3] T. N. Chí, T. H. An, N. H. Đăng và B. P. Hưng, “Nghiên cứu, Phát triển Thiết bị Báo cháy Thông minh,” Trường Đại học Công nghệ - Đại Học Quốc Gia Hà Nội, 2020 Sách, tạp chí
Tiêu đề: Nghiên cứu, Phát triển Thiết bị Báo cháy Thông minh
[4] I. M. M. Al Hasani, I. S. A. Kazmi and R. A. Shah, "IoT-based Fire Alerting Smart System," Sir Syed University Research Journal of Engineering &Technology, 2022 Sách, tạp chí
Tiêu đề: IoT-based Fire Alerting Smart System
[5] A. Abdul-Rahaman, P. A. Agbedemnab and J. Azaare, "An Automated Fire Detection and Reporting System," International Journal of Scientific Research and Engineering Trends, 2023 Sách, tạp chí
Tiêu đề: An Automated Fire Detection and Reporting System
[6] sinhnx, "Giới thiệu về Node.js," 30 09 2021. [Online]. Available: https://sinhnx.dev/lap-trinh/gioi-thieu-nodejs. [Accessed 26 02 2024] Sách, tạp chí
Tiêu đề: Giới thiệu về Node.js
[7] Gambaru, "Node.js là gì? Hướng dẫn phức tạp về Node.js," 14 11 2021. [Online]. Available: https://gambaru.io/en/blog/node-js-la-gi. [Accessed 13 01 2024] Sách, tạp chí
Tiêu đề: Node.js là gì? Hướng dẫn phức tạp về Node.js
[8] tuananhuet, "ExpressJS – Framework Node.js linh hoạt và dễ dàng sử dụng cho phát triển ứng dụng web," 22 04 2023. [Online]. Available:https://tuananhuet.com/expressjs-framework-node-js-linh-hoat-va-de-su-dung/. [Accessed 25 2 2024] Sách, tạp chí
Tiêu đề: ExpressJS – Framework Node.js linh hoạt và dễ dàng sử dụng cho phát triển ứng dụng web
[9] T. CTV, "NodeJS Là Gì? Tất Tần Tật Thông Tin Bạn Cần Biết Nền Tảng NodeJS," [Online]. Available: https://topviecit.vn/blog/nodejs-la-gi/.[Accessed 12 1 2024] Sách, tạp chí
Tiêu đề: NodeJS Là Gì? Tất Tần Tật Thông Tin Bạn Cần Biết Nền Tảng NodeJS
[10] Pum, "MongoDB là gì? Các tính năng nổi bật của MongoDB mà bạn cần biết," 19 04 2023. [Online]. Available: https://200lab.io/blog/mongodb-la-gi/.[Accessed 13 1 2024] Sách, tạp chí
Tiêu đề: MongoDB là gì? Các tính năng nổi bật của MongoDB mà bạn cần biết
[11] minalpandey, "MongoDB Architecture," 01 12 2023. [Online]. Available: https://www.geeksforgeeks.org/mongodb-architecture/. [Accessed 11 03 2024] Sách, tạp chí
Tiêu đề: MongoDB Architecture
[12] C. Platform, "Tổng quan về React Native," 19 01 2023. [Online]. Available: https://viblo.asia/p/tong-quan-ve-react-native-gwd43kOr4X9. [Accessed 23 1 2023] Sách, tạp chí
Tiêu đề: Tổng quan về React Native
[13] NamDev, "Phát triển React Native Đơn giản hơn với Expo," 30 03 2023. [Online]. Available: https://thesamhouse.com/threads/phat-trien-react-native-don-gian-hon-voi-expo.10450/. [Accessed 23 1 2024] Sách, tạp chí
Tiêu đề: Phát triển React Native Đơn giản hơn với Expo
[14] AndroidCodeLab, "Google Firebase Cloud Messaging or Push Notification Integration in Android Apps, Send RealTime Messages in Android App," 19 06 2020. [Online]. Available: https://medium.com/androidcodelab/firebase-cloud-messaging-or-push-notification-fb142fbcf270. [Accessed 23 02 2024] Sách, tạp chí
Tiêu đề: Google Firebase Cloud Messaging or Push Notification Integration in Android Apps, Send RealTime Messages in Android App
[15] L. V. Hải, "JWT là gì? Các thành phần chính trong JWT," 18 08 2023. [Online]. Available: https://200lab.io/blog/jwt-la-gi/. [Accessed 04 03 2024] Sách, tạp chí
Tiêu đề: JWT là gì? Các thành phần chính trong JWT
[16] Đ. V. Phú, "Tìm hiểu cơ bản về Docker," 20 01 2020. [Online]. Available: https://viblo.asia/p/tim-hieu-co-ban-ve-docker-6J3Zgx1glmB?cv=1. [Accessed 02 04 2024] Sách, tạp chí
Tiêu đề: Tìm hiểu cơ bản về Docker
[17] tel4vn, "GIỚI THIỆU TỔNG QUAN VỀ KIẾN TRÚC CỦA DOCKER," 01 01 2021. [Online]. Available: https://tel4vn.edu.vn/blog/gioi-thieu-tong-quan-ve-kien-truc-cua-docker/. [Accessed 05 04 2024] Sách, tạp chí
Tiêu đề: GIỚI THIỆU TỔNG QUAN VỀ KIẾN TRÚC CỦA DOCKER
[18] fptcloud, "Docker là gì? Tìm hiểu về dự án mã nguồn mở Docker từ A – Z," 18 1 2022. [Online]. Available: https://fptcloud.com/docker-la-gi/. [Accessed 4 2024] Sách, tạp chí
Tiêu đề: Docker là gì? Tìm hiểu về dự án mã nguồn mở Docker từ A – Z
[19] K. Documentation, "Cluster Architecture," Kubernetes, 10 10 2023. [Online]. Available: https://kubernetes.io/docs/concepts/architecture/. [Accessed 05 04 2024] Sách, tạp chí
Tiêu đề: Cluster Architecture
[20] ssbostan, "Kubernetes Architecture," 09 04 2021. [Online]. Available: https://github.com/ssbostan/kubernetes-complete-reference/blob/master/contents/concepts/architecture/README.md.[Accessed 05 03 2024] Sách, tạp chí
Tiêu đề: Kubernetes Architecture

HÌNH ẢNH LIÊN QUAN

Hình 2. 1 Kiến trúc của NodeJS [6]. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 1 Kiến trúc của NodeJS [6] (Trang 25)
Hình 2. 7 Cách thức hoạt động của Docker [17]. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 7 Cách thức hoạt động của Docker [17] (Trang 39)
Hình 2. 8 Kiến trúc của Kubernetes [19]. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 8 Kiến trúc của Kubernetes [19] (Trang 42)
Hình 2. 9 Thành phần chính của Master Node - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 9 Thành phần chính của Master Node (Trang 43)
Hình 2. 10 Khởi tạo pod (containers) [21]. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 10 Khởi tạo pod (containers) [21] (Trang 44)
Hình 2. 11 Xóa pod (containers) [21]. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 11 Xóa pod (containers) [21] (Trang 45)
Hình 2. 13 Cách thức hoạt động của Terraform [23]. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 13 Cách thức hoạt động của Terraform [23] (Trang 49)
Hình 2. 15 Các công cụ hàng đầu cho IaC [24]. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 2. 15 Các công cụ hàng đầu cho IaC [24] (Trang 50)
Hình 3. 2 Sơ đồ khối hệ thống - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 2 Sơ đồ khối hệ thống (Trang 54)
Hình 3. 4  Lưu đồ thuật toán khối xử lý real-time. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 4 Lưu đồ thuật toán khối xử lý real-time (Trang 57)
Hình 3. 9 Lược đồ Use case cho Guest - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 9 Lược đồ Use case cho Guest (Trang 65)
Hình 3. 10 Sơ đồ tuần tự đăng ký - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 10 Sơ đồ tuần tự đăng ký (Trang 67)
Hình 3. 12 Sơ đồ tuần tự đăng xuất. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 12 Sơ đồ tuần tự đăng xuất (Trang 70)
Hình 3. 13 Sơ đồ tuần tự xem thông tin người dùng. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 13 Sơ đồ tuần tự xem thông tin người dùng (Trang 71)
Hình 3. 14 Sơ đồ tuần tự chỉnh sửa, cập nhật thông tin cá nhân. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 14 Sơ đồ tuần tự chỉnh sửa, cập nhật thông tin cá nhân (Trang 73)
Hình 3. 15 Sơ đồ tuần tự xem thông tin tất cả thiết bị cảnh báo - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 15 Sơ đồ tuần tự xem thông tin tất cả thiết bị cảnh báo (Trang 75)
Hình 3. 18 Sơ đồ tuần tự nhận thông báo đẩy cảnh báo cháy - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 18 Sơ đồ tuần tự nhận thông báo đẩy cảnh báo cháy (Trang 79)
Bảng 3. 16 Mô tả dữ liệu collection rooms. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Bảng 3. 16 Mô tả dữ liệu collection rooms (Trang 83)
Hình Đăng ký. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
nh Đăng ký (Trang 87)
Hình 3. 22 Giao diện màn hình Home  Bảng 3. 23 Bảng mô tả chi tiết, chức năng màn hình Home - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 22 Giao diện màn hình Home Bảng 3. 23 Bảng mô tả chi tiết, chức năng màn hình Home (Trang 89)
Hình 3. 27 Giao diện màn hình Device/Detail Device - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 27 Giao diện màn hình Device/Detail Device (Trang 94)
Hình 3. 30 Sơ đồ khối kiến trúc master node của Kubernetes. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 30 Sơ đồ khối kiến trúc master node của Kubernetes (Trang 99)
Hình 3. 31 Sơ đồ khối kiến trúc tổng quan môi trường chạy của ứng dụng trên - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 31 Sơ đồ khối kiến trúc tổng quan môi trường chạy của ứng dụng trên (Trang 100)
Hình 3. 32 Sơ đồ khối kiến trúc cấu hình của ứng dụng trên Kubernetes. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 32 Sơ đồ khối kiến trúc cấu hình của ứng dụng trên Kubernetes (Trang 101)
Hình 3. 33 Mô hình tổng quát của kiến trúc cơ sở hạ tầng. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 33 Mô hình tổng quát của kiến trúc cơ sở hạ tầng (Trang 102)
Hình 3. 37 Xây dựng tài nguyên dưới dạng mã (Infrastructure as Code - IaC) Các thành phần chính: - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 3. 37 Xây dựng tài nguyên dưới dạng mã (Infrastructure as Code - IaC) Các thành phần chính: (Trang 106)
Hình 4. 6 Kết quả giao diện màn hình quản lý cảm biến khi có cảnh báo - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 4. 6 Kết quả giao diện màn hình quản lý cảm biến khi có cảnh báo (Trang 112)
Hình 4. 7 Màn hình thông tin chi tiết cảm biến. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 4. 7 Màn hình thông tin chi tiết cảm biến (Trang 114)
Hình 4. 9 Màn hình chính của ứng dụng báo cháy. - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 4. 9 Màn hình chính của ứng dụng báo cháy (Trang 116)
Hình 4.10b cung cấp thông tin cụ thể về cảnh báo đã chọn, bao gồm: - Đồ án tốt nghiệp: Thiết kế hệ thống IoT cảnh báo cháy nổ trên hạ tầng Amazon Cloud Services
Hình 4.10b cung cấp thông tin cụ thể về cảnh báo đã chọn, bao gồm: (Trang 118)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w