微服务框架 go-micro 入门指南:构建分布式应用的第一步

大家好,我是木川

一、概览

概念

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-micro201520.9k轻量级且高性能维护力度较弱
go-kit201525.5k微服务的工具集维护力度较弱
go-kratos201921.6k轻量级且高性能维护力度居中
go-zero202026k稍重的微服务框架维护力度较好

应用场景

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 的工作原理包括以下关键步骤:

  1. 创建和初始化微服务:开发人员创建一个新的 go-micro 服务,并通过 service.Init()来初始化。

  2. 定义和注册服务接口:定义服务接口,并使用 go-micro 的自动生成工具来生成接口定义和存根代码。注册服务接口到 go-micro 。

  3. 创建客户端:创建客户端并通过服务接口进行远程过程调用。

  4. 服务发现:go-micro 使用服务发现机制来发现可用的服务实例。

  5. 负载均衡:go-micro 支持多种负载均衡策略,确保请求分布均匀。

  6. RPC通信:go-micro 使用gRPC进行高性能的RPC通信。

  7. 响应处理:处理远程服务的响应并将结果返回给调用方。

通过这些步骤,go-micro 简化了微服务应用程序的开发和管理,帮助开发人员构建可靠的分布式系统。

最后给自己的原创 Go 面试小册打个广告,如果你从事 Go 相关开发,欢迎扫码购买,目前 10 元买断,加下面的微信发送支付截图额外赠送一份自己录制的 Go 面试题讲解视频

f952980b81d26c64a2c42f9f96762747.jpeg

b6a2a154d6a25377f419159f3233ca65.png

如果对你有帮助,帮我点一下在看或转发,欢迎关注我的公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值