SlideShare a Scribd company logo
1 of 101
Download to read offline
Biography
· Gameloft
· DevPro
· Pics.io
· Epam
· Namecheap.com
· Frontend
· Backend
· Infrastructure
· Pre-sale
· System Design
Founder Stellar Ukraine
Charity Foundation
Founder KharkivJS
Conference
Social Media
Let me tell you a story…
The story starts with a
reference to the past.
Which reasons to use
Microservice?
2014
· Increase Resilience
· Improved scalability
· The ability to use the right tool for the right task
· Fast and flexible delivery
· Easier debugging and maintenance
· Improved ROI with reduced TCO
· Mitigate Convey Law Risk
Reasons to use Microservices
Microservices is not a
silver bullet
2017–2018
What about Frontend
Microservices?
2018
Namecheap
development history
2015 – We have started migrating our monolith to microservices.
2016 – Monolith becomes smaller. Microservices grow. Frontend
remains unchanged.
2017 – Monolith becomes smaller and smaller. Microservices are
everywhere. Frontend remains unchanged.
2018 – What to do with frontend?
History
How usually Frontend looks
like in huge projects
Service [1]
Service [2]
Service [3]
Frontend
Gateway
Let’s see in more detail…
Frontend
What we really had?
· CMS served tones Frontend pages
· Some separate FE services on NodeJS
· No rules
· No agreement
· 16 Lighthouse Desktop Score
· Dozens of unknown scripts loading
· Multiple version of same dependencies
Service [1]
Service [2]
Service [3]
Frontend
Gateway Backend for
Frontend [1]
Backend for
Frontend [2]
Our next step is frontend
extraction
Benefits
· Independent deploys
· Frontend agnostic approach
· Developers can use modern technology
· Development Experience
· Faster changes
Enough? Almost…
· What about structural consistency?
· What about UI consistency?
· What about cross dependent releases?
· What about sharing UI functionality?
· What about reusing part of UI on different pages?
So we decided to try
frontend microservices…
Goals
· Page consists of several fragments
· Fragment is independent application
· Application supports client side routing
· SSR should be supported
· UI have to be consistent
Requirements
· HTML Page is delivered by layout streaming system
· A unit of streaming is a fragment
· Streaming is lighting fase
· Fragment is a regular frontend application
· Framework Agnostic
· CSS Isolated
· Support Global Routes
· Fragment Delivery is Independent
· Fragment knows nothing about others
· Code sharing
Organizational goals
· Mitigate Convey Law Risks
· Team is independent unit
· Application and system should be testable and reliable
· Avoid communication overkill
Application #1
Application #2
Application #3
Imagine it is your browser
New Architecture
Service [1]
Service [2]
Service [3]
Gateway
Frontend
Microservice
Engine
Fragment [1]
Fragment [2]
Fragment [3]
But in reality…
Service [1]
Service [2]
Service [3]
Gateway
Frontend
Microservice
Engine
Fragment [1]
Fragment [2]
Fragment [3]
Scary Part of
Frontend
Full Architecture View
Service [1]
Service [2]
Service [3]
Gateway
Frontend
Microservice
Engine
Fragment [1]
Fragment [2]
Fragment [3]
Frontend
Microservice
Registry
App #1
App #2
App #3
What is Microservice Engine?
Web Service responsible for processing
incoming requests, discover page
fragments, communicate to fragment
services and form HTML.
What is Microservice Registry?
Web Service with persistent storage that
manage basic entities like routes,
template, fragments and their relationship.
What is Fragment?
Development unit. It is just regular
frontend service.
How it works
together
How it works together. Server Side
Browser Gateway
Frontend
Microservice
Engine
Frontend
Microservice
Registry
Fragments
Form HTTP
Response
HTML Inject Scripts
Inject JSON
configuration
Object
How it works together. Client Side
Browser
Load
Microservice
Engine Script
Load Injected
Fragment
Scripts
Parse
Configuration
Object
Match Route
Load ESM
Modules for
Fragments
Render/Hydrate
Applications
Client/Server side routing
Allow to build isomorphic routing.
Browser
Frontend
Microservice
Engine
Router
App Router [1]
App Router [2]
App Router [3]
Client side routing. Frontend
Browser MSS Engine App Routes
route/ms1
route/ms2
route/ms3
route/*
/ms1
/ms2
/ms3
What is Route
Route Template
What is Template ?
</head>
<body>
<ilc-slot id="navbar" />
<ilc-slot id="body" />
<ilc-slot id="footer" />
</body>
</html>
Template customization
</head>
<body>
<header> Hello World!!! </header>
<ilc-slot id="navbar" />
<ilc-slot id="body" />
<ilc-slot id="footer" />
</body>
</html>
What is Route
Route Template
Slots
• Anchor for a Frontend Application.
• Declare node from Application is embedded.
What is Slot
What is Route
Route Template
Slots Application
Client Side Integration
const application = {
bootstrap: () => Promise.resolve(),
mount: () => Promise.resolve(),
unmount: () => Promise.resolve(),
}
Bootstrap
This lifecycle function will be called once, right before the
registered application is mounted for the first time.
Mount
mount = async (props: LifecycleFnProps): Promise<Root> => {
const slotNode = props.domElementGetter();
const root = createRoot(slotNode);
root.render(<div>Hello World</div>);
return Promise.resolve(root);
};
This lifecycle function will be called whenever the registered
application is not mounted, but it is ready to be. This function
should create DOM elements, DOM event listeners, etc. to
render content to the user.
Unmount
This lifecycle function will be called whenever the registered
application is mounted. When called, this function should
clean up all DOM elements, DOM event listeners, leaked
memory, globals, observable subscriptions, etc.
unmount = async () => {
const reactRoot = this.getRoot();
if (reactRoot) {
reactRoot.unmount();
}
};
That is it!
Server Side Integration
With every request for SSR content from the app ILC sends the
following meta-information as query params:
• Router Properties
• BasePath
• RequestURL
• Application Properties
• Header x-request-uri. Request URL string. This contains only
the URL that is present in the actual HTTP request.
Server Side Integration
SSR response has to contain:
• Body with HTML
• Header Link
• Header x-head-title
• Header x-head-meta
processResponse(response, {
pageTitle: meta?.title,
pageMetaTags: `${meta?.meta || ''}${meta?.link || ''}`,
appAssets: await this.applicationManifestConfig.getAppAssets(),
});
response.send(html);
Code example
How it affects
development?
The goal is to not
affect it at all.
Really. Development is
almost not affected.
Almost…
Over complication is
only integration.
Developers still can…
• Choose JS Framework
• Choose CSS Framework
• Decide if SSR is Required
• Control their build process
• Control their deploy
SO what do we have…
Application #1
Application #2
Application #3
• MS engine allows to build pages by
fragments.
• Fragment is independent App.
• Fragment can be deploy and change part
of the page.
• Your app can support client side
navigation.
• SSR is supported.
This is the culmination
but not the end.
How to Configure It
How to Configure It?
Admin Panel.
How to Configure It?
Configuration as a Code.
Do you remember this slide?
Allow to build isomorphic routing.
Browser
Frontend
Microservice
Engine
Router
App Router [1]
App Router [2]
App Router [3]
*It is not 100% truth. I will explain later.
To be more precise this string…
Allow to build isomorphic routing.
Browser
Frontend
Microservice
Engine
Router
App Router [1]
App Router [2]
App Router [3]
*It is not 100% truth. I will explain later.
Soft navigation
Hard navigation
Router [1]
Router [2]
Router [3]
Router [A]
Router [B]
Router [B]
Router. Template Mismatch.
What about
reliability?
It is fine when everything’s fine 😌
Application #1
Application #2
Application #3
Application #1
Application #2
Application #3
But what if not everything is fine? 🤨
Application #1
Application #2
Application #3
What if it is a disaster?!! 😩
What are the reasons for this?
• Client Side Runtime Error
• Server Side Error
• Client resources are not available
• Server is not available
• Customer should not suffer.
• One Application with Error has not to break page.
• Business and Development can define own fault tolerance strategy.
How to react on Errors and Outage?
Fragment types
• Primary
• Essential
• Regular
• SSR: all 5xx response codes trigger the 500 error page
configured in ILC.
• CSR: any error caught by ILC errorHander, or errors during
loading/mounting trigger the 500 error page configured in ILC.
Primary Application Type
• SSR: all non-2xx response codes are treated as SSR error and
the second rendering attempt will be done on the client-side.
• CSR: any error caught by ILC errorHander, or errors during
loading/mounting trigger the 500 error page configured in ILC.
Essential Application Type
• SSR: all non-2xx response codes are treated as SSR error and
the second rendering attempt will be done on the client-side.
• CSR: any error caught by ILC errorHander, or errors during
loading/mounting are logged without any further action.
Regular Application Type
Developers manage how
your app reacts on error
What is 500 error page in
term of microservices?
What is an Error Page?
• Works similar to regular route
• Associated with template
• Could be associated with apps but here developer should be
carefully because all your backend can be not accessible.
What about
other errors?
• Route does not exists on MS Engine level
• Route does not exists on Service level
• Entity does not exists on Service level
Error 404
Error 404
● Route does not exists on MS Engine level
○ System renders global 404
● Route does not exists on Service level
○ Developer can decide to show own 404 or global
● Entity does not exists on Service level
○ Developer can decide to show own 404 or global
Consider that global 404 page is a regular and can handle majority of cases you have
Page Transition Handling
Customise Page Transition UI
● MS Engine can handle re-rendering of apps on the page
● API for customising loaders
Page Transition Hooks
● Stop navigation and use your custom behavior such as
authentication form as an example to navigate whenever you need
(CSR).
● Redirect to a new location (CSR, SSR).
● Continue navigation (CSR, SSR).
Plugin System
Plugin Types
● Page Transition Plugins
● Reporting Plugins
● Localisation Plugin
Code Sharing
Shared Library
● Client side modules designed to share between pages
● Deliver without server side only client bundle
● Consumer receive updates right after deploy
Using Shared Fragments
● Ensure polyfill loading
● Load Bundle With Common deps
○ React
○ Mobx
○ L10n
○ EventBus
Using Shared Fragments
</head>
<include id="shared" src="https://host-1.server.net” timeout="10000"></include>
<body>
<ilc-slot id="navbar" />
<ilc-slot id="body" />
<ilc-slot id="footer" />
</body>
</html>
Local Development
Dev Experience
● Developers don’t want to run tons of docker containers
● Developers don’t want to checkout tons of git repo
Developer wants
npm start
How to develop
Application #1
Application #2 (Mine)
Application #3
How to develop
Application #1
Application #2 (Mine)
Application #3
CDN
Remove Server
How to develop
Application #1
Application #2 (Mine)
Cookie configuration
Application #3
CDN
Remove Server
Local Static
Local Server
Performance
Why is it performant
● Horizontal scaling of backend service
● Built-in caches
● Minimum amount of computation
● Client side logic is backend agnostic
Delivery CI/CD
Multi Domain Support
Conclusion
● MS increases complexity on your frontend
● MS microservices is not about code splitting
● MS should not effect frontend dev experience
● MS should be fault tolerant
● MS should have robust monitoring system
● Local development should convenient
What ILC Allow
● Deliver part of the page independently
● Isomorphic Client side and Server side navigation
● Support of SSR
● Error Handling System
● Fault Tolerance System
● Solution for Local Development
● Monitoring using plugin system
● Auth Capabilities
● Multi domain support
● Configuration as a Code
● Does not break your regular experience
Social Media
Internal Links
Inspiration Links

More Related Content

What's hot

Micro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - PlansoftMicro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - PlansoftMiki Lombardi
 
[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...
[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...
[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...DevDay.org
 
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019Codemotion
 
Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)Tech Triveni
 
State of Micro Frontend
State of Micro FrontendState of Micro Frontend
State of Micro FrontendYugo Sakamoto
 
FEVR - Micro Frontend
FEVR - Micro FrontendFEVR - Micro Frontend
FEVR - Micro FrontendMiki Lombardi
 
Micro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoniMicro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoniSandeep Soni
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introductionwojtek_s
 
A pattern language for microservices - June 2021
A pattern language for microservices - June 2021 A pattern language for microservices - June 2021
A pattern language for microservices - June 2021 Chris Richardson
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationOğuzhan Soykan
 
CD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdfCD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdfKnoldus Inc.
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Gitops: the kubernetes way
Gitops: the kubernetes wayGitops: the kubernetes way
Gitops: the kubernetes waysparkfabrik
 
Microfrontends Monoreops & Trunkbased based
Microfrontends Monoreops & Trunkbased basedMicrofrontends Monoreops & Trunkbased based
Microfrontends Monoreops & Trunkbased basedVinci Rufus
 
Micro frontend: The microservices puzzle extended to frontend
Micro frontend: The microservices puzzle  extended to frontendMicro frontend: The microservices puzzle  extended to frontend
Micro frontend: The microservices puzzle extended to frontendAudrey Neveu
 

What's hot (20)

Micro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - PlansoftMicro Front-End & Microservices - Plansoft
Micro Front-End & Microservices - Plansoft
 
[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...
[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...
[DevDay2019] Micro Frontends Architecture - By Thang Pham, Senior Software En...
 
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
Ivan Jovanovic - Micro Frontends - Codemotion Rome_2019
 
Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)
 
Event Storming and Saga
Event Storming and SagaEvent Storming and Saga
Event Storming and Saga
 
Micro-frontend
Micro-frontendMicro-frontend
Micro-frontend
 
State of Micro Frontend
State of Micro FrontendState of Micro Frontend
State of Micro Frontend
 
FEVR - Micro Frontend
FEVR - Micro FrontendFEVR - Micro Frontend
FEVR - Micro Frontend
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Micro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoniMicro frontend architecture_presentation_ssoni
Micro frontend architecture_presentation_ssoni
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
A pattern language for microservices - June 2021
A pattern language for microservices - June 2021 A pattern language for microservices - June 2021
A pattern language for microservices - June 2021
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
CD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdfCD using ArgoCD(KnolX).pdf
CD using ArgoCD(KnolX).pdf
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Gitops: the kubernetes way
Gitops: the kubernetes wayGitops: the kubernetes way
Gitops: the kubernetes way
 
Micro frontend
Micro frontendMicro frontend
Micro frontend
 
Domain Driven Design
Domain Driven Design Domain Driven Design
Domain Driven Design
 
Microfrontends Monoreops & Trunkbased based
Microfrontends Monoreops & Trunkbased basedMicrofrontends Monoreops & Trunkbased based
Microfrontends Monoreops & Trunkbased based
 
Micro frontend: The microservices puzzle extended to frontend
Micro frontend: The microservices puzzle  extended to frontendMicro frontend: The microservices puzzle  extended to frontend
Micro frontend: The microservices puzzle extended to frontend
 

Similar to "Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap", Artem Zakharchenko

Reactive Application Using METEOR
Reactive Application Using METEORReactive Application Using METEOR
Reactive Application Using METEORNodeXperts
 
All About Microservices and OpenSource Microservice Frameworks
All About Microservices and OpenSource Microservice FrameworksAll About Microservices and OpenSource Microservice Frameworks
All About Microservices and OpenSource Microservice FrameworksMohammad Asif Siddiqui
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendVlad Fedosov
 
Reactive Micro Services with Java seminar
Reactive Micro Services with Java seminarReactive Micro Services with Java seminar
Reactive Micro Services with Java seminarGal Marder
 
Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)
Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)
Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)Codit
 
ngStockholm #8 at NetEnt - Micro Frontend Architecture
ngStockholm #8 at NetEnt - Micro Frontend ArchitecturengStockholm #8 at NetEnt - Micro Frontend Architecture
ngStockholm #8 at NetEnt - Micro Frontend ArchitectureIshaan Puniani
 
Andriod Lecture 8 A.pptx
Andriod Lecture 8 A.pptxAndriod Lecture 8 A.pptx
Andriod Lecture 8 A.pptxfaiz324545
 
Data Transfer between Activities & Databases
Data Transfer between Activities & DatabasesData Transfer between Activities & Databases
Data Transfer between Activities & DatabasesMuhammad Sajid
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaAraf Karsh Hamid
 
Comparison of Current Service Mesh Architectures
Comparison of Current Service Mesh ArchitecturesComparison of Current Service Mesh Architectures
Comparison of Current Service Mesh ArchitecturesMirantis
 
Building scalable applications with angular js
Building scalable applications with angular jsBuilding scalable applications with angular js
Building scalable applications with angular jsAndrew Alpert
 
Microservice Pattern Launguage
Microservice Pattern LaunguageMicroservice Pattern Launguage
Microservice Pattern LaunguageInho Kang
 
What serverless means for enterprise apps
What serverless means for enterprise appsWhat serverless means for enterprise apps
What serverless means for enterprise appsSumit Sarkar
 

Similar to "Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap", Artem Zakharchenko (20)

Reactive Application Using METEOR
Reactive Application Using METEORReactive Application Using METEOR
Reactive Application Using METEOR
 
Explore Android Internals
Explore Android InternalsExplore Android Internals
Explore Android Internals
 
All About Microservices and OpenSource Microservice Frameworks
All About Microservices and OpenSource Microservice FrameworksAll About Microservices and OpenSource Microservice Frameworks
All About Microservices and OpenSource Microservice Frameworks
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
Reactive Micro Services with Java seminar
Reactive Micro Services with Java seminarReactive Micro Services with Java seminar
Reactive Micro Services with Java seminar
 
Android101
Android101Android101
Android101
 
Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)
Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)
Azure Service Fabric: notes from the field (Sam Vanhoute @Integrate 2016)
 
ngStockholm #8 at NetEnt - Micro Frontend Architecture
ngStockholm #8 at NetEnt - Micro Frontend ArchitecturengStockholm #8 at NetEnt - Micro Frontend Architecture
ngStockholm #8 at NetEnt - Micro Frontend Architecture
 
Andriod Lecture 8 A.pptx
Andriod Lecture 8 A.pptxAndriod Lecture 8 A.pptx
Andriod Lecture 8 A.pptx
 
20181023 progressive web_apps_are_here_sfcampua
20181023 progressive web_apps_are_here_sfcampua20181023 progressive web_apps_are_here_sfcampua
20181023 progressive web_apps_are_here_sfcampua
 
Progressive Web Apps are here!
Progressive Web Apps are here!Progressive Web Apps are here!
Progressive Web Apps are here!
 
Data Transfer between Activities & Databases
Data Transfer between Activities & DatabasesData Transfer between Activities & Databases
Data Transfer between Activities & Databases
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and Kafka
 
Comparison of Current Service Mesh Architectures
Comparison of Current Service Mesh ArchitecturesComparison of Current Service Mesh Architectures
Comparison of Current Service Mesh Architectures
 
agile microservices @scaibo
agile microservices @scaiboagile microservices @scaibo
agile microservices @scaibo
 
Microservices
MicroservicesMicroservices
Microservices
 
Microservice
MicroserviceMicroservice
Microservice
 
Building scalable applications with angular js
Building scalable applications with angular jsBuilding scalable applications with angular js
Building scalable applications with angular js
 
Microservice Pattern Launguage
Microservice Pattern LaunguageMicroservice Pattern Launguage
Microservice Pattern Launguage
 
What serverless means for enterprise apps
What serverless means for enterprise appsWhat serverless means for enterprise apps
What serverless means for enterprise apps
 

More from Fwdays

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...Fwdays
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil TopchiiFwdays
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro SpodaretsFwdays
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym KindritskyiFwdays
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...Fwdays
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...Fwdays
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...Fwdays
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...Fwdays
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...Fwdays
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...Fwdays
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...Fwdays
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...Fwdays
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra MyronovaFwdays
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...Fwdays
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...Fwdays
 

More from Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

Recently uploaded

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Recently uploaded (20)

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 

"Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap", Artem Zakharchenko

  • 1.
  • 2. Biography · Gameloft · DevPro · Pics.io · Epam · Namecheap.com · Frontend · Backend · Infrastructure · Pre-sale · System Design Founder Stellar Ukraine Charity Foundation Founder KharkivJS Conference
  • 4. Let me tell you a story…
  • 5. The story starts with a reference to the past.
  • 6. Which reasons to use Microservice? 2014
  • 7. · Increase Resilience · Improved scalability · The ability to use the right tool for the right task · Fast and flexible delivery · Easier debugging and maintenance · Improved ROI with reduced TCO · Mitigate Convey Law Risk Reasons to use Microservices
  • 8. Microservices is not a silver bullet 2017–2018
  • 11. 2015 – We have started migrating our monolith to microservices. 2016 – Monolith becomes smaller. Microservices grow. Frontend remains unchanged. 2017 – Monolith becomes smaller and smaller. Microservices are everywhere. Frontend remains unchanged. 2018 – What to do with frontend? History
  • 12. How usually Frontend looks like in huge projects Service [1] Service [2] Service [3] Frontend Gateway
  • 13. Let’s see in more detail… Frontend
  • 14. What we really had? · CMS served tones Frontend pages · Some separate FE services on NodeJS · No rules · No agreement · 16 Lighthouse Desktop Score · Dozens of unknown scripts loading · Multiple version of same dependencies
  • 15. Service [1] Service [2] Service [3] Frontend Gateway Backend for Frontend [1] Backend for Frontend [2] Our next step is frontend extraction
  • 16. Benefits · Independent deploys · Frontend agnostic approach · Developers can use modern technology · Development Experience · Faster changes
  • 17. Enough? Almost… · What about structural consistency? · What about UI consistency? · What about cross dependent releases? · What about sharing UI functionality? · What about reusing part of UI on different pages?
  • 18. So we decided to try frontend microservices…
  • 19. Goals · Page consists of several fragments · Fragment is independent application · Application supports client side routing · SSR should be supported · UI have to be consistent
  • 20. Requirements · HTML Page is delivered by layout streaming system · A unit of streaming is a fragment · Streaming is lighting fase · Fragment is a regular frontend application · Framework Agnostic · CSS Isolated · Support Global Routes · Fragment Delivery is Independent · Fragment knows nothing about others · Code sharing
  • 21. Organizational goals · Mitigate Convey Law Risks · Team is independent unit · Application and system should be testable and reliable · Avoid communication overkill
  • 22. Application #1 Application #2 Application #3 Imagine it is your browser
  • 23. New Architecture Service [1] Service [2] Service [3] Gateway Frontend Microservice Engine Fragment [1] Fragment [2] Fragment [3]
  • 24. But in reality… Service [1] Service [2] Service [3] Gateway Frontend Microservice Engine Fragment [1] Fragment [2] Fragment [3] Scary Part of Frontend
  • 25. Full Architecture View Service [1] Service [2] Service [3] Gateway Frontend Microservice Engine Fragment [1] Fragment [2] Fragment [3] Frontend Microservice Registry App #1 App #2 App #3
  • 26. What is Microservice Engine? Web Service responsible for processing incoming requests, discover page fragments, communicate to fragment services and form HTML.
  • 27. What is Microservice Registry? Web Service with persistent storage that manage basic entities like routes, template, fragments and their relationship.
  • 28. What is Fragment? Development unit. It is just regular frontend service.
  • 30. How it works together. Server Side Browser Gateway Frontend Microservice Engine Frontend Microservice Registry Fragments Form HTTP Response HTML Inject Scripts Inject JSON configuration Object
  • 31. How it works together. Client Side Browser Load Microservice Engine Script Load Injected Fragment Scripts Parse Configuration Object Match Route Load ESM Modules for Fragments Render/Hydrate Applications
  • 32. Client/Server side routing Allow to build isomorphic routing. Browser Frontend Microservice Engine Router App Router [1] App Router [2] App Router [3]
  • 33. Client side routing. Frontend Browser MSS Engine App Routes route/ms1 route/ms2 route/ms3 route/* /ms1 /ms2 /ms3
  • 35. What is Template ? </head> <body> <ilc-slot id="navbar" /> <ilc-slot id="body" /> <ilc-slot id="footer" /> </body> </html>
  • 36. Template customization </head> <body> <header> Hello World!!! </header> <ilc-slot id="navbar" /> <ilc-slot id="body" /> <ilc-slot id="footer" /> </body> </html>
  • 37. What is Route Route Template Slots
  • 38. • Anchor for a Frontend Application. • Declare node from Application is embedded. What is Slot
  • 39. What is Route Route Template Slots Application
  • 40. Client Side Integration const application = { bootstrap: () => Promise.resolve(), mount: () => Promise.resolve(), unmount: () => Promise.resolve(), }
  • 41. Bootstrap This lifecycle function will be called once, right before the registered application is mounted for the first time.
  • 42. Mount mount = async (props: LifecycleFnProps): Promise<Root> => { const slotNode = props.domElementGetter(); const root = createRoot(slotNode); root.render(<div>Hello World</div>); return Promise.resolve(root); }; This lifecycle function will be called whenever the registered application is not mounted, but it is ready to be. This function should create DOM elements, DOM event listeners, etc. to render content to the user.
  • 43. Unmount This lifecycle function will be called whenever the registered application is mounted. When called, this function should clean up all DOM elements, DOM event listeners, leaked memory, globals, observable subscriptions, etc. unmount = async () => { const reactRoot = this.getRoot(); if (reactRoot) { reactRoot.unmount(); } };
  • 45. Server Side Integration With every request for SSR content from the app ILC sends the following meta-information as query params: • Router Properties • BasePath • RequestURL • Application Properties • Header x-request-uri. Request URL string. This contains only the URL that is present in the actual HTTP request.
  • 46. Server Side Integration SSR response has to contain: • Body with HTML • Header Link • Header x-head-title • Header x-head-meta
  • 47. processResponse(response, { pageTitle: meta?.title, pageMetaTags: `${meta?.meta || ''}${meta?.link || ''}`, appAssets: await this.applicationManifestConfig.getAppAssets(), }); response.send(html); Code example
  • 49. The goal is to not affect it at all.
  • 50. Really. Development is almost not affected. Almost…
  • 52. Developers still can… • Choose JS Framework • Choose CSS Framework • Decide if SSR is Required • Control their build process • Control their deploy
  • 53. SO what do we have… Application #1 Application #2 Application #3 • MS engine allows to build pages by fragments. • Fragment is independent App. • Fragment can be deploy and change part of the page. • Your app can support client side navigation. • SSR is supported.
  • 54. This is the culmination but not the end.
  • 56. How to Configure It? Admin Panel.
  • 57. How to Configure It? Configuration as a Code.
  • 58. Do you remember this slide? Allow to build isomorphic routing. Browser Frontend Microservice Engine Router App Router [1] App Router [2] App Router [3] *It is not 100% truth. I will explain later.
  • 59. To be more precise this string… Allow to build isomorphic routing. Browser Frontend Microservice Engine Router App Router [1] App Router [2] App Router [3] *It is not 100% truth. I will explain later.
  • 60. Soft navigation Hard navigation Router [1] Router [2] Router [3] Router [A] Router [B] Router [B] Router. Template Mismatch.
  • 62. It is fine when everything’s fine 😌 Application #1 Application #2 Application #3
  • 63. Application #1 Application #2 Application #3 But what if not everything is fine? 🤨
  • 64. Application #1 Application #2 Application #3 What if it is a disaster?!! 😩
  • 65. What are the reasons for this? • Client Side Runtime Error • Server Side Error • Client resources are not available • Server is not available
  • 66. • Customer should not suffer. • One Application with Error has not to break page. • Business and Development can define own fault tolerance strategy. How to react on Errors and Outage?
  • 67. Fragment types • Primary • Essential • Regular
  • 68. • SSR: all 5xx response codes trigger the 500 error page configured in ILC. • CSR: any error caught by ILC errorHander, or errors during loading/mounting trigger the 500 error page configured in ILC. Primary Application Type
  • 69. • SSR: all non-2xx response codes are treated as SSR error and the second rendering attempt will be done on the client-side. • CSR: any error caught by ILC errorHander, or errors during loading/mounting trigger the 500 error page configured in ILC. Essential Application Type
  • 70. • SSR: all non-2xx response codes are treated as SSR error and the second rendering attempt will be done on the client-side. • CSR: any error caught by ILC errorHander, or errors during loading/mounting are logged without any further action. Regular Application Type
  • 71. Developers manage how your app reacts on error
  • 72. What is 500 error page in term of microservices?
  • 73. What is an Error Page? • Works similar to regular route • Associated with template • Could be associated with apps but here developer should be carefully because all your backend can be not accessible.
  • 75. • Route does not exists on MS Engine level • Route does not exists on Service level • Entity does not exists on Service level Error 404
  • 76. Error 404 ● Route does not exists on MS Engine level ○ System renders global 404 ● Route does not exists on Service level ○ Developer can decide to show own 404 or global ● Entity does not exists on Service level ○ Developer can decide to show own 404 or global Consider that global 404 page is a regular and can handle majority of cases you have
  • 78. Customise Page Transition UI ● MS Engine can handle re-rendering of apps on the page ● API for customising loaders
  • 79. Page Transition Hooks ● Stop navigation and use your custom behavior such as authentication form as an example to navigate whenever you need (CSR). ● Redirect to a new location (CSR, SSR). ● Continue navigation (CSR, SSR).
  • 81. Plugin Types ● Page Transition Plugins ● Reporting Plugins ● Localisation Plugin
  • 83. Shared Library ● Client side modules designed to share between pages ● Deliver without server side only client bundle ● Consumer receive updates right after deploy
  • 84. Using Shared Fragments ● Ensure polyfill loading ● Load Bundle With Common deps ○ React ○ Mobx ○ L10n ○ EventBus
  • 85. Using Shared Fragments </head> <include id="shared" src="https://host-1.server.net” timeout="10000"></include> <body> <ilc-slot id="navbar" /> <ilc-slot id="body" /> <ilc-slot id="footer" /> </body> </html>
  • 87. Dev Experience ● Developers don’t want to run tons of docker containers ● Developers don’t want to checkout tons of git repo
  • 90. How to develop Application #1 Application #2 (Mine) Application #3
  • 91. How to develop Application #1 Application #2 (Mine) Application #3 CDN Remove Server
  • 92. How to develop Application #1 Application #2 (Mine) Cookie configuration Application #3 CDN Remove Server Local Static Local Server
  • 94. Why is it performant ● Horizontal scaling of backend service ● Built-in caches ● Minimum amount of computation ● Client side logic is backend agnostic
  • 97. Conclusion ● MS increases complexity on your frontend ● MS microservices is not about code splitting ● MS should not effect frontend dev experience ● MS should be fault tolerant ● MS should have robust monitoring system ● Local development should convenient
  • 98. What ILC Allow ● Deliver part of the page independently ● Isomorphic Client side and Server side navigation ● Support of SSR ● Error Handling System ● Fault Tolerance System ● Solution for Local Development ● Monitoring using plugin system ● Auth Capabilities ● Multi domain support ● Configuration as a Code ● Does not break your regular experience