EdgeX cung cấp bộ phát triển phần mềm dịch vụ ứng dụng (Application Service Software Development Kit), viết gọn là App-Service- SDK (hiện tại hỗ trợ ngôn ngữ Go) để người phát triển có thể triển khai, xây dựng các vi dịch vụ đáp ứng các yêu cầu cụ thể. App-Service-SDK cung cấp sẵn nhiều hàm xử lý cơ bản như lọc, nén, chuyển đổi định dạng, xuất dữ liệu bằng HTTP, MQTT..., hơn nữa, người phát triển hồn tồn có thể tự tạo thêm các hàm khác để đáp ứng yêu cầu của mình. App-Service-SDK cũng đã được cấu hình để kết nối sẵn với một số vi dịch vụ trong EdgeX như dữ liệu lõi, điều khiển... và người phát triển cũng hồn tồn có thể kết nối tới các vi dịch vụ khác nếu cần.
App-Service-SDK cho phép tạo ra các vi dịch vụ ứng dụng có chức năng cơ bản vừa nêu, ngoài ra cịn cung cấp thêm một số tính năng mở rộng, nâng cao, cho phép nhà phát triển được tự do, linh hoạt phát triển các vi dịch vụ phù hợp:
19
App-Service-SDK xây dựng sẵn một vi dịch vụ ứng dụng có thể cấu hình (Configurable Application Service). Nó cho phép người sử dụng khơng cần lập trình, khơng cần chạy lại mà vẫn có thể thay đổi động được các chức năng mà EdgeX đã cung cấp (lọc, nén, chuyển đổi định dạng, gửi HTTP, MQTT...) cho vi dịch vụ chỉ bằng việc thay đổi cấu hình của nó. Với những u cầu cơ bản về việc đẩy dữ liệu ra ngồi thì vi dịch vụ này thực sự hữu ích vì sẽ khơng phải lập trình mà có thể sử dụng ngay vào hệ thống.
Cho phép vi dịch vụ ứng dụng chạy như một ứng dụng máy chủ web (Web Server). Tức là App-Service-SDK cho phép người phát triển tạo thêm cho vi dịch vụ ứng dụng các điểm cuối mới, miễn là không trùng với một số điểm cuối đã được sử dụng trước, để mở rộng thêm chức năng xử lý của vi dịch vụ ứng dụng theo yêu cầu bài toán.
App-Service-SDK cho phép thay đổi loại dữ liệu đầu vào. Mặc định dữ liệu đầu vào là các sự kiện (Event) của EdgeX, nhưng hồn tồn có thể tự định nghĩa một cấu trúc dữ liệu khác để sử dụng. Ví dụ cho việc sử dụng tính năng này là giả sử có 2 vi dịch vụ ứng dụng A và B: vi dịch vụ A nhận dữ liệu vào là sự kiện của EdgeX, xử lý, chuyển đổi và đưa ra kết quả có kiểu dữ liệu mới là kiểu X; dữ liệu kiểu X này sẽ được gửi tới vi dịch vụ B để xử lý tiếp, thì khi này, cần phải lập trình để thay đổi kiểu dữ liệu đầu vào từ kiểu sự kiện (Event) của EdgeX thành kiểu X cho vi dịch vụ B.
Với việc hỗ trợ nhiều chức năng cơ bản cũng như các tính năng nâng cao, có tính mở về ứng dụng, người phát triển sẽ được tự do triển khai các vi dịch vụ ứng dụng đáp ứng yêu cầu khác nhau của nhiều bài toán.
Vi dịch vụ thiết bị:
2.3.10
Vi dịch vụ thiết bị là nơi kết nối các thiết bị với EdgeX, tương tác trực tiếp với thiết bị để thu thập dữ liệu và ra lệnh điều khiển thiết bị. Cụ thể, vi dịch vụ thiết bị có các chức năng sau chính sau:
Quản lý thơng tin thiết bị: thêm, sửa, xóa trong thông tin siêu dữ liệu. Quản lý một hoặc nhiều thiết bị, loại thiết bị. Các loại thiết bị được mô
tả bởi hồ sơ thiết bị (Device Profile).
Cung cấp các REST API cho các vi dịch vụ EdgeX khác sử dụng (thường là vi dịch vụ điều khiển) để:
20
Đọc dữ liệu từ thiết bị, tương ứng với lệnh “GET”. Ghi dữ liệu tới thiết bị, tương ứng với lệnh “PUT”.
o Thu thập dữ liệu, chuyển đối thành dữ liệu chung của EdgeX là các bản đọc (Reading) và sự kiện (Event), sau đó đẩy chúng tới vi dịch vụ dữ liệu lõi.
o Đẩy bất đồng bộ, tức là thiết bị chủ động, tự gửi dữ liệu đến vi dịch vụ thiết bị để vi dịch vụ thiết bị gửi tới dữ liệu lõi.
o Theo yêu cầu, cụ thể là theo yêu cầu đọc (GET) dữ liệu từ vi dịch vụ điều khiển gửi xuống vi dịch vụ thiết bị.
o Theo các lịch trình. Vi dịch vụ thiết bị hỗ trợ tính năng lập lịch nội bộ để tự đi thu thập dữ liệu từ các thiết bị. Thông tin lập lịch được cài đặt ở phần sự kiện tự động (AutoEvent).
EdgeX cung cấp bộ phát triển phần mềm dịch vụ thiết bị (Device Service Software Development Kit), viết tắt là Device-SDK, cho phép người phát triển có thể triển khai, xây dựng các vi dịch vụ đáp ứng các yêu cầu cụ thể. Hiện tại, EdgeX Foundry đang hỗ trợ ngôn ngữ lập trình C và Go, tương ứng là Device-SDK-C và Device-SDK-Go, cả 2 SDK đều hỗ trợ các chức năng giống nhau. Trong luận văn này sẽ sử dụng Device-SDK-Go, và sẽ được trình bày kỹ hơn ở mục 3.1.
Đại lý quản lý hệ thống:
2.3.11
Vi dịch vụ này có chức năng là một điểm kết nối trung gian duy nhất cho hệ thống quản lý từ xa để giám sát hệ thống EdgeX. Hiện tại, hỗ trợ các khả năng sau:
Chạy, dừng, chạy lại các vi dịch vụ của EdgeX.
Đọc thông tin như thông tin bộ nhớ, tốc độ CPU... của các vi dịch vụ. Kiểm tra trạng thái, sức khỏe của các vi dịch vụ.
Đọc và thay đổi cấu hình của các vi dịch vụ.
Bảo mật:
2.3.12
Các vi dịch vụ, thành phần bảo mật có nhiệm vụ bảo vệ dữ liệu và bảo vệ việc điều khiển các thiết bị được quản lý bởi EdgeX đối với các ứng dụng, vi dịch vụ cả bên trong lẫn bên ngoài EdgeX. Với mục tiêu ban đầu rằng EdgeX Foundry là một nền tảng phần mềm mã nguồn mở trung lập với nhà cung cấp ở biên của mạng, nên các tính năng bảo mật của EdgeX cũng được xây dựng dựa trên nền tảng của các giao diện mở, có thể cắm và có thể thay
21
thế. Khi bật dịch vụ bảo mật, quản trị viên của EdgeX sẽ có thể khởi tạo các thành phần bảo mật, thiết lập môi trường chạy cho các dịch vụ bảo mật, quản lý, kiểm soát truy cập của người dùng, và tạo JWT (JSON Web Token – mã thông báo Web JSON) để truy cập tài nguyên của các dịch vụ khác trong EdgeX. Có hai thành phần bảo mật chính trong EdgeX. Thứ nhất là một kho bí mật (Secret Store), được sử dụng để cung cấp nơi an tồn cho việc lưu giữ bí mật EdgeX. Thứ hai là một cổng API (API gateway), được sử dụng như một tấm chắn để hạn chế quyền truy cập vào các tài nguyên của EdgeX và thực hiện các công việc liên quan tới kiểm sốt truy cập. Tóm lại, các tính năng bảo mật của EdgeX gồm:
Tạo, lưu trữ, lấy bí mật (mật khẩu, chứng chỉ, khóa truy cập…). Hỗ trợ API Gateway để bảo vệ truy cập và các tài nguyên của EdgeX. Tạo tài khoản người dùng với tùy chọn xác thực là OAuth2 hoặc JWT. Thêm tài khoản người dùng vào các nhóm danh sách kiểm sốt truy
cập (Access Control List - ACL) tùy ý.
2.4 Kết luận chương:
Chương này đã giới thiệu về nền tảng mã nguồn mở EdgeX Foundry, kiến trúc cũng như chức năng từng vi dịch vụ trong nền tảng. Từ các chương sau, có thể sẽ nói tới các vi dịch vụ EdgeX Foundry mà không phải nhắc lại chức năng và vị trí của chúng.
22
CHƯƠNG 3. THIẾT KẾ MƠ HÌNH TRIỂN KHAI 3.1 Chi tiết các vi dịch vụ sử dụng trong đề tài:
Trong các hệ thống IoT, thường dữ liệu người dùng sử dụng và thiết bị sử dụng là khác nhau. Đối với người dùng, các dữ liệu thường là tên dễ hiểu, trong khi ở các thiết bị, thường chúng chỉ hiểu các con số theo một chuẩn nào đó. Xét ví dụ ở Hình 3.5 khi người dùng muốn bật một thiết bị đèn: đối với người dùng, thiết bị sẽ có định danh thiết bị (Device Identifier) theo tên, ví dụ như “Light 1”, các lệnh điều khiển cũng có định danh lệnh (Command Identifier) theo tên, ví dụ lệnh bật tắt đèn là “OnOff”. Tuy nhiên, thường các thiết bị IoT sẽ không hiểu được các tên đó, mà IoT Gateway (trong EdgeX Foundry, đây là công việc của vi dịch vụ thiết bị) phải chuyển đổi chúng từ tên về các giá trị theo chuẩn nào đó của thiết bị đang sử dụng. Khi đó, có thể “Light 1” sẽ được chuyển đổi về giá trị giả sử là “0x1234”, trong khi lệnh “OnOff” được chuyển đổi thành giá trị giả sử là “0x5678” theo chuẩn nào đó. Sau khi chuyển đổi xong, câu lệnh từ người dùng sẽ được đóng gói thành một câu lệnh có nội dụng mới, mà trong IoT, thường gọi là tin nhắn (message) hay gói tin (packet), và gửi, chuyển tới thiết bị đèn.