SlideShare a Scribd company logo
MICROSERVICE
WEBSITES
Gustaf Nilsson Kotte
@gustaf_nk
Mobile devices
The problem
How can we develop a website with multiple teams?
Different business units need to make a website together
that should feel like “one website” for the end-user.
Example: Retail domain
Products, Shopping cart, Checkout, Recommendations, Reviews,
User profile, Editorial content, etc...
The problem
Decentralized services but centralized web?
Frontend
Bottleneck
Services should have their own frontend!
Stefan Tilkov et al, “Self-Contained Systems”
Frontend Frontend FrontendFrontend
Enables continuous delivery
Decentralized governance
An option for teams to choose different tools
→ heterogeneous/plural/diverse system
High rate of change on the frontend
Allows the system to evolve over time
James Lewis & Martin Fowler, “Microservices: Decentralized Governance”
Addy Osmani, “JavaScript Start-up Performance”
Mobile device performance
Constraints (need to support)
Continuous delivery
Decentralized governance
Good performance on mobile devices
Microservice Websites
Mobile devices
Analysis
INTEGRATION USE CASE
Shopping cart
How can we reuse the shopping cart between
different parts of the web site?
“Many-to-one”
Multiple teams – one shopping cart
INTEGRATION USE CASE
Landing page
The web site’s landing page is the page with the
most amount of traffic and many business units
want to be represented there.
“One-to-many”
Multiple teams – one landing page
Integrating on...
What (data/code/content)
When (build/run)
Where (client/server)
Cartesian product → 12 combinations
Let’s go through them!
Analysis
What × when × where
What? When? Where?
Data (APIs) Build Client
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client
Server
Run Client
Server
Content (HTML) Build Client
Server
Run Client
Server
What × when × where
What × when × where
What? When? Where?
Data (APIs) Build Client No reuse at all, only API usage
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client
Server
Run Client
Server
Content (HTML) Build Client
Server
Run Client
Server
What × when × where
What × when × where
What? When? Where?
Data (APIs) Build Client No reuse at all, only API usage
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance.
Server
Run Client
Server
Content (HTML) Build Client
Server
Run Client
Server
What × when × where
What × when × where
What? When? Where?
Data (APIs) Build Client No reuse at all, only API usage
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance.
Server
Run Client No diversity + mobile performance.
Server N/A
Content (HTML) Build Client
Server
Run Client
Server
What × when × where
What × when × where
What? When? Where?
Data (APIs) Build Client No reuse at all, only API usage
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance.
Server
Run Client No diversity + mobile performance.
Server N/A
Content (HTML) Build Client
Server
Run Client
Server
What × when × where
What × when × where
What? When? Where?
Data (APIs) Build Client No reuse at all, only API usage
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance
Server
Run Client No diversity + mobile performance.
Server N/A
Content (HTML) Build Client N/A
Server “Static page fragments” – ok, but limited amount of use cases
Run Client
Server
What × when × where
What × when × where
What? When? Where?
Data (APIs) Build Client No reuse at all, only API usage
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance.
Server
Run Client No diversity + mobile performance.
Server N/A
Content (HTML) Build Client N/A
Server “Static page fragments” – ok, but limited amount of use cases
Run Client Client-side transclusion
Server Server-side transclusion
What × when × where
What? When? Where?
Data (APIs) Build Client No reuse at all, only API usage
Server
Run Client
Server
Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance.
Server
Run Client No diversity + mobile performance.
Server N/A
Content (HTML) Build Client N/A
Server “Static page fragments” – ok, but limited amount of use cases
Run Client Client-side transclusion
Server Server-side transclusion
What × when × whereWhat × when × where
Mobile devices
Transclusion
Transclusion
“transclusion is the inclusion of part or all of an electronic document
into one or more other documents by hypertext reference” (Wikipedia: Transclusion)
Producer
Expose a fragment resource, "/retail/shopping-cart/"
Consumer
Include the fragment declaratively, similar to <img src="..." />
Transclusion can be used both on server and client
Examples: Edge-Side Includes (server) and <h-include> (client)
No relative URLs in fragments!
<img src="images/relative-does-not-work.png" />
<img src="/images/root-relative-often-works.png" />
<img src="https://image-resources.jayway.com/images/absolute-always-works.png" />
...because URLs are relative to the consumer’s context (not the producer’s)
Edge Side Includes (server)
<-- Include the shopping cart component -->
<esi:include src="/retail/shopping-cart/" />
ESI 1.0 proposal submitted to W3C 2001
CDN support: Akamai, Fastly
On-premise support: Varnish, Squid, nodesi, etc
<h-include> (client)
<h-include src="/retail/shopping-cart/"></h-include>
Custom Elements version of hinclude.js (by Mark Nottingham, 2006)
Difference: interface and transitive includes
HTTP/2 → Bundles multiple xhr requests into one
Both support refresh()
ESI (server)
+ SEO
+ JS/CSS in responses works as usual
+ Initial performance
+ Cross-domain requests
- Extra infrastructure investment
- Dev perspective (+ i.e. nodesi)
- No streamed responses ⇒ blocking
- Performance sensitive (+ timeouts)
- No header forwarding (+ configuration)
Server transclusion vs client transclusion
h-include (client)
- No SEO
- No loading of JS/CSS in responses
- Delay before xhr requests arrive
- No cross-domain requests (unless CORS)
- If no initial width/height, page will “jump”
+ No extra infrastructure investment
+ No extra dev setup
+ Async ⇒ non-blocking
+ Responses are rendered when they arrive
+ Headers work as usual in browsers
ESI and h-include together (1)
// Refresh-only h-include
var proto = Object.create(HIncludeElement.prototype);
proto.attachedCallback = function() { /* do nothing */ };
document.registerElement('h-include-refresh-only', {
prototype: proto,
});
⇒ <h-include-refresh-only src="...">REFRESHABLE CONTENT HERE</h-include-refresh-only>
h-include-refresh-only
⇒
ESI and h-include together (2)
// Lazy-loading with hunt.js
window.addEventListener('load', function() {
// For these elements...
hunt(document.getElementsByTagName('h-include-refresh-only'), {
// ...when they’re almost in the viewport...
offset: 400,
// ...load them!
in: function() {
this.refresh();
},
});
});
Constraints (need to support)
Continuous delivery
Decentralized governance
Good performance on mobile devices
Rules for integration
Transclude server-side resources
Microservice Websites
Mobile devices
Client-side
dependencies
Shopping cart HTML, check!
But, what about...
Additional client-side behavior? (JavaScript)
Design? (CSS)
How to import service dependencies
Still need cache busting (i.e. /retail/shopping-cart/scripts-aef419.js)
Server-side transclusion works well here
Client-side transclusion require either 1) HTTP redirects, or 2) “loaders” like little-loader for JS and loadCSS
for CSS. Both options are less performant than using server-side transclusion, because of extra client/server
roundtrips.
<head>
...
<!-- Include shopping cart resources (cache-busting-as-a-service) -->
<esi:include src="/retail/shopping-cart/resources/" />
<!-- (scripts go in head too, if defer attribute is used) -->
...
</head>
<body>
...
<-- Include the shopping cart component -->
<esi:include src="/retail/shopping-cart/" />
...
</body>
Load dependencies (before transclusion)
http://caniuse.com/#feat=script-defer, https://www.html5rocks.com/en/tutorials/speed/script-loading/
<head>
...
<!-- Include shopping cart resources (cache-busting-as-a-service) -->
<link rel="stylesheet" src="/retail/shopping-cart/style-ffc864.css" />
<script defer src="/retail/shopping-cart/scripts-aef419.js"></script>
<!-- (scripts go in head too, if defer attribute is used) -->
...
</head>
<body>
...
<-- Include the shopping cart component -->
<div class="shopping-cart">Hello, shopping cart</div>
...
</body>
Load dependencies (after transclusion)
Client-side dependencies: JavaScript
No assumptions of consuming services’ client-side dependencies
⇒ Vanilla JS + polyfills (neither are “free”, so use both with care)
Custom Elements simplifies the lifecycle of components
https://github.com/WebReflection/document-register-element (5 KB)
Client-side dependencies: CSS
Disclaimer: I’m not a CSS expert
Large-scale CSS development is hard (but what’s the alternative?)
Styleguide
Namespacing/components/responsive/flexible
Good news: others have this problem too (i.e. “multi-team SPAs”)
Small global dependency for resets and typography (optional)
Constraints (need to support)
Continuous delivery
Decentralized governance
Good performance on mobile devices
Rules for integration
Transclude server-side resources
No global client-side dependencies
Microservice Websites
Mobile devices
Summary
Services should have their own frontend!
Frontend Frontend FrontendFrontend
Integration: Transclusion
Constraints (need to support)
Continuous delivery
Decentralized governance (otherwise: “occasional” rewrites)
Good performance on mobile devices
Rules for integration (free to use JS frameworks internally, but not for exported fragments)
Transclude server-side resources
No global client-side dependencies
Microservice Websites
Further resources
Microservice Websites, Gustaf Nilsson Kotte
Microservices, James Lewis & Martin Fowler
Self-Contained Systems, Stefan Tilkov et al.
Architecture Without an End State, Michael Nygard
JavaScript Start-up Performance, Addi Osmani
Also, this is a great book:
I’ll happily chat on twitter: @gustaf_nk

