纽约时报开发出基于Go语言的微服务工具包Gizmo

jopen 8年前

纽约时报(NYT)开发团队已经发布了Gizmo,这是一个基于Go语言的开源微服务工具包,这个工具包带有可配置功能策略和基础的交互端口,能给用户提供标准化的配置、日志、质量检查以及端点指标等功能来提高服务质量期望值。

根据NYT官方网上一篇开发团队写的关于代码和开发的介绍,开发团队在过去的三年里完全采用了Go编程语言,Go语言在很多开发任务里起到了大作用,尤其是在构建JSON API过程中。专注于创建基于API的Go服务,而创建Gizmo微服务工具包是必不可少的中间环节,现在这一工具包已经开源出来供大家使用。

InfoQ随后采访到了NYT首席软件工程师JP Robinson,问了一些关于创建微服务工具包的动机,因为这一动机直接促使了基于Go语言的微服务框架的发展前景,以及未来的走向。

InfoQ:先简单介绍一下Gizmo吧,以及创建这一框架的初衷?

Robinson:Gizmo是一个集合,集中了可整合的工具、功能以及交互页面来帮助开发者构建Go服务,具体来说就是将API和pubsub daemons集合在一起。这个工具包刚开始的时候是由一小群开发者发起的,目的是为NYT构建一个专属邮件平台。

InfoQ:相比较用起来更简单更标准的Go库,或其他新兴的Go微服务框架而言,Gizmo做了哪些简化来完成编写微服务的?

Robinson:Gizmo首先能够打动开发者,让开发者有开发感觉的就是它的标准库,但是增加附加功能只会降低微服务成功实施的可能性。举例来说,Gizmo有一个缠绕着http.Handlers的中间件,这个中间件的终端就是http.HandlerFuncs。这样的设计就可以帮助开发者来编写看起来像是标准库的代码,只是没想到他们意外获得了宝贝,Gizmo能给自动收集关于代码状态和请求执行时间的度量值。

重新使用标准库也赋予了Go语言开发者快速浏览代码并判断运行状态如何。另一个优点就是打开Gizmo之后能够连接到各种依附于标准库接口的现有开源工具。一个很好的例子就是Gizmo在“github.com/NYTimes/gziphandler”里的使用。

InfoQ:您之前说过Gizmo是向Peter Bourgon开发的Go Kit最好的致意,能解释一下吗?对开发者了解这两个框架有什么好处?

Robinson:当我第一次看到Peter Bourgon介绍Go Kit的时候,我特别激动,立刻开始查看README里的相关项目,寻找是否有些东西可以在内部推广使用。NYT有多种类型的服务,绝大多数服务都是基于JSON和HTTP服务端的,所以,表单里以RPC(Remote Procedure Call)为中心的服务框架不可能再做到开箱即用。

同时我也感觉到一些可用的框架正在抽象出标准库,因此我们需要一些简单、高可用的东西。也正是从那个时候起,我决定采用Go Kit:

  • 重新执行功能可以用来包装现在的程序包。Gizmo的SimpleServer真的只是一个由Gorilla Toolkit内部的mux、context、 logrusgo-metrics 和标准库组成的服务器。RPCServer同样是由这些东西组成的,只不过多了一个gRPC。
  • 支持消息传递模式不同于RPC。Gizmo的PubSub程序包提供了简单的Publisher和Subscriber接口,同时有两种实现方式。
  • 对过程监控有不一样的见解。Gizmo服务器暴露出一个可配置和可扩展的质量检查端点。我们期望服务能够发现系统并通过它们和Gizmo进行互动。
  • 在配置传递上有优势。Gizmo服务器和PubSub程序包和配置程序包严重耦合。同时我们还发现,让这个程序包灵活快速跨团队协调服务器完全不一样,但只要获得配置,我们的起点就更高。

从这里来看,他们的想法是在Gizmo的服务器程序包里构建一个GoKitServer或GoKitService。我的想法是,希望这个服务器能够把Go Kit端点和Gizmo里现有的服务器和服务接口工具结合起来。

InfoQ:和GOA框架相比起来,Gizmo似乎和API设计关系并不大。这背后的基本原理是什么?

Robinson:我发现既要保持工具包简单又要遵守Go语言对软件开发的灵活性,同时还得确保学习工具包的难易程度平缓。其实构建一个Gizmo应用程序并在现实工作环境中使用它,会遇到很多没有解决方法的问题。要想知道如何构建、测试、使用Gizmo应用程序的话,可以看这里的博客open.blogs.nytimes.com。

InfoQ:如何让感兴趣的开发者成为Gizmo项目的贡献者?

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

</div>

来自: http://www.infoq.com/cn/news/2016/02/gizmo-microservices-toolkit