środa, 5 stycznia 2022

Micro frontend - wstęp

Termin Micro Frontends pojawił się po raz pierwszy w ThinkWorks Technology Radar pod koniec 2016 roku. Rozszerza on koncepcje mikrousług o programowanie frontendu.

Obecny trend polega na tworzeniu bogatej w funkcje i wydajnej aplikacji przeglądarkowej, czyli aplikacji jednostronicowej, która znajduje się na szczycie architektury mikrousług. Z biegiem czasu warstwa frontendowa, często tworzona przez osobny zespół, rośnie i staje się coraz trudniejsza w utrzymaniu. To właśnie nazywamy frontendowym monolitem .

Ideą Micro Frontends jest myślenie o witrynie lub aplikacji internetowej jako zestawieniu funkcji, które są własnością niezależnych zespołów. Każdy zespół ma odrębną dziedzinę działalności lub misję, na której mu zależy i w której się specjalizuje. Zespół jest wielofunkcyjny i rozwija swoje funkcje od początku do końca , od bazy danych po interfejs użytkownika.

Micro frontend jest bardziej przyjazny i mniej nieporęczny. Ten typ architektury dzieli całą aplikację według domeny biznesowej na cały stos. Zapewnia to zespołom frontendu ten sam poziom elastyczności, testowalności i szybkości, jaki zespoły backendu uzyskują dzięki mikrousługom.

W architekturze micro frontend integrujemy aplikację webową w moduły, gdzie każdy moduł ma określoną funkcjonalność. Każdy moduł jest własnością oddzielnego zespołu, który opracowuje cały moduł od interfejsu użytkownika do wszystkich, aż do bazy danych i zaplecza. W ten sposób proces tworzenia jest prosty, a funkcjonalności pozostają od siebie niezależne. 

Mikro frontend rozszerza koncepcję mikrousług na zapleczu na warstwę frontendu, dzieląc monolit frontendu na mniejsze, zdefiniowane i niezależne usługi frontendowe (aplikacje internetowe), które można pisać w wielu frameworkach i są łatwe w zarządzaniu. Zastosowanie tego podejścia architektonicznego zapewnia wydajność i skalowalny rozwój frontendu, szczególnie w wielu zespołach.

Podejście mikro-frontendowe w połączeniu z architekturą mikrousług zapewnia kompleksową funkcjonalność, umożliwiając jednocześnie pionowy podział poszczególnych systemów. Każda taka pion może wówczas reprezentować określony kontekst domeny ograniczonej (lub problem biznesowy). 

---------------------------------------------------------------------------------------------------------------------------  

Ewolucja rozwoju frontendu

Jednym z trendów rozwojowych, który pomaga dużym organizacjom zachować elastyczność i szybciej dostarczać lepszy UX, są mikro frontendy. Mikro frontendy to coś więcej niż tylko nowy wybór technologii dla programistów frontendu, mikro frontendy pozwalają całemu przedsiębiorstwu zmienić sposób funkcjonowania jego zespołów, rozszerzając procesy DevOps na frontend.


Przed pojawieniem się mikrousług architektury aplikacji często były zorganizowane w strukturę monolityczną - jako pojedynczy monolit lub jako oddzielone monolity backendu i frontendu.

Działa to dobrze w przypadku prostszych aplikacji, ale wraz ze wzrostem rozmiaru monolit staje się zbyt uciążliwy, aby zespoły programistów mogły efektywnie zarządzać. To jest problem, który miał rozwiązać mikroserwisy.

Dzięki mikroserwisom niezależne zespoły mogą pracować nad funkcjonalnością backendu w oderwaniu od różnych części witryny. Usprawnia to proces rozwoju i przyspiesza harmonogram wdrożenia dowolnej aktualizacji. Jednak w wielu organizacjach monolit frontendu pozostaje. Tak więc mikro frontendy służą jako kolejny naturalny postęp w kierunku oddzielania funkcjonalności w celu poprawy zwinności zespołu. 


Rozszerzając to oddzielenie od backendu do frontendu, przedsiębiorstwa mogą organizować zespoły pionowo wokół określonego celu biznesowego lub wyniku, a nie poziomo wokół określonego zestawu umiejętności technicznych. Pozwala to zespołowi skupić się nie tylko na osiągnięciu celu technicznego, ale także na holistycznej pracy nad funkcją biznesową.

---------------------------------------------------------------------------------------------------------------------------

