前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go微服务系统精讲 Go-Zero全流程实战即时通讯 ( IM )

Go微服务系统精讲 Go-Zero全流程实战即时通讯 ( IM )

原创
作者头像
用户11119667
发布2024-05-16 21:32:22
1720
发布2024-05-16 21:32:22

微服务核心要素

一、微服务架构体系

微服务架构,作为软件开发领域的一个热门话题,它的核心不仅仅局限于技术层面,而是涵盖了业务建模、技术体系和研发过程的全方位考量。

(一)微服务架构基本概念

微服务的三大要素包括业务建模、技术体系和研发过程:

  • 业务建模:涉及将复杂业务系统拆分成独立运作的微服务,核心子域、通用子域和支撑子域的划分是关键。
  • 技术体系:包括服务治理、服务路由、服务容错等八大关键组件,它们共同构成了微服务架构的技术基础。
  • 研发过程:强调以功能为中心的团队建设,即Feature Team,以促进不同技能背景的人员协同工作。

微服务的扩展性通过AFK扩展立方体来描述,包括水平扩展(X轴)、垂直扩展(Y轴)和数据分区(Z轴)。

业务边界的划分采用领域驱动设计(DDD),通过界定上下文和聚合,形成稳定的业务内核。

数据管理方面,微服务架构倡导服务与数据的分离,并采用XQRS模式,将数据操作分为查询和命令两大类。

事务管理策略需要考虑跨服务的事务一致性,包括强一致性和弱一致性(最终一致性)的处理。

对于遗留系统的微服务化,可以采用绞杀者模式或修缮者模式进行架构演进。

(二)微服务架构核心技术组件

微服务架构的核心技术组件包括:

  1. 网络通信:在微服务中,HTTP协议因其开发、维护和性能的综合优势而成为主流选择。
  2. 服务治理:注册中心作为服务治理的核心,负责服务的注册与发现。
  3. 服务路由:通常与注册中心结合使用,通过负载均衡器实现服务调用。
  4. 服务容错:包括集群容错策略、服务隔离机制等。
  5. 服务配置:配置中心用于统一管理项目配置。
  6. 服务网关:负责请求监控、安全管理等。
  7. 服务安全:微服务间的访问需要安全认证,如基于Token机制。
  8. 服务监控:数据埋点、指标采集等,通过可视化工具展示。

Spring Cloud Alibaba作为Spring Cloud的扩展,提供了包括服务治理(Nacos)、服务配置(Nacos)、服务容错(Sentinel)等在内的一系列解决方案。

Go微服务系统精讲 Go-Zero全流程实战即时通讯 ( IM ) - Go-Zero入门

GO环境配置

在Linux系统中,配置GO环境的示例如下:

代码语言:javascript
复制
bashexport GOROOT="/home/haima/local/go" # 设置Go源码包路径
export GOPATH=/media/haima/34E401CC64DD0E282/site/go  # 设置工作目录路径
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin # 添加Go编译器和工具到系统PATH

环境与依赖安装

搭建Go-Zero开发环境需要以下组件:

  • go-zero:使用go mod tidy命令自动下载依赖。
  • goctl:Go-Zero的命令行工具,安装命令如下:bashGOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest
  • protoc:Protocol Buffers的编译器,可以从这里下载。
  • protoc-gen-goprotoc-gen-go-grpc:用于生成Go语言的Protocol Buffers代码。

goctl工具安装与使用

对于Go 1.16及以上版本,安装goctl并检查版本:

代码语言:javascript
复制
bashhaima@haima-PC:~/Desktop$ goctl -v
goctl version 1.3.5 linux/amd64

如果需要安装protocprotoc-gen-goprotoc-gen-go-grpc,可以使用以下命令:

代码语言:javascript
复制
bashgoctl env check -i -f

这将自动安装所需的依赖。

API服务与文档生成

  • API文档生成:通过goctl api doc --dir ./命令,可以根据.api文件生成API文档。
  • 服务关键配置:使用@server注解定义服务的路由组和路由前缀:
代码语言:javascript
复制
go@server(
  group: user,
  prefix: api/v1
)

三、深入Go-Zero开发

API代码编写

  1. 创建.api文件:例如user.api,手动创建或使用命令goctl api new user自动生成。
  2. 编写API定义:定义请求和响应类型,以及服务端点。
  3. 生成API代码:使用goctl api go命令或别名apigen生成API的Go代码。
  4. 构建项目结构:包括内部逻辑、服务上下文、类型定义等。
  5. 下载依赖:运行go mod tidy命令整理模块依赖。
  6. 生成Dockerfile和k8s配置文件:为部署准备必要的文件。

RPC代码编写

  1. 创建.proto文件:例如user.proto,定义RPC服务和消息类型。
  2. 生成RPC代码:使用goctl rpc protoc命令或别名rpcgen生成RPC的Go代码。
  3. 查看生成目录:确认生成的代码结构是否符合预期。
  4. 下载依赖:运行go mod tidy命令整理模块依赖。

Model代码生成

  1. 编写genModel.sh脚本:自动化Model代码的生成。
  2. 执行脚本:根据数据库表名生成Model代码。
  3. 移动和调整Model代码:将生成的Model代码放到正确的服务目录,并调整包名。

代码示例与结构

文章中提供了完整的代码示例和项目结构,展示了如何构建基于Go-Zero的微服务项目。以下是部分示例:

GO环境配置示例
代码语言:javascript
复制
bashexport GOROOT="/home/haima/local/go"
export GOPATH=/media/haima/34E401CC64DD0E282/site/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
goctl安装命令
代码语言:javascript
复制
bashGOPROXY=https://goproxy.cn/,direct go install github.com/zeromicro/go-zero/tools/goctl@latest
API定义示例 (user.api)
代码语言:javascript
复制
gosyntax = "v1"

info(
  author: "user-api"
  date:   "2022-03-26"
  desc:   "api语法示例及语法说明"
)

type UserInfoRequest {
  UserId int64 `json:"userId"`
}

type UserInfoResponse {
  UserId   int64  `json:"userId"`
  Nickname string `json:"nickname"`
}

service user-api{
  @doc "获取用户信息"
  @handler userInfo
  post /user/info (UserInfoRequest) returns (UserInfoResponse)
}
RPC定义示例 (user.proto)
代码语言:javascript
复制
protobufsyntax = "proto3";

option go_package = "./pb";

package pb;

message GetUserInfoReq {
  int64  id = 1;
}

message GetUserInfoResp {
  int64  id = 1;
  string nickname = 2;
}

service usercenter {
  rpc GetUserInfo(GetUserInfoReq) returns(GetUserInfoResp);
}
生成API文档命令
代码语言:javascript
复制
bashgoctl api doc --dir ./
使用@server注解定义服务
代码语言:javascript
复制
go@server(
  group: user,
  prefix: api/v1
)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 微服务核心要素
    • (一)微服务架构基本概念
      • (二)微服务架构核心技术组件
      • Go微服务系统精讲 Go-Zero全流程实战即时通讯 ( IM ) - Go-Zero入门
        • GO环境配置
          • 环境与依赖安装
            • goctl工具安装与使用
              • API服务与文档生成
              • 三、深入Go-Zero开发
                • API代码编写
                  • RPC代码编写
                    • Model代码生成
                      • 代码示例与结构
                        • GO环境配置示例
                        • goctl安装命令
                        • API定义示例 (user.api)
                        • RPC定义示例 (user.proto)
                        • 生成API文档命令
                        • 使用@server注解定义服务
                    相关产品与服务
                    微服务引擎 TSE
                    微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档