Share
Embed
MicroFrontends - a Strive for Fully Verticalized Systems
SQUER Solutions
June 27, 2019
Transcript
52 slides
-
@duffleit leitner.io @duffleit leitner.io Micro Frontends a Strive for Fully
Verticalized Systems EnterJS Darmstadt, 27.06.2019 -
@duffleit leitner.io “the idea of micro frontends is to extend
the concept of micro services to the frontend world.” micro-frontends.org -
@duffleit leitner.io Secret 1: That's fine in 80 % of
the cases. SPA API Gateway Microservice Microservice Microservice DB DB DB -
@duffleit leitner.io Monolith API Gateway SPA DB Secret 2: That's
also fine in 80 % of the cases. -
@duffleit leitner.io Sam Newman “microservices are small and focused on
one thing to be autonomous.” -
@duffleit leitner.io Why autonomous? ✔ Independent Deployments ✔ Distinct Operations
✔ Technology Agnostic ✔ Model around Business Domains ✔ Small Interface Surface ✔ Parallel development -
@duffleit leitner.io Microservice API Gateway SPA Microservice Microservice DB DB
DB ❌ Independent Deployments ❌ Distinct Operations ❌ Technology Agnostic ❌ Small Interface Surface ❌ Parallel development Frontend Monolith -
@duffleit leitner.io Microservice API Gateway SPA Microservice Microservice DB DB
DB SPA API Gateway Micro Frontends -
@duffleit leitner.io μService Ordering μService DB μService μService DB DB
Catalogue Profile μService DB DB Hyperlink Hyperlink -
@duffleit leitner.io ✔ Independent Deployments ✔ Distinct Operations ✔ Technology
Agnostic ✔ Small Interface Surface ✔ Model around Business Domains ✔ Parallel development Based on the assumption to have fully verticalized systems. μService Ordering μService DB μService μService DB DB Catalogue Profile μService DB DB Hyperlink Hyperlink Approach 1: Hyperlink Connected Applications -
@duffleit leitner.io μService Ordering μService DB μService μService DB DB
Catalogue Profile μService DB DB Hyperlink Hyperlink Dashboard Hyperlink μService DB ⛔ Overfetching ⛔ Overrequesting Approach 1: Hyperlink Connected Applications -
@duffleit leitner.io Approach 1: Hyperlink Connected Applications with Backend for
Frontends μService Ordering μService DB μService μService DB DB Catalogue Profile μService DB DB Hyperlink Hyperlink Dashboard Hyperlink μService DB BFF Service BFF Service BFF Service BFF Service https://samnewman.io/patterns/architectural/bff/ Presentation Process Flow Domain Logic Data Presentation Process Flow Domain Logic Data -
@duffleit leitner.io Approach 1: Hyperlink Connected Applications with GraphQL μService
Ordering μService DB μService μService DB DB Catalogue Profile μService DB DB Hyperlink Hyperlink Dashboard Hyperlink μService DB GraphQL Presentation Process Flow Domain Logic Data -
@duffleit leitner.io The more coarse-grained you can go, the more
coarse-grained you should go. Or: Think big. -
@duffleit leitner.io μService Ordering μService DB μService μService DB DB
Catalogue Profile μService DB DB Hyperlink Hyperlink Dashboard Hyperlink μService DB View Aggregation Layer Horizontal Layer Ripple Effect -
@duffleit leitner.io Dashboard Profile Profile μService DB Catalogue μService DB
Catalogue Ordering Ordering μService DB Dashboard μService DB -
@duffleit leitner.io Dashboard Profile Catalogue Ordering Ordering Catalogue Hyperlink Hyperlink
Dashboard How to slice? One “Micro Frontend” per page. 2...n Micro Frontends per page. -
@duffleit leitner.io Repository Build & Deploy Server Browser Composed Application
Micro Frontend Build Time Integration Server Side Integration Runtime Integration -
@duffleit leitner.io Repository Build & Deploy Server Browser Mono Repo
package.json Composed Application Micro Frontend Build Time Integration MonoRepo ✔ Allows extensive code sharing and reuse. ✔ Simplifies Dependency Management. Angular Workspaces -
@duffleit leitner.io Repository Build & Deploy Server Browser Composed Application
Micro Frontend Build Time Integration ❌ Independent Deployments ❌ Distinct Operations ❌ Technology Agnostic ✔ Small Interface Surface ✔ Model around Business Domains ✔ Parallel development -
@duffleit leitner.io Repository Build & Deploy Server Browser Composed Application
Micro Frontend Server Side Integration Project Mosaic -
@duffleit leitner.io Based on the concept of Server Side Includes
or Edge Side Includes ⛔ JS and CSS global scoped ⛔ Round-Trips are needed -
@duffleit leitner.io Tailor is a Layout Server header fragment μService
account fragment μService catalogue fragment μService maps your request to a template checkout-template.html ... dashboard.template.html profile-template.html -
@duffleit leitner.io supports Javascript-Isolation init(fragment-dom){ ... } How about account
fragment μService html script styles 1...n -
@duffleit leitner.io supports Javascript-Isolation account fragment μService html script styles
1...n init(fragment-dom){ ... } isolate CSS: naming-convention like BEM -
@duffleit leitner.io Repository Build & Deploy Server Browser Composed Application
Micro Frontend Server Side Integration ✔ Independent Deployments ✔ Distinct Operations ✔ Technology Agnostic ✔ Small Interface Surface ✔ Model around Business Domains ✔ Parallel development -
@duffleit leitner.io Repository Build & Deploy Server Browser Composed Application
Micro Frontend Runtime Integration Aggregating UI Routing, Templates, Lazy Loading -
@duffleit leitner.io the aggregation and configuration is done on a
single point. Aggregating UI -
@duffleit leitner.io the aggregation and configuration is done on a
single point. immutablewebapps.org index.html https://12factor.net/ -
@duffleit leitner.io Repository Build & Deploy Server Browser Composed Application
Micro Frontend ✔ Independent Deployments ✔ Distinct Operations ✔ Technology Agnostic ✔ Small Interface Surface ✔ Model around Business Domains ✔ Parallel development Runtime Integration -
@duffleit leitner.io Server Browser Server Side Integration Runtime Integration Request
Response Model Interactions between different Verticals are done on the Backend. Longliving App State in the frontend & verticals need to interact with each other. -
@duffleit leitner.io 1 Micro-Frontend per Page Hyperlink Integration n Micro-Frontends
per Page Buildtime Integration Serverside Integration Runtime Integration -
@duffleit leitner.io Mix and Match Landing Shop Ordering hyperlink hyperlink
<!–- SSIs --> <!--#include … --> <!--#include … --> APP SHELL Header Footer -
@duffleit leitner.io Everything that can go wrong will go wrong.
The Final Secret: Murphy’s law