AI 中文社区(简称 AI 中文社),是国内学习交流AI人工智能技术的中文社区网站,这里可获取及贡献任何AI人工智能技术,我们追求自由、简洁、纯粹、分享的多元化人工智能社区。

Go Micro 一个 Go 微服务框架

发布于 2024-08-03 · 浏览数 160 · 最后编辑 2024-10-22 11:21

Go Micro 微服务框架

Go Micro 是一个用于分布式系统开发的框架。

概述

Go Micro 提供了分布式系统开发的核心需求,包括 RPC 和事件驱动通信。Go Micro 的理念是合理的默认值和可插拔的架构。我们提供默认值,以便让你快速上手,但所有内容都可以轻松替换。

功能特点

Go Micro 抽象了分布式系统的细节。以下是主要功能:

  • 认证 - 认证作为首要功能内置其中。认证和授权通过为每个服务提供身份和证书,实现安全的零信任网络。这还包括基于规则的访问控制。

  • 动态配置 - 从任何地方加载和热重载动态配置。配置接口提供了一种从任何来源(如环境变量、文件、etcd 等)加载应用程序级配置的方法。你可以合并这些来源,甚至定义回退。

  • 数据存储 - 一个简单的数据存储接口,用于读取、写入和删除记录。它在插件库中支持许多存储后端。状态和持久化成为原型开发之外的核心需求,Micro 希望将其构建到框架中。

  • 服务发现 - 自动服务注册和名称解析。服务发现是微服务开发的核心。当服务 A 需要与服务 B 通信时,它需要该服务的位置。默认的发现机制是多播 DNS(mdns),一种零配置系统。

  • 负载均衡 - 基于服务发现的客户端负载均衡。一旦我们获得了一个服务的任意数量实例的地址,我们现在需要一种方法来决定路由到哪个节点。我们使用随机哈希负载均衡来提供跨服务的均匀分布,如果有问题,就尝试另一个节点。

  • 消息编码 - 基于内容类型的动态消息编码。客户端和服务器将使用编解码器以及内容类型,为你无缝地编码和解码 Go 类型。可以从不同的客户端发送和编码各种消息。客户端和服务器默认会处理这个问题。这默认包括 protobuf 和 json。

  • RPC 客户端/服务器 - 支持双向流的基于 RPC 的请求/响应。我们为同步通信提供了一个抽象。向一个服务发出的请求将自动得到解决、负载均衡、拨号和流处理。

  • 异步消息传递 - PubSub 作为首要功能内置其中,用于异步通信和事件驱动架构。事件通知是微服务开发中的一个核心模式。默认的消息传递系统是一个 HTTP 事件消息代理。

  • 可插拔接口 - Go Micro 对每个分布式系统抽象都使用了 Go 接口。由于这些接口是可插拔的,因此 Go Micro 可以在运行时无关。你可以插入任何底层技术。

入门指南

要使用 Go Micro,导入它

import "go-micro.dev/v5"

定义一个处理程序(可选支持 protobuf - 请参阅示例

type Request struct {
        Name string `json:"name"`
}

type Response struct {
        Message string `json:"message"`
}

type Helloworld struct{}

func (h *Helloworld) Greeting(ctx context.Context, req *Request, rsp *Response) error {
        rsp.Message = "Hello " + req.Name
        return nil
}

创建、初始化并运行服务

// 创建一个新服务
service := micro.NewService(
    micro.Name("helloworld"),
    micro.Handle(new(Helloworld)),
)

// 初始化标志
service.Init()

// 启动服务
service.Run()

可选地设置固定地址

service := micro.NewService(
    // 设置地址
    micro.Address(":8080"),
)

通过 curl 调用它

curl -XPOST \
     -H 'Content-Type: application/json' \
     -H 'Micro-Endpoint: Helloworld.Greeting' \
     -d '{"name": "alice"}' \
      http://localhost:8080
Go Micro 一个 Go 微服务框架 - 开发类 - Wiki - AI 中文社区