一、概览
概念
go-micro 是一个开源的微服务框架,旨在简化分布式系统的开发。它基于 Go 语言构建,提供了一组组件和工具,帮助开发人员构建可伸缩、可维护的微服务应用程序。
它的设计理念是「可插拔」的插件化架构,其核心专注于提供底层的接口定义和基础工具,这些底层接口可以兼容各种实现
它的的主要组成模块包括服务发现、负载均衡、消息传递、远程过程调用(RPC)等。
产生背景
go-micro 的出现是为了解决微服务架构中的一些常见问题。在传统的单体应用中,随着业务增长,代码变得庞大、难以维护,而微服务架构可以将应用拆分成小块,每个微服务专注于特定的功能。但微服务也引入了一些新问题,如服务发现、负载均衡、跨服务通信等。
在没有 go-micro 这样的技术之前,开发人员需要自行实现这些功能,导致了重复劳动和错误的风险。
go-micro 利用 Go 语言的并发性和轻量级特性,提供了一种简单而强大的方法来构建和管理微服务。它解决了微服务架构中的常见问题,使开发人员能够更容易地创建和维护分布式系统。
底层使用技术
go-micro 的底层使用技术包括 Go 语言、gRPC(一种高性能远程过程调用框架)、etcd(分布式键值存储系统)等。这些技术共同提供了 go-micro 的核心功能,如服务发现、负载均衡和 RPC。
同类技术有哪些
与 go-micro 类似的微服务框架还有 Spring Cloud(Java 语言)、go-kratos、go-zero 等。这些框架也用于构建和管理微服务应用程序,但它们使用不同的编程语言和技术栈。
对比同类优缺点
选取了市面上 start 数最多的几个 Go 微服务框架对比:
框架名 | 开源时间 | github star | 优点 | 缺点 |
---|---|---|---|---|
go-micro | 2015 | 20.9k | 轻量级且高性能 | 维护力度较弱 |
go-kit | 2015 | 25.5k | 微服务的工具集 | 维护力度较弱 |
go-kratos | 2019 | 21.6k | 轻量级且高性能 | 维护力度居中 |
go-zero | 2020 | 26k | 稍重的微服务框架 | 维护力度较好 |
应用场景
go-micro 适用于各种应用场景,包括但不限于:
- 构建复杂的微服务应用程序。
- 用于大规模分布式系统,需要服务发现和负载均衡的场景。
- 需要高性能 RPC 通信的应用程序。
- 具有高并发和伸缩性需求的项目。
二、如何使用
以下是一个简单的 go-micro 官方使用示例
服务端
创建一个名为 server.go 的 Go 文件,用于实现服务端
package main
import (
"context"
"log"
"go-micro.dev/v4" // 引入 go-micro 框架
)
/*
* 定义一个 handler
*/
// handler 接口请求参数
type Request struct {
Name string `json:"name"`
}
// handler 接口请求响应
type Response struct {
Message string `json:"message"`
}
// Helloworld 服务
type Helloworld struct{}
// 实现 Helloworld 服务接口 Greeting handler
func (h *Helloworld) Greeting(ctx context.Context, req *Request, rsp *Response) error {
rsp.Message = "Hello " + req.Name
return nil
}
func main() {
// 创建微服务实例
service := micro.NewService(
micro.Name("helloworld"), // 名称
micro.Address(":8080"), // 端口
micro.Handle(new(Helloworld)), // 注册 Helloworld 服务
)
// 接收命令行参数 如 --server_address
service.Init()
// 运行微服务
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
客户端
通过 curl 发送请求实现客户端,注意必须带上请求头 Micro-Endpoint
,指向 handler
curl -XPOST \
-H 'Content-Type: application/json' \
-H 'Micro-Endpoint: Helloworld.Greeting' \
-d '{"name": "muchuang"}' \
http://localhost:8080
输出:
{"message":"Hello muchuang"}
三、工作原理
go-micro 的工作原理包括以下关键步骤:
- 创建和初始化微服务:开发人员创建一个新的 go-micro 服务,并通过 service.Init()来初始化。
- 定义和注册服务接口:定义服务接口,并使用 go-micro 的自动生成工具来生成接口定义和存根代码。注册服务接口到 go-micro 。
- 创建客户端:创建客户端并通过服务接口进行远程过程调用。
- 服务发现:go-micro 使用服务发现机制来发现可用的服务实例。
- 负载均衡:go-micro 支持多种负载均衡策略,确保请求分布均匀。
- RPC通信:go-micro 使用gRPC进行高性能的RPC通信。
- 响应处理:处理远程服务的响应并将结果返回给调用方。
通过这些步骤,go-micro 简化了微服务应用程序的开发和管理,帮助开发人员构建可靠的分布式系统。