盛大谢孟军谈API设计

个人简介 谢孟军,英文名Asta,现就职于盛大云,主要从事盛大云分发的系统研发工作,为盛大游戏、盛大文学、酷六等提供更好的CDN服务努力着。热爱技术,尤其关注实现服务器端高性能、高可用等相关技术。著有《Go Web编程》一书,开发了beego、beedb等各类基于Go语言的开源框架和库,同时正致力于Go语言的推广和研究。

作为InfoQ主办的全球顶级盛会,QCon在伦敦、北京、东京、纽约、圣保罗、 杭州、旧金山举办过多次,这次是首次走进中国首都北京。希望能给当 地的公司、技术社区和技术人员提供一流的学习、交流平台。

   

1. 大家好,坐在我旁边的是来自于盛大云的谢孟军,他现在在做盛大的系统研发工作,请您做下自我介绍。

谢孟军:各位InfoQ的网友下午好,我是来自盛大云的谢孟军,现在我主要负责盛大云CDN系统的一些研发工作,现在主要用Go语言来进行开发,谢谢大家。

   

2. 您刚才在演讲中提到以API为中心的设计方案,这种设计方案的核心思想是什么?然后就是国内现在应用的一个现状是怎样的?

谢孟军:现在我们可以看到自从Facebook Book的API的开放之后,越来越多的网站都在走API化的方向,特别是大家可以知道,Twitter这个网站发展史,它很大的一部分依赖于他的API的开放,大家可以看到Twitter开放API之后,基于Twitter API的应用特别多,而且正是因为这些的应用才推动了整个Twitter的发展,所以以API为中心的一个应用,现在我是觉得,特别是随着移动互联网的一个发展会越来越重视,各大公司都会往这方面来靠,因为一旦API成熟之后,那基于这个API的外层的一些移动应用,如iOS的开发、Android的开发,或者电视端的开发都会很容易,如果以API为中心的时候,这三个端一旦一个端发展起来,其他端就比较容易的做了,而且很容易的就进行扩展。

   

3. 以API为中心的设计,你觉得他的核心中最重要的一点是什么?

谢孟军:最重要的一点就是很容易扩展,即内部开放以后,对外开放也会很容易。而且团队之间的协作、标准化,也是非常重要的,就是说API弄好之后,相当于你整个公司里的一个核心的东西,然后周边各个端的应用是基于这个核心之上的东西,那就都非常容易快速的进行扩展、开发,而且你一旦改一个逻辑,或者怎么样,不会影响到各个东西,然后只要核心的东西改一下就比较好一点。

   

4. 这种API设计有很多好处,那么现在我们有传统的一些方案,如果想把它切换到新的以API为中心的设计方案上,这种迁移的过程是怎样的?一般会遇到哪些问题来解决?

谢孟军:我觉得如果传统的系统想要迁移到现有的以API为中心的应用里面来,现在最主要来自于部门压力,因为线上已经跑稳定的系统想要迁到API来,那可能会有一个重复工作的过程,所以来自部门上的压力比较大。如果是新的应用来开发,那么API是比较好的,像淘宝可能会这样做,比如因为原来的业务已经跑稳定了,那现在新架构了一套API对外开放,内部基于这套API来进行逐步开发,这样有一个缓冲的过程,最后会实现整个公司都是以这个API为中心的应用开发。

   

5. 如果说我们有一个以API为中心的项目开发完成以后,如何对它进行评价、考量是否成功?

谢孟军:那我觉得考量几个点:第一个支持的端,可以同时支持多个端,移动端、PC端等等;第二个扩展性要好,就是如果有一个新的需求来,基于这个API的应用能够进行快速开发;最后,我觉得一个稳定的、好的API,还需要考虑安全性的东西以及能够和其他的系统很好的磨合,我觉得最主要是这三个点。

   

6. 你提到安全的问题,API也有很多安全的机制,介绍一下吧?

谢孟军:像我们内部有一个专门的认证中心,API可能第一层就是跟这个安全中心去进行对接,认证中心也是API类似的,这样的话我们可以进行业务上的分离,就是你的服务专门做这个事情,我的服务专门做另一个。那对于我来说,我其实并不关心你这个认证是不是能过,我发一个认证请求,能够通过就返回来,这样是觉得比较好的。

   

