System nad którym pracuję nie jest bardzo skomplikowany. Jego ogólną architekturę możecie zobaczyć na poniższym diagramie.
Moduł pomiarowy
Moduł ten stanowić będzie prawdopodobnie usługa systemowa odczytująca co określony kwant czasu dane z czujnika i wysyłał je do modułu odpowiedzialnego odpowiedzialnego za ich składowanie
Moduł dostępu do bazy danych
Moduł odpowiadający za zapisywanie i odczytywanie danych w zdefiniowanym zbiorze. W chwili obecnej nie chcę określać czy wykorzystam zwykłą bazę danych, ale chodzi mi po głowie separacja warstwy odczytu i zapisu. Akurat dane z czujnika nie są jakieś skomplikowane, ale przewiduję powstanie modułu statystycznego, a tutaj model może być bardziej wyszukany (np. hurtownia danych).
Moduł statystyczny
Wydzielam ten moduł jako osobny choć nie do końca jestem przekonany, że tak to będzie zaprojektowane. W związku z tym, że postanowiłem zachować separację odpowiedzialności taki moduł może powstać, ale wcale nie musi. Miałby on stanowić warstwę pośrednią miedzy bazą danych a warstwą API.
Warstwa API
Będzie to moduł odseparowujący warstwę FrontEndu od Backendu. Stanowić będzie najprawdopodobniej usługę REST’ową udostępniającą dane zarówno aktualne, jak i przetworzone przez moduł statystyczny.
Aplikacja dostępowa
Aplikacja zbudowana będzie z wykorzystaniem prawdopodobnie Aurelii. Projekt ma stanowić dla mnie poligon doświadczalny w technologiach opartych o JavaScript, dlatego też postanowiłem pobawić się czymś zupełnie dla mnie nowym, a tak właśnie jest z Aurelią.
Dla każdego z powyższych elementów mam już wstępnie określone biblioteki jakie będę używał, ale większość z nich to dla mnie nieznane pole, więc czeka mnie sporo „badawczej” pracy. I to właśnie lubię…
Co więcej? Muszę zastanowić się jak zapewnić bezpieczeństwo mojemu rozwiązaniu w przypadku gdybym umieścił je w publicznym internecie. Znalazłem parę ciekawych projektów związanych z zabezpieczeniem serwerów opartych o Node.js, ale o tym wkrótce.
A czemu zastanawiasz się nad separacją zapisu i odczytu?
Chodzi o różnicę modeli danych między zapisem a odczytem. Zapis jest prosty jak drut – płaska lista danych z czujnika prądu. Odczyt za to ma być bardziej zróżnicowany. Dajmy na to, dane zagregowane za dzień, tydzień, miesiąc, itp. itd. . To już jest inny model danych, który dobrze by było wcześniej wypełnić danymi dla optymalizacji czasu odczytu.