Giter Site home page Giter Site logo

cxz / plane Goto Github PK

View Code? Open in Web Editor NEW

This project forked from drifting-in-space/plane

0.0 1.0 0.0 2.1 MB

Session backend orchestrator for ambitious browser-based apps.

Home Page: https://plane.dev

License: MIT License

Shell 0.56% JavaScript 0.29% Rust 98.43% Dockerfile 0.72%

plane's Introduction

Tests Chat on Discord

Plane is a container orchestrator for ambitious browser-based applications. Plane implements an architecture we call session backends.

tl;dr: Plane lets you spin up instances of any HTTP-speaking container via an API. Plane assigns a unique subdomain to each instance, through which it proxies HTTPS/WebSocket connections. When all inbound connections to a container are dropped, Plane shuts it down. Plane is MIT-licensed and written in Rust.

Plane.Demo.mov

Documentation

Architecture

Plane architecture diagram.

Plane consists of two main pieces, the controller and the drone, which communicate with each other over NATS.

The controller consists of:

  • The DNS server, used to manage routing backend-bound traffic to the right drone, as well as to handle ACME challenges.
  • The scheduler, which listens for backend requests and picks an available drone to run them on.

The drone consists of:

  • An agent, which receives instructions from the scheduler to run backends and coordinates with the Docker daemon to run them.
  • A proxy, which routes incoming HTTPS traffic to the appropriate backend.
  • A certificate refresher, which on launch (and then periodically) refreshes the proxy's HTTPS certificate to ensure its continued validity.

Running Tests

Tests consist of unit tests (which are located alongside the source) and integration tests located in dev/tests. Both kinds of tests are run if you run cargo test in the root directory.

Integration tests use Docker to spin up dependent services, so require a running install of Docker and to be run as a user with access to /var/run/docker.sock. They are intended to run on Linux and may not work on other systems.

Integration tests can be slow because they simulate entire workload lifecycles. This is compounded by the fact that the default Rust test runner only runs tests in parallel if they are in the same test file. For faster test runs, we recommend using cargo-nextest as follows:

cargo install cargo-nextest
cargo nextest run

plane's People

Contributors

deepsourcebot avatar lalo avatar paulgb avatar pretentious7 avatar rolyatmax avatar

Watchers

 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.