7. 能不能介绍你写的beeGo框架以及他的设计理念和历史?

谢孟军:我当时开始学Go的时候,就写了一本书《Go Web编程》,现在快出版了。我写书的时候,刚刚开始没有加beeGo的东西,但是我发现要学习一门语言最好的方式是花一段时间,在对它的语法都熟悉了之后,找一个轻量级的框架去学习它,通过框架然后一些应用的开发来熟悉这整个的一门语言,后来我就想在书里面加入beeGo的设计,刚开始beeGo很简单,就是简单的MVC的结构,跟tornado类似,然后开发出以后,在公司里面要用这个东西,后来有很多的功能需求,像缓存系统、日志等,我就不断的往里面加东西,现在就逐渐的把beeGo完善的成比较稳定的一个框架,然后我就开始把它开源出去,社区里面国内外很多开发者也给了我很多反馈、需求,我就不断的在完善、改进,最终就形成了现在beeGo的框架。当然现在beeGo也不算我理想状态的框架,所以我现在还在逐渐的构建更多的组件进去。

   

8. 也就是说一开始的时候你并没有一个完整的思路,说beeGo要是什么样的。

谢孟军:是的,都是在我做项目的过程中,通过实践自己的需求,还有国内外很多开发者给我的需求、反馈,不断的再加进去完善。

   

9. 团队反馈是怎样?

谢孟军:beeGo刚弄出来之后,为了方便基于这个框架开发,我做了一些额外的辅助工具,刚才我在演讲的时候,也现场演示了beeGo creator这个项目,可以迅速的创建项目,用户只要关心它在逻辑上的处理就可以了。这些辅助项目也是因为一些团队的人员给我反馈说创建一个项目比较麻烦,那我就自己写一个工具给他们用。大家相互之间基于beeGo的协作现在感觉还挺好,内部有几个项目也是beeGo在做,跑的特别稳定,这个可能也跟Go的特性很有关系的。

   

10. 你觉得是哪几个方面的特性?

谢孟军:我最主要还是它的高并发的特性支持,还有就是Go语言的一些其他特性,就像Interface,我自己定义接口,比如现在写的缓存、Session模块就是先定义接口,我自己写了两个引擎,网友会基于我定义的接口来贡献其他的一些引擎。我现在支持memcached,网友有些会贡献MySQL的,他们可以基于我已经定义好的一些接口他们来进行更好的一个完善的东西,里面也是类似API的那种感觉。

   

11. Go语言的创始人前段时间说现在还不能确定Go的设计方案是否成功,他们需要有一个百万代码这种项目来验证,目前还没有一个项目达到这样一个水平,就您个人来看,您觉得怎么去验证Go是否成功,需要哪些指标?

谢孟军:这我个人觉得,我现在肯定写的没有那么大,现在七牛他们自己公布出来说有30万行,我们自己内部,我现在写的四五万行,那评价一个Go语言成不成功:这个项目是不是足够稳定,它是不是团队开发里面协作是不是足够好,我是这样去评价的,那我们团队用下来之后,就觉得这个Go语言已经是比较完美的,像这个,因为我们原来有一些项目是C++开发的,那现在用Go之后,就感觉会好很多。

   

12. 现在在盛大beeGo已经有好多项目了?

谢孟军:我差不多有六七个项目

   

13. 您刚才也提到,除了语言本身的一些特性之外,还需要一些测试集成,或者附属的一些环境,他有个配套的整套的,周边的设施。

