GithubHelp home page GithubHelp logo

garthmbooth / libstorage Goto Github PK

View Code? Open in Web Editor NEW

This project forked from thecodeteam/libstorage

0.0 2.0 0.0 114.59 MB

libStorage provides a portable and remotable storage plugin framework.

License: Apache License 2.0

HTML 0.94% CSS 3.03% JavaScript 0.04% Makefile 3.96% Go 82.25% C 0.50% Ruby 1.78% Shell 0.60% API Blueprint 6.90%

libstorage's Introduction

libStorage GoDoc Build Status Go Report Card codecov

libStorage provides a vendor agnostic storage orchestration model, API, and reference client and server implementations.

Overview

libStorage enables storage consumption by leveraging methods commonly available, locally and/or externally, to an operating system (OS).

The Past

The libStorage project and its architecture represents a culmination of experience gained from the project authors' building of several different storage orchestration tools. While created using different languages and targeting disparate storage platforms, all the tools were architecturally aligned and embedded functionality directly inside the tools and affected storage platforms.

This shared design goal enabled tools that natively consumed storage, sans external dependencies.

The Present

Today libStorage focuses on adding value to container runtimes and storage orchestration tools such as Docker and Mesos, however the libStorage framework is available abstractly for more general usage across:

  • Operating systems
  • Storage platforms
  • Hardware platforms
  • Virtualization platforms

The client side implementation, focused on operating system activities, has a minimal set of dependencies in order to avoid a large, runtime footprint.

Storage Orchestration Tools Today

Today there are many storage orchestration and abstraction tools relevant to to container runtimes. These tools often must be installed locally and run alongside the container runtime.

Storage Orchestration Tool Architecture Today

The solid green lines represent active communication paths. The dotted black lines represent passive paths. The orange volume represents a operating system device and volume path available to the container runtime.

libStorage Embedded Architecture

Embedding libStorage client and server components enable container runtimes to communicate directly with storage platforms, the ideal architecture. This design requires minimal operational dependencies and is still able to provide volume management for container runtimes.

libStorage Embedded Architecture

libStorage Centralized Architecture

In a centralized architecture, libStorage is hosted as a service, acting as a go-between for container runtimes and backend storage platforms.

The libStorage endpoint is advertised by a tool like REX-Ray, run from anywhere, and is responsible for all control plane operations to the storage platform along with maintaining escalated credentials for these platforms. All client based processes within the operating system are still embedded in the container runtime.

libStorage Centralized Architecture

libStorage Decentralized Architecture

Similar to the centralized architecture, this implementation design involves running a separate libStorage process alongside each container runtime, across one or several hosts.

libStorage De-Centralized Architecture

API

Central to libStorage is the HTTP/JSON API. It defines the control plane calls that occur between the client and server. While the libStorage package includes reference implementations of the client and server written using Go, both the client and server could be written using any language as long as both adhere to the published libStorage API.

Client

The libStorage client is responsible for discovering a host's instance ID and the next, available device name. The client's reference implementation is written using Go and is compatible with C++.

The design goal of the client is to be lightweight, portable, and avoid obsolescence by minimizing dependencies and focusing on deferring as much of the logic as possible to the server.

Server

The libStorage server implements the libStorage API and is responsible for coordinating requests between clients and backend orchestration packages. The server's reference implementation is also written using Go.

Model

The libStorage model defines several data structures that are easily represented using Go structs or a portable format such as JSON.

Documentation Docs

The libStorage documentation is available at libstorage.rtfd.org.

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.