Coder Social home page Coder Social logo

lateefj / shylock Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 1.0 82 KB

Better Distributed System Interfaces With Quality Of Service

License: BSD 2-Clause "Simplified" License

Go 94.38% Makefile 1.62% Ruby 0.32% Shell 1.25% Python 2.43%
etcd fuse go golang kafka redis

shylock's People

Contributors

lateefj avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

nrlhj

shylock's Issues

Redis read timeout

When reading from a redis MQ there is a read timeout at around 60 seconds.

Docker volume support

Something that can provide a bridge between the generic interface and the docker volume interface. This exists to support #32.

Integration Manager

There needs to be something that all the integration are registered with. The main goal it to keep track of all the integration that are registered so they can be used when needed. This should also manage all the instances that have been created and mounted.

  • List all integrations
  • Register an integration
  • Mount with a given mount point
  • Unmount a given mount point

Given a path find the matching Key in the IOC

Given a path find a matching key / IOC instance. This needs to be a fast search that can quickly find the matching X bytes.
How do we handle any paths that don't have a match? Should there be a default?

Plugin for handling message overflow

Based on a set of strategies:

  • Drop
  • Block
  • Custom Handler

Provide mechanism for being able to the stream form backing up based on message volumes.

Write QOS manifesto

The big picture is that with SAAS is the each customer is renting some portion of the service. Mostly the challenge is providing quality of service (QOS) per customer. With shared resources like databases each customer QOS will need a slice of query time. When the number of concurrent customers is low this is not so much of a problem. As the number of customers and size of data gets larger it becomes harder and harder to share resources. Harder usually means slower or more complex. In an ideal case we would create a way to isolated storage for each customer (or device, key ect). Practically speaking we take a single data store and try to figure out way to keep individual customers for consuming to much of the resources. As data sets (tables) become large it is increasingly difficult because every query has to traverse all the data to filter a specific isolation group (customer) data.

Document kafka usage

Write why kafka is a good POC.

  • Streams are just pipes or endless pseudo files
  • Kafka Partition in that each partition is a file
  • Kafka cluster consumer is really a load balancer
  • How QOS would work in Kafka

QOS Manager

If QOS is enabled when an integration is mounted this should get used to set limits on read / write volumes. It should be provided for #31 on Put / Get calls.

Add OPS to configuration file

Need to be able to configure operation per X in the configuration file. Parse the file into a data structure that is thread safe.

Plugin support for key lookups

Need to support both types of message types:

  1. Keyed Messages
  2. Messages

That return a key for IOC. This plugin would be configured by an environment variable.

Fuse & Docker Interface for Message Queue & Key Value Store

The current POC uses fuse only. Docker has a volume plugin system. This boils down to implementing the Driver interface.
For a message queue this translates into something closer to:

type MQ interface {
  Mount(config map[string]string) error
  Unmount() error
  List(path string) ([]string, error)
  Open() error
  Get() (header, body []byte, error)
  Put(header, body []byte) error
}

type KV interface {
  Mount(config map[string]string) error
  Unmount() error
  List(path string) ([]string, error)
  Get(path string) ([]byte, error)
  Put(path string, body []byte) error
}

As well there needs to be a Register function ex:

type FS interface {
  RegisterMQ(mountPoint, type, description string, config map[string]string, imp MQ) 
  RegisterKV(mountPoint, type, description string, config map[string]string, imp KV) 
}

REST API for IOC Configuration

Listen on a Port number and provide an API for basic configuration.

  1. Add a key, read, write and unit
  2. Delete based on key
  3. Change a keys values

Document etcd usage

Write up examples on how to mount etcd.

  • Be able to mount it in read only mode and copy files.
  • Write files examples
  • Example on generating configuration from etcd files

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.