Плагіни зберігання
Плагіни зберігання використовуються для взаємодії з мікросервісом зберігання і забезпечують постійне зберігання інформації для Fledge.
Поточна версія Fledge постачається з трьома плагінами для зберігання даних:
- Плагін SQLite: це плагін за замовчуванням, який використовується для зберігання даних загального призначення на обмежених пристроях.
- Плагін SQLite In Memory: цей плагін може бути використаний разом з одним з інших плагінів для зберігання даних і забезпечить систему зберігання в пам'яті лише для читання даних. Дані конфігурації зберігаються за допомогою плагінів SQLite або PostgreSQL.
- Плагін PostgreSQL: цей плагін може бути встановлений за запитом (або він може бути вбудований як плагін за замовчуванням з вихідного коду) і використовується для більш значних потреб у зберіганні даних у відносно великих системах.
Дані та Метадані
Постійність поділяється на два блоки:
- Metadata persistency: це стосується зберігання метаданих для Fledge, таких як конфігурація плагінів, планування завдань і завдань, а також зберігання статистичної інформації.
- Data persistency: це стосується зберігання даних, зібраних з датчиків і пристроїв мікросервісами South. Плагін SQLite In Memory є прикладом плагіна для зберігання, призначеного для зберігання ли ше даних.
У поточній реалізації Fledge метадані та дані за замовчуванням використовують один і той самий плагін зберігання. Адміністратори можуть вибрати різні плагіни для цих двох категорій даних, причому найпоширенішою конфігурацією такого типу є використання сервісу зберігання SQLite In Memory для даних і SQLite для метаданих. Це встановлюється шляхом редагування файлу конфігурації зберігання. Наразі у Fledge немає інтерфейсу для зміни конфігурації зберігання.
Файл конфігурації зберігання зберігається у каталозі даних Fledge як etc/storage.json, за замовчуванням файл конфігурації зберігання має вигляд
{
"plugin": {
"value": "sqlite",
"description": "The main storage plugin to load"
},
"readingPlugin": {
"value": "",
"description": "The storage plugin to load for readings data. If blank the main storage plugin is used."
},
"threads": {
"value": "1",
"description": "The number of threads to run"
},
"managedStatus": {
"value": "false",
"description": "Control if Fledge should manage the storage provider"
},
"port": {
"value": "0",
"description": "The port to listen on"
},
"managementPort": {
"value": "0",
"description": "The management port to listen on."
}
}
Це встановлює плагін для зберігання даних як плагін SQLite і залишає readingPlugin порожнім. Якщо readingPlugin порожній, то показання будуть зберігатися через основний плагін, якщо він заповнений, то для зберігання показань буде використовуватися окремий плагін. Наприклад, для зберігання показань у плагіні SQLite In Memory файл storage.json матиме такий вигляд
{
"plugin": {
"value": "sqlite",
"description": "The main storage plugin to load"
},
"readingPlugin": {
"value": "sqlitememory",
"description": "The storage plugin to load for readings data. If blank the main storage plugin is used."
},
"threads": {
"value": "1",
"description": "The number of threads to run"
},
"managedStatus": {
"value": "false",
"description": "Control if Fledge should manage the storage provider"
},
"port": {
"value": "0",
"description": "The port to listen on"
},
"managementPort": {
"value": "0",
"description": "The management port to listen on."
}
}
Щоб зміни у файлі storage.json набули чинності, Fledge потрібно перезапустити.
Окрім визначення плагінів для використання, файл storage.json також містить ряд інших параметрів конфігурації сервісу зберігання даних.
- threads: Кількість потоків, які слід використовувати для прийому вхідних REST-запитів. Зазвичай це значення дорівнює 1, збільшення кількості потоків має мінімальний вплив на продуктивність за звичайних обставин.
- managedStatus: Цей параметр конфігурації дозволяє Fledge керувати основною системою зберігання даних. Якщо, наприклад, ви використовуєте сервер баз даних і хочете, щоб Fledge запускав і зупиняв цей сервер як частину процедури запуску і завершення роботи Fledge, вам слід встановити цей параметр у значення "true".
- port: Цей параметр може бути використано для того, щоб змусити сервісу зберігання прослуховувати фіксований порт. Зазвичай це не є обов'язковим, але може бути використано для діагностичних цілей.
- managementPort: Як і port вище, цей параметр можна використовувати для діагностичних цілей, щоб виправити порт API управління для сервісу зберігання.
Загальні елементи для плагінів зберігання
При розробці API зберігання та плагінів ми, перш за все, враховували, що існує велика кількість варіантів використання для збереження даних і метаданих, тому ми розробили гнучку архітектуру, яка створює дуже мало обмежень. На практиці це означає, що розробники можуть створювати власні плагіни для зберігання даних і покладатися на все, що вони хочуть використовувати в якості постійного зберігання. Вони можуть використовувати структуру пам'яті або навіть наскрізну бібліотеку, файл, систему черг повідомлень, базу даних часових рядів, реляційну базу даних, NoSQL або щось інше.
Після того, як ми високо оцінили гнучкість плагінів зберігання, давайте надамо рекомендації щодо базової функціональності, яку вони повинні надавати, маючи на увазі, що така функціональність може бути неактуальною для деяких випадків використання.
- Metadata persistency: Як згадувалося раніше, однією з основних причин використання плагіна зберігання є безпечне зберігання конфігурації компонентів Fledge. Оскільки конфігурація повинна зберегтися після аварійного завершення роботи системи або перезавантаження, справедливо буде сказати, що така інформація повинна зберігатися в одному або декількох файлах або в системі баз даних.
- Data buffering: Другою найважливішою функцією плагіна зберігання
є можливість буферизації (або зберігання) даних, що надходять із
зовнішнього світу, зазвичай від південних мікросервісів. У деяких
випадках ця функція може бути непотрібною, оскільки адміністратори
можуть захотіти якнайшвидше відправити дані до інших систем,
використовуючи завдання мікросервісу "Північ". Навіть у ситуаціях,
коли дані можуть бути відправлені на північ миттєво, ви повинні
розглянути такі сценарії:
- Fledge може бути встановлений у місцях, де мережа ненадійна. Плагіни North забезпечать логіку повторних спроб встановити з'єднання і повторної відправки даних, якщо з'єднання було втрачено в середині операцій передачі.
- Північні сервіси можуть покладатися на використання мереж, які надають часові вікна для роботи.
- Історики та інші системи можуть працювати краще, коли дані передаються блоками, а не безперервним потоком.
- Data purging: Дані можуть зберігатися протягом часу, необхідного для кожного конкретного випадку використання, але досить часто трапляється, що через деякий час (це можуть бути секунди або хвилини, а також дні або місяці) дані більше не потрібні у Fledge. З цієї причини плагін Сховище може очищати дані. Очищення може відбуватися за часом або за використанням простору, а також у зв'язку з тим, що дані вже могли бути перенесені в інші системи.
- Data backup/restore: Дані, а особливо метадані (тобто конфігурація), можуть бути створені резервну копію та безпечно збережені в інших системах. У випадку аварії та відновлення, ті ж самі дані можуть бути відновлені у Fledge. Fledge надає набір універсальних API для виконання операцій резервного копіювання та відновлення.