mirror of https://github.com/docker/docs.git
Initial README and AUTHORS file
Signed-off-by: Solomon Hykes <solomon@docker.com>
This commit is contained in:
parent
165164ded0
commit
8c645d0236
|
@ -0,0 +1,79 @@
|
||||||
|
# Beam
|
||||||
|
|
||||||
|
## A library to break down an application into loosely coupled micro-services
|
||||||
|
|
||||||
|
Beam is a library to turn your application into a collection of loosely coupled micro-services.
|
||||||
|
It implements an ultra-lightweight hub for the different components of an application
|
||||||
|
to discover and consume each other, either in-memory or across the network.
|
||||||
|
|
||||||
|
Beam can be embedded with very little overhead by using Go channels. It
|
||||||
|
also implements an efficient http2/tls transport which can be used to
|
||||||
|
securely expose and consume any micro-service across a distributed system.
|
||||||
|
|
||||||
|
Because remote Beam sessions are regular HTTP2 over TLS sessions, they can
|
||||||
|
be used in combination with any standard proxy or authentication
|
||||||
|
middleware. This means Beam, when configured propely, can be safely exposed
|
||||||
|
on the public Internet. It can also be embedded in an existing rest API
|
||||||
|
using an http1 and websocket fallback.
|
||||||
|
|
||||||
|
## How is it different from RPC or REST?
|
||||||
|
|
||||||
|
Modern micro-services are not a great fit for classical RPC or REST
|
||||||
|
protocols because they often rely heavily on events, bi-directional
|
||||||
|
communication, stream multiplexing, and some form of data synchronization.
|
||||||
|
Sometimes these services have a component which requires raw socket access,
|
||||||
|
either for performance (file transfer, event firehose, database access) or
|
||||||
|
simply because they have their own protocol (dns, smtp, sql, ssh,
|
||||||
|
zeromq, etc). These components typically need a separate set of tools
|
||||||
|
because they are outside the scope of the REST and RPC tools. If there is
|
||||||
|
also a websocket or ServerEvents transport, those require yet another layer
|
||||||
|
of tools.
|
||||||
|
|
||||||
|
Instead of a clunky patchwork of tools, Beam implements in a single
|
||||||
|
minimalistic library all the primitives needed by modern micro-services:
|
||||||
|
|
||||||
|
* Request/response with arbitrary structured data
|
||||||
|
|
||||||
|
* Asynchronous events flowing in real-time in both directions
|
||||||
|
|
||||||
|
* Requests and responses can flow in any direction, and can be arbitrarily
|
||||||
|
nested, for example to implement a self-registering worker model
|
||||||
|
|
||||||
|
* Any request or response can include any number of streams, multiplexed in
|
||||||
|
both directions on the same session.
|
||||||
|
|
||||||
|
* Any message serialization format can be plugged in: json, msgpack, xml,
|
||||||
|
protobuf.
|
||||||
|
|
||||||
|
* As an optional convenience a minimalist key-value format is implemented.
|
||||||
|
It is designed to be extremely fast to serialize and parse, dead-simple to
|
||||||
|
implement, and suitable for both one-time data copy, file storage, and
|
||||||
|
real-time synchronization.
|
||||||
|
|
||||||
|
* Raw file descriptors can be "attached" to any message, and passed under
|
||||||
|
the hood using the best method available to each transport. The Go channel
|
||||||
|
transport just passes os.File pointers around. The unix socket transport
|
||||||
|
uses fd passing which makes it suitable for high-performance IPC. The
|
||||||
|
tcp transport uses dedicated http2 streams. And as a bonus extension, a
|
||||||
|
built-in tcp gateway can be used to proxy raw network sockets without
|
||||||
|
extra overhead. That means Beam services can be used as smart gateways to a
|
||||||
|
sql database, ssh or file transfer service, with unified auth, discovery
|
||||||
|
and tooling and without performance penalty.
|
||||||
|
|
||||||
|
## Design philosophy
|
||||||
|
|
||||||
|
An explicit goal of Beam is simplicity of implementation and clarity of
|
||||||
|
spec. Porting it to any language should be as effortless as humanly
|
||||||
|
possible.
|
||||||
|
|
||||||
|
## Creators
|
||||||
|
|
||||||
|
**Solomon Hykes**
|
||||||
|
|
||||||
|
- <http://twitter.com/solomonstre>
|
||||||
|
- <http://github.com/shykes>
|
||||||
|
|
||||||
|
## Copyright and license
|
||||||
|
|
||||||
|
Code and documentation copyright 2013-2014 Docker, inc. Code released under the Apache 2.0 license.
|
||||||
|
Docs released under Creative commons.
|
Loading…
Reference in New Issue