...

Text file src/github.com/go-kit/kit/README.md

Documentation: github.com/go-kit/kit

     1# Go kit
     2
     3![GitHub Workflow Status](https://github.com/go-kit/kit/workflows/CI/badge.svg)
     4[![GoDev](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/go-kit/kit?tab=doc)
     5[![codecov](https://codecov.io/gh/go-kit/kit/branch/master/graph/badge.svg)](https://codecov.io/gh/go-kit/kit)
     6[![Go Report Card](https://goreportcard.com/badge/go-kit/kit)](https://goreportcard.com/report/go-kit/kit)
     7[![Sourcegraph](https://sourcegraph.com/github.com/go-kit/kit/-/badge.svg)](https://sourcegraph.com/github.com/go-kit/kit?badge)
     8
     9**Go kit** is a **programming toolkit** for building microservices
    10(or elegant monoliths) in Go. We solve common problems in distributed
    11systems and application architecture so you can focus on delivering
    12business value.
    13
    14- Website: [gokit.io](https://gokit.io)
    15- Mailing list: [go-kit](https://groups.google.com/forum/#!forum/go-kit)
    16- Slack: [gophers.slack.com](https://gophers.slack.com) **#go-kit** ([invite](https://gophersinvite.herokuapp.com/))
    17
    18## Sponsors
    19
    20Click [here](https://github.com/sponsors/peterbourgon) or Sponsor, above, for more information on sponsorship.
    21
    22## Motivation
    23
    24Go has emerged as the language of the server, but it remains underrepresented
    25in so-called "modern enterprise" companies like Facebook, Twitter, Netflix, and
    26SoundCloud. Many of these organizations have turned to JVM-based stacks for
    27their business logic, owing in large part to libraries and ecosystems that
    28directly support their microservice architectures.
    29
    30To reach its next level of success, Go needs more than simple primitives and
    31idioms. It needs a comprehensive toolkit, for coherent distributed programming
    32in the large. Go kit is a set of packages and best practices, which provide a
    33comprehensive, robust, and trustable way of building microservices for
    34organizations of any size.
    35
    36For more details, see
    37 [the website](https://gokit.io),
    38 [the motivating blog post](http://peter.bourgon.org/go-kit/) and
    39 [the video of the talk](https://www.youtube.com/watch?v=iFR_7AKkJFU).
    40See also the
    41 [Go kit talk at GopherCon 2015](https://www.youtube.com/watch?v=1AjaZi4QuGo).
    42
    43## Goals
    44
    45- Operate in a heterogeneous SOA — expect to interact with mostly non-Go-kit services
    46- RPC as the primary messaging pattern
    47- Pluggable serialization and transport — not just JSON over HTTP
    48- Operate within existing infrastructures — no mandates for specific tools or technologies
    49
    50## Non-goals
    51
    52- Supporting messaging patterns other than RPC (for now) — e.g. MPI, pub/sub, CQRS, etc.
    53- Re-implementing functionality that can be provided by adapting existing software
    54- Having opinions on operational concerns: deployment, configuration, process supervision, orchestration, etc.
    55
    56## Contributing
    57
    58Please see [CONTRIBUTING.md](/CONTRIBUTING.md).
    59Thank you, [contributors](https://github.com/go-kit/kit/graphs/contributors)!
    60
    61## Dependency management
    62
    63Go kit is [modules](https://github.com/golang/go/wiki/Modules) aware, and we
    64encourage users to use the standard modules tooling. But Go kit is at major
    65version 0, so it should be compatible with non-modules environments.
    66
    67## Code generators
    68
    69There are several third-party tools that can generate Go kit code based on
    70different starting assumptions.
    71
    72- [RecoLabs/microgen](https://github.com/RecoLabs/microgen)
    73- [GrantZheng/kit](https://github.com/GrantZheng/kit)
    74- [kujtimiihoxha/kit](https://github.com/kujtimiihoxha/kit) (unmaintained)
    75- [nytimes/marvin](https://github.com/nytimes/marvin)
    76- [sagikazarmark/mga](https://github.com/sagikazarmark/mga)
    77- [sagikazarmark/protoc-gen-go-kit](https://github.com/sagikazarmark/protoc-gen-go-kit)
    78- [metaverse/truss](https://github.com/metaverse/truss)
    79
    80## Related projects
    81
    82Projects with a ★ have had particular influence on Go kit's design (or vice-versa).
    83
    84### Service frameworks
    85
    86- [gizmo](https://github.com/nytimes/gizmo), a microservice toolkit from The New York Times ★
    87- [go-micro](https://github.com/micro/go-micro), a distributed systems development framework ★
    88- [gotalk](https://github.com/rsms/gotalk), async peer communication protocol & library
    89- [Kite](https://github.com/koding/kite), a micro-service framework
    90- [gocircuit](https://github.com/gocircuit/circuit), dynamic cloud orchestration
    91
    92### Individual components
    93
    94- [afex/hystrix-go](https://github.com/afex/hystrix-go), client-side latency and fault tolerance library
    95- [armon/go-metrics](https://github.com/armon/go-metrics), library for exporting performance and runtime metrics to external metrics systems
    96- [codahale/lunk](https://github.com/codahale/lunk), structured logging in the style of Google's Dapper or Twitter's Zipkin
    97- [eapache/go-resiliency](https://github.com/eapache/go-resiliency), resiliency patterns
    98- [sasbury/logging](https://github.com/sasbury/logging), a tagged style of logging
    99- [grpc/grpc-go](https://github.com/grpc/grpc-go), HTTP/2 based RPC
   100- [inconshreveable/log15](https://github.com/inconshreveable/log15), simple, powerful logging for Go ★
   101- [mailgun/vulcand](https://github.com/vulcand/vulcand), programmatic load balancer backed by etcd
   102- [mattheath/phosphor](https://github.com/mondough/phosphor), distributed system tracing
   103- [pivotal-golang/lager](https://github.com/pivotal-golang/lager), an opinionated logging library
   104- [rubyist/circuitbreaker](https://github.com/rubyist/circuitbreaker), circuit breaker library
   105- [sirupsen/logrus](https://github.com/sirupsen/logrus), structured, pluggable logging for Go ★
   106- [sourcegraph/appdash](https://github.com/sourcegraph/appdash), application tracing system based on Google's Dapper
   107- [spacemonkeygo/monitor](https://github.com/spacemonkeygo/monitor), data collection, monitoring, instrumentation, and Zipkin client library
   108- [streadway/handy](https://github.com/streadway/handy), net/http handler filters
   109- [vitess/rpcplus](https://godoc.org/github.com/youtube/vitess/go/rpcplus), package rpc + context.Context
   110- [gdamore/mangos](https://github.com/gdamore/mangos), nanomsg implementation in pure Go
   111
   112### Web frameworks
   113
   114- [Gorilla](http://www.gorillatoolkit.org)
   115- [Gin](https://gin-gonic.com/)
   116- [Negroni](https://github.com/codegangsta/negroni)
   117- [Goji](https://github.com/zenazn/goji)
   118- [Martini](https://github.com/go-martini/martini)
   119- [Beego](https://beego.vip/)
   120- [Revel](https://revel.github.io/) (considered [harmful](https://github.com/go-kit/kit/issues/350))
   121- [GoBuffalo](https://gobuffalo.io/)
   122
   123## Additional reading
   124
   125- [Architecting for the Cloud](https://slideshare.net/stonse/architecting-for-the-cloud-using-netflixoss-codemash-workshop-29852233) — Netflix
   126- [Dapper, a Large-Scale Distributed Systems Tracing Infrastructure](http://research.google.com/pubs/pub36356.html) — Google
   127- [Your Server as a Function](http://monkey.org/~marius/funsrv.pdf) (PDF) — Twitter

View as plain text