-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path404.html
More file actions
1 lines (1 loc) · 26.3 KB
/
404.html
File metadata and controls
1 lines (1 loc) · 26.3 KB
1
<!doctype html><html class="md:text-[130%] scroll-smooth text-[115%]" lang="en"><head><meta charset="UTF-8"><meta content="width=device-width,initial-scale=1" name="viewport"><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin=""><title>Distributed Application Architecture Patterns | Distributed Application Architecture Patterns</title><meta content="Software patterns and their visualisations are powerful learning tools. However, the existing literature on distributed application architecture patterns is often fragmented and incomplete, presenting an unnecessarily steep learning curve. This thesis proposes a methodology for identifying these patterns based on the current literature. It applies it to develop a structured online catalogue of the most prevalent patterns in the field, their applications and disadvantages, featuring accessible and consistent visualisations and illustrative examples." name="description"><meta content="Juraj Fiala" name="author"><link href="/daap/style.css" rel="stylesheet"><link href="/daap/favicon-96x96.png" rel="icon" sizes="96x96" type="image/png"><link href="/daap/favicon.svg" rel="icon" type="image/svg+xml"><link href="/daap/favicon.ico" rel="shortcut icon"><link href="/daap/apple-touch-icon.png" rel="apple-touch-icon" sizes="180x180"><link href="/daap/site.webmanifest" rel="manifest"><script defer="" src="//instant.page/5.2.0" integrity="sha384-jnZyxPjiipYXnSU0ygqeac2q7CVYMbh84q0uHVRRxEtvFPiQYbXWUorga2aqZJ0z" type="module"></script><script defer="" src="https://a.welkam.sk/js/script.js" data-domain="jurf.github.io/daap"></script></head><body class="flex flex-col items-center text-base dark:bg-dark dark:text-white-dark font-sans leading-[1.44] oldstyle-nums proportional-nums"><header class="w-full dark:bg-grey-dark bg-grey md:hidden p-4 text-balance"><a href="/daap/" class="font-sans decoration-3 font-bold hover:underline"><h1>Distributed Application Architecture Patterns</h1></a></header><div class="w-full flex-col flex md:flex-row md:justify-between min-h-screen"><div class="lg:hidden w:64 xl:block"></div><main class="flex flex-col items-center content-style flex-1 mb-36 md:px-8 px-4"><h1><span class="header-section-number">404</span> Page not found</h1><img alt="404" src="/daap/img/404-min.svg" title="404"></main><aside class="w-full dark:bg-black bg-grey-lightest md:w-64 text-sm xl:w-96"><nav class="px-4 md:max-h-screen md:overflow-y-auto py-12 sticky top-0"><h1 class="dark:text-white font-bold leading-tight text-base"><a href="/daap/">Distributed Application Architecture Patterns</a></h1><p class="font-serif italic leading-tight">An unopinionated catalogue of the status quo</p><search class="mb-2 md:col-span-2 mt-4"><form action="https://duckduckgo.com/" class="flex flex-row" id="ddgSearch" method="get"><input name="sites" type="hidden" value="jurf.github.io/daap/"> <input name="q" type="text" aria-label="Search jurf.github.io/daap/ on DuckDuckGo" class="w-full dark:bg-black border-grey-dark border-s-2 border-y-2 dark:text-white px-2 py-1 rounded-s-lg" placeholder="Search…" required=""> <button class="button rounded-s-none" type="submit"><span class="button-text">Search</span></button></form></search><div class="sidebar"><details><summary class="chapter-title"><h2><a href="/daap/methodology/">Methodology</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/methodology/scope-of-this-work/">Scope of this work</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/methodology/existing-resources/">Existing resources</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/methodology/selection-process/">Selection process</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/methodology/pattern-construction/">Pattern construction</a></h3></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/design-and-implementation/">Design and implementation</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/design-and-implementation/inspiration/">Inspiration</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/design-and-implementation/visual-style/">Visual style</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/design-and-implementation/technologies/">Technologies</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/design-and-implementation/visual-language/">Visual language</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/design-and-implementation/design-process/">Design process</a></h3></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/overview/">Overview</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/overview/prerequisites/">Prerequisites</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/overview/pattern-categories/">Pattern categories</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/overview/conventions-used/">Conventions used</a></h3></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/overview/example-application/">Example application</a></h3></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/communication-patterns/">Communication Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/communication-patterns/gateway-routing/">Gateway Routing</a></h3><p class="pattern-subtitle"><em>Abstract service locations from the clients</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/communication-patterns/publisher-subscriber/">Publisher–Subscriber (Pub–Sub, Topics)</a></h3><p class="pattern-subtitle"><em>Asynchronous one-to-many communication</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/communication-patterns/asynchronous-request-reply/">Asynchronous Request–Reply</a></h3><p class="pattern-subtitle"><em>Asynchronous two-way communication</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/decomposition-patterns/">Decomposition Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/decomposition-patterns/sidecar/">Sidecar</a></h3><p class="pattern-subtitle"><em>Language-agnostic, locally-running supporting components</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/decomposition-patterns/ambassador/">Ambassador</a></h3><p class="pattern-subtitle"><em>Handle network communication on behalf of a service</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/decomposition-patterns/offload-to-gateway/">Offload to Gateway</a></h3><p class="pattern-subtitle"><em>Move common functionality to a gateway to offload backend services</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/decomposition-patterns/backend-for-frontend/">Backend for Frontend (BFF)</a></h3><p class="pattern-subtitle"><em>Reduce backend complexity by specialising for each frontend</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/scalability-patterns/">Scalability Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/scalability-patterns/competing-consumers-load-balancer/">Competing Consumers & Load Balancer</a></h3><p class="pattern-subtitle"><em>Continuous parallel request processing</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/scalability-patterns/partitioning/">Partitioning (Sharding)</a></h3><p class="pattern-subtitle"><em>Scale out by separating tasks or data into logical partitions</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/scalability-patterns/scatter-gather/">Scatter–Gather</a></h3><p class="pattern-subtitle"><em>Asynchronously distribute workloads and aggregate results</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/scalability-patterns/externalised-configuration/">Externalised Configuration</a></h3><p class="pattern-subtitle"><em>Centralised configuration management</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/resilience-and-reliability-patterns/">Resilience and Reliability Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/bulkheads/">Bulkheads</a></h3><p class="pattern-subtitle"><em>Use logical partitions to isolate failures</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/queue-based-load-leveling/">Queue-Based Load Leveling</a></h3><p class="pattern-subtitle"><em>Use a messaging queue to manage and cope with peaks in demand</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/retry/">Retry</a></h3><p class="pattern-subtitle"><em>Do not fail because of transient errors</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/health-monitoring/">Health Monitoring</a></h3><p class="pattern-subtitle"><em>Proactively check and react to service failures</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/rate-limiting/">Rate Limiting</a></h3><p class="pattern-subtitle"><em>Control the rate of incoming requests to prevent overload or starvation</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/leader-and-followers/">Leader and Followers</a></h3><p class="pattern-subtitle"><em>Decentrally appoint a replaceable group leader</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/performance-and-latency-patterns/">Performance and Latency Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/circuit-breaker/">Circuit Breaker</a></h3><p class="pattern-subtitle"><em>Isolate failure with controlled recovery</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/colocate/">Colocate</a></h3><p class="pattern-subtitle"><em>Improve network reliability by decreasing the distance between services with high coupling</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/aggregating-gateway/">Aggregating Gateway</a></h3><p class="pattern-subtitle"><em>Aggregate multiple service requests into a single client response</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/claim-check/">Claim Check</a></h3><p class="pattern-subtitle"><em>Reduce message sizes by storing large payloads externally</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/command-and-query-responsibility-segregation/">Command and Query Responsibility Segregation (CQRS)</a></h3><p class="pattern-subtitle"><em>Isolate data store reads and writes to prevent contention</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/security-patterns/">Security Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/security-patterns/identity-provider-federated-identity/">Identity provider & Federated Identity</a></h3><p class="pattern-subtitle"><em>Centralise authentication to reduce the attack surface</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/security-patterns/gatekeeper/">Gatekeeper (Service Firewall)</a></h3><p class="pattern-subtitle"><em>Protect services by validating and sanitising incoming requests in a limited environment</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/consistency-patterns/">Consistency Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/consistency-patterns/transaction-based-processor/">Transaction-Based Processor</a></h3><p class="pattern-subtitle"><em>Use transactions to encapsulate atomic processes</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/consistency-patterns/transactional-outbox/">Transactional Outbox</a></h3><p class="pattern-subtitle"><em>Atomically send a message and update the database</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/consistency-patterns/saga/">Saga</a></h3><p class="pattern-subtitle"><em>Sacrifice isolation for increased availability during a distributed transaction</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/consistency-patterns/choreography-based-sagas/">Choreography-Based Sagas</a></h3><p class="pattern-subtitle"><em>Distribute responsibility for a saga across participating services</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/consistency-patterns/orchestration-based-sagas/">Orchestration-Based Sagas</a></h3><p class="pattern-subtitle"><em>Centralise responsibility for a saga in a single service</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/consistency-patterns/event-sourcing/">Event Sourcing</a></h3><p class="pattern-subtitle"><em>Store data as a sequence of changes to preserve history</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/migration-and-compatibility-patterns/">Migration and Compatibility Patterns</a></h2></summary><hgroup><h3 class="pattern-title"><a href="/daap/migration-and-compatibility-patterns/anti-corruption-layer/">Anti-Corruption Layer (ACL)</a></h3><p class="pattern-subtitle"><em>Mediate between modern and legacy systems</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/migration-and-compatibility-patterns/incremental-replacement/">Incremental Replacement (Strangler Fig)</a></h3><p class="pattern-subtitle"><em>Replace a legacy system step-by-step</em></p></hgroup><hgroup><h3 class="pattern-title"><a href="/daap/migration-and-compatibility-patterns/messaging-bridge/">Messaging Bridge</a></h3><p class="pattern-subtitle"><em>Connect two services with incompatible messaging middleware</em></p></hgroup></details><details><summary class="chapter-title"><h2><a href="/daap/bibliography/">Bibliography</a></h2></summary></details></div></nav></aside></div><footer class="flex flex-col bg-black items-stretch self-stretch text-sm text-white"><div class="w-full flex-col items-center bg-green-dark dark:bg-grey-dark dark:text-white gap-12 hidden md:flex p-8 text-black"><nav class="gap-8 grid max-w-(--breakpoint-xl) md:grid-cols-3 toc"><h1><a href="/daap/" class="leading-none text-xl">Distributed Application Architecture Patterns</a></h1><div><h2 class="chapter-title"><a href="/daap/methodology/">Methodology</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/methodology/scope-of-this-work/">Scope of this work</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/methodology/existing-resources/">Existing resources</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/methodology/selection-process/">Selection process</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/methodology/pattern-construction/">Pattern construction</a></h3></hgroup></div><div><h2 class="chapter-title"><a href="/daap/design-and-implementation/">Design and implementation</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/design-and-implementation/inspiration/">Inspiration</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/design-and-implementation/visual-style/">Visual style</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/design-and-implementation/technologies/">Technologies</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/design-and-implementation/visual-language/">Visual language</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/design-and-implementation/design-process/">Design process</a></h3></hgroup></div><div><h2 class="chapter-title"><a href="/daap/overview/">Overview</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/overview/prerequisites/">Prerequisites</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/overview/pattern-categories/">Pattern categories</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/overview/conventions-used/">Conventions used</a></h3></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/overview/example-application/">Example application</a></h3></hgroup></div><div><h2 class="chapter-title"><a href="/daap/communication-patterns/">Communication Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/communication-patterns/gateway-routing/">Gateway Routing</a></h3><p class="pattern-subtitle"><em>Abstract service locations from the clients</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/communication-patterns/publisher-subscriber/">Publisher–Subscriber (Pub–Sub, Topics)</a></h3><p class="pattern-subtitle"><em>Asynchronous one-to-many communication</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/communication-patterns/asynchronous-request-reply/">Asynchronous Request–Reply</a></h3><p class="pattern-subtitle"><em>Asynchronous two-way communication</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/decomposition-patterns/">Decomposition Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/decomposition-patterns/sidecar/">Sidecar</a></h3><p class="pattern-subtitle"><em>Language-agnostic, locally-running supporting components</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/decomposition-patterns/ambassador/">Ambassador</a></h3><p class="pattern-subtitle"><em>Handle network communication on behalf of a service</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/decomposition-patterns/offload-to-gateway/">Offload to Gateway</a></h3><p class="pattern-subtitle"><em>Move common functionality to a gateway to offload backend services</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/decomposition-patterns/backend-for-frontend/">Backend for Frontend (BFF)</a></h3><p class="pattern-subtitle"><em>Reduce backend complexity by specialising for each frontend</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/scalability-patterns/">Scalability Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/scalability-patterns/competing-consumers-load-balancer/">Competing Consumers & Load Balancer</a></h3><p class="pattern-subtitle"><em>Continuous parallel request processing</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/scalability-patterns/partitioning/">Partitioning (Sharding)</a></h3><p class="pattern-subtitle"><em>Scale out by separating tasks or data into logical partitions</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/scalability-patterns/scatter-gather/">Scatter–Gather</a></h3><p class="pattern-subtitle"><em>Asynchronously distribute workloads and aggregate results</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/scalability-patterns/externalised-configuration/">Externalised Configuration</a></h3><p class="pattern-subtitle"><em>Centralised configuration management</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/resilience-and-reliability-patterns/">Resilience and Reliability Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/bulkheads/">Bulkheads</a></h3><p class="pattern-subtitle"><em>Use logical partitions to isolate failures</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/queue-based-load-leveling/">Queue-Based Load Leveling</a></h3><p class="pattern-subtitle"><em>Use a messaging queue to manage and cope with peaks in demand</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/retry/">Retry</a></h3><p class="pattern-subtitle"><em>Do not fail because of transient errors</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/health-monitoring/">Health Monitoring</a></h3><p class="pattern-subtitle"><em>Proactively check and react to service failures</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/rate-limiting/">Rate Limiting</a></h3><p class="pattern-subtitle"><em>Control the rate of incoming requests to prevent overload or starvation</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/resilience-and-reliability-patterns/leader-and-followers/">Leader and Followers</a></h3><p class="pattern-subtitle"><em>Decentrally appoint a replaceable group leader</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/performance-and-latency-patterns/">Performance and Latency Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/circuit-breaker/">Circuit Breaker</a></h3><p class="pattern-subtitle"><em>Isolate failure with controlled recovery</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/colocate/">Colocate</a></h3><p class="pattern-subtitle"><em>Improve network reliability by decreasing the distance between services with high coupling</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/aggregating-gateway/">Aggregating Gateway</a></h3><p class="pattern-subtitle"><em>Aggregate multiple service requests into a single client response</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/claim-check/">Claim Check</a></h3><p class="pattern-subtitle"><em>Reduce message sizes by storing large payloads externally</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/performance-and-latency-patterns/command-and-query-responsibility-segregation/">Command and Query Responsibility Segregation (CQRS)</a></h3><p class="pattern-subtitle"><em>Isolate data store reads and writes to prevent contention</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/security-patterns/">Security Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/security-patterns/identity-provider-federated-identity/">Identity provider & Federated Identity</a></h3><p class="pattern-subtitle"><em>Centralise authentication to reduce the attack surface</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/security-patterns/gatekeeper/">Gatekeeper (Service Firewall)</a></h3><p class="pattern-subtitle"><em>Protect services by validating and sanitising incoming requests in a limited environment</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/consistency-patterns/">Consistency Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/consistency-patterns/transaction-based-processor/">Transaction-Based Processor</a></h3><p class="pattern-subtitle"><em>Use transactions to encapsulate atomic processes</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/consistency-patterns/transactional-outbox/">Transactional Outbox</a></h3><p class="pattern-subtitle"><em>Atomically send a message and update the database</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/consistency-patterns/saga/">Saga</a></h3><p class="pattern-subtitle"><em>Sacrifice isolation for increased availability during a distributed transaction</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/consistency-patterns/choreography-based-sagas/">Choreography-Based Sagas</a></h3><p class="pattern-subtitle"><em>Distribute responsibility for a saga across participating services</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/consistency-patterns/orchestration-based-sagas/">Orchestration-Based Sagas</a></h3><p class="pattern-subtitle"><em>Centralise responsibility for a saga in a single service</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/consistency-patterns/event-sourcing/">Event Sourcing</a></h3><p class="pattern-subtitle"><em>Store data as a sequence of changes to preserve history</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/migration-and-compatibility-patterns/">Migration and Compatibility Patterns</a></h2><hgroup class=""><h3 class="pattern-title"><a href="/daap/migration-and-compatibility-patterns/anti-corruption-layer/">Anti-Corruption Layer (ACL)</a></h3><p class="pattern-subtitle"><em>Mediate between modern and legacy systems</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/migration-and-compatibility-patterns/incremental-replacement/">Incremental Replacement (Strangler Fig)</a></h3><p class="pattern-subtitle"><em>Replace a legacy system step-by-step</em></p></hgroup><hgroup class=""><h3 class="pattern-title"><a href="/daap/migration-and-compatibility-patterns/messaging-bridge/">Messaging Bridge</a></h3><p class="pattern-subtitle"><em>Connect two services with incompatible messaging middleware</em></p></hgroup></div><div><h2 class="chapter-title"><a href="/daap/bibliography/">Bibliography</a></h2></div></nav></div><div class="w-full flex-col flex items-center md:p-8 p-4 text-base"><div class="w-full font-sans gap-12 grid max-w-(--breakpoint-xl) md:grid-cols-3"><div class=""><p>© 2024 <a href="https://jurf.github.io/">Juraj Fiala</a></p><p xmlns:cc="http://creativecommons.org/ns#">Licensed under <a href="https://creativecommons.org/licenses/by/4.0/?ref=chooser-v1" class="hover:no-underline" rel="license noopener noreferrer" style="display:inline-block;" target="_blank"><span class="link-underline">CC BY 4.0</span> <img alt="" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" style="height:22px!important;margin-left:3px;" class="align-baseline inline"> <img alt="" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" style="height:22px!important;margin-left:3px;" class="align-baseline inline"></a></p><p class="my-4"><a href="https://ko-fi.com/L4L4J6WSK" target="_blank"><img alt="Buy Me a Coffee at ko-fi.com" src="https://storage.ko-fi.com/cdn/kofi3.png?v=6" style="border:0px;height:36px;" border="0" height="36"></a></p></div><div><p>Created as part of a <a href="https://is.muni.cz/th/an2ta/?lang=en">master’s thesis</a> at the <a href="https://www.fi.muni.cz/index.html.en">Faculty of Informatics</a>, Masaryk University</p></div><div class="text-sm font-serif italic"><p>In memory of <a href="https://www.fi.muni.cz/app/news?feed_id=title&archive=1&id=3522&lang=en">Bára Bühnová</a>, without whose insight and guidance this project would never have been possible, but who never got to see the result</p></div></div></div></footer></body></html>