Go_go-micro微服务框架记录


title: go-go-micro微服务框架记录
categories: Go
tags: [go, 微服务, 框架, 记录]
date: 2019-09-25 14:55:38
comments: false

go-go-micro微服务框架记录

代码实践仓库: https://github.com/yangxuan0261/GoMicro

fork 官方 examples: https://github.com/yangxuan0261/examples


todo

  • a

前篇

  • 官方
    • GitHub - https://github.com/micro/go-micro
    • Micro 博客 - https://micro.mu/blog/
    • 视频介绍 - https://www.youtube.com/watch?v=xspaDovwk34
    • 示例 - https://github.com/micro/examples
      • service - https://github.com/micro/examples/tree/master/service
      • function - https://github.com/micro/examples/tree/master/function
  • go-micro 微服务开发中文手册 - https://www.kancloud.cn/linimbus/go-micro
    • 编写Golang服务 - https://micro.mu/docs/writing-a-go-service.html
    • service.Run() 内部实现 - https://www.kancloud.cn/linimbus/go-micro/529030
    • Micro文档 - https://micro.mu/docs/cn/
    • Micro 中国站教程系列 ( 推荐 ) - https://github.com/micro-in-cn/tutorials
  • golang微服务框架go-micro 入门笔记 - http://www.spring4all.com/common/user/9843
  • 牌类游戏使用微服务重构笔记
    • https://juejin.im/post/5c6bd4b8f265da2dc13c7876
    • micro框架简介 go-micro - http://www.liuhaihua.cn/archives/555708.html
  • 微服务架构详解 - https://zhuanlan.zhihu.com/p/34392808
  • go-micro 框架初探 - https://segmentfault.com/a/1190000017572032
  • 基于Go Micro的微服务架构本地实战 - https://www.wangtianyi.top/blog/2019/03/26/ji-yu-go-microde-wei-fu-wu-jia-gou-ben-di-shi-zhan/
  • 团队准备使用 Go 构建微服务,请问大家有好的框架推荐么? - https://golangtc.com/t/5c75fb7db17a826706f8ada3
  • 基于Go Micro的微服务架构本地实战 - https://www.wangtianyi.top/blog/2019/03/26/ji-yu-go-microde-wei-fu-wu-jia-gou-ben-di-shi-zhan/
  • 一个微服务游戏服务架构 - http://gonet2.github.io/

入门资料

  • Go Micro 入门指南 - https://erikjiang.github.io/2018/07/05/GoMicroGuide/
  • golang微服务框架go-micro 入门笔记1.搭建 go-micro环境 - http://www.spring4all.com/article/15595
  • go微服务框架go-micro深度学习-目录 - https://www.cnblogs.com/li-peng/category/1292629.html
    • https://blog.csdn.net/mi_duo/article/category/8057244

go-micro的组件

架构图:

  • Registry组件:服务发现组件,提供服务发现机制:解析服务名字至服务地址。目前支持的注册中心有consul、etcd、 zookeeper、dns、gossip等
  • Selector组件:构建在Registry之上的客户端智能负载均衡组件,用于Client组件对Registry返回的服务进行智能选择。
  • Broker组件:发布/订阅组件,服务之间基于消息中间件的异步通信方式,默认使用http方式,线上通常使用消息中间件,如Kafka、RabbitMQ等。
  • Transport组件:服务之间同步通信方式。
  • Codec组件:服务之间消息的编码/解码。
  • Server组件:服务主体,该组件基于上面的Registry/Selector/Transport/Broker组件,对外提供一个统一的服务请求入口。
  • Client组件:提供访问微服务的客户端。类似Server组件,它也是通过Registry/Selector/Transport/Broker组件实现查找服务、负载均衡、同步通信、异步消息等功能。

常见的微服务架构图. 出处


micro 默认值

参考: https://gitissue.com/issues/5a20634a9a954719b8dd694e - Q: micro 在 创建并运行之后 时,各个 options/plugin 的默认值是什么?

Q: micro 在 创建并运行之后 时,各个 options/plugin 的默认值是什么?

