Pro Yearly is on sale from $80 to $50! »

Micro Frontends - a strive for fully verticalized systems

Micro Frontends - a strive for fully verticalized systems

Devoxx Ukraine 2019 (Kyiv, Ukraine)

event: https://devoxx.org.ua/
pptx (with animations): https://drive.google.com/open?id=1POg2y9Q09sW8NTwnhsN3C8lkUsYZ97aS

E6c61f085d7aceaf97b7bd00e9195514?s=128

SQUER Solutions

November 23, 2018
Tweet

Transcript

  1. @duffleit micro frontends a strive for fully verticalized systems _

  2. @duffleit David Leitner § Technical Expert at Senacor Technologies §

    Lecturer for post diploma courses at UAS Technikum Vienna § I do a couple of things around the tech- community I‘m writing code
  3. @duffleit A definition of micro frontends The idea of micro

    frontends is to extend the concepts of micro services to the frontend world.
  4. @duffleit Sam Newman: § small and focused on one thing

    § … to be autonomous § That‘s it WHY we do them? Microservices    !  CVDD HDD/EDD 
  5. @duffleit why autonomous? Independent deployments Small interface surface Technology agnostic

    Based on standards Autonomous operations Parallel Development
  6. @duffleit „Microservices are stated as a contrast system to monoliths.“

    Where they came from
  7. @duffleit the application the database Ball of Mud Brian Foote

    Joseph Yoder
  8. @duffleit database layer the database business layer frontend layer

  9. @duffleit database layer the database business layer frontend layer

  10. @duffleit payment the database products user shipping

  11. @duffleit DB DB DB DB DB DB DB DB DB

  12. @duffleit DB DB DB DB DB DB DB DB DB

    Independent deployments Autonomous operations Technology agnostic Based on standards Parallel Development Small interface surface
  13. @duffleit

  14. @duffleit But wait, … our microservices have actual human users.

    - Stefan Tilkov
  15. @duffleit

  16. @duffleit the frontend

  17. @duffleit The frontend is … not an implementation detail, it

    is a critical part of a microservice architecture.
  18. @duffleit frontend platform backend platform Independent deployments Autonomous operations Technology

    agnostic Based on standards Parallel Development Small interface surface a frontend monolith was born a micro frontend TO THE RESCUE ! Independent deployments ! Autonomous operations ! Technology agnostic ! Based on standards ! Parallel Development ! Small interface surface
  19. @duffleit A micro frontend? …which one do you want to

    have?
  20. @duffleit ! Hyperlink Integration

  21. @duffleit Flavour #1: Hyperlink Integration frontend platform backend platform Catalogue

    Ordering Payment Shipping hyperlink hyperlink hyperlink
  22. @duffleit Flavour #1: Breaking service boundaries frontend platform backend platform

    Products Ordering Payment Shipping Dash board
  23. @duffleit Flavour #1: Backend for Frontend frontend platform backend platform

    Products Ordering Payment Shipping Dash board BFF BFF BFF BFF BFF samnewman.io/patterns/architectural/bff/
  24. @duffleit Flavour #1: Hyperlink Integration Independent deployments Autonomous operations Technology

    agnostic Parallel Development
  25. @duffleit What customers expect: 1 Company == 1 Website I

    don‘t want to maintain this UI/UX anymore. 1 Company === 1 Website
  26. @duffleit Flavour #1: Reusage Problem frontend platform backend platform Catalogue

    Ordering Payment Shipping hyperlink hyperlink hyperlink Menu Menu Menu
  27. @duffleit Flavour #1: Hyperlink Integration Independent deployments Autonomous operations Technology

    agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading
  28. @duffleit ! Build Time Integration

  29. @duffleit Flavour #2: Build Time Integration

  30. @duffleit Flavour #2: Build Time Integration BUNDLED FRONTED UI-Shared-Stuff (e.g.

    SPA-Framework, Components, Routing) Mono Repo
  31. @duffleit MonoRepo ☑ Simplifies dependency management. ☑ Allows extensive code

    sharing and reuse. package.json Shared resources (assets, components…) repository
  32. @duffleit Flavour #2: Build Time Integration Independent deployments Autonomous operations

    Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components)
  33. @duffleit ! Transclusion

  34. @duffleit Flavour #3: Transclusion BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components)

    The bundling is done by the webserver.
  35. @duffleit Flavour #3: Server Side Includes or Edge Side Includes

    <html> <body> <!--#include virtual="/header" --> <!--#include virtual="/content?route=shop" --> <!--#include virtual="/sidebar?version=new-products" --> <!--#include virtual="/footer" --> </body> </html>
  36. @duffleit Flavour #3: Transclusion Independent deployments Autonomous operations Technology agnostic

    Parallel Development A consistent UI/UX Smooth user interaction Fast loading BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components)
  37. @duffleit ! App Shell Integration

  38. @duffleit Flavour #4: App Shell Integration APP SHELL Header Footer

    The aggregation is done on the client.
  39. @duffleit Flavour #4: App Shell Integration Independent deployments Autonomous operations

    Technology agnostic Parallel Development ! A consistent UI/UX Smooth user interaction Fast loading APP SHELL Header Footer
  40. @duffleit ! Metaframework

  41. @duffleit Flavour #5: Metaframework Route-based modularisation is handled by a

    Metaframework Metaframework /catalogue /checkout
  42. @duffleit /catalogue /checkout APP SHELL Header Footer A matter of

    modularisation Hyperlink Integration App Shell Integration Metaframework
  43. @duffleit Flavour #5: Metaframework Route-based modularisation is handled by a

    Metaframework Metaframework /catalogue /checkout
  44. @duffleit • they are implemented with iframes. • or start

    using web components now. Flavour #5: Technology agnostic
  45. @duffleit Flavour #5: Metaframework Metaframework /catalogue /checkout Independent deployments Autonomous

    operations Technology agnostic Parallel Development ! A consistent UI/UX* Smooth user interaction Fast loading
  46. @duffleit „a consistent UI“ ! CDN – for static files

    " CMS – for static content # A Component Library $ for one framework (version) $ technology agnostic
  47. @duffleit Hyperlink Integration Build Time Integration Transclusion App Shell Integration

    Metaframework the agony of choice
  48. @duffleit A consultant‘s favourite words. It depends

  49. @duffleit A general decision advice Your application is big?* The

    need for smooth user interaction Build Time Integration Hyperlink Integration Strongly Independent UI/Domain Parts Complex modularisation needed Transclusion App Shell Integration Meta- Framework * an application is big enough to justify using micro frontends, if slight UI/UX differences between the two most unrelated subpages are acceptable. Yes No
  50. @duffleit Compose your perfect MIX Landing Shop Ordering hyperlink hyperlink

    APP SHELL Header Footer <!–- SSIs --> <!--#include … --> <!--#include … -->
  51. @duffleit Key-Takeaways KISS: „think twice if a frontend monolith does

    not fit your needs and start with a monolith first approach.“
  52. @duffleit Key-Takeaways „Consider the frontend as part of your microservice

    architecture – and solve UI specific problems with UI specific solutions.“
  53. @duffleit Key-Takeaways „micro frontends are not a stack or technology

    – everyone who tells you this, wants to sell you something.“
  54. @duffleit Use the right tool for the right job. @duffleit

  55. @duffleit If you liked this talk – vote for it.

    I’m David Leitner Non-Hype-Train-Activist & Enthusiastic Developer @duffleit