joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
joaop21 edited this page Mar 16, 2021 · 6 revisions

Welcome to SpringRaft's Wiki

This wiki aims to clarify important parts of the project, such as the design phase, the various types of deployment, the various coded examples, and also the load testing done against the created solutions.

  1. What Is Consensus?
  2. What Is Raft?
  3. What Is SpringRaft?
  4. What Is SpringRaft For?
  5. What Problem Does SpringRaft Solve?
  6. What Design Principles Underlie SpringRaft?
  7. How Does SpringRaft Accomplish Its Goals?

What Is Consensus?

Agreement problems are at the core of any distributed fault-tolerant system. A system may have to reach agreement in various situations, for example when it has to choose a leader, or when it has to approve or abort a distributed transaction, etc. The various problems involving distributed agreement can be reduced to an abstract formulation known as the consensus problem. Given a finite set of processes, which initially propose a value, an algorithm that solves the consensus problem on that same value should satisfy the following properties:

  • Termination: Every correct process eventually decides;
  • Validity: The decision is on a voted value;
  • Agreement: No two processes decide differently;

In a system without faults the consensus problem is easily solved. However, in the presence of faults and depending on the assumed fault model, solving this problem can be very difficult or even impossible. This impossibility was demonstrated by Fischer, Lynch and Paterson in 1985, where they proved that it is impossible to solve the consensus problem using a deterministic algorithm on an asynchronous system in a crash-stop fault model, even with reliable channels.

What Is Raft?

Raft is a consensus algorithm that is designed to be easy to understand. It's equivalent to Paxos in fault-tolerance and performance. The difference is that it's decomposed into relatively independent subproblems, and it cleanly addresses all major pieces needed for practical systems. To solve the consensus problem mentioned above, Raft uses some synchronous assumptions, such as time barriers for receiving communications.

Superficially, Raft solves the consensus by electing a leader and assigning it all the responsibility of managing the replicated log, greatly simplifying the process, because the data flows only from the leader to the other processes without being consulted. The leader accepts log entries from clients, replicates them to the other processes and informs them when it is safe to apply the received changes to their state machine.

What Is SpringRaft?

SpringRaft is a dissertation project, which consists in the Raft's consensus algorithm implementation, both in Servlet and Reactive stacks. This implementations should be modular, so that they can be expanded, and should be generic, so that they can be reused in different use cases.

What Is SpringRaft For?

The final purpose of this project is the comparison of the 2 stacks, when applied in this case.

What Problem Does SpringRaft Solve?

What Design Principles Underlie SpringRaft?

How Does SpringRaft Accomplish Its Goals?

Learn more about How It Works and How To Use.