0. 为什么说做好微服务很难?
要想做好微服务,我们需要理解和掌握的知识点非常多,从几个维度上来说:
- 基本功能层面
-
并发控制&限流,避免服务被突发流量击垮
-
服务注册与服务发现,确保能够动态侦测增减的节点
-
负载均衡,需要根据节点承受能力分发流量
-
超时控制,避免对已超时请求做无用功
- 熔断设计,快速失败,保障故障节点的恢复能力
- 高阶功能层面
-
请求认证,确保每个用户只能访问自己的数据
-
链路追踪,用于理解整个系统和快速定位特定请求的问题
-
日志,用于数据收集和问题定位
- 可观测性,没有度量就没有优化
对于其中每一点,我们都需要用很长的篇幅来讲述其原理和实现,那么对我们后端开发者来说,要想把这些知识点都掌握并落实到业务系统里,难度是非常大的,不过我们可以依赖已经被大流量验证过的框架体系。go-zero 微服务框架就是为此而生。
另外,我们始终秉承工具大于约定和文档的理念。我们希望尽可能减少开发人员的心智负担,把精力都投入到产生业务价值的代码上,减少重复代码的编写,所以我们开发了goctl工具。
下面我通过短链微服务来演示通过go-zero快速的创建微服务的流程,走完一遍,你就会发现:原来编写微服务如此简单!
1. 什么是短链服务?
短链服务就是将长的 URL 网址,通过程序计算等方式,转换为简短的网址字符串。
写此短链服务是为了从整体上演示 go-zero 构建完整微服务的过程,算法和实现细节尽可能简化了,所以这不是一个高阶的短链服务。
2. 短链微服务架构图
-
这里只用了Transform RPC一个微服务,并不是说 API Gateway 只能调用一个微服务,只是为了最简演示 API Gateway 如何调用 RPC 微服务而已
- 在真正项目里要尽可能每个微服务使用自己的数据库,数据边界要清晰
3. goctl 各层代码生成一览
所有绿色背景的功能模块是自动生成的,按需激活,红色模块是需要自己写的,也就是增加下依赖,编写业务特有逻辑,各层示意图分别如下:
API Gateway
RPC
model
下面我们来一起完整走一遍快速构建微服务的流程,Let’s Go!
有疑问加站长微信联系(非本文作者)