写在前头

考虑到近期耗费了不少时间在微服务开发上,在拜读完学院君的《微服务从入门到实践》在趟了很多坑后获得了一些自己的理解和实践。为了巩固近期学习到的知识,以及为后来者作些许贡献,打算利用空闲时间来书写一写我这段时间内从零到一的实现方案。作为一名有实用原则的程序员,行文中我可能并不会对概念方面进行详细讲解。只希望能抛砖引玉让大家对整个方案的实现有所理解,点到点之间做好链接,从而达到摸清整个微服务的轮廓的目的。

阅读本文所需知识

  • 具备golang基础,了解grpc
  • 对微服务概念有所理解,使用过go-micro,至少能完成go-micro入门案例
  • 使用过docker,docker-compose,熟悉docker的基本操作
  • 会使用linux

    开发工具

    以下是作者使用到的开发工具,可以根据自身实际情况进行调整

  • win10

  • docker-desktop
  • goland
  • mysqlWorkbeanch
  • vmware

    项目案例

    为了展示教学,我们展示不考虑编写过于复杂的业务。但为了对于知识点有所覆盖,我们选用比较经典的电商项目进行编码。主要划分为三个模块,用户服务,商品服务,订单服务 。方便我们展示在微服务中如何实现定时调度,分布式事务,链路追踪,服务治理,分布式日志,异步消息等方案。

    微服务框架选择

    这里我们选择使用go-micro v2版本,至于为什么使用go-micro,因为它除了提供基本的RPC远程调用外,还提供了需要实现微服务的各种基础支持,包括注册中心、服务发现、负载均衡、API 网关、异步消息队列、多种通信协议和数据序列化格式等,不需要开发者额外编写代码。还可以基于go-micro的插件机制,对这些功能的驱动进行替换。如注册中心,可以基于热拔插机制替换成etcd,consul,k8s,异步消息驱动可以替换成市面上比较流行的各种中间件,如NATS,RabbitMq。相对来说go-micro是一款灵活拓展性高且功能完备的开发框架。

    为什么不是micro v3?

    至作者行文当天,micro v3依然处于商业化探索阶段,大部分功能开发测试当中。且v3版本除了一些思想上的延续,与v2基本上不再相同。v2已经独立出一个仓库维护了,且micro官网大部分文档已经下架更新中,导致学习框架的成本更高。所以这里选择v2,因为v2的使用在github仓库中依然有大部分的使用案例。