化茧成蝶:Go在FreeWheel服务化中的实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

特性

集成最佳实践

Wheels集成了一系列提炼自于Go社区的通用惯例、通用依赖包和最佳实践,希望提供一种易理解的、强壮可靠的方法去组织项目和构建微服务。

这些最佳实践包括了项目结构、包管理、配置管理、环境设置、日志记录等等。

设计优先(Design First)

Wheels鼓励你在实现具体的功能前仔细周全地进行设计。我们选用了Google的Protobuf(以及部分gRPC扩展)作为设计语言。

比如如果我们希望发布一个简单的Hello服务,我们首先使用Protobuf描述该服务:

        service HelloService {
          rpc SayHello (HelloRequest) returns (HelloReply) {}
        }

        // The request message containing the user's name.
        message HelloRequest {
          string name = 1;
        }

        // The response message containing the greetings
        message HelloReply {
          string message = 1;
        }

当设计完成后,我们可以使用Wheels来帮我们自动生成代码。自动生成的代码包括服务的脚手架以及相关的依赖代码,这样开发人员可以聚焦在业务逻辑的开发上。

代码自动生成

Go是一种强类型的静态语言。Go的反射和元编程的能力有限,因此Go社区在很多时候倾向于使用代码生成的方式,去完成一些其他语言在运行时通过反射完成的功能。

我们也拥抱了Go社区的这一惯例。此外,因为受到Ruby on Rails框架的启发,我们使用了一种更精巧的方式,除了生成代码以外,还生成了项目文件和其他的依赖文件。

所以开发人员可以使用框架内置的代码生成工具,自动生成项目结构、Protobuf描述文件、服务实现文件、测试文件、Swagger文档等等。

支持多种协议

Wheels支持gRPC协议。你可以使用Wheels快速开发gRPC服务。

gRPC确实有很多优势。高效、易于使用且节省带宽,而且它已经被Google在许多大型项目中使用和验证。此外,gRPC可以天然地与Protobuf描述紧密集成。

但是我们的服务在很多时候仍然需要使用经典的RESTful API。我们的许多面向客户的API都是通过HTTP协议暴露的,我们需要维持向后的兼容性。

而Wheels也能帮助我们解决这个问题。它可以自动地透明地在HTTP和gRPC协议间互相转换。

监控

Wheels内置了统一的监控,日志和服务性能指标收集的接口和方法。

部署

Wheels也希望能简化整个部署的流程。它也能够很好地与Docker和Kubernetes集成。