A tool for building distributed applications.
Clone or download
brb Merge pull request #87 from dholbach/add-getting-help-info
add information about how to get help
Latest commit 61ba455 Apr 16, 2018
Permalink
Failed to load latest commit information.
_metcd Don't compile metcd Aug 11, 2016
examples/increment-only-counter Return error from NewGossip if gossip already exists Apr 24, 2017
meshconn Ubiquitous use of mesh.Logger Apr 13, 2016
.gitignore rm examples/raft-on-mesh Mar 23, 2016
LICENSE Initial commit Jan 13, 2016
README.md add information about how to get help Apr 13, 2018
circle.yml In theory they fixed this with symlinks Apr 7, 2016
connection.go Remove unused actionChan from LocalConnection Mar 21, 2018
connection_maker.go Support IPv6 Oct 3, 2017
gossip.go Fix retval semantics for Gossiper Feb 18, 2016
gossip_channel.go Create and use Logger interface Apr 13, 2016
gossip_test.go Return error from NewGossip if gossip already exists Apr 24, 2017
lint Minor changes prompted by new lint messages Apr 25, 2017
local_peer.go Support IPv6 Oct 3, 2017
logger.go *log.Logger implements mesh.Logger Apr 13, 2016
mocks_test.go Remove all global log invocations Mar 24, 2016
overlay.go Fix EstablishedChannel() for NullOverlay Jan 18, 2018
peer.go Remove all global log invocations Mar 24, 2016
peer_name_hash.go Correct missing checkFatal function Apr 19, 2017
peer_name_hash_test.go Annotate and test stubs for all types Jan 22, 2016
peer_name_mac.go Correct missing checkFatal function Apr 19, 2017
peer_name_mac_test.go Support peer name shorthand Mar 16, 2016
peer_test.go Semimechanical renames Jan 26, 2016
peers.go Remove all global log invocations Mar 24, 2016
peers_test.go Semimechanical renames Jan 26, 2016
protocol.go Optimise struct packing Mar 21, 2018
protocol_crypto.go Manual cleanup Jan 27, 2016
protocol_crypto_test.go Annotate and test stubs for all types Jan 22, 2016
protocol_test.go Manual cleanup Jan 27, 2016
router.go Merge pull request #80 from mpalmer/ipv6 Mar 23, 2018
routes.go Manual cleanup Jan 27, 2016
routes_test.go Annotate and test stubs for all types Jan 22, 2016
status.go Panics on null overlay Jul 31, 2017
surrogate_gossiper.go Speed up duplicate checking using a hash Jan 20, 2017
surrogate_gossiper_test.go Stop surrogateGossiper forwarding gossip it's already seen Jan 17, 2017
token_bucket.go Minor changes prompted by new lint messages Apr 25, 2017
token_bucket_test.go Annotate and test stubs for all types Jan 22, 2016

README.md

mesh GoDoc Circle CI

Mesh is a tool for building distributed applications.

Mesh implements a gossip protocol that provide membership, unicast, and broadcast functionality with eventually-consistent semantics. In CAP terms, it is AP: highly-available and partition-tolerant.

Mesh works in a wide variety of network setups, including thru NAT and firewalls, and across clouds and datacenters. It works in situations where there is only partial connectivity, i.e. data is transparently routed across multiple hops when there is no direct connection between peers. It copes with partitions and partial network failure. It can be easily bootstrapped, typically only requiring knowledge of a single existing peer in the mesh to join. It has built-in shared-secret authentication and encryption. It scales to on the order of 100 peers, and has no dependencies.

Using

Mesh is currently distributed as a Go package. See the API documentation.

We plan to offer Mesh as a standalone service + an easy-to-use API. We will support multiple deployment scenarios, including as a standalone binary, as a container, as an ambassador or sidecar component to an existing container, and as an infrastructure service in popular platforms.

Developing

Mesh builds with the standard Go tooling. You will need to put the repository in Go's expected directory structure; i.e., $GOPATH/src/github.com/weaveworks/mesh.

Building

If necessary, you may fetch the latest version of all of the dependencies into your GOPATH via

go get -d -u -t ./...

Build the code with the usual

go install ./...

Testing

Assuming you've fetched dependencies as above,

go test ./...

Dependencies

Mesh is a library, designed to be imported into a binary package. Vendoring is currently the best way for binary package authors to ensure reliable, reproducible builds. Therefore, we strongly recommend our users use vendoring for all of their dependencies, including Mesh. To avoid compatibility and availability issues, Mesh doesn't vendor its own dependencies, and doesn't recommend use of third-party import proxies.

There are several tools to make vendoring easier, including gb, gvt, glide, and govendor.

Workflow

Mesh follows a typical PR workflow. All contributions should be made as pull requests that satisfy the guidelines, below.

Guidelines

  • All code must abide Go Code Review Comments
  • Names should abide What's in a name
  • Code must build on both Linux and Darwin, via plain go build
  • Code should have appropriate test coverage, invoked via plain go test

In addition, several mechanical checks are enforced. See the lint script for details.

Getting Help

If you have any questions about, feedback for or problems with mesh:

Your feedback is always welcome!