2016-06-20 03:54:06 +02:00
|
|
|
# Go Micro [![License](https://img.shields.io/:license-apache-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![GoDoc](https://godoc.org/github.com/micro/go-micro?status.svg)](https://godoc.org/github.com/micro/go-micro) [![Travis CI](https://api.travis-ci.org/micro/go-micro.svg?branch=master)](https://travis-ci.org/micro/go-micro) [![Go Report Card](https://goreportcard.com/badge/micro/go-micro)](https://goreportcard.com/report/github.com/micro/go-micro)
|
2015-01-14 01:31:27 +02:00
|
|
|
|
2019-05-23 01:35:02 +02:00
|
|
|
Go Micro is a framework for microservice development.
|
2016-06-20 03:52:38 +02:00
|
|
|
|
2018-11-27 21:43:57 +02:00
|
|
|
## Overview
|
|
|
|
|
|
|
|
Go Micro provides the core requirements for distributed systems development including RPC and Event driven communication.
|
|
|
|
The **micro** philosophy is sane defaults with a pluggable architecture. We provide defaults to get you started quickly
|
|
|
|
but everything can be easily swapped out.
|
|
|
|
|
2019-01-29 11:08:14 +02:00
|
|
|
<img src="https://micro.mu/docs/images/go-micro.svg" />
|
2018-11-29 11:02:15 +02:00
|
|
|
|
2018-03-19 12:21:46 +02:00
|
|
|
Plugins are available at [github.com/micro/go-plugins](https://github.com/micro/go-plugins).
|
2015-01-14 10:38:39 +02:00
|
|
|
|
2017-07-16 15:58:31 +02:00
|
|
|
Follow us on [Twitter](https://twitter.com/microhq) or join the [Slack](http://slack.micro.mu/) community.
|
2016-12-25 22:53:08 +02:00
|
|
|
|
2016-12-07 18:54:19 +02:00
|
|
|
## Features
|
2016-07-03 03:49:13 +02:00
|
|
|
|
2017-06-15 20:57:27 +02:00
|
|
|
Go Micro abstracts away the details of distributed systems. Here are the main features.
|
2016-07-03 03:49:13 +02:00
|
|
|
|
2018-12-02 15:23:46 +02:00
|
|
|
- **Service Discovery** - Automatic service registration and name resolution. Service discovery is at the core of micro service
|
2019-01-16 15:12:21 +02:00
|
|
|
development. When service A needs to speak to service B it needs the location of that service. The default discovery mechanism is
|
|
|
|
multicast DNS (mdns), a zeroconf system. You can optionally set gossip using the SWIM protocol for p2p networks or consul for a
|
|
|
|
resilient cloud-native setup.
|
2018-12-02 15:23:46 +02:00
|
|
|
|
|
|
|
- **Load Balancing** - Client side load balancing built on service discovery. Once we have the addresses of any number of instances
|
|
|
|
of a service we now need a way to decide which node to route to. We use random hashed load balancing to provide even distribution
|
|
|
|
across the services and retry a different node if there's a problem.
|
|
|
|
|
|
|
|
- **Message Encoding** - Dynamic message encoding based on content-type. The client and server will use codecs along with content-type
|
|
|
|
to seamlessly encode and decode Go types for you. Any variety of messages could be encoded and sent from different clients. The client
|
2018-12-26 14:03:08 +02:00
|
|
|
and server handle this by default. This includes protobuf and json by default.
|
2018-12-02 15:23:46 +02:00
|
|
|
|
2019-02-09 14:25:34 +02:00
|
|
|
- **Request/Response** - RPC based request/response with support for bidirectional streaming. We provide an abstraction for synchronous
|
2018-12-02 15:23:46 +02:00
|
|
|
communication. A request made to a service will be automatically resolved, load balanced, dialled and streamed. The default
|
|
|
|
transport is http/1.1 or http2 when tls is enabled.
|
|
|
|
|
|
|
|
- **Async Messaging** - PubSub is built in as a first class citizen for asynchronous communication and event driven architectures.
|
|
|
|
Event notifications are a core pattern in micro service development. The default messaging is point-to-point http/1.1 or http2 when tls
|
|
|
|
is enabled.
|
2018-11-27 21:43:57 +02:00
|
|
|
|
2018-12-02 15:26:38 +02:00
|
|
|
- **Pluggable Interfaces** - Go Micro makes use of Go interfaces for each distributed system abstraction. Because of this these interfaces
|
|
|
|
are pluggable and allows Go Micro to be runtime agnostic. You can plugin any underlying technology. Find plugins in
|
|
|
|
[github.com/micro/go-plugins](https://github.com/micro/go-plugins).
|
|
|
|
|
2018-11-14 17:18:13 +02:00
|
|
|
## Getting Started
|
2017-02-10 14:36:42 +02:00
|
|
|
|
2018-11-21 15:10:09 +02:00
|
|
|
See the [docs](https://micro.mu/docs/go-micro.html) for detailed information on the architecture, installation and use of go-micro.
|
2017-02-10 14:36:42 +02:00
|
|
|
|