OSDN Git Service

new repo
[bytom/vapor.git] / vendor / github.com / go-kit / kit / README.md
1 # Go kit [![Circle CI](https://circleci.com/gh/go-kit/kit.svg?style=shield)](https://circleci.com/gh/go-kit/kit) [![Travis CI](https://travis-ci.org/go-kit/kit.svg?branch=master)](https://travis-ci.org/go-kit/kit) [![GoDoc](https://godoc.org/github.com/go-kit/kit?status.svg)](https://godoc.org/github.com/go-kit/kit) [![Coverage Status](https://coveralls.io/repos/go-kit/kit/badge.svg?branch=master&service=github)](https://coveralls.io/github/go-kit/kit?branch=master) [![Go Report Card](https://goreportcard.com/badge/go-kit/kit)](https://goreportcard.com/report/go-kit/kit) [![Sourcegraph](https://sourcegraph.com/github.com/go-kit/kit/-/badge.svg)](https://sourcegraph.com/github.com/go-kit/kit?badge)
2
3 **Go kit** is a **programming toolkit** for building microservices 
4 (or elegant monoliths) in Go. We solve common problems in distributed 
5 systems and application architecture so you can focus on delivering
6 business value.
7
8 - Website: [gokit.io](https://gokit.io)
9 - Mailing list: [go-kit](https://groups.google.com/forum/#!forum/go-kit)
10 - Slack: [gophers.slack.com](https://gophers.slack.com) **#go-kit** ([invite](https://gophersinvite.herokuapp.com/))
11
12 ## Motivation
13
14 Go has emerged as the language of the server, but it remains underrepresented
15 in so-called "modern enterprise" companies like Facebook, Twitter, Netflix, and
16 SoundCloud. Many of these organizations have turned to JVM-based stacks for
17 their business logic, owing in large part to libraries and ecosystems that
18 directly support their microservice architectures.
19
20 To reach its next level of success, Go needs more than simple primitives and
21 idioms. It needs a comprehensive toolkit, for coherent distributed programming
22 in the large. Go kit is a set of packages and best practices, which provide a
23 comprehensive, robust, and trustable way of building microservices for
24 organizations of any size.
25
26 For more details, see
27  [the website](https://gokit.io),
28  [the motivating blog post](http://peter.bourgon.org/go-kit/) and
29  [the video of the talk](https://www.youtube.com/watch?v=iFR_7AKkJFU).
30 See also the
31  [Go kit talk at GopherCon 2015](https://www.youtube.com/watch?v=1AjaZi4QuGo).
32
33 ## Goals
34
35 - Operate in a heterogeneous SOA — expect to interact with mostly non-Go-kit services
36 - RPC as the primary messaging pattern
37 - Pluggable serialization and transport — not just JSON over HTTP
38 - Operate within existing infrastructures — no mandates for specific tools or technologies
39
40 ## Non-goals
41
42 - Supporting messaging patterns other than RPC (for now) — e.g. MPI, pub/sub, CQRS, etc.
43 - Re-implementing functionality that can be provided by adapting existing software
44 - Having opinions on operational concerns: deployment, configuration, process supervision, orchestration, etc.
45
46 ## Contributing
47
48 Please see [CONTRIBUTING.md](/CONTRIBUTING.md).
49 Thank you, [contributors](https://github.com/go-kit/kit/graphs/contributors)!
50
51 ## Dependency management
52
53 Go kit is a library, designed to be imported into a binary package. Vendoring
54 is currently the best way for binary package authors to ensure reliable,
55 reproducible builds. Therefore, we strongly recommend our users use vendoring
56 for all of their dependencies, including Go kit. To avoid compatibility and
57 availability issues, Go kit doesn't vendor its own dependencies, and
58 doesn't recommend use of third-party import proxies.
59
60 There are several tools which make vendoring easier, including
61  [dep](https://github.com/golang/dep),
62  [gb](http://getgb.io),
63  [glide](https://github.com/Masterminds/glide),
64  [gvt](https://github.com/FiloSottile/gvt), and
65  [govendor](https://github.com/kardianos/govendor).
66 In addition, Go kit uses a variety of continuous integration providers
67  to find and fix compatibility problems as soon as they occur.
68
69 ## Related projects
70
71 Projects with a ★ have had particular influence on Go kit's design (or vice-versa).
72
73 ### Service frameworks
74
75 - [gizmo](https://github.com/nytimes/gizmo), a microservice toolkit from The New York Times ★
76 - [go-micro](https://github.com/myodc/go-micro), a microservices client/server library ★
77 - [gotalk](https://github.com/rsms/gotalk), async peer communication protocol & library
78 - [Kite](https://github.com/koding/kite), a micro-service framework
79 - [gocircuit](https://github.com/gocircuit/circuit), dynamic cloud orchestration
80
81 ### Individual components
82
83 - [afex/hystrix-go](https://github.com/afex/hystrix-go), client-side latency and fault tolerance library
84 - [armon/go-metrics](https://github.com/armon/go-metrics), library for exporting performance and runtime metrics to external metrics systems
85 - [codahale/lunk](https://github.com/codahale/lunk), structured logging in the style of Google's Dapper or Twitter's Zipkin
86 - [eapache/go-resiliency](https://github.com/eapache/go-resiliency), resiliency patterns
87 - [sasbury/logging](https://github.com/sasbury/logging), a tagged style of logging
88 - [grpc/grpc-go](https://github.com/grpc/grpc-go), HTTP/2 based RPC
89 - [inconshreveable/log15](https://github.com/inconshreveable/log15), simple, powerful logging for Go ★
90 - [mailgun/vulcand](https://github.com/vulcand/vulcand), programmatic load balancer backed by etcd
91 - [mattheath/phosphor](https://github.com/mondough/phosphor), distributed system tracing
92 - [pivotal-golang/lager](https://github.com/pivotal-golang/lager), an opinionated logging library
93 - [rubyist/circuitbreaker](https://github.com/rubyist/circuitbreaker), circuit breaker library
94 - [Sirupsen/logrus](https://github.com/Sirupsen/logrus), structured, pluggable logging for Go ★
95 - [sourcegraph/appdash](https://github.com/sourcegraph/appdash), application tracing system based on Google's Dapper
96 - [spacemonkeygo/monitor](https://github.com/spacemonkeygo/monitor), data collection, monitoring, instrumentation, and Zipkin client library
97 - [streadway/handy](https://github.com/streadway/handy), net/http handler filters
98 - [vitess/rpcplus](https://godoc.org/github.com/youtube/vitess/go/rpcplus), package rpc + context.Context
99 - [gdamore/mangos](https://github.com/gdamore/mangos), nanomsg implementation in pure Go
100
101 ### Web frameworks
102
103 - [Gorilla](http://www.gorillatoolkit.org)
104 - [Gin](https://gin-gonic.github.io/gin/)
105 - [Negroni](https://github.com/codegangsta/negroni)
106 - [Goji](https://github.com/zenazn/goji)
107 - [Martini](https://github.com/go-martini/martini)
108 - [Beego](http://beego.me/)
109 - [Revel](https://revel.github.io/) (considered [harmful](https://github.com/go-kit/kit/issues/350))
110
111 ## Additional reading
112
113 - [Architecting for the Cloud](http://fr.slideshare.net/stonse/architecting-for-the-cloud-using-netflixoss-codemash-workshop-29852233) — Netflix
114 - [Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html) — Google
115 - [Your Server as a Function](http://monkey.org/~marius/funsrv.pdf) (PDF) — Twitter
116
117 ---
118
119 Development supported by [DigitalOcean](https://digitalocean.com).