前面几篇分享学院君已经给大家介绍了微服务的背景和概念、总体设计、适用场景、服务拆分以及要提前做好的技术保障,接下来我们正式开始介绍微服务的开发。目前,市面上已经有很多符合我们前面介绍的满足微服务架构的开源 RPC 框架,比如 Dubbo、Spring Cloud、gRPC、Thrift 等,但由于本系列教程基于 PHP + Go 进行开发,所以,我们选择一个基于 Go 语言生态里的 Go Micro 框架作为微服务开发框架。
Go Micro 简介与设计理念
Go Micro 是一个基于 Go 语言编写的、用于构建微服务的基础框架,提供了分布式开发所需的核心组件,包括 RPC 和事件驱动通信等。
它的设计哲学是「可插拔」的插件化架构,其核心专注于提供底层的接口定义和基础工具,这些底层接口可以兼容各种实现。例如 Go Micro 默认通过 consul 进行服务发现,通过 HTTP 协议进行通信,通过 protobuf 和 json 进行编解码,以便你可以基于这些开箱提供的组件快速启动,但是如果需要的话,你也可以通过符合底层接口定义的其他组件替换默认组件,比如通过 etcd 或 zookeeper 进行服务发现,这也是插件化架构的优势所在:不需要修改任何底层代码即可实现上层组件的替换。
Go Micro 基础架构介绍
Go Micro 框架的基础架构如下,由 8 个核心接口组成,每个接口都有默认实现:
最顶层的 Service 接口是构建服务的主要组件,它把底层的各个包需要实现的接口,做了一次封装,包含了一系列用于初始化 Service 和 Client 的方法,使我们可以很简单的创建一个 RPC 服务;
Client 是请求服务的接口,从 Registry 中获取 Server 信息,然后封装了 Transport 和 Codec 进行 RPC 调用,也封装了 Brocker 进行消息发布,默认通过 RPC 协议进行通信,也可以基于 HTTP 或 gRPC;