微服务知识体系概览
问题
Go 微服务生态包含哪些内容?有哪些主流框架和工具?
答案
知识体系
主流框架对比
| 框架 | 来源 | 特点 | 适用场景 |
|---|---|---|---|
| go-zero | 好未来 | 开箱即用、代码生成、完整工具链 | 快速开发 |
| Kratos | B站 | 模块化、DDD 友好、Wire DI | 中大型项目 |
| go-kit | 社区 | 微服务工具包、非框架 | 灵活定制 |
| go-micro | 社区 | 插件化、多种传输协议 | 轻量微服务 |
| Kitex | 字节 | 高性能 RPC、Thrift/gRPC | 超高并发 |
选型建议
- 快速上手:go-zero(代码生成器 goctl 一键生成 CRUD)
- 架构灵活:Kratos(DDD 分层、依赖注入)
- 极致性能:Kitex(字节内部大规模验证)
- 自由组合:go-kit + 自选组件
微服务核心概念
| 概念 | 说明 | Go 常用方案 |
|---|---|---|
| 服务发现 | 服务实例动态注册/查找 | etcd、Consul、Nacos |
| 负载均衡 | 请求分发到多个实例 | gRPC 内置、自定义 Resolver |
| 熔断降级 | 故障隔离、快速失败 | sentinel-go、hystrix-go |
| 链路追踪 | 分布式调用链可视化 | OpenTelemetry、Jaeger |
| 配置中心 | 配置集中管理、动态更新 | etcd、Apollo、Nacos |
| API 网关 | 统一入口、鉴权、限流 | Kong、APISIX、自研 |
典型微服务架构
常见面试问题
Q1: Go 适合做微服务吗?
答案:非常适合:
- 编译为单二进制:部署方便,Docker 镜像小(Alpine + 二进制 ≈ 10MB)
- goroutine:天然高并发,单实例轻松处理数万连接
- gRPC 原生支持:Google 出品,Go 是一等公民
- 启动快:毫秒级启动,适合容器化弹性伸缩
- 资源占用低:同等 QPS 下内存远低于 Java
Q2: 微服务拆分原则?
答案:
- 单一职责:每个服务只做一件事
- DDD 边界上下文:按业务域拆分(用户、订单、支付)
- 数据库独立:每个服务有自己的数据库
- 避免过细:起步粗粒度,有需要再细分
- 参考团队规模:一个小组维护 2-3 个服务