Główna koncepcja architektury Micro Frontend

Bądź niezależny od technologii

Każda drużyna powinna wybrać i ulepszyć stos bez koordynowania z innymi zespołami. Elementy niestandardowe pomagają ukryć szczegóły implementacji, zapewniając jednocześnie neutralny interfejs innym.

Izoluj kod zespołu

Nigdy nie udostępniaj środowiska wykonawczego, nawet jeśli zespoły korzystają z tej samej platformy. Zbuduj niezależną, samodzielną aplikację. Nie polegaj na współdzielonych zmiennych stanowych lub zmiennych globalnych.

Twórz przedrostki zespołu

Używaj konwencji nazewnictwa tam, gdzie izolacja nie jest jeszcze możliwa. CSS przestrzeni nazw, pamięć lokalna, zdarzenia i pliki cookie w celu uniknięcia kolizji i wyjaśnienia własności.

Preferuj natywne funkcje przeglądarki zamiast niestandardowych interfejsów API

Użyj zdarzeń przeglądarki do komunikacji zamiast budować globalny system PubSub.
Jeśli naprawdę musisz zbudować interfejs API między zespołami, postaraj się, aby był tak prosty, jak to tylko możliwe.

Zbuduj odporny projekt strony internetowej

Funkcje powinny być przydatne, nawet jeśli JavaScript nie może wykonać. Aby poprawić postrzeganą wydajność, użyj renderowania uniwersalnego i ulepszania progresywnego. 

--------------------------------------------------------------------------------------------------------------------------- 

Najlepsze praktyki mikrofrontendu

  • Single SPA meta-framework łączy wiele frameworków na tej samej stronie bez odświeżania strony, takie jak React, Vue, Angular 1, Angular 2 itp. 
  • Multiple single page application działa pod różnymi adresami URL. Dla współnej funkcjonalności użyj NPM lub Bower. 
  • Izolowanie aplikacji Micro w Iframes Windows. Interfejsy API i libraries do koordynowania. Ramki IFrames współdzielą APIs wyeksponowane przez ich parent window. 
  • Różne moduły do ​​komunikacji zamiast wspólnego events bus. Każdy moduł pracuje na własnym frameworku, o ile obsługuje zdarzenia przychodzące i wychodzące.


Biblioteki komponentów w zależności od stosu aplikacji głównej, różne komponenty i sekcje aplikacji są opracowywane jako biblioteki i „wymagane” w głównej aplikacji. Stąd główna aplikacja jest kompozycją różnych komponentów.

Upewnij się, że core i integracja są tak proste, jak to możliwe.
Jednym z krytycznych problemów jest ujednolicenie zasad UI/UX. Uniwersalnym rozwiązaniem jest zastosowanie przewodnika stylistycznego, np. Material Design, Bootstrap m.in. 
 

Komunikacja z zespołem jest kluczem do zapewnienia płynnego działania, stworzenia pewnych standardów i zasad, aby zminimalizować konflikty z różnicami zespołów pracujących nad produktem. 

Wszystkie te najlepsze praktyki Micro Frontend Architecture pomagają rozwiązać jeden problem — skalowalność.

---------------------------------------------------------------------------------------------------------------------------  

Zalety architektury Micro Frontendu

Każda technologia JavaScript ma swoje zalety i wady. A przy wyborze konkretnej technologii każdy bierze pod uwagę maksymalne korzyści i minimalne ryzyko. Najlepsze praktyki w zakresie mikro frontendów pomagają korzystać z różnych technik dla różnych usług.

  • Wsparcie izolacji kodu i stylu, indywidualny zespół programistów może wybrać własną technologię. Szybkość tworzenia i wdrażania jest bardzo szybka. 
  • Pomaga w ciągłym wdrożeniu. 
  • Testowanie staje się bardzo proste, a przy każdej drobnej zmianie nie trzeba przechodzić całej aplikacji. 
  • Renowacja front-endu - Ulepszanie staje się łatwiejsze. 
  • Wysoka odporność i lepsza konserwacja.

Mikrousługi okazały się przełomem ze względu na ich odosobniony charakter, dzięki czemu można je łatwo konserwować, wykorzystywać ponownie i skalować. Jednak podczas gdy cały nacisk kładziono na back-end, charakter rozwoju front-endu również szybko ewoluował i nieco zniknął z radaru. 

