W ostatnich latach rozwiązania Smart Cities stają się coraz bardziej powszechnym i chwytliwym tematem w branży informatycznej. Z sukcesem wdrażane są już pierwsze prototypy tego typu rozwiązań. Zakłada się, że do 2020 roku na świecie do sieci internetowej zostanie podłączone ponad 30 miliardów czujników, co bez wątpienia będzie generować ogromne zbiory danych pomiarowych. Jak poradzić sobie z takim ogromem informacji?
Prezentacja Kamila ma charakter case study z realizowanego obecnie projektu Smart City, ściśle związanego z branżą wodociągową. Jej głównym tematem jest problem przetwarzania w tle pokaźnych zbiorów danych pomiarowych, zbieranych z istniejących systemów informatycznych, przy wykorzystaniu platformy Microsoft Azure.
2. Kamil Dworak
Agenda
o projekcie
koncepcja WebJobs
kolejny krok Azure Functions
podsumowanie
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
9. Kamil Dworak
Parametry sieci wodociągowej
Parametr W liczbach
Długość sieci wodociągowej 2 037 km
Liczba przyłączy 41 000
Liczba zasuw 65 000
Średnice rurociągów 80 - 1200 DN
Liczba hydrantów 15 500
Liczba wodomierzy głównych 47 000
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
11. Kamil Dworak
WebJobs
praca w tle
wspólna maszyna wirtualna
niezależne od użytkownika
przetwarzanie równoległe
start na żądanie
harmonogram zadań
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
14. Kamil Dworak
WebJob kalkulacji
var queueStorage = require('queueStorage');
var flowmeterPeriodicParametersCalculator =
require('./flowmeterPeriodicParametersCalculator');
const QUEUE_NAME = process.env.APP_NAME
+ 'flowmeter-measure-queue';
const CHECK_QUEUE_TIMEOUT = 5000;
// ...
scheduleNewMessageHandling();
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
Funkcja obsługująca
nową wiadomość
Moduły kolejki oraz
kalkulacji parametrów
15. Kamil Dworak
WebJob kalkulacji
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
function scheduleNewMessageHandling() {
setTimeout(() => {
queueStorage.getMessages(QUEUE_NAME,
{numOfMessages: 1, visibilityTimeout: 600})
.map(message => {
// ...
}).catch(err =>
console.error('Error during calculations: ' + err))
.then(scheduleNewMessageHandling);
}, CHECK_QUEUE_TIMEOUT);
}
// ...
Obsługa błędu
Pobranie wiadomości
z kolejki
16. Kamil Dworak
WebJob kalkulacji
// ...
.map(message => {
var parsedMessage = JSON.parse(message.messagetext);
if (parsedMessage.periodic) {
return flowmeterPeriodicParametersCalculator
.calculatePeriodicParametersForFlowmeter(parsedMessage)
.then(() => queueStorage
.removeMessage(QUEUE_NAME, message));
}
});
// ...
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
Przetwarzanie
i kalkulacja parametrów
17. Kamil Dworak
WebJobs
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
dostępne w ramach
App Service Plan
działają bez interwencji
użytkownika
ściśle powiązane
z aplikacją
manualne skalowanie
problemy z logowaniem
maszyna wirtualna zawsze
musi być dostępna
możliwe obciążenie aplikacji
18. Kamil Dworak
Azure Functions
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
następca WebJobs
oparte na zdarzeniach
brak serwera
automatyczne skalowanie
21. Kamil Dworak
Azure Functions
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure
automatyczne skalowanie
model bezserwerowy
nowe narzędzia
szablony funkcji
dodatkowe koszty
dodatkowa implementacja
wynikająca z odizolowania
od aplikacji
22. Kamil Dworak
Podsumowanie
napięty harmonogram zmusza nas do WebJobów
model bezserwerowy wymusza duplikację kodu
Azure Function pociąga za sobą dodatkowe opłaty
w przyszłości Azure Functions zostaną wdrożone
Przetwarzanie danych pomiarowych w tle z wykorzystaniem Azure