各个 option/plugin 的默认值是:

  • Service Option: 参见 micro/go-micro/options.go
  • broker: “http”
  • client: “rpcclient”
  • server: “rpcserver”
  • registry: “consul”
  • transport: “http”
  • service id: servicename-uuid.NewUUID()
  • Service Server Option: 参见
    • address: “:0”
    • name: “go-server”
    • version: “1.0.0”
    • Id: uuid.NewUUID()
    • RegisterInterval: 1分钟(微服务自动向 registry 注册的心跳时间)

安装

参考: Go_go-micro入门示例.md, 会生成一个可执行程序

go get -v -u github.com/micro/micro // micro工具包

列出所有服务
λ micro list services
user

获取 user 服务信息
λ micro get service user
service  user

version 2019.09.28.03.28

ID      Address Metadata
user-bf42f3a1-d870-45a6-9c9e-18ba99279dd5       192.168.1.190:59462     registry=mdns,server=mucp,transport=http,broker=http,protocol=mucp

version 2019.09.28.02.04

ID      Address Metadata
user-d9a8a8db-28c6-424f-ab2a-843f80049cea       192.168.1.190:53802     broker=http,protocol=mucp,registry=mdns,server=mucp,transport=http

Endpoint: User.Hello
Metadata: stream=false

Request: {
        name string
}

Response: {
        msg string
}

web 界面
F:\a_link_workspace\go\GoWinEnv_Test01 (master -> origin)
λ micro web // 指令
2019/09/28 15:23:02 HTTP API Listening on [::]:8082 // 默认端口
2019/09/28 15:23:02 Transport [http] Listening on [::]:60676
2019/09/28 15:23:02 Broker [http] Connected to [::]:60677
2019/09/28 15:23:02 Registry [mdns] Registering node: go.micro.web-4832fb75-d027-4b66-a420-09abae8e6ecb

然后打开 http://localhost:8082/registry 就能访问已有的服务

点击 user 查看服务的具体信息


容错

  • https://www.kancloud.cn/linimbus/go-micro/529028

Selector

  • 使用Micro构建有弹性的、高容错的应用 - http://btfak.com/%E5%BE%AE%E6%9C%8D%E5%8A%A1/2016/05/15/resiliency/
  • Go Micro Selector 源码分析 - https://segmentfault.com/a/1190000019802132
  • go-micro 防坑指南 - https://magodo.github.io/go-micro-tips/

用于 负载均衡, 选择节点

参考 github.com/micro/examples/client/dc_selector/dc_selector.go 中的代码


Wrapper

请求拦截, 鉴权等, 合法才调用对应的请求

参考: src/github.com/micro/examples/wrapper


Transport

  • go-micro源码值Transport - http://www.mckee.cn/golang/go-micro/transport

内置支持的几种传输方式在 github.com/micro/go-micro/transport 目录下

默认使用的是 http 作为传输层, 直接 run 一个空服务就可以看出来

f:\a_link_workspace\go\GoWinEnv_Test01\src\GoMicro\test001\srv (master -> origin)
$ go run service.go
2019/10/08 19:46:32 Transport [http] Listening on [::]:58351 // 这里可以看出来
2019/10/08 19:46:32 Broker [http] Connected to [::]:58352
2019/10/08 19:46:32 Registry [mdns] Registering node: user-0f5e2541-bfb2-47a4-a645-e2199a33a2c0
使用 grpc
  • 参考: test_transport_grpc

要求 client - server 必须同时 grpc 方式传输, 否则调用不到

使用非常简单

import (
	"github.com/micro/go-micro/transport/grpc" // 引入 grpc
)

func main() {
	service := micro.NewService(
        ...
		micro.Transport(grpc.NewTransport()), // Transport 指定为 grpc
	)
}
  • 启动是就可以看到 transport 使用的 grpc

    $ go run service.go
    2019/10/08 19:53:58 Transport [grpc] Listening on [::]:58927 // grpc
    2019/10/08 19:53:58 Broker [http] Connected to [::]:58928
    2019/10/08 19:53:58 Registry [mdns] Registering node: user-0c12feb1-56b4-4496-a743-f22cc4ebd8ac
    --- req, name:World ^_^
    

Broker

  • Pub/Sub with Go-Micro - http://adityar.com/go-micro-pub-sub