Wraz ze wzrostem popularności front-endowych frameworków programistycznych, takich jak React i Vue JS, podobna metodologia została zastosowana do front-endów z podobnymi korzyściami. Mikronakładki stały się teraz niemal koniecznością i nie bez powodu.


Jednym z głównych powodów wynalezienia zarówno mikro frontendów, jak i mikrousług jest umożliwienie pionowego posiadania domeny.

 

Podobnie jak w przypadku mikroserwisów, mikro frontendy są zasadniczo mniejszymi, wyizolowanymi fragmentami frontendu, podzielonymi tak, aby zawierały fragment zachowania, wyglądu i stylu.

Jednym z głównych podobieństw między mikrousługami a mikro frontendami jest to, że są one znacznie łatwiejsze w utrzymaniu niż ich monolityczne reprezentacje. 

Budując te mniejsze komponenty o określonym zakresie, inżynierowie są w stanie znaleźć wszystkie informacje związane z tym komponentem w jednym miejscu (HTML, CSS, Javascript, zdarzenia, programy obsługi itp.). Dzięki temu aktualizowanie, refaktoryzacja lub ulepszanie różnych obszarów produktu jest o wiele łatwiejsze w miarę upływu czasu i powiększania się bazy kodu. 

Pozwala również na lepsze ponowne użycie, ponieważ te komponenty muszą być raz zaprojektowane i skonstruowane i mogą być używane wielokrotnie w tym samym projekcie, a nawet w wielu projektach (jeśli są dobrze zbudowane). 

Zespoły mogą również pracować autonomicznie na różnych komponentach, bez konieczności ingerowania w swoją pracę lub wąskich gardeł z powodu zależności i/lub wymagań wstępnych. Przepływ pracy jest znacznie płynniejszy i niezależny, co doskonale nadaje się do programowania zwinnego. 

---------------------------------------------------------------------------------------------------------------------------  

Wyzwania przy wdrożeniu  Mikro FrontEndu

Mind shift i krzywa uczenia się
Jak w przypadku wszystkiego, co nowe, zespół zawsze musi się nauczyć, którego pokonanie wymaga czasu. Ponadto istnieją kwestie techniczne, takie jak konfigurowanie współużytkowania zasobów między źródłami (CORS), gdy wszystkie mikro frontendy są przechowywane razem w domenie, oraz sposób wymiany tokenów uwierzytelniania. Dobrą wiadomością jest to, że gdy Twój zespół raz zakończy ten proces, Twoja organizacja posiądzie klucz do produktywności.  

Konflikty frameworków i bibliotek
W pewnym momencie wiele mikro-nakładek zostanie uruchomionych w jednym oknie przeglądarki (DOM). Każdy mikro-nakładka może być napisany przy użyciu różnych bibliotek lub różnych wersji tej samej biblioteki. Ta zaleta wiąże się z potencjalnymi problemami w czasie wykonywania, które należy uwzględnić podczas testowania. Chociaż zawsze istnieje „szansa”, że coś nie zadziała lub nie będzie kompatybilne, główne biblioteki frontendowe od jakiegoś czasu używają modułów, które pozwalają na izolację.

Kompatybilność z przeglądarką
W zależności od sposobu implementacji mikro-frontendów mogą polegać na standardach internetowych, które nie są zaimplementowane w starszych przeglądarkach, takich jak Web Components, jednak często w przypadku starszych przeglądarek dostępne są wypełniacze w celu zwiększenia zasięgu.

Wydajność
Konsekwencją posiadania wielu mniejszych aplikacji typu micro frontend w porównaniu z jednym dużym frontendem monolitowym jest to, że prawdopodobnie istnieje znacznie więcej plików (JavaScript, CSS, zasoby), które muszą być załadowane przez przeglądarkę, aby wyświetlić stronę. Potencjalnie zwiększa to opóźnienie i czas ładowania strony, ale będzie zależeć od przyjętego podejścia do grupowania stron; Aby zminimalizować koszty wczytywania strony, możesz wstępnie łączyć w locie wszystkie indywidualne skrypty mikro frontendowe i udostępniać je za jednym razem do frontendu obudowy, co zapewni podobną wydajność ładowania strony jak w przypadku tradycyjnych podejść.

Dodatkowo pojawi się więcej frameworków SPA, które trzeba będzie zainicjować, gdy wszystkie mikro frontendy uruchomią się w DOM jednej przeglądarki. Chociaż jest to ogólnie uważane za stosunkowo szybkie, opóźnia czas ładowania pierwszej strony.

 --------------------------------------------------------------------------------------------------------------------------- 