More Related Content

What's hot

ACTIVE SERVER PAGES BY SAIKIRAN PANJALA
ACTIVE SERVER PAGES BY SAIKIRAN PANJALAACTIVE SERVER PAGES BY SAIKIRAN PANJALA
ACTIVE SERVER PAGES BY SAIKIRAN PANJALA
Saikiran Panjala
 
Kentico CMS
Kentico CMSKentico CMS
Kentico CMS
Raavish patel
 
Single page applications with backbone js
Single page applications with backbone jsSingle page applications with backbone js
Single page applications with backbone js
Gil Fink
 
Active Server Page(ASP)
Active Server Page(ASP)Active Server Page(ASP)
Active Server Page(ASP)Keshab Nath
 
Joomla! Scalable Enterprise Deployments with AWS
Joomla! Scalable Enterprise Deployments with AWSJoomla! Scalable Enterprise Deployments with AWS
Joomla! Scalable Enterprise Deployments with AWS
Jim Dolinski
 
Asp
AspAsp
The WordPress Way
The WordPress WayThe WordPress Way
The WordPress Way
Kan Ouivirach, Ph.D.
 
Full stack devlopment using django main ppt
Full stack devlopment using django main pptFull stack devlopment using django main ppt
Full stack devlopment using django main ppt
SudhanshuVijay3
 
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solutionDotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
Mazenetsolution
 
