Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2019-01-21-WebArch--OOP.pdf

 2019-01-21-WebArch--OOP.pdf

A presentation about modularity, architecture and organization patterns, applied to the development of large web apps

Stefan Tilkov

January 21, 2019
Tweet

More Decks by Stefan Tilkov

Other Decks in Technology

Transcript

  1. Scaling Dimensions Logic Load written in
 a day depends on


    German tax law a dozen
 users half
 of the
 planet Netflix Twitter Insurance
 Policy Management Facebook Amazon Random CMS
  2. Conway’s Law: Organization → Architecture “Organizations which design systems are

    constrained to produce systems which are copies of the communication structures of these organizations.”
 – M.E. Conway
  3. Example: Product Detail Page • Core product data • Prose

    description • Images • Reviews • Related content Orchestration →μSOA
  4. Pattern: μSOA (Microservice-SOA) • Small, self-hosted • Communicating synchronously •

    Cascaded/streaming • Containerized Description: As seen on: • Netflix • Twitter • Gilt
  5. Pattern: μSOA (Microservice-SOA) • Close collaboration – common goal •

    Need for resilience/stability patterns for invocations • High cost of coordination (versioning, compatibility, …) • High infrastructure demand • Often combined with parallel/streaming approach • Well suited to environments with extreme scalability requirements Consequences:
  6. Example: Logistics Application • Order management • Shipping • Route

    planning • Invoicing Frontend →DDDD Event Bus/Infrastructure
  7. Pattern: DDDD (Distributed Domain-driven Design) • Small, self-hosted • Bounded

    contexts • Redundant data/CQRS • Business events • Containerized Description: As seen on: • (undisclosed)
  8. Pattern: DDDD (Distributed Domain-driven Design) • Loose coupling between context

    • Acknowledges separate evolution of contexts • Asynchronicity increases stability • Well-suited for to support parallel development Consequences:
  9. Example: E-Commerce Site • Register & maintain account • Browse

    catalog • See product details • Checkout • Track status →SCS
  10. Pattern: SCS (Self-contained Systems) • Self-contained, autonomous • Including UI

    + DB • Possibly composed of smaller microservices Description: As seen on: • Amazon • Groupon • Otto.de • https://scs-architecture.org
  11. Pattern: SCS (Self-contained Systems) • Larger, independent systems,
 including data

    + UI (if present) • Able to autonomously serve requests • Light-weight integration, ideally via front-end • No extra infrastructure needed • Well suited if goal is decoupling of development teams Consequences:
  12. Benefits of Monoliths • Highly cohesive, tightly integrated, single unit

    of deployment • Standard application with internal modularity • No artificially introduced distribution • Single unit of development and evolution • Easy to refactor • Homogeneous technical choices • Ideally suited for single small team
  13. “Really remote” vs. “almost local” μS μS μS μS μS

    μS Inside DC;
 Latency: μs Frontend Typically Internet;
 Latency: ms
  14. “Backend for Frontend” μS μS μS μS μS μS BFF

    Frontend http://samnewman.io/patterns/architectural/bff/
  15. Multiple BFFs for different clients μS μS μS μS μS

    μS BFF Frontend BFF Frontend BFF Frontend Imagine more arrows here
  16. Build services that actually do something Process Flow Presentation Domain

    Logic Data JDBC in disguise Useful and specific Re- usable and low- level
  17. μS μS μS μS μS Frontend μS Frontend + services

    in a backend architect’s mind μS μS μS μS μS Frontend μS Frontend + services in the real world
  18. Ideal world UI componentization μS μS μS μS μS μS

    FE μS μS FE Not all μS need a UI “Vertical”
 Responsibilit
  19. Backend Platform More than one platform μS μS μS μS

    μS μS Frontend Platform FE μS μS FE
  20. Rendered on Client Rendered on Server Desktop Mobile Set top

    Web App Native App Frontend, we’ve got frontends Frontend Hybrid
  21. How to get away with “just” the Web • Mobile

    first • Responsive design • Progressive enhancement • Shared assets • Pull vs. push • Sacrifice (some) efficiency Small frontends, loosely coupled
  22. Rendered on Client Rendered on Server Desktop Mobile Set top

    Web App Native App What about other approaches? Frontend Hybrid ✔ ✔ ✔ ?
  23. Native frontends resemble server monoliths Goals: • As few assumptions

    as possible • No implementation dependencies • Small interface surface • Based on standards • Parallel development • Independent deployment • Autonomous operations Constraint: • Only internal modularization Solution (sort of): • Organizational structure • Platform interfaces • Release trains • Discipline
  24. Rendered on Client Rendered on Server Desktop Mobile Set top

    Web App Native App What about other “modern” web apps? Frontend Hybrid ✔ ✔ ✔ (✔) ?
  25. “Web service”1) • Use HTTP as transport • Ignore verbs

    • Ignores URIs • Expose single “endpoint” • Fails to embrace the Web 1) in the SOAP/WSDL sense “Web app”2) > Uses browser as runtime > Ignores forward, back, refresh > Does not support linking > Exposes monolithic “app” > Fails to embrace the browser 2) built as a careless SPA
  26. HTML & Hypermedia • In REST, servers expose a hypermedia

    format • Option 1: Just use HTML • Option 2: Just invent your own JSON-based, incomplete clone • Clients need to be RESTful, too • Option 1: Use the browser • Option 2: Invent your own, JS-based, buggy, incomplete implementation
  27. $('.multiselect', context).each(function() {
 $(this).multiselect({
 selectedList: 2,
 checkAllText: "Alle",
 uncheckAllText: "Keinen"


    }).multiselectfilter({label:"",
 width:"200px"});
 }); <div class="filter-column">
 <label for="project">Project</label>
 <select class="multiselect" id="project"
 name="project" size="5" multiple>
 <option>DISCOVER</option>
 <option>IMPROVE</option>
 <option >MAGENTA</option>
 <option>ROCA</option>
 <option>ROCKET</option>
 </select>
 </div>
  28. Why choose a monolith if you don’t have to? Any

    sufficiently complicated JavaScript client application contains an ad hoc, informally- specified, bug-ridden, slow implementation of half a browser. (Me, with apologies to Phillip Greenspun)
  29. If you’re a fan of single page apps,
 at least

    build more than one • Don’t reinvent browser integration features • Accept some inefficiency • Trade-off for framework independence • Avoid modularity à la Java EE, OSGi etc.
  30. Style Guide Challenges • Possible centralization & resulting bottlenecks •

    (Semi-)manual workflow • Copy/paste & resulting redundancy & overhead
  31. Christian Albrecht [email protected] Phone: +49 171 5514847 innoQ Deutschland GmbH

    Krischerstr. 100 40789 Monheim am Rhein Germany Phone: +49 2173 3366-0 innoQ Schweiz GmbH Gewerbestr. 11 CH-6330 Cham Switzerland Phone: +41 41 743 0116 www.innoq.com Ohlauer Straße 43 10999 Berlin Germany Phone: +49 2173 3366-0 Ludwigstr. 180E 63067 Offenbach Germany Phone: +49 2173 3366-0 Kreuzstraße 16
 80331 München Germany Phone: +49 2173 3366-0 @stilkov That’s all I have.
 Thanks for listening! Questions? Stefan Tilkov @stilkov
 [email protected]
 Phone: +49 170 471 2625
  32. www.innoq.com OFFICES Monheim Berlin Offenbach Munich Hamburg Zurich FACTS ~150

    employees Privately owned Vendor-independent SERVICES Strategy & technology consulting Digital business models Software architecture & development Digital platforms & infrastructures Knowledge transfer, coaching & trainings CLIENTS Finance Telecommunications Logistics E-commerce Fortune 500 SMBs Startups