Giter Site home page Giter Site logo

josehu07 / copilot Goto Github PK

View Code? Open in Web Editor NEW

This project forked from princeton-sns/copilot

0.0 0.0 0.0 283 KB

Guanzhou's Fork of the Copilot Replication Protocol

License: Other

Shell 2.51% Python 0.26% Go 96.86% Assembly 0.02% Awk 0.02% Makefile 0.05% Roff 0.28%

copilot's Introduction

Copilot

What is Copilot?

Copilot replication is the first 1-slowdown-tolerant consensus protocol: it delivers normal latency despite the slowdown of any 1 replica.

What makes Copilot novel?

No existing consensus protocol is slowdown-tolerant: a single slow replica can sharply increase their latency. Copilot is the first 1-slowdown-tolerant consensus protocol. It avoids slowdowns using two distinguished replicas, the pilot and copilot. Its pilot and copilot both receive, order, execute, and reply to all client commands. It uses this proactive redundancy and a fast takeover mechanism that allows a fast pilot to safely complete the work of a slow pilot to provide slowdown tolerance.

It has two optimizations—ping-pong batching and null dependency elimination—that improve its performance when there are 0 and 1 slow pilots respectively. Despite its redundancy, Copilot replication's performance is competitive with existing consensus protocols when no replicas are slow. When a replica is slow, Copilot is the only consensus protocol that avoids high latencies for client commands.

How does Copilot work?

Our OSDI 2020 paper describes the motivation, design, implementation, and evaluation of Copilot.

What is Latent Copilot?

Latent Copilot, a variant of Copilot, is another design and implementation of a 1-slowdown-tolerant consensus protocol. Latent Copilot operates with one active pilot, which actively proposes commands, and one latent pilot, which proposes commands only when they have not been committed by the active pilot in a timely manner. In this way, Latent Copilot achieves an intermediate tradeoff between MultiPaxos and Copilot in terms of throughput and slowdown tolerance.

Latent Copilot has different mechanisms to determine when a pilot should switch its mode if it suspects the other pilot is continually slow or fast. To learn about the progress of the other pilot, a pilot uses additional metadata embedded in the ordering messages to learn about the status of the commands from the replicas.

For more details about Latent Copilot, please refer to Ngo's Ph.D. dissertation.

What is in this repository?

This repository contains the Go implementations of:

  • Copilot

  • Latent Copilot

  • EPaxos

  • (classic) Paxos

  • Mencius

  • Generalized Paxos

The implementations of EPaxos, MultiPaxos, Mencius, and Generalized Paxos were created by Iulian Moraru, David G. Andersen, and Michael Kaminsky as part of the EPaxos project.

The struct marshaling and unmarshaling code was generated automatically using the tool available at: https://code.google.com/p/gobin-codegen/

AUTHORS:

Khiem Ngo -- Princeton University

Siddhartha Sen -- Microsoft Research

Wyatt Lloyd -- Princeton University

copilot's People

Contributors

josehu07 avatar khiemngo avatar imoraru avatar kyunghoj avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.