茶艺师学微服务(实操篇)

前言

好久不见了,我们来回顾一下。

《茶艺师学微服务(准备篇)》中,我们开始对微服务架构有了大致的了解。

《茶艺师学微服务(准备篇2)》中,我们试着深入了解微服务架构中的经常会提到的 grpc ,尝试写出 grpc 所需的 proto 文件并生成出对应的 go 、grpc 协议的代码文件。

《茶艺师学微服务(准备篇3)》中,我们接着使用这些生成出来的代码文件,实现出一个简单的测试样例来体会一下 grpc 的通信。

有了这些准备,我们可以继续实践微服务化。

测试先行,测试驱动

假设我们手上已经有了一个准备微服务化的单体应用,那么先要做的,就是给这应用补写单元测试、集合测试。

写测试不光是注意代码覆盖率越高越好,还要注意:

  • 没有覆盖到的代码会不会有 BUG ?
  • 主要的业务场景有没有遗漏?(就算是代码全覆盖了,也不等于业务场景全覆盖)

在整个微服务化的过程中,我们都会写很多这样的测试。 把代码拆分了,引入微服务架构,就会为我们引入很多未知的 BUG 。

因此,"测试能确认代码在变动之前是正确的,但凡变动后运行出现 BUG 了,这能方便帮助我们定位到问题出在哪里。"

应用拆分路线

如何拆分应用,相信相关的教程网上一搜索一大把。

其中不乏"在这次微服务化,我们选择了 XX 架构,这个 XX 架构有什么特点,我们将应用拆分完微服务化,降本增效的效果显著 ..."。

也许是他们的功底深厚,对整个微服务过程十分熟悉,因此他们关注的重点是"使用什么微服务架构"。

我们是做不到"直接一个模块拆分出去成微服务",但可以走"步步为营"的路线,就像下图所示:

这样的好处是我们能有"后悔药"吃,哪里有问题了就停下来。

缺点也是很明显,就是没法验证完整流程(相比于"直接一个应用拆分出去成微服务"路线),到时遇到问题了得临时解决。

那如果说,"我就是要试试直接拆出一个模块将其微服务化"呢?

这里也是有个相对稳妥的步骤可供参考:

同时别忘记,测试,测试,测试

模块微服务化

在这我们不妨假设已经把一个模块分拆出来,并准备补好了它对应的测试,那么我们该做的,就是把这模块微服务化。

这个过程,我自己作为茶艺师的理解,就是"上个包装":我这里一饼茶正常售卖就一个包装,但如果客人是要送人的,那我得挑个礼盒把这饼茶给好好包起来,说不定还要写给卡片什么的。在这其中,茶就是"那个模块",把这茶装礼盒了,这个过程就可比喻为"微服务化"。

(学到这里,我自己感觉,"包层东西",这操作真是编程里很常见的操作,最著名的莫过于网络协议的层层包装。)

回到这模块身上,我们要做的,就是:

涉及 grpc 相关的操作,大家可以再看看《准备篇2》《准备篇3》,就不再赘述。

在这里说两个需要注意的点:

  • 模块的 proto 文件,以及对应由 grpc 工具生成的代码文件放在哪里,这也是学问。目前有三种方案,如图:
  • 还记得《准备篇2》中用来生成代码的相关命令吗?又臭又长,我们可以使用 buf 工具来简化

    工具下载地址:buf.build

在项目的顶层目录编写好 bef.gen.yaml 文件,接着运行命令 buf generate [proto文件存放目录] ,就可完成相关代码文件的编译了。详细内容可参考相关文档。

结语

当代码文件生成出来后,服务端的实现,客户端的实现,如果是你来,相信已经是手到擒来了。

下一篇我们就能来聊聊**带回滚方案的 client **要怎么弄了。

相关推荐
paopaokaka_luck10 分钟前
智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
数据库·vue.js·spring boot·后端·websocket·小程序
程序员NEO26 分钟前
Spring AI 对话记忆大揭秘:服务器重启,聊天记录不再丢失!
人工智能·后端
用户214118326360226 分钟前
惊爆!国内轻松白嫖 Claude Code,编程效率狂飙
后端
iccb101332 分钟前
我是如何实现在线客服系统的极致稳定性与安全性的
前端·javascript·后端
M1A138 分钟前
Java 面试系列第一弹:基础问题大盘点
java·后端·mysql
夕颜1111 小时前
关于 Cursor 小插曲记录
后端
考虑考虑1 小时前
go中的Map
后端·程序员·go
邓不利东2 小时前
Spring中过滤器和拦截器的区别及具体实现
java·后端·spring
头发那是一根不剩了2 小时前
Spring Boot 多数据源切换:AbstractRoutingDataSource
数据库·spring boot·后端