Introduction to ASP.NET MVC
Introduction to ASP.NET MVCIntroduction to ASP.NET MVC
Introduction to ASP.NET MVC
Mayank Srivastava
 
HTML5とIE10とWindows 8
HTML5とIE10とWindows 8HTML5とIE10とWindows 8
HTML5とIE10とWindows 8
Microsoft
 
Portable single page applications with AngularJS in SharePoint
Portable single page applications with AngularJS in SharePointPortable single page applications with AngularJS in SharePoint
Portable single page applications with AngularJS in SharePoint
Roger Noble
 
Ajax
AjaxAjax
Modern Applications With Asp.net Core 5 and Vue JS 3
Modern Applications With Asp.net Core 5 and Vue JS 3Modern Applications With Asp.net Core 5 and Vue JS 3
Modern Applications With Asp.net Core 5 and Vue JS 3
Alexandre Malavasi
 
Building productivity solutions with Microsoft Graph
Building productivity solutions with Microsoft GraphBuilding productivity solutions with Microsoft Graph
Building productivity solutions with Microsoft Graph
Waldek Mastykarz
 
Piecing Together the WordPress Puzzle
Piecing Together the WordPress PuzzlePiecing Together the WordPress Puzzle
Piecing Together the WordPress Puzzle
Business Vitality LLC
 
Java web services soap rest training from hyderabad
Java web services soap rest training from hyderabadJava web services soap rest training from hyderabad
Java web services soap rest training from hyderabadFuturePoint Technologies
 
Targeting Mobile Platform with MVC 4.0
Targeting Mobile Platform with MVC 4.0Targeting Mobile Platform with MVC 4.0
Targeting Mobile Platform with MVC 4.0Mayank Srivastava
 
Offline Web Apps
Offline Web AppsOffline Web Apps
Offline Web Apps
Artem Tabalin
 

What's hot (20)

ACTIVE SERVER PAGES BY SAIKIRAN PANJALA
ACTIVE SERVER PAGES BY SAIKIRAN PANJALAACTIVE SERVER PAGES BY SAIKIRAN PANJALA
ACTIVE SERVER PAGES BY SAIKIRAN PANJALA
 
Kentico CMS
Kentico CMSKentico CMS
Kentico CMS
 
Single page applications with backbone js
Single page applications with backbone jsSingle page applications with backbone js
Single page applications with backbone js
 
Active Server Page(ASP)
Active Server Page(ASP)Active Server Page(ASP)
Active Server Page(ASP)
 
Introduction ASP
Introduction ASPIntroduction ASP
Introduction ASP
 
Joomla! Scalable Enterprise Deployments with AWS
Joomla! Scalable Enterprise Deployments with AWSJoomla! Scalable Enterprise Deployments with AWS
Joomla! Scalable Enterprise Deployments with AWS
 
Asp
AspAsp
Asp
 
The WordPress Way
The WordPress WayThe WordPress Way
The WordPress Way
 
Full stack devlopment using django main ppt
Full stack devlopment using django main pptFull stack devlopment using django main ppt
Full stack devlopment using django main ppt
 
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solutionDotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
Dotnet- An overview of ASP.NET & ADO.NET- Mazenet solution
 
Introduction to ASP.NET MVC
Introduction to ASP.NET MVCIntroduction to ASP.NET MVC
Introduction to ASP.NET MVC
 
HTML5とIE10とWindows 8
HTML5とIE10とWindows 8HTML5とIE10とWindows 8
HTML5とIE10とWindows 8
 
Portable single page applications with AngularJS in SharePoint
Portable single page applications with AngularJS in SharePointPortable single page applications with AngularJS in SharePoint
Portable single page applications with AngularJS in SharePoint
 
Ajax
AjaxAjax
Ajax
 
Modern Applications With Asp.net Core 5 and Vue JS 3
Modern Applications With Asp.net Core 5 and Vue JS 3Modern Applications With Asp.net Core 5 and Vue JS 3
Modern Applications With Asp.net Core 5 and Vue JS 3
 
Building productivity solutions with Microsoft Graph
Building productivity solutions with Microsoft GraphBuilding productivity solutions with Microsoft Graph
Building productivity solutions with Microsoft Graph
 
Piecing Together the WordPress Puzzle
Piecing Together the WordPress PuzzlePiecing Together the WordPress Puzzle
Piecing Together the WordPress Puzzle
 
Java web services soap rest training from hyderabad
Java web services soap rest training from hyderabadJava web services soap rest training from hyderabad
Java web services soap rest training from hyderabad
 
Targeting Mobile Platform with MVC 4.0
Targeting Mobile Platform with MVC 4.0Targeting Mobile Platform with MVC 4.0
Targeting Mobile Platform with MVC 4.0
 
Offline Web Apps
Offline Web AppsOffline Web Apps
Offline Web Apps
 

Viewers also liked

Nordic APIs - Building a Secure API
Nordic APIs - Building a Secure APINordic APIs - Building a Secure API
Nordic APIs - Building a Secure API
Twobo Technologies
 
microXchg 2017: "Microservices: The People and Organisational Impact"
microXchg 2017: "Microservices: The People and Organisational Impact"microXchg 2017: "Microservices: The People and Organisational Impact"
microXchg 2017: "Microservices: The People and Organisational Impact"
Daniel Bryant
 
Applying a Developer-Centric Approach to API Design from API Architect Ronnie...
Applying a Developer-Centric Approach to API Design from API Architect Ronnie...Applying a Developer-Centric Approach to API Design from API Architect Ronnie...
Applying a Developer-Centric Approach to API Design from API Architect Ronnie...
CA API Management
 
Modernizing IT with Microservices
Modernizing IT with MicroservicesModernizing IT with Microservices
Modernizing IT with Microservices
LeanIX GmbH
 
The Microservices and DevOps Journey
The Microservices and DevOps JourneyThe Microservices and DevOps Journey
The Microservices and DevOps Journey
C4Media
 
Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016
Adrian Cockcroft
 
The Progression of APIs and Microservices - Photon Infotech
The Progression of APIs and Microservices - Photon InfotechThe Progression of APIs and Microservices - Photon Infotech
The Progression of APIs and Microservices - Photon Infotech
Photon
 
The Reason to Use Microservices
The Reason to Use MicroservicesThe Reason to Use Microservices
The Reason to Use Microservices
bischak
 
The Architect is Not Convinced
The Architect is Not ConvincedThe Architect is Not Convinced
The Architect is Not Convinced
duvander
 
Mobile APIs
Mobile APIsMobile APIs
Mobile APIs
Michele Titolo
 
Simpler Web Architectures Now! (At The Frontend 2016)
Simpler Web Architectures Now! (At The Frontend 2016)Simpler Web Architectures Now! (At The Frontend 2016)
Simpler Web Architectures Now! (At The Frontend 2016)
Gustaf Nilsson Kotte
 
Mobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many DevicesMobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many DevicesApigee | Google Cloud
 
State of APIs: Now & Next
State of APIs: Now & NextState of APIs: Now & Next
State of APIs: Now & Next
Andreas Krohn
 
Samtrafiken - Lessons learned from Trafiklab
Samtrafiken - Lessons learned from TrafiklabSamtrafiken - Lessons learned from Trafiklab
Samtrafiken - Lessons learned from Trafiklab
Nordic APIs
 
Criticality of identity
Criticality of identityCriticality of identity
Criticality of identity
Nordic APIs
 
Sveriges radio nordic apis 21 mars 2013
Sveriges radio nordic apis 21 mars 2013Sveriges radio nordic apis 21 mars 2013
Sveriges radio nordic apis 21 mars 2013
Nordic APIs
 
AliExpress’ Way to Microservices - microXchg 2017
AliExpress’ Way to Microservices  - microXchg 2017AliExpress’ Way to Microservices  - microXchg 2017
AliExpress’ Way to Microservices - microXchg 2017
juvenxu
 
The SAM Pattern: a Distributed System View of Front-End Architectures
The SAM Pattern: a Distributed System View of Front-End ArchitecturesThe SAM Pattern: a Distributed System View of Front-End Architectures
The SAM Pattern: a Distributed System View of Front-End Architectures
Jean-Jacques Dubray
 
Lo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJSLo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJS
Marcel Kalveram
 
Accion Labs Microservices Whitepaper
Accion Labs Microservices WhitepaperAccion Labs Microservices Whitepaper
Accion Labs Microservices Whitepaper
Tony Kernan
 

Viewers also liked (20)

Nordic APIs - Building a Secure API
Nordic APIs - Building a Secure APINordic APIs - Building a Secure API
Nordic APIs - Building a Secure API
 
microXchg 2017: "Microservices: The People and Organisational Impact"
microXchg 2017: "Microservices: The People and Organisational Impact"microXchg 2017: "Microservices: The People and Organisational Impact"
microXchg 2017: "Microservices: The People and Organisational Impact"
 
Applying a Developer-Centric Approach to API Design from API Architect Ronnie...
Applying a Developer-Centric Approach to API Design from API Architect Ronnie...Applying a Developer-Centric Approach to API Design from API Architect Ronnie...
Applying a Developer-Centric Approach to API Design from API Architect Ronnie...
 
Modernizing IT with Microservices
Modernizing IT with MicroservicesModernizing IT with Microservices
Modernizing IT with Microservices
 
The Microservices and DevOps Journey
The Microservices and DevOps JourneyThe Microservices and DevOps Journey
The Microservices and DevOps Journey
 
Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016Microservices Workshop All Topics Deck 2016
Microservices Workshop All Topics Deck 2016
 
The Progression of APIs and Microservices - Photon Infotech
The Progression of APIs and Microservices - Photon InfotechThe Progression of APIs and Microservices - Photon Infotech
The Progression of APIs and Microservices - Photon Infotech
 
The Reason to Use Microservices
The Reason to Use MicroservicesThe Reason to Use Microservices
The Reason to Use Microservices
 
The Architect is Not Convinced
The Architect is Not ConvincedThe Architect is Not Convinced
The Architect is Not Convinced
 
Mobile APIs
Mobile APIsMobile APIs
Mobile APIs
 
Simpler Web Architectures Now! (At The Frontend 2016)
Simpler Web Architectures Now! (At The Frontend 2016)Simpler Web Architectures Now! (At The Frontend 2016)
Simpler Web Architectures Now! (At The Frontend 2016)
 
Mobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many DevicesMobile APIs: Optimizing APIs for Many Devices
Mobile APIs: Optimizing APIs for Many Devices
 
State of APIs: Now & Next
State of APIs: Now & NextState of APIs: Now & Next
State of APIs: Now & Next
 
Samtrafiken - Lessons learned from Trafiklab
Samtrafiken - Lessons learned from TrafiklabSamtrafiken - Lessons learned from Trafiklab
Samtrafiken - Lessons learned from Trafiklab
 
Criticality of identity
Criticality of identityCriticality of identity
Criticality of identity
 
Sveriges radio nordic apis 21 mars 2013
Sveriges radio nordic apis 21 mars 2013Sveriges radio nordic apis 21 mars 2013
Sveriges radio nordic apis 21 mars 2013
 
AliExpress’ Way to Microservices - microXchg 2017
AliExpress’ Way to Microservices  - microXchg 2017AliExpress’ Way to Microservices  - microXchg 2017
AliExpress’ Way to Microservices - microXchg 2017
 
The SAM Pattern: a Distributed System View of Front-End Architectures
The SAM Pattern: a Distributed System View of Front-End ArchitecturesThe SAM Pattern: a Distributed System View of Front-End Architectures
The SAM Pattern: a Distributed System View of Front-End Architectures
 
Lo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJSLo mejor y peor de React Native @ValenciaJS
Lo mejor y peor de React Native @ValenciaJS
 
Accion Labs Microservices Whitepaper
Accion Labs Microservices WhitepaperAccion Labs Microservices Whitepaper
Accion Labs Microservices Whitepaper
 

Similar to Microservice Websites (microXchg 2017)

REST: So What's It All About? (SAP TechEd 2011, MOB107)
REST: So What's It All About? (SAP TechEd 2011, MOB107)REST: So What's It All About? (SAP TechEd 2011, MOB107)
REST: So What's It All About? (SAP TechEd 2011, MOB107)
Sascha Wenninger
 
A Simpler Web App Architecture (jDays 2016)
A Simpler Web App Architecture (jDays 2016)A Simpler Web App Architecture (jDays 2016)
A Simpler Web App Architecture (jDays 2016)
Gustaf Nilsson Kotte
 
Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...
Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...
Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...
Kalaiselvan (Selvan)
 
James Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 PatternsJames Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 Patterns
akqaanoraks
 
#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture
Chris Richardson
 
Developing Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris RichardsonDeveloping Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris Richardson
JAXLondon2014
 
Workshop HTML5+PhoneGap by Ivano Malavolta
Workshop HTML5+PhoneGap by Ivano Malavolta Workshop HTML5+PhoneGap by Ivano Malavolta
Workshop HTML5+PhoneGap by Ivano Malavolta
Commit University
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
Richard Banks
 
Making Of PHP Based Web Application
Making Of PHP Based Web ApplicationMaking Of PHP Based Web Application
Making Of PHP Based Web Application
Sachin Walvekar
 
Cloud computing and the Windows Azure Services Platform (KU Leuven)
Cloud computing and the Windows Azure Services Platform (KU Leuven)Cloud computing and the Windows Azure Services Platform (KU Leuven)
Cloud computing and the Windows Azure Services Platform (KU Leuven)
Maarten Balliauw
 
DITEC - E-Commerce & ASP.NET
DITEC - E-Commerce & ASP.NETDITEC - E-Commerce & ASP.NET
DITEC - E-Commerce & ASP.NET
Rasan Samarasinghe
 
Angular jS Introduction by Google
Angular jS Introduction by GoogleAngular jS Introduction by Google
Angular jS Introduction by Google
ASG
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
Ashlimarie
 
cross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architecturecross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architecture
Oleksandr Tserkovnyi
 
Alfresco WCM For High Scalability
Alfresco WCM For High ScalabilityAlfresco WCM For High Scalability
Alfresco WCM For High Scalability
Alfresco Software
 
Presentation about html5 css3
Presentation about html5 css3Presentation about html5 css3
Presentation about html5 css3
Gopi A
 
Developing applications with a microservice architecture (svcc)
Developing applications with a microservice architecture (svcc)Developing applications with a microservice architecture (svcc)
Developing applications with a microservice architecture (svcc)
Chris Richardson
 
Migrate a on-prem platform to the public cloud with Java - SpringBoot and PCF
Migrate a on-prem platform to the public cloud with Java - SpringBoot and PCFMigrate a on-prem platform to the public cloud with Java - SpringBoot and PCF
Migrate a on-prem platform to the public cloud with Java - SpringBoot and PCF
Roy Braam
 
Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...
Chris Richardson
 

Similar to Microservice Websites (microXchg 2017) (20)

REST: So What's It All About? (SAP TechEd 2011, MOB107)
REST: So What's It All About? (SAP TechEd 2011, MOB107)REST: So What's It All About? (SAP TechEd 2011, MOB107)
REST: So What's It All About? (SAP TechEd 2011, MOB107)
 
A Simpler Web App Architecture (jDays 2016)
A Simpler Web App Architecture (jDays 2016)A Simpler Web App Architecture (jDays 2016)
A Simpler Web App Architecture (jDays 2016)
 
Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...
Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...
Silicon India Java Conference: Building Scalable Solutions For Commerce Silic...
 
James Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 PatternsJames Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 Patterns
 
#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture#JaxLondon keynote: Developing applications with a microservice architecture
#JaxLondon keynote: Developing applications with a microservice architecture
 
Developing Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris RichardsonDeveloping Applications with a Micro Service Architecture - Chris Richardson
Developing Applications with a Micro Service Architecture - Chris Richardson
 
Workshop HTML5+PhoneGap by Ivano Malavolta
Workshop HTML5+PhoneGap by Ivano Malavolta Workshop HTML5+PhoneGap by Ivano Malavolta
Workshop HTML5+PhoneGap by Ivano Malavolta
 
Architecting Microservices in .Net
Architecting Microservices in .NetArchitecting Microservices in .Net
Architecting Microservices in .Net
 
Making Of PHP Based Web Application
Making Of PHP Based Web ApplicationMaking Of PHP Based Web Application
Making Of PHP Based Web Application
 
Cloud computing and the Windows Azure Services Platform (KU Leuven)
Cloud computing and the Windows Azure Services Platform (KU Leuven)Cloud computing and the Windows Azure Services Platform (KU Leuven)
Cloud computing and the Windows Azure Services Platform (KU Leuven)
 
DITEC - E-Commerce & ASP.NET
DITEC - E-Commerce & ASP.NETDITEC - E-Commerce & ASP.NET
DITEC - E-Commerce & ASP.NET
 
Angular jS Introduction by Google
Angular jS Introduction by GoogleAngular jS Introduction by Google
Angular jS Introduction by Google
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
 
cross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architecturecross-platform-assets-based-front-end-architecture
cross-platform-assets-based-front-end-architecture
 
Alfresco WCM For High Scalability
Alfresco WCM For High ScalabilityAlfresco WCM For High Scalability
Alfresco WCM For High Scalability
 
Web 2 0 Tools
Web 2 0 ToolsWeb 2 0 Tools
Web 2 0 Tools
 
Presentation about html5 css3
Presentation about html5 css3Presentation about html5 css3
Presentation about html5 css3
 
Developing applications with a microservice architecture (svcc)
Developing applications with a microservice architecture (svcc)Developing applications with a microservice architecture (svcc)
Developing applications with a microservice architecture (svcc)
 
