特性
集成最佳实践
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集成。