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

前言

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

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

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

相关推荐
炒空心菜菜9 小时前
SparkSQL 连接 MySQL 并添加新数据:实战指南
大数据·开发语言·数据库·后端·mysql·spark
蜗牛沐雨11 小时前
Rust 中的 `PartialEq` 和 `Eq`:深入解析与应用
开发语言·后端·rust
Python私教11 小时前
Rust快速入门:从零到实战指南
开发语言·后端·rust
秋野酱12 小时前
基于javaweb的SpringBoot爱游旅行平台设计和实现(源码+文档+部署讲解)
java·spring boot·后端
小明.杨13 小时前
Django 中时区的理解
后端·python·django
有梦想的攻城狮13 小时前
spring中的@Async注解详解
java·后端·spring·异步·async注解
qq_124987075313 小时前
原生小程序+springboot+vue医院医患纠纷管理系统的设计与开发(程序+论文+讲解+安装+售后)
java·数据库·spring boot·后端·小程序·毕业设计
lybugproducer13 小时前
浅谈 Redis 数据类型
java·数据库·redis·后端·链表·缓存
焚 城14 小时前
.NET8关于ORM的一次思考
后端·.net
撸猫79116 小时前
HttpSession 的运行原理
前端·后端·cookie·httpsession