Migrate a on-prem platform to the public cloud with Java - SpringBoot and PCF
Migrate a on-prem platform to the public cloud with Java - SpringBoot and PCFMigrate a on-prem platform to the public cloud with Java - SpringBoot and PCF
Migrate a on-prem platform to the public cloud with Java - SpringBoot and PCF
 
Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...Developing applications with a microservice architecture (SVforum, microservi...
Developing applications with a microservice architecture (SVforum, microservi...
 

More from Gustaf Nilsson Kotte

Jayway Web Tech Radar 2015
Jayway Web Tech Radar 2015Jayway Web Tech Radar 2015
Jayway Web Tech Radar 2015
Gustaf Nilsson Kotte
 
HTML Hypermedia APIs and Adaptive Web Design - jDays 2013
HTML Hypermedia APIs and Adaptive Web Design - jDays 2013HTML Hypermedia APIs and Adaptive Web Design - jDays 2013
HTML Hypermedia APIs and Adaptive Web Design - jDays 2013Gustaf Nilsson Kotte
 
HTML Hypermedia APIs and Adaptive Web Design - RuPy
HTML Hypermedia APIs and Adaptive Web Design - RuPyHTML Hypermedia APIs and Adaptive Web Design - RuPy
HTML Hypermedia APIs and Adaptive Web Design - RuPyGustaf Nilsson Kotte
 
HTML Hypermedia APIs and Adaptive Web Design - reject.js
HTML Hypermedia APIs and Adaptive Web Design -  reject.js HTML Hypermedia APIs and Adaptive Web Design -  reject.js
HTML Hypermedia APIs and Adaptive Web Design - reject.js
Gustaf Nilsson Kotte
 
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIsHTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIsGustaf Nilsson Kotte
 
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013Gustaf Nilsson Kotte
 
Surviving the Zombie Apocalpyse of Connected Devices
Surviving the Zombie Apocalpyse of Connected DevicesSurviving the Zombie Apocalpyse of Connected Devices
Surviving the Zombie Apocalpyse of Connected DevicesGustaf Nilsson Kotte
 

More from Gustaf Nilsson Kotte (9)

Jayway Web Tech Radar 2015
Jayway Web Tech Radar 2015Jayway Web Tech Radar 2015
Jayway Web Tech Radar 2015
 
HTML Hypermedia APIs and Adaptive Web Design - jDays 2013
HTML Hypermedia APIs and Adaptive Web Design - jDays 2013HTML Hypermedia APIs and Adaptive Web Design - jDays 2013
HTML Hypermedia APIs and Adaptive Web Design - jDays 2013
 
Design Hypermedia APIs
Design Hypermedia APIsDesign Hypermedia APIs
Design Hypermedia APIs
 
HTML Hypermedia APIs and Adaptive Web Design - RuPy
HTML Hypermedia APIs and Adaptive Web Design - RuPyHTML Hypermedia APIs and Adaptive Web Design - RuPy
HTML Hypermedia APIs and Adaptive Web Design - RuPy
 
HTML Hypermedia APIs and Adaptive Web Design - reject.js
HTML Hypermedia APIs and Adaptive Web Design -  reject.js HTML Hypermedia APIs and Adaptive Web Design -  reject.js
HTML Hypermedia APIs and Adaptive Web Design - reject.js
 
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIsHTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
HTML Hypermedia APIs and Adaptive Web Design - Nordic APIs
 
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
Surviving the Zombie Apocalypse of Connected devices - Jfokus 2013
 
Surviving the Zombie Apocalpyse of Connected Devices
Surviving the Zombie Apocalpyse of Connected DevicesSurviving the Zombie Apocalpyse of Connected Devices
Surviving the Zombie Apocalpyse of Connected Devices
 
Windows 8 for Web Developers
Windows 8 for Web DevelopersWindows 8 for Web Developers
Windows 8 for Web Developers
 

Recently uploaded

Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Zilliz
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
Pixlogix Infotech
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 

Recently uploaded (20)

Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...Building RAG with self-deployed Milvus vector database and Snowpark Container...
Building RAG with self-deployed Milvus vector database and Snowpark Container...
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website20 Comprehensive Checklist of Designing and Developing a Website
20 Comprehensive Checklist of Designing and Developing a Website
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 

Microservice Websites (microXchg 2017)

  • 3. How can we develop a website with multiple teams? Different business units need to make a website together that should feel like “one website” for the end-user. Example: Retail domain Products, Shopping cart, Checkout, Recommendations, Reviews, User profile, Editorial content, etc... The problem
  • 4. Decentralized services but centralized web? Frontend Bottleneck
  • 5. Services should have their own frontend! Stefan Tilkov et al, “Self-Contained Systems” Frontend Frontend FrontendFrontend Enables continuous delivery
  • 6. Decentralized governance An option for teams to choose different tools → heterogeneous/plural/diverse system High rate of change on the frontend Allows the system to evolve over time James Lewis & Martin Fowler, “Microservices: Decentralized Governance”
  • 7. Addy Osmani, “JavaScript Start-up Performance” Mobile device performance
  • 8. Constraints (need to support) Continuous delivery Decentralized governance Good performance on mobile devices Microservice Websites
  • 10. INTEGRATION USE CASE Shopping cart How can we reuse the shopping cart between different parts of the web site? “Many-to-one” Multiple teams – one shopping cart
  • 11. INTEGRATION USE CASE Landing page The web site’s landing page is the page with the most amount of traffic and many business units want to be represented there. “One-to-many” Multiple teams – one landing page
  • 12. Integrating on... What (data/code/content) When (build/run) Where (client/server) Cartesian product → 12 combinations Let’s go through them! Analysis
  • 13. What × when × where What? When? Where? Data (APIs) Build Client Server Run Client Server Code (JavaScript, PHP, etc) Build Client Server Run Client Server Content (HTML) Build Client Server Run Client Server What × when × where
  • 14. What × when × where What? When? Where? Data (APIs) Build Client No reuse at all, only API usage Server Run Client Server Code (JavaScript, PHP, etc) Build Client Server Run Client Server Content (HTML) Build Client Server Run Client Server What × when × where
  • 15. What × when × where What? When? Where? Data (APIs) Build Client No reuse at all, only API usage Server Run Client Server Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance. Server Run Client Server Content (HTML) Build Client Server Run Client Server What × when × where
  • 16. What × when × where What? When? Where? Data (APIs) Build Client No reuse at all, only API usage Server Run Client Server Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance. Server Run Client No diversity + mobile performance. Server N/A Content (HTML) Build Client Server Run Client Server What × when × where
  • 17. What × when × where What? When? Where? Data (APIs) Build Client No reuse at all, only API usage Server Run Client Server Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance. Server Run Client No diversity + mobile performance. Server N/A Content (HTML) Build Client Server Run Client Server What × when × where
  • 18. What × when × where What? When? Where? Data (APIs) Build Client No reuse at all, only API usage Server Run Client Server Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance Server Run Client No diversity + mobile performance. Server N/A Content (HTML) Build Client N/A Server “Static page fragments” – ok, but limited amount of use cases Run Client Server What × when × where
  • 19. What × when × where What? When? Where? Data (APIs) Build Client No reuse at all, only API usage Server Run Client Server Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance. Server Run Client No diversity + mobile performance. Server N/A Content (HTML) Build Client N/A Server “Static page fragments” – ok, but limited amount of use cases Run Client Client-side transclusion Server Server-side transclusion What × when × where
  • 20. What? When? Where? Data (APIs) Build Client No reuse at all, only API usage Server Run Client Server Code (JavaScript, PHP, etc) Build Client No continuous delivery. No diversity + mobile performance. Server Run Client No diversity + mobile performance. Server N/A Content (HTML) Build Client N/A Server “Static page fragments” – ok, but limited amount of use cases Run Client Client-side transclusion Server Server-side transclusion What × when × whereWhat × when × where
  • 22. Transclusion “transclusion is the inclusion of part or all of an electronic document into one or more other documents by hypertext reference” (Wikipedia: Transclusion) Producer Expose a fragment resource, "/retail/shopping-cart/" Consumer Include the fragment declaratively, similar to <img src="..." /> Transclusion can be used both on server and client Examples: Edge-Side Includes (server) and <h-include> (client)
  • 23. No relative URLs in fragments! <img src="images/relative-does-not-work.png" /> <img src="/images/root-relative-often-works.png" /> <img src="https://image-resources.jayway.com/images/absolute-always-works.png" /> ...because URLs are relative to the consumer’s context (not the producer’s)
  • 24. Edge Side Includes (server) <-- Include the shopping cart component --> <esi:include src="/retail/shopping-cart/" /> ESI 1.0 proposal submitted to W3C 2001 CDN support: Akamai, Fastly On-premise support: Varnish, Squid, nodesi, etc
  • 25. <h-include> (client) <h-include src="/retail/shopping-cart/"></h-include> Custom Elements version of hinclude.js (by Mark Nottingham, 2006) Difference: interface and transitive includes HTTP/2 → Bundles multiple xhr requests into one Both support refresh()
  • 26. ESI (server) + SEO + JS/CSS in responses works as usual + Initial performance + Cross-domain requests - Extra infrastructure investment - Dev perspective (+ i.e. nodesi) - No streamed responses ⇒ blocking - Performance sensitive (+ timeouts) - No header forwarding (+ configuration) Server transclusion vs client transclusion h-include (client) - No SEO - No loading of JS/CSS in responses - Delay before xhr requests arrive - No cross-domain requests (unless CORS) - If no initial width/height, page will “jump” + No extra infrastructure investment + No extra dev setup + Async ⇒ non-blocking + Responses are rendered when they arrive + Headers work as usual in browsers
  • 27. ESI and h-include together (1) // Refresh-only h-include var proto = Object.create(HIncludeElement.prototype); proto.attachedCallback = function() { /* do nothing */ }; document.registerElement('h-include-refresh-only', { prototype: proto, }); ⇒ <h-include-refresh-only src="...">REFRESHABLE CONTENT HERE</h-include-refresh-only> h-include-refresh-only ⇒
  • 28. ESI and h-include together (2) // Lazy-loading with hunt.js window.addEventListener('load', function() { // For these elements... hunt(document.getElementsByTagName('h-include-refresh-only'), { // ...when they’re almost in the viewport... offset: 400, // ...load them! in: function() { this.refresh(); }, }); });
  • 29. Constraints (need to support) Continuous delivery Decentralized governance Good performance on mobile devices Rules for integration Transclude server-side resources Microservice Websites
  • 31. Shopping cart HTML, check! But, what about... Additional client-side behavior? (JavaScript) Design? (CSS)
  • 32. How to import service dependencies Still need cache busting (i.e. /retail/shopping-cart/scripts-aef419.js) Server-side transclusion works well here Client-side transclusion require either 1) HTTP redirects, or 2) “loaders” like little-loader for JS and loadCSS for CSS. Both options are less performant than using server-side transclusion, because of extra client/server roundtrips.
  • 33. <head> ... <!-- Include shopping cart resources (cache-busting-as-a-service) --> <esi:include src="/retail/shopping-cart/resources/" /> <!-- (scripts go in head too, if defer attribute is used) --> ... </head> <body> ... <-- Include the shopping cart component --> <esi:include src="/retail/shopping-cart/" /> ... </body> Load dependencies (before transclusion) http://caniuse.com/#feat=script-defer, https://www.html5rocks.com/en/tutorials/speed/script-loading/
  • 34. <head> ... <!-- Include shopping cart resources (cache-busting-as-a-service) --> <link rel="stylesheet" src="/retail/shopping-cart/style-ffc864.css" /> <script defer src="/retail/shopping-cart/scripts-aef419.js"></script> <!-- (scripts go in head too, if defer attribute is used) --> ... </head> <body> ... <-- Include the shopping cart component --> <div class="shopping-cart">Hello, shopping cart</div> ... </body> Load dependencies (after transclusion)
  • 35. Client-side dependencies: JavaScript No assumptions of consuming services’ client-side dependencies ⇒ Vanilla JS + polyfills (neither are “free”, so use both with care) Custom Elements simplifies the lifecycle of components https://github.com/WebReflection/document-register-element (5 KB)
  • 36. Client-side dependencies: CSS Disclaimer: I’m not a CSS expert Large-scale CSS development is hard (but what’s the alternative?) Styleguide Namespacing/components/responsive/flexible Good news: others have this problem too (i.e. “multi-team SPAs”) Small global dependency for resets and typography (optional)
  • 37. Constraints (need to support) Continuous delivery Decentralized governance Good performance on mobile devices Rules for integration Transclude server-side resources No global client-side dependencies Microservice Websites
  • 39. Services should have their own frontend! Frontend Frontend FrontendFrontend Integration: Transclusion
  • 40. Constraints (need to support) Continuous delivery Decentralized governance (otherwise: “occasional” rewrites) Good performance on mobile devices Rules for integration (free to use JS frameworks internally, but not for exported fragments) Transclude server-side resources No global client-side dependencies Microservice Websites
  • 41. Further resources Microservice Websites, Gustaf Nilsson Kotte Microservices, James Lewis & Martin Fowler Self-Contained Systems, Stefan Tilkov et al. Architecture Without an End State, Michael Nygard JavaScript Start-up Performance, Addi Osmani Also, this is a great book: I’ll happily chat on twitter: @gustaf_nk