mirror of
https://github.com/go-micro/go-micro.git
synced 2025-06-30 22:33:49 +02:00
43 lines
2.7 KiB
Markdown
43 lines
2.7 KiB
Markdown
![]() |
## Architecture
|
||
|
|
||
|
An overview of the Go Micro architecture
|
||
|
|
||
|
## Overview
|
||
|
|
||
|
Go Micro abstracts away the details of distributed systems. Here are the main features.
|
||
|
|
||
|
- **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 many storage backends
|
||
|
in the plugins repo. State and persistence becomes a core requirement beyond prototyping and Micro looks to build that into the framework.
|
||
|
|
||
|
- **Service Discovery** - Automatic service registration and name resolution. Service discovery is at the core of micro service
|
||
|
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.
|
||
|
|
||
|
- **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
|
||
|
and server handle this by default. This includes protobuf and json by default.
|
||
|
|
||
|
- **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.
|
||
|
|
||
|
- **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 system is a HTTP event message broker.
|
||
|
|
||
|
- **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.
|
||
|
|
||
|
## Design
|
||
|
|
||
|
We will share more on architecture soon
|