reorder readme to get started first
This commit is contained in:
		
							
								
								
									
										109
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								README.md
									
									
									
									
									
								
							| @@ -43,60 +43,6 @@ Join us to discuss, learn and contribute: | |||||||
|  |  | ||||||
| By default go-micro only provides a few implementation of each interface at the core but it's completely pluggable. There's already dozens of plugins which are available at [github.com/micro/go-plugins](https://github.com/micro/go-plugins). Contributions are welcome! | By default go-micro only provides a few implementation of each interface at the core but it's completely pluggable. There's already dozens of plugins which are available at [github.com/micro/go-plugins](https://github.com/micro/go-plugins). Contributions are welcome! | ||||||
|  |  | ||||||
| ## How does it work? |  | ||||||
|  |  | ||||||
| <p align="center"> |  | ||||||
|   <img src="go-micro.png" /> |  | ||||||
| </p> |  | ||||||
|  |  | ||||||
| Go Micro is a framework that addresses the fundamental requirements to write microservices.  |  | ||||||
|  |  | ||||||
| Let's dig into the core components. |  | ||||||
|  |  | ||||||
| ### Registry |  | ||||||
|  |  | ||||||
| The registry provides a service discovery mechanism to resolve names to addresses. It can be backed by consul, etcd, zookeeper, dns, gossip, etc.  |  | ||||||
| Services should register using the registry on startup and deregister on shutdown. Services can optionally provide an expiry TTL and reregister  |  | ||||||
| on an interval to ensure liveness and that the service is cleaned up if it dies. |  | ||||||
|  |  | ||||||
| ### Selector |  | ||||||
|  |  | ||||||
| The selector is a load balancing abstraction which builds on the registry. It allows services to be "filtered" using filter functions and "selected"  |  | ||||||
| using a choice of algorithms such as random, roundrobin, leastconn, etc. The selector is leveraged by the Client when making requests. The client  |  | ||||||
| will use the selector rather than the registry as it provides that built in mechanism of load balancing.  |  | ||||||
|  |  | ||||||
| ### Transport |  | ||||||
|  |  | ||||||
| The transport is the interface for synchronous request/response communication between services. It's akin to the golang net package but provides  |  | ||||||
| a higher level abstraction which allows us to switch out communication mechanisms e.g http, rabbitmq, websockets, NATS. The transport also  |  | ||||||
| supports bidirectional streaming. This is powerful for client side push to the server. |  | ||||||
|  |  | ||||||
| ### Broker |  | ||||||
|  |  | ||||||
| The broker provides an interface to a message broker for asynchronous pub/sub communication. This is one of the fundamental requirements of an event  |  | ||||||
| driven architecture and microservices. By default we use an inbox style point to point HTTP system to minimise the number of dependencies required  |  | ||||||
| to get started. However there are many message broker implementations available in go-plugins e.g RabbitMQ, NATS, NSQ, Google Cloud Pub Sub. |  | ||||||
|  |  | ||||||
| ### Codec |  | ||||||
|  |  | ||||||
| The codec is used for encoding and decoding messages before transporting them across the wire. This could be json, protobuf, bson, msgpack, etc.  |  | ||||||
| Where this differs from most other codecs is that we actually support the RPC format here as well. So we have JSON-RPC, PROTO-RPC, BSON-RPC, etc.  |  | ||||||
| It separates encoding from the client/server and provides a powerful method for integrating other systems such as gRPC, Vanadium, etc. |  | ||||||
|  |  | ||||||
| ### Server |  | ||||||
|  |  | ||||||
| The server is the building block for writing a service. Here you can name your service, register request handlers, add middeware, etc. The service  |  | ||||||
| builds on the above packages to provide a unified interface for serving requests. The built in server is an RPC system. In the future there maybe  |  | ||||||
| other implementations. The server also allows you to define multiple codecs to serve different encoded messages. |  | ||||||
|  |  | ||||||
| ### Client |  | ||||||
|  |  | ||||||
| The client provides an interface to make requests to services. Again like the server, it builds on the other packages to provide a unified interface  |  | ||||||
| for finding services by name using the registry, load balancing using the selector, making synchronous requests with the transport and asynchronous  |  | ||||||
| messaging using the broker.  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| The  above components are combined at the top-level of micro as a **Service**. |  | ||||||
|  |  | ||||||
| ## Getting Started | ## Getting Started | ||||||
|  |  | ||||||
| @@ -276,6 +222,61 @@ go run client.go | |||||||
| Hello John | Hello John | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ## How does it work? | ||||||
|  |  | ||||||
|  | <p align="center"> | ||||||
|  |   <img src="go-micro.png" /> | ||||||
|  | </p> | ||||||
|  |  | ||||||
|  | Go Micro is a framework that addresses the fundamental requirements to write microservices.  | ||||||
|  |  | ||||||
|  | Let's dig into the core components. | ||||||
|  |  | ||||||
|  | ### Registry | ||||||
|  |  | ||||||
|  | The registry provides a service discovery mechanism to resolve names to addresses. It can be backed by consul, etcd, zookeeper, dns, gossip, etc.  | ||||||
|  | Services should register using the registry on startup and deregister on shutdown. Services can optionally provide an expiry TTL and reregister  | ||||||
|  | on an interval to ensure liveness and that the service is cleaned up if it dies. | ||||||
|  |  | ||||||
|  | ### Selector | ||||||
|  |  | ||||||
|  | The selector is a load balancing abstraction which builds on the registry. It allows services to be "filtered" using filter functions and "selected"  | ||||||
|  | using a choice of algorithms such as random, roundrobin, leastconn, etc. The selector is leveraged by the Client when making requests. The client  | ||||||
|  | will use the selector rather than the registry as it provides that built in mechanism of load balancing.  | ||||||
|  |  | ||||||
|  | ### Transport | ||||||
|  |  | ||||||
|  | The transport is the interface for synchronous request/response communication between services. It's akin to the golang net package but provides  | ||||||
|  | a higher level abstraction which allows us to switch out communication mechanisms e.g http, rabbitmq, websockets, NATS. The transport also  | ||||||
|  | supports bidirectional streaming. This is powerful for client side push to the server. | ||||||
|  |  | ||||||
|  | ### Broker | ||||||
|  |  | ||||||
|  | The broker provides an interface to a message broker for asynchronous pub/sub communication. This is one of the fundamental requirements of an event  | ||||||
|  | driven architecture and microservices. By default we use an inbox style point to point HTTP system to minimise the number of dependencies required  | ||||||
|  | to get started. However there are many message broker implementations available in go-plugins e.g RabbitMQ, NATS, NSQ, Google Cloud Pub Sub. | ||||||
|  |  | ||||||
|  | ### Codec | ||||||
|  |  | ||||||
|  | The codec is used for encoding and decoding messages before transporting them across the wire. This could be json, protobuf, bson, msgpack, etc.  | ||||||
|  | Where this differs from most other codecs is that we actually support the RPC format here as well. So we have JSON-RPC, PROTO-RPC, BSON-RPC, etc.  | ||||||
|  | It separates encoding from the client/server and provides a powerful method for integrating other systems such as gRPC, Vanadium, etc. | ||||||
|  |  | ||||||
|  | ### Server | ||||||
|  |  | ||||||
|  | The server is the building block for writing a service. Here you can name your service, register request handlers, add middeware, etc. The service  | ||||||
|  | builds on the above packages to provide a unified interface for serving requests. The built in server is an RPC system. In the future there maybe  | ||||||
|  | other implementations. The server also allows you to define multiple codecs to serve different encoded messages. | ||||||
|  |  | ||||||
|  | ### Client | ||||||
|  |  | ||||||
|  | The client provides an interface to make requests to services. Again like the server, it builds on the other packages to provide a unified interface  | ||||||
|  | for finding services by name using the registry, load balancing using the selector, making synchronous requests with the transport and asynchronous  | ||||||
|  | messaging using the broker.  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | The  above components are combined at the top-level of micro as a **Service**. | ||||||
|  |  | ||||||
| ## Sponsors | ## Sponsors | ||||||
|  |  | ||||||
| <a href="https://www.sixt.com"><img src="https://micro.mu/sixt_logo.png" width=150px height="auto" /></a> | <a href="https://www.sixt.com"><img src="https://micro.mu/sixt_logo.png" width=150px height="auto" /></a> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user