1
0
mirror of https://github.com/go-micro/go-micro.git synced 2024-11-24 08:02:32 +02:00
go-micro/README.md

85 lines
4.2 KiB
Markdown
Raw Normal View History

2021-08-23 17:45:04 +02:00
# Go Micro [![License](https://img.shields.io/:license-apache-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![Go.Dev reference](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/asim/go-micro/v3?tab=doc)
2015-01-14 01:31:27 +02:00
2020-04-13 23:15:21 +02:00
Go Micro is a framework for distributed systems 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.
2020-05-23 17:46:50 +02:00
The **Micro** philosophy is sane defaults with a pluggable architecture. We provide defaults to get you started quickly
2018-11-27 21:43:57 +02:00
but everything can be easily swapped out.
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
2020-05-31 12:26:46 +02:00
- **Authentication** - Auth is built in as a first class citizen. Authentication and authorization enable secure
zero trust networking by providing every service an identity and certificates. This additionally includes rule
based access control.
- **Dynamic Config** - Load and hot reload dynamic config from anywhere. The config interface provides a way to load application
level config from any source such as env vars, file, etcd. You can merge the sources and even define fallbacks.
- **Data Storage** - A simple data store interface to read, write and delete records. It includes support for memory, file and
CockroachDB by default. State and persistence becomes a core requirement beyond prototyping and Micro looks to build that into the framework.
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
2019-11-07 00:04:02 +02:00
multicast DNS (mdns), a zeroconf system.
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
2020-12-09 20:35:07 +02:00
- **RPC Client/Server** - RPC based request/response with support for bidirectional streaming. We provide an abstraction for synchronous
communication. A request made to a service will be automatically resolved, load balanced, dialled and streamed.
2018-12-02 15:23:46 +02:00
- **Async Messaging** - PubSub is built in as a first class citizen for asynchronous communication and event driven architectures.
2020-04-11 19:23:37 +02:00
Event notifications are a core pattern in micro service development. The default messaging system is a HTTP event message broker.
2018-11-27 21:43:57 +02:00
2020-05-31 12:21:55 +02:00
- **Synchronization** - Distributed systems are often built in an eventually consistent manner. Support for distributed locking and
leadership are built in as a Sync interface. When using an eventually consistent database or scheduling use the Sync interface.
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
2020-12-26 17:42:10 +02:00
are pluggable and allows Go Micro to be runtime agnostic. You can plugin any underlying technology.
2018-12-02 15:26:38 +02:00
2018-11-14 17:18:13 +02:00
## Getting Started
2017-02-10 14:36:42 +02:00
2020-04-19 01:44:52 +02:00
To make use of Go Micro
2020-04-19 01:45:29 +02:00
```golang
import "github.com/asim/go-micro/v3"
2020-05-31 12:27:54 +02:00
2020-05-31 12:28:32 +02:00
// create a new service
2020-05-31 12:27:54 +02:00
service := micro.NewService(
micro.Name("helloworld"),
)
2020-05-31 12:28:32 +02:00
// initialise flags
2020-05-31 12:27:54 +02:00
service.Init()
2020-05-31 12:28:32 +02:00
// start the service
2020-05-31 12:27:54 +02:00
service.Run()
2020-04-19 01:44:52 +02:00
```
2021-02-25 12:31:55 +02:00
See the [examples](https://github.com/micro/go-micro/tree/master/examples) for detailed information on usage.
2020-04-19 01:46:33 +02:00
2020-12-26 17:15:39 +02:00
## Code Generation
See [cmd/protoc-gen-micro](https://github.com/micro/go-micro/tree/master/cmd/protoc-gen-micro) for protobuf code generation.
2020-12-26 17:18:11 +02:00
## Example Usage
2020-12-26 17:17:20 +02:00
See [examples](https://github.com/micro/go-micro/tree/master/examples) directory for usage examples.
2020-12-26 17:32:45 +02:00
## Plugins
See [plugins](https://github.com/micro/go-micro/tree/master/plugins) directory for all the plugins.
2020-04-19 01:46:33 +02:00
## License
2020-04-28 20:35:13 +02:00
Go Micro is Apache 2.0 licensed.