纽约时报(NYT)开发团队已经发布了Gizmo,这是一个基于Go语言的开源微服务工具包,这个工具包带有可配置功能策略和基础的交互端口,能给用户提供标准化的配置、日志、质量检查以及端点指标等功能来提高服务质量期望值。
根据NYT官方网上一篇开发团队写的关于代码和开发的介绍,开发团队在过去的三年里完全采用了Go编程语言,Go语言在很多开发任务里起到了大作用,尤其是在构建JSON API过程中。专注于创建基于API的Go服务,而创建Gizmo微服务工具包是必不可少的中间环节,现在这一工具包已经开源出来供大家使用。
InfoQ随后采访到了NYT首席软件工程师JP Robinson,问了一些关于创建微服务工具包的动机,因为这一动机直接促使了基于Go语言的微服务框架的发展前景,以及未来的走向。
Robinson:Gizmo是一个集合,集中了可整合的工具、功能以及交互页面来帮助开发者构建Go服务,具体来说就是将API和pubsub daemons集合在一起。这个工具包刚开始的时候是由一小群开发者发起的,目的是为NYT构建一个专属邮件平台。
Robinson:Gizmo首先能够打动开发者,让开发者有开发感觉的就是它的标准库,但是增加附加功能只会降低微服务成功实施的可能性。举例来说,Gizmo有一个缠绕着http.Handlers的中间件,这个中间件的终端就是http.HandlerFuncs。这样的设计就可以帮助开发者来编写看起来像是标准库的代码,只是没想到他们意外获得了宝贝,Gizmo能给自动收集关于代码状态和请求执行时间的度量值。
重新使用标准库也赋予了Go语言开发者快速浏览代码并判断运行状态如何。另一个优点就是打开Gizmo之后能够连接到各种依附于标准库接口的现有开源工具。一个很好的例子就是Gizmo在“github.com/NYTimes/gziphandler”里的使用。
Robinson:当我第一次看到Peter Bourgon介绍Go Kit的时候,我特别激动,立刻开始查看README里的相关项目,寻找是否有些东西可以在内部推广使用。NYT有多种类型的服务,绝大多数服务都是基于JSON和HTTP服务端的,所以,表单里以RPC(Remote Procedure Call)为中心的服务框架不可能再做到开箱即用。
同时我也感觉到一些可用的框架正在抽象出标准库,因此我们需要一些简单、高可用的东西。也正是从那个时候起,我决定采用Go Kit:
从这里来看,他们的想法是在Gizmo的服务器程序包里构建一个GoKitServer或GoKitService。我的想法是,希望这个服务器能够把Go Kit端点和Gizmo里现有的服务器和服务接口工具结合起来。
Robinson:我发现既要保持工具包简单又要遵守Go语言对软件开发的灵活性,同时还得确保学习工具包的难易程度平缓。其实构建一个Gizmo应用程序并在现实工作环境中使用它,会遇到很多没有解决方法的问题。要想知道如何构建、测试、使用Gizmo应用程序的话,可以看这里的博客open.blogs.nytimes.com。
Robinson:NYT目前依然过于依赖SimpleService和JSONServices。我们倒是愿意帮助一些人尝试着使用GoKitServer,这是一个由github.com/julienschmidt/httprouter组成的FastSimpleServer,也有可能是一个由Hugo模板工具组成的WebServer。另外,Kafka pubsub的实现仍然处于试验阶段,还需要更多的测试。
这些任务多的有点吓人,所以我们欣然接受能够提高测试水平的任何帮助,最近我们将ContextService和ContextHandlers添加到了工具包里。我也鼓励人们尝试使用这些工具包,如果发现bug的话最好能创建问题描述,当然也欢迎用户在别的论坛渠道上反馈对Gizmo的建议及改进方式。
查看英文原文: Introducing ‘Gizmo’, a Golang-based Microservices Toolkit from The New York Times Development Team