- vừa được xem lúc

Xây dựng ứng dụng Real-Time IoT với ScyllaDB

0 0 29

Người đăng: Hoang Minh

Theo Viblo Asia

Real-Time Là Gì?

Real-time đề cập đến thời gian cần để dữ liệu được xử lý, ghi hoặc đọc. Ví dụ trong thực tế, các cảm biến ở Đà Lạt sẽ phải gửi dữ liệu đến cơ sở dữ liệu nằm trên một máy chủ ở TP. HCM thông qua HTTP.

Khi này ứng dụng IoT của bạn sẽ xuất hiện 2 vấn đề về độ trễ (latency):

  • Đầu tiên là độ trễ đầu cuối, chính là toàn bộ thời gian khứ hồi (Round Trip Time) từ chính thiết bị IoT, đến ứng dụng của bạn (và cơ sở dữ liệu), sau đó quay trở lại chính thiết bị IoT. Điều này thường phụ thuộc vào cấu trúc liên kết địa lý (thế giới thực) của bạn và loại mạng và phần cứng máy tính bạn đang sử dụng. Để khắc phục độ trễ đầu cuối cao, bạn có thể cải thiện hình thức kết nối mạng (ví dụ: chuyển từ cơ sở hạ tầng 4G sang 5G), nâng cấp cảm biến IoT.
  • Thứ hai là độ trễ trong ứng dụng hoặc trong chính cơ sở dữ liệu. Để đạt được độ trễ thấp hơn trong một ứng dụng IoT, điều kiện cần là phải giảm thời gian xử lý và IO trên máy chủ và cơ sở dữ liệu đằng sau nó.

image.png

Tại Sao Cần Real-Time?

Hãy tưởng tượng một nhà máy sản xuất sô cô la với hàng nghìn cảm biến và mỗi cảm biến ghi lại 50 điểm dữ liệu quan trọng mỗi giây.

Trong trường hợp nhà máy sản xuất sô cô la có thể không cần dữ liệu thời gian thực. Chúng ta có thể giảm tần suất lấy dữ liệu như mỗi 5 phút, mỗi 15 phút, mỗi giờ. Tuy nhiên, ban giám đốc có thể mất đi "bức tranh real time" về năng suất của nhà máy. Hoặc chúng ta có thể lưu dữ liệu của cảm biến mỗi giây vào một batch, nhưng chỉ send batch lên ứng dụng (cơ sở dữ liệu) để update sau khoảng 15 - 30 phút. Nhưng làm hàng đống công việc chỉ để tăng một ít khả năng xử lý thì thật sự không đáng.

Trong trường hợp thời gian thực, một ứng dụng IoT luôn cần thời gian phản hồi ở quy mô mili giây hoặc thậm chí dưới mili giây.

IoT & ScyllaDB, Một Cặp Trời Sinh

ScyllaDB là một OPEN-SOURCE DATABASE cung cấp dữ liệu highly available và tốc độ đọc-ghi dưới mili giây, đáp ứng yêu cầu thiết kế hệ thống IoT trên quy mô lớn.

Kiến trúc shard-per-core của ScyllaDB cho phép các truy vấn không chỉ kết nối trực tiếp đến các nút DB mà còn đến chính xác CPU để xử lý dữ liệu. Cách tiếp cận này giảm thiểu các bước nhảy intracluster, cũng như giao tiếp giữa CPU với CPU.

image.png

DEMO

Lý thuyết nhiều rồi giờ thì bắt tay vào thực hành thôi

Phần deployment

  1. Cài đặt Docker

  2. Cài đặt ScyllaDB (Nếu xài local)

Bạn có thể cài đặt bản open-source từ trang chủ ScyllaDB

image.png

Chọn continue sẽ có hướng dẫn các bước tiếp theo

image.png image.png

  1. Tạo tài khoản ScyllaDB Cloud (Nếu xài cloud)

Để cho dễ thì ở đây mình sẽ dùng ScyllaDB Cloud

Bước 1: Chọn provider, đặt tên cluster, cấu hình Allowed IPs image.png

Bước 2: Chọn region, instance image.png

Bước 3: Cuối cùng là preview và lauch thôi! image.png

Sau khi tạo xong bạn có thể vào xem lại cluster đã tạo image.png

Xem thêm các cách connect khác: image.png

Phần coding

Dowload source code về máy -> link GITHUB

  1. Cài đặt VSCode & NodeJS

Kiến trúc của project như sau:

  • File model.js -> Dùng để định nghĩa 2 model là Sensor và Measure
  • File helpers.js -> Dùng để generate Sensors
  • File index.js -> Dùng để connect với ScyllaDB, truyền câu lệnh truy vấn, và generate Measure data cho từng Sensor
  1. Dùng lệnh npm i để cài đặt các gói thư viện cần thiết

  2. Connect với ScyllaDB sử dụng docker

docker run -it --rm --entrypoint cqlsh scylladb/scylla -u [USERNAME] -p [PASSWORD] [NODE_IP_ADDRESS]

image.png

Tạo KEYSPACE iot

CREATE KEYSPACE iot WITH replication = {'class': 'NetworkTopologyStrategy', 'AWS_AP_EAST_1' : 3} AND durable_writes = true;
Use iot; CREATE TABLE IF NOT EXISTS iot.sensor
( sensor_id UUID, type TEXT, PRIMARY KEY (sensor_id)
); CREATE TABLE IF NOT EXISTS iot.measurement
( sensor_id UUID, ts TIMESTAMP, value FLOAT, PRIMARY KEY (sensor_id, ts)
) WITH compaction = { 'class' : 'TimeWindowCompactionStrategy' };

image.png

  1. Dùng lệnh npm run dev để chạy image.png

  2. Dùng cqlsh để check database image.png

image.png

Kết Luận

Trong bài viết này, chúng ta đã mô phỏng cảm biến IoT để sinh dữ liệu và gửi đến cơ sở dữ liệu với độ trễ thấp nhất. Trong đó, chúng ta cũng đã tạo một cluster ScyllaDB on Cloud, học một số câu lệnh CQLSH cơ bản, và tạo ứng dụng kết nối với ScyllaDB. Tôi hy vọng bạn thấy bài viết này thú vị.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Làm việc với Firebase Realtime Database

Firebase Realtime database là một cloud hosted database hỗ trợ đa nền tảng: Android, IOS và Web. Tất cả dữ liệu được lưu trữ ở định dạng JSON và với bất kể một sự thay đổi dữ liệu nào thì có sự phản h

0 0 63

- vừa được xem lúc

Khám phá từng ngõ ngách Apache Druid - Phần 1

1. Giới thiệu. Trước khi đi vào nội dung chính mình muốn kể 1 câu chuyện sau:. .

0 0 574

- vừa được xem lúc

Real time analytics: Airflow + Kafka + Druid + Superset

Introduction. Blog này giới thiệu về cách thiết lập phân tích realtime mã nguồn mở.

0 0 96

- vừa được xem lúc

Event driven programming và câu chuyện người đưa thư

Một bức tranh lớn về thiết kế hệ thống với phong cách lập trình theo phương châm: Sống là không chờ đợi. .

0 0 44

- vừa được xem lúc

Giới thiệu về SignalR

1. SignalR là gì . SignalR có thể sử dụng trong bất kì chức năng web real-time nào. Trong đó ứng dụng chat trên web là một ví dụ điển hình.

0 0 29

- vừa được xem lúc

Ứng dụng thời gian thực với Laravel Reverb

Giới thiệu. Ở bản cập nhật Laravel 11, Taylor Otwell đã giới thiệu một vài sự cập nhật mới mẻ cho Laravel.

0 0 18