你还在手撕微服务?快试试 go-zero 的微服务自动生成

2020-09-04 15:23:26 +08:00
 kevinwan

0. 为什么说做好微服务很难?

要想做好微服务,我们需要理解和掌握的知识点非常多,从几个维度上来说:

对于其中每一点,我们都需要用很长的篇幅来讲述其原理和实现,那么对我们后端开发者来说,要想把这些知识点都掌握并落实到业务系统里,难度是非常大的,不过我们可以依赖已经被大流量验证过的框架体系。go-zero 微服务框架就是为此而生。

另外,我们始终秉承工具大于约定和文档的理念。我们希望尽可能减少开发人员的心智负担,把精力都投入到产生业务价值的代码上,减少重复代码的编写,所以我们开发了goctl工具。

下面我通过短链微服务来演示通过go-zero快速的创建微服务的流程,走完一遍,你就会发现:原来编写微服务如此简单!

1. 什么是短链服务?

短链服务就是将长的 URL 网址,通过程序计算等方式,转换为简短的网址字符串。

写此短链服务是为了从整体上演示 go-zero 构建完整微服务的过程,算法和实现细节尽可能简化了,所以这不是一个高阶的短链服务。

2. 短链微服务架构图

3. goctl 各层代码生成一览

所有绿色背景的功能模块是自动生成的,按需激活,红色模块是需要自己写的,也就是增加下依赖,编写业务特有逻辑,各层示意图分别如下:

下面我们来一起完整走一遍快速构建微服务的流程,Let’s Go!🏃‍♂️

4. 准备工作

5. 编写 API Gateway 代码

6. 编写 transform rpc 服务

7. 修改 API Gateway 代码调用 transform rpc 服务

8. 定义数据库表结构,并生成 CRUD+cache 代码

9. 修改 shorten/expand rpc 代码调用 crud+cache 代码

10. 完整调用演示

11. Benchmark

因为写入依赖于 mysql 的写入速度,就相当于压 mysql 了,所以压测只测试了 expand 接口,相当于从 mysql 里读取并利用缓存,shorten.lua 里随机从 db 里获取了 100 个热 key 来生成压测请求

可以看出在我的 MacBook Pro 上能达到 3 万+的 qps 。

12. 总结

我们一直强调工具大于约定和文档

go-zero 不只是一个框架,更是一个建立在框架+工具基础上的,简化和规范了整个微服务构建的技术体系。

我们在保持简单的同时也尽可能把微服务治理的复杂度封装到了框架内部,极大的降低了开发人员的心智负担,使得业务开发得以快速推进。

通过 go-zero+goctl 生成的代码,包含了微服务治理的各种组件,包括:并发控制、自适应熔断、自适应降载、自动缓存控制等,可以轻松部署以承载巨大访问量。

有任何好的提升工程效率的想法,随时欢迎交流!👏

13. 项目地址

https://github.com/tal-tech/go-zero

14. 微信交流群

2240 次点击
所在节点    Go 编程语言
4 条回复
zhoushuguangking
2020-09-04 15:26:10 +08:00
简洁易用,在本地跑了个 demo,非常容易上手
server
2020-09-04 15:36:53 +08:00
哎, 这个 @ server 我是迷了, 话说二群我还带动了几个小伙伴.
sjlzz1221
2020-09-04 21:19:51 +08:00
有没有 java-zero
naturalaw
2020-09-05 11:34:10 +08:00
为啥不用 QQ 群,微信群有点鸡肋。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/704230

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX