micro拥有完整的微服务生态,使用它构建一整套完整的微服务架构。下图是做者在博客中给出的使用micro的微服务架构图。 git
$ go get -u github.com/micro/micro
$ micro api --help
NAME:
micro api - Run the api gateway
USAGE:
micro api [command options] [arguments...]
OPTIONS:
--address Set the api address e.g 0.0.0.0:8080 [$MICRO_API_ADDRESS]
--handler Specify the request handler to be used for mapping HTTP requests to services; {api, event, http, rpc} [$MICRO_API_HANDLER]
--namespace Set the namespace used by the API e.g. com.example.api [$MICRO_API_NAMESPACE]
--resolver Set the hostname resolver used by the API {host, path, grpc} [$MICRO_API_RESOLVER]
复制代码
micro工具是使用go-micro构建,全部一样具备服务发现等功能。如上图,micro api会把外部的http请求转发的内部Order API服务等,API服务内部实现会调用更底层的Service。通常咱们将这里的API服务(Order API ...)称为聚合层服务或者业务层服务,更加底层的Serivce称为支撑服务或者基础服务。github
能够看出从逻辑上大体分为三层,网关层,聚合服务层,基础服务层,如图: golang
全部的服务均可以多实例部署,go-micro已经帮咱们处理好服务发现,RPC调用等问题,开发起来很是方便。固然咱们还须要鉴权,熔断,链路追踪,监控等功能,才能真正的能够投入使用。micro框架的插件机制,能够很是方便的实现这些功能。web
通常鉴权,熔断等功能都须要内置在API网关中,micro自带的网关并无提供这些功能,可是咱们能够本身写插件或者使用框架自带的插件来实现。计划为micro API网关增长以下功能:后端
聚合层服务主要是业务层逻辑,具体实现就是对外的HTTP API供前端调用。虽然micro API网关提供的将HTTP转换成内部RPC调用功能,可是写起来总以为变扭。幸运的是micro一样提供gin等经常使用golang web 框架的集成方法,此处有做者的例子https://github.com/micro/examples/tree/master/greeter/api。使用这种方式,网关在工做时就不须要将外部HTTP请求转换成RPC方法,因此须要在启动mciro API网关增长一个参数:micro api --handler=http ,handler默认是rpc模式。api