README: API stability policy + misc updates
Peter Bourgon
9 years ago
1 | 1 | |
2 | 2 | **gokit** is a working name for a **distributed programming toolkit** to serve the needs of the modern service-oriented enterprise. |
3 | 3 | |
4 | - [GitHub repository](https://github.com/peterbourgon/gokit) -- RFCs, issues, PRs, etc. | |
5 | - [go-kit mailing list](https://groups.google.com/forum/#!forum/go-kit) | |
6 | - [Freenode](https://freenode.net) #gokit | |
4 | - Mailing list: [go-kit](https://groups.google.com/forum/#!forum/go-kit) | |
5 | - IRC: [Freenode](https://freenode.net) `#gokit` | |
7 | 6 | |
8 | 7 | ## Motivation |
9 | 8 | |
11 | 10 | |
12 | 11 | ## Goals |
13 | 12 | |
14 | - Operate in a heterogeneous SOA -- expect to interact with mostly non-gokit services | |
13 | - Operate in a heterogeneous SOA — expect to interact with mostly non-gokit services | |
15 | 14 | - RPC as the messaging pattern |
16 | - Pluggable serialization and transport -- not just JSON over HTTP | |
15 | - Pluggable serialization and transport — not just JSON over HTTP | |
17 | 16 | - Zipkin-compatible request tracing |
18 | - _more TODO_ | |
19 | 17 | |
20 | 18 | ## Non-goals |
21 | 19 | |
22 | - Having opinions on deployment, orchestration, process supervision | |
23 | - Having opinions on configuration passing -- flags vs. env vars vs. files vs. ... | |
24 | - _more TODO_ | |
20 | - Supporting messaging patterns other than RPC — pub/sub, CQRS, etc. | |
21 | - Having opinions on deployment, orchestration, process supervision, etc. | |
22 | - Having opinions on configuration passing, i.e. flags, env vars, files, etc. | |
23 | ||
24 | ## Component status | |
25 | ||
26 | - API stability — [RFC complete](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc007-api-stability.md), [adopted](API_stability_policy) | |
27 | - `package metrics` — [RFC complete](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc003-package-metrics.md), [first draft complete](https://github.com/peterbourgon/gokit/tree/master/metrics) | |
28 | - `package server` — [RFC complete](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc000-package-server.md), [prototyping](https://github.com/peterbourgon/gokit/pull/14) | |
29 | - `package transport` — [RFC pending](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc002-package-transport.md), [prototyping](https://github.com/peterbourgon/gokit/pull/14) | |
30 | - `package log` — [RFC complete](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc004-package-log.md), [prototyping](https://github.com/peterbourgon/gokit/pull/16) | |
31 | - `package client` — [RFC pending](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc001-package-client.md) | |
32 | - Service discovery — [RFC pending](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc005-service-discovery.md) | |
33 | - Request tracing — [RFC pending](https://github.com/peterbourgon/gokit/blob/master/rfc/rfc006-request-tracing.md) | |
25 | 34 | |
26 | 35 | ## Contributing |
27 | 36 | |
28 | At this stage, we're still developing the initial drafts of all of the | |
29 | packages, using an | |
37 | At this stage, we're still developing the initial drafts of all of the packages, using an | |
30 | 38 | [RFC workflow](https://github.com/peterbourgon/gokit/tree/master/rfc). |
31 | 39 | Before submitting major changes, please write to |
32 | 40 | [the mailing list](https://groups.google.com/forum/#!forum/go-kit) |
45 | 53 | We will use a variety of continuous integration providers to find and fix |
46 | 54 | compatibility problems as soon as they occur. |
47 | 55 | |
56 | ### API stability policy | |
57 | ||
58 | The gokit project depends on code maintained by others. This includes the Go | |
59 | standard library and sub-repositories and other external libraries. | |
60 | The Go language and standard library provide stability guarantees, but the other external libraries typically do not. | |
61 | [The API Stability RFC](https://github.com/peterbourgon/gokit/tree/master/rfc/rfc007-api-stability.md) | |
62 | proposes a standard policy for package authors to advertise API stability. | |
63 | The gokit project prefers to depend on code that abides the API stability policy. | |
64 | ||
48 | 65 | ## Related projects |
49 | 66 | |
50 | 67 | Projects with a ★ have had particular influence on gokit's design. |
51 | 68 | |
52 | 69 | ### Service frameworks |
53 | 70 | |
54 | - [Kite](https://github.com/koding/kite), a micro-service framework | |
55 | 71 | - [go-micro](https://github.com/asim/go-micro), a microservices client/server library ★ |
56 | 72 | - [gocircuit](https://github.com/gocircuit/circuit), dynamic cloud orchestration |
57 | 73 | - [gotalk](https://github.com/rsms/gotalk), async peer communication protocol & library |
74 | - [Kite](https://github.com/koding/kite), a micro-service framework | |
58 | 75 | |
59 | 76 | ### Individual components |
60 | 77 | |
61 | - [grpc/grpc-go](https://github.com/grpc/grpc-go), HTTP/2 based RPC | |
62 | 78 | - [afex/hystrix-go](https://github.com/afex/hystrix-go), client-side latency and fault tolerance library |
63 | - [streadway/handy](https://github.com/streadway/handy), net/http handler filters | |
64 | - [rubyist/circuitbreaker](https://github.com/rubyist/circuitbreaker), circuit breaker library | |
65 | - [spacemonkeygo/monitor](https://github.com/spacemonkeygo/monitor), data collection, monitoring, instrumentation, and Zipkin client library | |
66 | - [mattheath/phosphor](https://github.com/mattheath/phosphor), distributed system tracing | |
67 | 79 | - [codahale/lunk](https://github.com/codahale/lunk), structured logging in the style of Google's Dapper or Twitter's Zipkin |
68 | - [sourcegraph/appdash](https://github.com/sourcegraph/appdash), application tracing system based on Google's Dapper | |
69 | 80 | - [eapache/go-resiliency](https://github.com/eapache/go-resiliency), resiliency patterns |
70 | 81 | - [FogCreek/logging](https://github.com/FogCreek/logging), a tagged style of logging |
82 | - [grpc/grpc-go](https://github.com/grpc/grpc-go), HTTP/2 based RPC | |
83 | - [inconshreveable/log15](https://github.com/inconshreveable/log15), simple, powerful logging for Go | |
84 | - [mailgun/vulcand](https://github.com/mailgun/vulcand), prorammatic load balancer backed by etcd | |
85 | - [mattheath/phosphor](https://github.com/mattheath/phosphor), distributed system tracing | |
86 | - [pivotal-golang/lager](https://github.com/pivotal-golang/lager), an opinionated logging library | |
87 | - [rubyist/circuitbreaker](https://github.com/rubyist/circuitbreaker), circuit breaker library | |
71 | 88 | - [Sirupsen/logrus](https://github.com/Sirupsen/logrus), structured, pluggable logging for Go ★ |
72 | - [mailgun/vulcand](https://github.com/mailgun/vulcand), prorammatic load balancer backed by etcd | |
89 | - [sourcegraph/appdash](https://github.com/sourcegraph/appdash), application tracing system based on Google's Dapper | |
90 | - [spacemonkeygo/monitor](https://github.com/spacemonkeygo/monitor), data collection, monitoring, instrumentation, and Zipkin client library | |
91 | - [streadway/handy](https://github.com/streadway/handy), net/http handler filters | |
73 | 92 | - [vitess/rpcplus](https://godoc.org/code.google.com/p/vitess/go/rpcplus), package rpc + context.Context |
74 | - [pivotal-golang/lager](https://github.com/pivotal-golang/lager), an opinionated logging library | |
75 | - [inconshreveable/log15](https://github.com/inconshreveable/log15), simple, powerful logging for Go | |
76 | 93 | |
77 | 94 | ### Web frameworks |
78 | 95 | |
96 | - [Beego](http://beego.me/) | |
97 | - [Gin](https://gin-gonic.github.io/gin/) | |
98 | - [Goji](https://github.com/zenazn/goji) | |
79 | 99 | - [Gorilla](http://www.gorillatoolkit.org) |
80 | - [Revel](https://revel.github.io/) | |
81 | - [Gin](https://gin-gonic.github.io/gin/) | |
82 | 100 | - [Martini](https://github.com/go-martini/martini) |
83 | 101 | - [Negroni](https://github.com/codegangsta/negroni) |
84 | - [Goji](https://github.com/zenazn/goji) | |
85 | - [Beego](http://beego.me/) | |
102 | - [Revel](https://revel.github.io/) | |
86 | 103 | |
87 | 104 | ## Additional reading |
88 | 105 | |
89 | - [Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html) -- Google | |
90 | - [Your Server as a Function](http://monkey.org/~marius/funsrv.pdf) (PDF) -- Twitter | |
91 | - [Architecting for the Cloud](http://fr.slideshare.net/stonse/architecting-for-the-cloud-using-netflixoss-codemash-workshop-29852233) -- Netflix | |
106 | - [Architecting for the Cloud](http://fr.slideshare.net/stonse/architecting-for-the-cloud-using-netflixoss-codemash-workshop-29852233) — Netflix | |
107 | - [Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html) — Google | |
108 | - [Your Server as a Function](http://monkey.org/~marius/funsrv.pdf) (PDF) — Twitter |