Vagrant, Kafka – git malina

 

Siema! Ostatnio było co nie co o sprzęcie, więc nadeszła pora aby zabrać się za oprogramowanie. Zaczynając projekt zakładałem jak najszybsze powstanie MVP. Ale… jak to z marudą bywa, pomyślałem sobie – sorry, nie jestem w pracy, deadline dla kolejnej funkcjonalności nie istnieje, to jest mój projekt i zrobię co będę chciał i na kiedy będę chciał. I tak narodziła się wspaniała idea – nauczę się czegoś fajnego, wykorzystam to co znam i to co chwiałbym znać w niekonwencjonalny sposób… Pomysł na szybkie skończenie trafił do piachu. Powstała pierwsza wersja architektury programowej jak na poniższym schemacie: (pierwsza ? oczywiście już teraz zakładam ze rozwiązanie ewaluuje;) )

Założenie wydaje się proste: sprzęt(w tej roli malinka i wszelkie włączniki itd.) będzie generował komunikaty(message, eventy), które trafią do odpowiednich tematów(topic’s) w Kafce. Co to Kafka ? Dla osób które nie wiedzą przyjmijmy ze jest to system kolejkowy, przynajmniej takie zastosowanie znalazł u mnie. Po szczegóły zapraszam za jakiś czas, postaram się zredagować coś sensownego na ten temat, niecierpliwych odsyłam do dokumentacji 😉 Następnie konsument (zastanawiam się czego użyć w tej roli, ale do wyboru jest raczej Apache Storm lub Flink) weźmie message z konkretnego topica, przetworzy według konfigurowalnego algorytmu i wykona akcje na odpowiednim sprzęcie (włączy światło, wyłączy zawór etc), wyśle notyfikację na urządzenie mobilne, wygeneruje nowy event i umieści go w Kafce lub zapisze metrykę.

A jak całość zrealizować ? Deploy tego wszystkiego na malinie wydaje się słabym pomysłem, odpalenie na lokalnej maszynie ? Sorry ale Windows i wszelkie komponenty dedykowane dla linuxa – to nie dla mnie, nie mam czasu i ochoty walczyć z konfiguracją. Odpalenie tego na dodatkowej maszynie ? Odpada – bądźmy przyjaźni środowisku;) Skoro już pohejtowane to trzeba znaleźć rozwianie, a jakie ? Pora zobaczyć jak sprawuje się Vagrant. Wszyscy chwalą, ale nie widziałem jeszcze żeby któryś z znajomych tego używał w pracy (może trzeba zmienić znajomych ?:D). Zainstalowałem, poczytałem trochę dokumentację i jazda. Pierwsza, druga, trzecia i kolejna maszyna skonfigurowane, wygląda obiecująco. Pomyślałem – biorę! Od razu zapaliła mi się lampka – w ciągu ostatniego roku wprowadzaliśmy w firmie do projektu kilku nowych developerów, ileż to czasu było zmarnowane na postawienie każdorazowo środowiska dla nich…

Póki co na vagrancie stoi kafka i zookeeper. Szczegóły konfiguracji już niebawem w kolejnym poście;)

Udało mi się już zaimplementować prototypową wersję oprogramowania odpowiedzialnego za odczyt wejść (które będą obsługiwać przełączniki, kontaktrony itd.) oraz wysyłanie pierwszej wersji eventów do kafki. Całość w plain javie, żadnego springa i wodotrysków, ma być szybko i prosto. Prosto jest na pewno a czy szybko ? Pierwsze testy pokazały ze kafka jest natychmiastowo zasilana zdarzeniami, ale planuję zrobić mały stress test i zobaczyć jak to się zachowa przy co najmiej 100 zdarzeniach równocześnie dodatkowo obciążając każde wejście timerem, tak aby wiedzieć ile czasu minęło od ostatniej zmiany stanu. Jeśli okaże się że odczyty zwolnią, prawdopodobnie pokuszę się na przepisanie tego na C, może wersję z dwoma plusami 😉

Plan na ten tydzień:

Zacząć pracę nad konsumentem – wersja pierwsza, hard-kodowane warunki, następnie obsługa wyjść, sterowanie sprzętem, zabezpieczenie przed podwójnym przetwarzaniem tych samych zdarzeń. Sporo tego będzie biorąc pod uwagę że nie znam jeszcze Storma, którego prawdopodobnie użyję, oraz to że czeka mnie jeszcze przygotowanie szegółowego opisu vagranta i kafki 😉

Póki co efekty pracy na githubie;) Enjoy!

Leave a Reply

Your email address will not be published. Required fields are marked *