Projektowanie mikroserwisów w stylu funkcyjnym
Już we wrześniu odbędzie się kolejna edycja Konferencji Infoshare 2020. W tym roku wyjątkowa, gdyż odbędzie się w wersji online. W dniach 23-25 oraz 28-30.09 uczestnicy zdalnie dołączać będą do streamów online, emitowanych prosto z Gdańska. Prelegentami będą polscy i światowi eksperci, którzy chętnie dzielą się wiedzą na scenie, jak i poza nią.
Jako CTO Bulldogjob.pl, przeprowadziłem wywiad na temat projektowania mikroserwisów w stylu funkcyjnym z jednym z prelegentów - Uberto Barbinim.
Adam: Mikroserwisy są teraz wszędzie. Podejście to jest dobrze przetestowane, a większość programistów preferuje obiektowy styl programowania. Jakie wady programowania obiektowego widzisz, jeśli chodzi o tworzenie mikroserwisów?
Uberto: Zacznijmy od tego, że programowanie obiektowe to świetny paradygmat do radzenia sobie ze złożonością. Opiera się ono na idei ukrywania stanu wewnętrznego w obiektach i używania wiadomości do komunikacji.
Mamy obszary, w których działa to bardzo dobrze. Są to, na przykład, UI i Single Page Applications, ale z mojego doświadczenia wynika, że nie przekłada się to dobrze na mikroserwisy.
Jest to równia pochyła, przez którą kończymy z mocno powiązanymi i mętnymi mikroserwisami, które są trudne do zmodyfikowania i debugowania. Jest to również rzecz, na którą ludzie się najbardziej skarżą.
W jakich aspektach programowanie funkcyjne jest bardziej odpowiednie dla mikroserwisów? Jakie są jego najważniejsze korzyści?
Wydaje mi się, że chodzi głównie o zmianę sposobu myślenia. Programowanie funkcyjne kładzie nacisk na przejrzystość stanu i niemutowalne dane. Zachowanie pojawia się dzięki połączeniu czystych funkcji.
Jest to również bardzo podobne do idealnej architektury opartej o mirkoserwisy: chcemy, aby pojedyncze mikroserwisy były proste i miały przejrzyste API, które nie opiera się na stanie innych usług.
Programowanie funkcyjne jest wspaniałym narzędziem do projektowania systemów w taki właśnie sposób.
Jeśli znasz jakieś rzeczywiste porównanie dwóch mikroserwisów, które robią to samo, ale używają różnych podejść, to jak porównać ich strukturę, łatwość utrzymania i złożoność?
Z mojego doświadczenia wynika, że końcowy wynik może być podobny, ale wysiłek potrzebny do zbudowania dobrej architektury mikroserwisów za pomocą programowania funkcyjnego jest niższy niż robienie tego samego z tradycyjnym programowaniem obiektowym.
W rzeczywistości wiele systemów godzi się na nieoptymalną architekturę tylko dlatego, że trudno jest coś dobrze zaprojektować za pomocą programowania obiektowego.
Przejdźmy teraz do event sourcingu i CQRS - dlaczego dobrze pasują one do programowania funkcyjnego? Czy jest to takie proste, że aż nie potrzebujesz frameworku?
Jest to, szczerze mówiąc, rzecz, która mnie zaskoczyła. Wdrażanie CQRS w ściśle funkcyjny sposób wydaje się za proste.
Tworzymy własne biblioteki w ciągu kilku tygodni i korzystanie z CQRS razem z event sourcingiem jest dla nas tak łatwe, że używamy go wszędzie. Jest to szybsze niż używanie tradycyjnej bazy danych "stateful" razem z niezgodnością paradygmatu, która próbuje utrwalać obiekty.
Kiedy odradzałbyś stosowanie podejścia funkcyjnego? Jakie wyzwania czekają w przypadku tworzenia mikroserwisów w stylu funkcyjnym?
Nie wszystko pasuje do programowania funkcyjnego. Wspomniałem już o SPA i UI. Inną kwestią jest zespół: muszą być jakieś wskazówki od osoby z doświadczeniem w takim typie programowania. W przeciwnym razie łatwo o błędy.
Nie znam też dobrej książki o budowaniu aplikacji przy użyciu programowania funkcyjnego, więc zacząłem ją pisać.
O prelegencie
Uberto jest programistą-poliglotą i zaangażowanym architektem oprogramowania z ponad 20-letnim doświadczeniem w projektowaniu i tworzeniu udanych produktów w wielu branżach. Jest on pełen pasji i niezłomny, jeżeli chodzi o sposób dostarczania wartości do biznesu nie tylko raz, ale też regularnie. Szczególnie interesuje się programowaniem funkcyjnym i obliczeniami rozproszonymi, ponieważ są one niezbędne we współczesnych wyzwaniach programistycznych.
Poza kodowaniem, uwielbia przemawiać publicznie, pisać i uczyć programowania. Obecnie pisze książkę o pragmatycznym funkcyjnym Kotlinie. Jego artykuły możesz przeczytać tutaj.
Infoshare 2020 Online - wirtualny festiwal społeczności napędzanej technologią!
Najnowsze trendy technologiczne, startupy, innowacje, wyzwania biznesu w czasach pandemii. To wszystko podczas Infoshare 2020. Największa konferencja technologiczna w Europie Środkowo-Wschodniej w formacie online, transmitowanym na cały świat z Gdańska potrwa 6 dni i odbędzie się w dniach 23-25 i 28-30 września. Na uczestników czeka aż 9 scen tematycznych z prelekcjami na żywo i niespotykane dotąd możliwości networkingu.