谢孟军:那Go,第一个说那个开发工具,那Go开发工具,现在国内有一个人,他开发了一个叫LiteIDE的,就是专门用来写Go的,他这块是已经写的比较好,当然没有什么,Video studio微软出的那个那么强大,那没有一个工具能够赶得上,但是对于我们来说,开发Go语言已经足够好了,还有一个是Sublime Text,他有一个插件叫gosublime,也是写Go起来比较方便的,但是这个开发工具,第二个就是测试套件,测试套件因为Go语言天生就支持,他们里面有一个轻量级的测试包,叫Testing,你可以写一个Go语言测试,因为今天那个演讲的时候,时间问题,我很多特性,Go的很多特性没有把它演示完,所以Go里面它已经有一个轻量级的一个测试包,他也有,但对于部署这块,那Go语言,因为Go语言最后编译之后,它是一个二进制的文件,那你现在部署,它没有一个好的工具来支撑它,那我现在,像我们自己的部署,我都是用Python的supervisor来把它限制管理起来,这是这种方式,因为它普及之后,能够重启,那另外也有,我们自己写的一个工具来管理起来,这个程序专门来管其他程序。

   

14. 用别的语言?

谢孟军:用C还有,一个是用C,一个是Python写的。

   

15. 还有一个调试?

谢孟军:调试,我们现在这个Go里面有多线程调试,多线程调试时候gdb这种调试是非常麻烦的,所以我们现在调试一般都是日志的方式调试,可能比较原始一点,但是对于我们调试来说还是比较方便。

   

16. 所以其实Go有很多,但你觉得Go语言最吸引你的是哪些地方,或者你觉得Go最需要改进的是哪些地方?

谢孟军:我觉得Go,第一,它足够简单,我差不多花了半天时间,基本上它所有的语法我就熟悉了,那所以,但是当它很多的一些语法细节思路时候,你就会被它的很多思想所折服。第二个并发,它天生支持并发,我刚刚演讲的,它天生DNA决定了支持并发,因为像现在我们所有的机器,服务器上来都是多核,就是四核、八核、六核,很多像C++你要去支持这个多核特别麻烦,Go语言它就是天然的就可以支持这些多核的东西。第三个就是GC,就是垃圾回收,因为用C习惯C++的那种都会发现,去alloc一个内存,再free,再alloc再free,比如说你忘记free了就发现内存泄露了,但是有了GC之后,这些问题就基本上就不大会有,当然现在Go,刚你问我Go里面现在什么不是很好,那Go里面现在对于Windows32经常会有机器的内存泄露,因为他的GC的算法还是比较古老的做法,因为Go差不多是11年出来第一版,Go一版,最近Go1.1快要出了,现在已经出到Bata2了,他的×已经改变非常大了,他们官方说他的1.1他是相对1平均的性能提高30%到40左右,而且他很多包,包的性能,还有很大一个改进。

   

17. 那么在现在目前,新手要学Go语言能够有一个什么建议,Go这个社区是什么样的?

谢孟军:Go它现在国际上,他有,跟Go的开发者他交流,他现在最主要是开放两个邮件列组,一个是Go-GED,一个是Go-list,GoGED就是最主要是他们一些,讨论的是Go内制的一些代码review,那个邮件我是没去参加,没加入进去,还有一个是Go×,这个来自于全球所有Go的用户,你在那边问问题,一般五六个小时就有人给你恢复,不管任何问题,而且经常是一些大牛,像Rob Pike这些人会出来跟你交流这个东西。然后在国内,我现在有一个GoLang中国的社区,就myGolang.com那个,就是我自己在搞的一个东西,我是希望通过一个论坛的方式,就是有大家,国内的一些读者能够参进来,这样我们就可以把这个中国区这个GoLang氛围搞起来,对于新手的建议,可以去看一下那个最主要还是建议看,Go官方的英文,就是那个语言的那个描述的东西,第二,就可以看看那个新型,就知道他有翻译一本书,叫做《学习Go语言》,《学习Go语言》把Go的语法给介绍的很清晰,还有这个,大家如果对WebGo应用,就网络编程感兴趣的,也可以看我写的那本书,就是GoWEB编程,那边快速版,但是我已经开源了,我是先开源再出版,大家可以去看开源,如果觉得好可以买一本。因为有些人有需求,我也是希望,这种回馈社区,然后社区再给我回馈这样,大家可以把这个整个Go的氛围给建立起来。

   

18. 之后学习Go语言这个人群也会越来越多?

谢孟军:我是希望越来越多的开发者加入这个功能的行业里。
InfoQ:谢谢您接受我们今天的采访。

你可能感兴趣的:(盛大谢孟军谈API设计)