Luồng dữ liệu cảm biến khi sử dụng AWS IoT Core

Theo quy trình luồng dữ liệu cảm biến trên nền tảng điện toán đám mây AWS được nhóm nghiên cứu lựa chọn như mô tả tại Hình 1, bài viết này sẽ phân tích chi tiết về luồng dữ liệu từ thiết bị qua các thành phần dịch vụ của nền tảng điện toán đám mây AWS đến ứng dụng người dùng.

Hình 1: Quy trình luồng dữ liệu cảm biến trên nền tảng AWS

SQS action: mỗi khi dữ liệu định kỳ từ cảm biến được thiết bị thu thập gửi đến AWS IoT Core, SQS action sẽ được kích hoạt theo quy tắc được định nghĩa ở câu lệnh sau:

Câu lệnh trên có chức năng trích xuất dữ liệu mã thiết bị (current.state.reported.deviceid) và các giá trị cảm biến (current.state.reported.sensorValue) nhận được từ topic $aws/things/SmhThing/shadow/update/documents để gửi đến hàng đợi của dịch vụ hàng đợi SQS có tên là SmhQueue:

Hình 2: Cấu hình chuyển tiếp dữ liệu từ AWS IoT Rule đến SQS

Amazon SQS (Simple Queue Service): là dịch vụ hàng đợi được cung cấp bởi đám mây AWS với các tính năng bảo mật, dữ liệu lưu trữ bền vững an toàn cho phép tích hợp và phân tách các hệ thống nhắn tin phân tán.

Có ba thành phần chính trong hệ thống nhắn tin phân tán:

  • Thành phần của hệ thống phân tán gồm thành phần sản xuất (AWS IoT Core) và thành phần tiêu thụ (Lambda)
  • Hàng đợi: AWS SQS
  • Tin nhắn lưu trữ trong hàng đợi: dữ liệu cảm biến

Quy trình về vòng đời tin nhắn được xử lý gồm 3 bước:

  • Bước 1: thành phần sản xuất (thành phần 1) gửi tin nhắn A đến hàng đợi và được lưu trữ phân phối dự phòng trên các máy chủ Amazon SQS.

Hình 3: Minh họa bước 1 trong quy trình vòng đời tin nhắn SQS

  • Bước 2: Khi một đối tượng tiêu thụ (thành phần 2) sẵn sàng xử lý tin nhắn, đối tượng sẽ thực hiện gửi yêu cầu tiêu thụ tin nhắn và tin nhắn A sẽ được trả về, trong khi tin nhắn A đang được xử lý, nó vẫn nằm trong hàng đợi và không được phép trả về cho bất kỳ yêu cầu tiêu thụ tin nhắn nào khác trong khoảng thời gian chờ hiển thị (visibility timeout).

Hình 4: Minh họa bước 2 trong quy trình vòng đời tin nhắn SQS

  • Bước 3: Đối tượng tiêu thụ (thành phần 2) xóa thông báo A khỏi hàng đợi để ngăn thông báo được nhận và xử lý lại khi hết thời gian hiển thị.

Hình 5: Minh họa bước 3 trong quy trình vòng đời tin nhắn SQS

Trong trường hợp tin nhắn chưa được xóa bởi đối tượng tiêu thụ, Amazon SQS sẽ tự động xóa các tin nhắn đã nằm trong hàng đợi quá thời gian lưu giữ tin nhắn tối đa (maximum message retention period). Giá trị thời gian lưu giữ tin nhắn mặc định là 4 ngày và có thể cấu hình được với giá trị từ 60 giây đến 1.209.600 giây (14 ngày). Amazon SQS hỗ trợ cả hàng đợi tiêu chuẩn và hàng đợi FIFO, vì dữ liệu cảm biến được gửi định kỳ theo thời gian và thuật toán tổ chức lưu trữ có dấu thời gian được sắp xếp theo thứ tự trong CSDL, mặt khác yêu cầu về tính duy nhất của gói tin đối với dữ liệu cảm biến không quá quan trọng nên luận văn sử dụng hàng đợi tiêu chuẩn để thiết kế ứng dụng [1].

AWS Lambda: là dịch vụ kiến trúc không máy chủ (serverless) được cung cấp bởi AWS, giúp thực thi các đoạn mã logic dưới dạng các hàm độc lập mà không cần phải quản lý máy chủ, các hàm Lambda chỉ thực thi khi cần thiết để xử lý các sự kiện.

Trong luồng dữ liệu cảm biến, Lambda sẽ đóng vai trò là đối tượng tiêu thụ tin nhắn từ hàng đợi SmhQueue qua trình kích hoạt ánh xạ nguồn sự kiện event source mapping, Lambda sẽ thực hiện thăm dò hàng đợi liên tục, sau đó đọc và tổ chức tin nhắn thành các lô và gọi hàm SmhInsertSensor cho mỗi lô (batch) để thực thi phương thức PUT ghi dữ liệu vào CSDL DynamoDB. Sau khi hàm xử lý thành công một lô, Lambda sẽ gửi lệnh xóa tin nhắn đã xử lý trong hàng đợi.

Hình 7: Cấu hình SmhQueue làm trình kích hoạt Lambda đến hàm SmhInsertSensor

Hình 8: Lambda sử dụng trình kích hoạt ánh xạ sự kiện đọc dữ liệu từ SmhQueue

Amazon DynamoDB: bảng sensor lưu trữ giá trị cảm biến sử dụng phương thức khóa chính tổng hợp, thuộc tính khóa phân vùng là deviceid(String) và thuộc tính khóa sắp xếp là datetime(String):

  • deviceid(String): lưu trữ mã thiết bị để phân loại và nhóm theo thiết bị phục vụ truy vấn theo mã thiết bị
  • datetime(String): lưu trữ chuỗi giá trị thời gian để sắp xếp dữ liệu phục vụ truy vấn theo thời gian
  • temperature(Number): lưu trữ giá trị nhiệt độ
  • Thuộc tính humidity (Number): lưu trữ giá trị độ ẩm
  • Thuộc tính gas(Number): lưu trữ giá trị nồng độ khí gas
  • Thuộc tính pir(Boolean): lưu trữ giá trị mức hồng ngoại


Hình 9: Giá trị cảm biến lưu trữ trong DynamoDB

Tìm hiểu thêm:
Fanpage Cộng đồng Kỹ thuật TAPIT: TAPIT – Learning, Research and Sharing Community

Chuỗi bài viết được thực hiện và chia sẻ bởi LCV.Khải và Các nhóm nghiên cứu tại Cộng đồng Kỹ thuật TAPIT
Chúc các bạn thành công!

Tài liệu tham khảo
[1] AWS, “Basic Amazon SQS architecture”, Amazon Simple Queue Service Developer Guide, Amazon Web Services, 2020.