BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Daniel Bryant 关注 634 他的粉丝 ,译者 艾利特 关注 0 他的粉丝 发布于 2016年2月2日. 估计阅读时间: 7 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

纽约时报(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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

一个卖报纸的都能做框架 by Chin Bob

一个卖报纸的都能做框架

别人家的报社 by j ww

D3.js的作者也是纽约时报的

人民日报还在代表人民 by Lin Kevin

人民日报还在代表人民

与时俱进 by L X

传统行业都在走信息化道路

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

4 讨论

深度内容

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT