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

前言

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

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

《茶艺师学微服务(准备篇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 **要怎么弄了。

相关推荐
盘古开天166610 分钟前
从零开始:如何搭建你的第一个简单的Flask网站
后端·python·flask
用户214118326360210 分钟前
Claude Skills 从零到一:手把手打造专属公众号文风生成器,10 分钟搞定 AI 技能定制
后端
追逐时光者35 分钟前
C#/.NET/.NET Core技术前沿周刊 | 第 60 期(2025年11.1-11.9)
后端·.net
码上成长42 分钟前
GraphQL:让前端自己决定要什么数据
前端·后端·graphql
码事漫谈1 小时前
C++双向链表删除操作:由浅入深完全指南
后端
码事漫谈2 小时前
软件生产的“高速公路网”:深入浅出理解CI/CD的核心流程
后端
Moonbit2 小时前
MGPIC 初赛提交倒计时 4 天!
后端·算法·编程语言
程序定小飞2 小时前
基于springboot的作业管理系统设计与实现
java·开发语言·spring boot·后端·spring
程序员小假3 小时前
我们来说一下 Mybatis 的缓存机制
java·后端
沙虫一号3 小时前
线上python问题排查思路
后端·python