【go-micro实践】micro 微服务架构实践

Github完整代码地址 我的博客前端

微服务架构

micro拥有完整的微服务生态,使用它构建一整套完整的微服务架构。下图是做者在博客中给出的使用micro的微服务架构图。 git

在这里插入图片描述
使用micro框架提供的工具Micro API(命令 micro api 运行)便可启动启动一个API网关。

$ 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

在这里插入图片描述
使用硬件或者软件负载均衡将流量分摊到API网关,由网关统一鉴权,而后再将请求路由到后端对应的服务上。相同的服务能够有多个实例,网关会按必定规则分摊到不一样的实例,规则是经过插件可更改的,默认是随机。充值服务等聚合层的服务会根据业务逻辑调用底层的用户服务获取用户数据,调用帐单服务建立帐单等,与底层服务的调用采用RPC调用,micro采用protobuf来编解码,传输方式是可选的,mciro默认为http,可使用grpc,tcp,nats,utp等。

全部的服务均可以多实例部署,go-micro已经帮咱们处理好服务发现,RPC调用等问题,开发起来很是方便。固然咱们还须要鉴权,熔断,链路追踪,监控等功能,才能真正的能够投入使用。micro框架的插件机制,能够很是方便的实现这些功能。web

扩展micro自带的API网关

通常鉴权,熔断等功能都须要内置在API网关中,micro自带的网关并无提供这些功能,可是咱们能够本身写插件或者使用框架自带的插件来实现。计划为micro API网关增长以下功能:后端

  1. JWT鉴权
  2. Jaeger 链路追踪
  3. hystrix熔断dashboard展现
  4. prometheus监控

聚合层服务

聚合层服务主要是业务层逻辑,具体实现就是对外的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

相关文章
相关标签/搜索