使用 grpc

参考: test_broker_grpc

import (
    "github.com/micro/go-plugins/broker/grpc"
)

var grpcBroker broker.Broker
func main() {
	cmd.Init()

	grpcBroker = grpc.NewBroker()

	if err := grpcBroker.Init(); err != nil {
		log.Fatalf("Broker Init error: %v", err)
	}
	if err := grpcBroker.Connect(); err != nil {
		log.Fatalf("Broker Connect error: %v", err)
	}

	go sub()

	service := micro.NewService(
		micro.Name("test_broker_grpc_consumer"),
		micro.Broker(grpcBroker),
	)
	...
}


踩坑

  • build 或 run 报错: go: xxx requires

    需要在 GOPATH 目录下使用命令 build 或 run

    E:\ws_go\GoWinEnv (master -> origin)
    $ go build -o mainWithEtcdv3.exe ./src\github.com\micro\micro/main.go ./src\github.com\micro\micro/plugins.go
    
  • verifying ‘protobuf’ malformed record data

    错误: verifying github.com/gogo/protobuf@v0.0.0-20190410021324-65acae22fc9/go.mod: github.com/gogo/protobuf@v0.0.0-20190410021324-65acae22fc9/go.mod: malformed record data

    可能引用的版本不对. 参考: https://github.com/golang/go/issues/34394

    go.mod 文件中, 替换合法的版本

    replace github.com/gogo/protobuf v0.0.0-20190410021324-65acae22fc9 => github.com/gogo/protobuf v0.0.0-20190723190241-65acae22fc9d
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Go-Micro 和 Go-Zero 都是 Go 语言领域中受欢迎的微服务框架,它们各自有不同的特点和适用场景。下面是它们的优缺点和受欢迎程度的概述: Go-Micro 框架的优点: 1. 社区活跃:Go-Micro 是一个开源项目,并且拥有活跃的社区支持,可以从社区中获取丰富的资源和支持。 2. 多语言支持:Go-Micro 提供了多语言支持,可以用于构建多语言之间的微服务应用。 3. 插件系统:Go-Micro 提供了插件系统,可以方便地扩展和定制功能。 4. 多种通信协议支持:Go-Micro 支持多种通信协议,包括 HTTP、gRPC、AMQP 等。 5. 高度可定制性:Go-Micro 提供了很高的可定制性,可以根据需求进行灵活配置和扩展。 Go-Micro 框架的缺点: 1. 上手难度较高:对于初学者来说,Go-Micro 的学习曲线可能相对陡峭,需要一些时间和经验来掌握和理解其概念。 2. 文档相对不完善:尽管有一些文档和示例可供参考,但相对来说,Go-Micro 的文档可能相对不够完善。 Go-Zero 框架的优点: 1. 简单易用:Go-Zero 的设计目标是简化开发流程和提高开发效率,提供了简洁易用的 API 和工具,使得开发者能够快速上手并构建稳定可靠的微服务应用。 2. 高性能:Go-Zero 采用了一系列优化策略,包括代码生成、缓存、连接池等,以提供高性能的微服务框架。 3. 内置功能丰富:Go-Zero 提供了许多内置功能,例如日志、配置、错误处理、中间件等,可以帮助开发者更快速地构建微服务应用。 4. 兼容性强:Go-Zero 支持多种传输协议和数据格式,包括 HTTP、gRPC、JSON 等,并且可以与其他框架和组件进行无缝集成。 Go-Zero 框架的缺点: 1. 相对较新:Go-Zero 是一个相对较新的框架,与一些其他框架相比,可能还没有得到广泛的应用和验证。 2. 社区相对较小:相对于一些其他流行的框架,Go-Zero 的社区规模可能相对较小,获取支持和资源可能相对有限。 关于哪个框架使用的人更多,这取决于具体的使用场景、个人偏好和团队需求。目前来说,Go-Micro 可能更受欢迎一些,因为它具有更长时间的发展历史和更大的社区规模。但是随着 Go-Zero 的不断发展和改进,它也在逐渐受到更多人的关注和使用。最终选择哪个框架,建议根据项目需求、团队经验和个人偏好进行评估和选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值