Wdrażanie Mikro Frontendu

Głównym kluczem w Micro-Frontends jest integracja między hostem/kontenerem a Micro-Frontends.
Istnieją dwa sposoby integracji mikrofrontendów

Build-Time integration
Kontener zainstaluje komponenty jako biblioteki, podobnie jak biblioteki, które instalujesz z npm. Problemy z tym podejściem polegają na synchronizowaniu różnych wersji bibliotek i problemach z kompilacją.

Run-Time integration
Integracja Run-Time obejmuje trzy typy kompozycji:

  • Kompozycja po stronie serwera
    W takim przypadku wszystkie funkcje będą znajdować się w backendzie, który decyduje, który mikro-frontend ma zostać załadowany. Serwer zdecyduje, do którego adresu URL przekierować żądanie.
  •  Edge-Side Composition
    W tym podejściu korzystasz z CDN (np. AWS CloudFront) i Lambda@Edge. Orkiestracja nastąpi w samej sieci CDN, a nie po stronie klienta lub serwera.
  • Client-Side Composition
    W takim przypadku kontener jest budowany i wdrażany oddzielnie. Każdy Micro-Frontend może być wyeksponowany jako osobny pakiet, do którego kontener/host może pobrać potrzebny Micro-Frontend.



---------------------------------------------------------------------------------------------------------------------------  

Najlepsze frameworki do budowania mikro frontendów


Mikrousługi i mikro frontendy wraz z technologiami bezserwerowymi łączą się, tworząc filary inżynierii oprogramowania w 2020 r. i najbliższej przyszłości. 

Dzięki tym fantastycznym bibliotekom i frameworkom jest znacznie więcej programistów, którzy są w stanie tworzyć złożone aplikacje oparte na chmurze, które wcześniej wydawały się być poza zasięgiem. 

Rozbijając problemy na mniejsze izolowane komponenty i zapewniając szybki i łatwy sposób komunikacji między komponentami, zniechęcająca architektura aplikacji monolitycznych nie stanowi już bariery wejścia.

---------------------------------------------------------------------------------------------------------------------------    

Module Federation

Pod konie 2020 roku Zack Jackson wypuścił „ Module Federation” jako wtyczkę w Webpack 5. Wtyczka Module Federation zmieniła świat mikrofrontendów na zupełnie nowy poziom. Teraz możesz dołączyć zdalny składnik do swojego projektu, tak jak został opracowany lokalnie, bez uzależnienia od kompilacji lub wdrożenia, a nawet mieć serwer WWW do jego uruchomienia. To jest przyszłość Microfontneds. Firmy zaczęły stosować podejście federacji Module do migracji z aplikacji monolitycznej do Microfrontends.

---------------------------------------------------------------------------------------------------------------------------  


Branża e-commerce nieprzypadkowo przoduje w stosowaniu tego typu rozwiązań.
Główne funkcjonalności w każdym z portali są znane i dobrze zdefiniowane: wyszukiwarka, koszyk, wybór kategorii, rekomendacje, promowane ogłoszenia, reklamy. Dzięki temu nie zmieniają się dynamicznie, przez co dużo łatwiej można wdrożyć podejście Micro Frontends. Za każdą z wymienionych funkcjonalności może odpowiadać  oddzielny komponent napisany z wykorzystaniem innego frameworka.

---------------------------------------------------------------------------------------------------------------------------  

Materiały:
https://www.sundbladsoftware.com/articles/the-micro-frontend-revolution.html
https://www.xenonstack.com/insights/micro-frontend-architecture
https://micro-frontends.org/
https://speakerdeck.com/naltatis/micro-frontends-building-a-modern-webapp-with-multiple-teams?slide=43
https://www.veriday.com/blog/build-apps-micro-frontend-platform/
https://www.cygnismedia.com/blog/micro-frontends-development/
https://www.gravity9.co/post/microfrontends-what-you-need-to-know
https://levelup.gitconnected.com/micro-frontends-what-why-and-how-bf61f1f0a729
https://linagora.vn/2021/04/13/a-different-approach-to-frontend-architecture/
https://devblogs.microsoft.com/premier-developer/scaling-user-experiences-with-micro-frontends/
https://altkomsoftware.pl/blog/micro-frontends-web-components/
https://github.com/naltatis/micro-frontends-in-action-code

Brak komentarzy:

Prześlij komentarz