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

Breaking the Monolith

Stefan Tilkov
September 11, 2013

Breaking the Monolith

We'll question the initial architecture decisions in building large systems, and discuss how to approach design differently. Allow for diversity while maintaining integrity, and avoid falling into the trap of making technology choices with too much rigor.

In any system of significant size, the same problem occurs again and again: What starts out as a light-weight, modern, efficient development effort using the technology of the day – be it Java and Java EE or Spring, Microsoft .NET, Ruby on Rails or any other of the well-known development stacks – ends up as a hard to change, monolithic, maintenance-intensive behemoth that everybody wants to get away from. But what are the core reason for this recurring pattern? In this session, we will discuss how and why things always seem to end up this way, and what strategies we can use to avoid this from the start.

Stefan Tilkov

September 11, 2013
Tweet

More Decks by Stefan Tilkov

Other Decks in Technology

Transcript

  1. Size Modularization 1-50 LOC single file 50-500 LOC few files,

    few functions 500-1000 LOC Library, class hierarchy 1000-2000 LOC Framework + application >2000 LOC multiple applications
  2. System characteristics Separate (redundant) persistence Internal, separate logic Domain models

    & implementation strategies Separate UI Separate development & evolution Limited interaction with other systems Autonomous deployment and operations
  3. Separate, runnable process Accessible via standard ports & protocols Shared-nothing

    model Horizontal scaling Fast startup & recovery System characteristics
  4. Be strict about your macro architecture rules, but allow for

    many degrees of freedom on the micro level
  5. Necessary Rules & Guidelines Cross-system System-internal Responsibilities Programming languages UI

    integration Development tools Communication protocols Frameworks Data formats Process/Workflow control Redundant data Persistence BI interfaces Design patterns Logging, Monitoring Coding guidelines
  6. Browser HTML Page Backend 1 UI 1 UI 2 Server-side

    integration Backend 2 Frontend Server Examples: ESI-Caches SSI Portal Server
  7. Browser HTML Page Backend 1 UI 1 UI 2 Client-side

    integration Backend 2 Examples: AJAX Proprietary Frameworks
  8. Browser HTML Page 1 Links Backend 1 Backend 2 Asset

    Server HTML Page 2 CSS <<creates>> <<creates>>
  9. Backend 1 Backend 2 Auth-Provider Browser Login Credentials Ticket Validation

    Request + Ticket Request + Ticket Algorithmic Validation
  10. Cross-system Responsibilities UI integration Communication protocols Data formats Redundant data

    BI interfaces Logging, Monitoring Product Admin OrderMgmt Catalog Inventory Mgmt Data Export Billing Architecture Governance
  11. System characteristics Separate (redundant) persistence Internal, separate logic Domain models

    & implementation strategies Separate UI Separate development & evolution Limited interaction with other systems Autonomous deployment and operations
  12. Assumptions High business value Very high cost of change Very

    slow “time to market” Huge backlog of feature requests Problem awareness Strong management support
  13. Close for change Enable integrateability (auth/auth, navigation) Create new system

    for new features Copy & isolate Integrate and/or replace part
  14. Think about the systems that make up your system Separate

    micro and macro architectures Be aware of changing quality goals Strike a balance between control and decentralization Summary
  15. Thank you! Questions? Comments? Stefan Tilkov, @stilkov [email protected] http://www.innoq.com/blog/st/ Phone:

    +49 170 471 2625 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 Robert-Bosch-Straße 7 64293 Darmstadt Germany Phone: +49 2173 3366-0 Radlkoferstraße 2 D-81373 München Germany Telefon +49 (0) 89 741185-270