11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

专家观点:QCon 专访朱念洋,谈腾讯开放平台关键技术

  • 2011-11-16
  • 本文字数:2717 字

    阅读完需:约 9 分钟

朱念洋,腾讯开放平台部技术专家,现负责开放平台 OpenAPI 以及相关系统。主导开发了 OpenAPI,并曾参与设计开发了 QQ 空间、腾讯朋友的应用管理、AppStore 等系统。朱念洋在 QCon 杭州 2011 大会上做了名为《开放平台中的 OpenAPI 设计》的演讲,有关幻灯片可以在此下载。会后,InfoQ 中文站对其进行了采访。

InfoQ:腾讯在整合多个平台时,在 API 易用性方面做了哪些工作?

由于腾讯本身在多平台方面的特殊性,多平台 OpenAPI 统一在 OpenAPI 设计原则中占了很大的比重。可以想象一下,如果我们只是简单的将各个平台的数据开放给应用,而没有做任何整合,那么应用在接入腾讯朋友、QQ 空间、微博、Q+、QQGame 等平台都需要变更一次代码,这对应用开发者来说是非常大的成本。

所以针对这种情况,我们把多个平台的数据进行了整合,并达到了统一:

  • 同样的 URL!
  • 同样的参数、返回格式!
  • 同样的调用地址!

举个例子:

  • 获取个人信息: /user/info
  • 获取用户签名: /user/emotion
  • 获取好友列表: /relation/friends
  • 是否好友: /relation/is_friend

无论是在朋友还是在空间,当你需要获取个人资料的时候就只需要调用 /user/info,应用的程序不需要因为平台的不同而变更一行代码。

其实实现也是很简单,示意图如下:

当用户从平台进入应用的时候,平台会将一个参数 pf 传给应用,而应用之后在访问 OpenAPI 的时候只需要将 pf 原样传给 OpenAPI 就可以了。

所以整个做完了之后,我们真正实现了对应用开发者来说:

一点接入,多台全部上线,应用无需改动一行代码

InfoQ:内网 DNS 技术在可用性方面发挥了怎样的作用?

大家知道应用在访问 OpenAPI 的时候是通过公网访问的,所以一旦 OpenAPI 的某个机房出现问题时,怎样保证应用能快速切换访问就是个很严峻的问题。

用常规方法我们有几个选择:

  • 域名 DNS 变更?
  • 应用自己变更调用 IP?

对于第一个方案来说,外网域名 DNS 生效的时间本身就是非常慢的,所以在 DNS 生效之前,应用将在很长时间内处于不可服务状态。

而对于第二个方案,本身就不符合腾讯开放平台尽量降低第三方应用运维成本的原则,而且推动几万款应用去切换 IP 也是件不现实的事情。

那么到底如何解决呢?

考虑到大部分的应用是部署在腾讯提供的服务器上,所以我们针对性的研发了内网 DNS。

那么内网 DNS 有什么特点,能解决上面的问题呢?

  • 即时生效
  • 应用无感知
  • 就近访问
  • 安全性高

可以看到内网 DNS 解决了传统 DNS 的一些瓶颈,并且提供了更多的功能。

InfoQ:设计 API 时是否会遇到为了满足不同的需求而做出权衡的地方?如何解决?

我们在设计 OpenAPI 的时候,始终遵循着三个最基本的原则:

  • 安全性
  • 可用性
  • 易用性

而这三个原则的重要程度又是从高到底排列。

所以当产品的需求与这三个原则发生冲突的时候,我们都会用这三个原则来进行取舍。

InfoQ:优秀的 OpenAPI 应该具备哪些特点?

正如我之前提到的,好的 OpenAPI 设计应该有如下原则:

  • 安全性
  • 可用性
  • 易用性

我来简单描述一下:

安全性:

OpenAPI 是连接平台和应用之间的桥梁,这桥梁上流通的是什么呢?是用户的数据。所以 OpenAPI 直接维系着平台、应用、用户三方的数据,任何一方的数据对安全性要求都极其严格,并要求不能有一点疏漏,因此安全性必须作为首要考虑的前提。

可用性:

可用性是什么呢?就是 OpenAPI 能正常提供服务的能力,我们可以想象一下一旦 OpenAPI 出现问题将会带来什么样的后果:开放平台上的所有应用都获取不到好友关系,如果更坏一点,可能就是所有应用都支付不了,最差的情况可能就是所有应用都无法进入。所以 OpenAPI 的可用性要求是极高的,而我们在日常的 OpenAPI 运营中,考虑对 OpenAPI 优化最多的也就是他的可用性。

易用性:

OpenAPI 作为一个对外开放的接口,其易用性的程度直接决定了开发者接入开放平台的门槛,所以我们也必须要尽量高的提高 OpenAPI 的易用性。

InfoQ:“柔性服务”是什么概念?腾讯是如何实施的?

柔性服务是腾讯内部的一个名词,其实我稍作解释,相信大家都能在自己的工作中找到类似的影子。

比如一个人在沙漠里迷失了寻找水源,那么在他还能走的时候,就尽量走;实在走不动了,用爬的;最后爬也爬不了了,起码要保证自己活着。

所以我们针对互联网服务这里,总结出了一个原则:

在能容忍的最长时间内,将最重要的事做完

比如下图:

当我们执行到 3 的时候,发现 CGI 的运行时间已经太长了(比如超过 1 秒),那么为了避免其他请求被堵死,我们就直接返回给调用方了。这个时候虽然数据不是完整的(丢了 4 的数据),但是我们在数据完整和快速响应之间做了一个平衡。从而保证在服务出现问题的时候,大部分的应用还是可以正常使用,只是体验上稍微差一点。

但是仅仅做到这里还是不够的,我们刚才提到了能容忍的最长响应时间,但是这个最长响应时间的值怎么指定呢?

如果指定的很长,比如 1 秒,那么一旦出现问题的时候,相当于每个进程每秒钟只能处理一个请求,根本没有达到我们预期的容灾的效果。

但如果指定的很短,比如 20 毫秒,那么一旦出现一次偶然的网络波动,即使很快会恢复也会导致我们的 OpenAPI 大面积失败。

这两种设置方法都不完美,那么还有什么办法呢?

那就是 EMA 算法,腾讯之前将预测股票走势的 EMA 算法引入来预测 CGI 运行时间的变化,而 EMA 的一个核心原则就是:

当 CGI 运行时间越短的时候,给 CGI 设置的最长超时时间越长;当 CGI 运行时间越长的时候,给 CGI 设置的最长超时时间越短。

如下图所示:

可以看出平均响应时间和动态超时时间基本是沿响应时间上限对称的关系,很直观的描述了这两者之间的关系。

所以到此位置,柔性服务才能真正的发挥作用。

InfoQ:腾讯开放平台下一步有何发展规划?

对于 OpenAPI 这里,目前看到的几点是:

  1. 提供更加丰富的业务 OpenAPI,将各个平台的功能全部都开放出来给应用使用
  2. 提供更多的支持类 OpenAPI,如存储 API,告警 API,反外挂等,降低应用的开发、运维成本
  3. 提高 OpenAPI 本身的可用性,优化 OpenAPI 的性能

InfoQ: 对于从事开放平台的开发人员,你有哪些建议?

OpenAPI 所面向的对象是应用开发者,这和传统互联网服务直面用户是有很大差别的。

所以一定要先站在这个前提下,很多问题才能想的明白。

而对于 OpenAPI 设计本身,还是回到之前提到的安全性、可用性、易用性。

对于安全性这里,一定要从整体考虑,因为 OpenAPI 是一整个体系,一旦某一个地方有漏洞,整个体系都会有被洞穿的危险。

可用性永远是 OpenAPI 的重要指标,所以在架构和开发中就要考虑 OpenAPI 的性能和容灾问题,并建立各种告警机制来保证对 OpenAPI 的服务运行情况了如指掌。

而易用性不用多说了,因为 OpenAPI 面对的是开发者,所以必须要考虑别人在使用时的易用程度。

注:InfoQ 中文站欢迎优质的内容,提供原创稿件和写作意向的读者请发邮件至 cuikang[at]infoq.com。

2011-11-16 20:134195

评论

发布
暂无评论
发现更多内容

分享我的华为面经,华为OD岗笔试+面试心得,本人已成功入职!

编程菌

Java 华为 程序员 面试 计算机

你真的懂Redis与MySQL双写一致性如何保证吗?

Linux服务器开发

MySQL redis 中间件 架构师 Linux服务器开发

腾讯T8面试官纯手打总结Java888道高频面试真题笔记+Java面试金典

Java~~~

Java 架构 面试 算法 JVM

智能量化交易系统搭建|量化交易APP系统源码开发

量化系统19942438797

量化交易 智能量化

金九银十你打算用什么硬核技能噎死面试官呢?附Java面试核心笔记

Java~~~

Java spring 架构 面试 微服务

三年开发,跳槽腾讯三面终获Offer,定级T2-1(面试题+经验总结)

编程菌

Java 编程 程序员 面试 计算机

阿里资深架构师熬夜纯手写的238页微服务容器化开发实战笔记

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

备战92天终入阿里,这份Java后端开发者面试技能笔记功不可没,共勉

Java~~~

Java spring 架构 面试 微服务

Web端实现RTC视频特效的解决方案

网易云信

OCR开发者福音:PDF提取Excel文件算法开源啦

百度开发者中心

开源 最佳实践 开发者 方法论 OCR

阿里技术3面+HR面,奋战两个月,终斩获offer定级阿里P6+

编程菌

Java 编程 程序员 面试 计算机

百度商业大规模微服务分布式监控系统-凤睛

百度开发者中心

产品 最佳实践 方法论 经验分享 监控系统

智能CRM销氪强势崛起, CRM赛道变数几何?

ToB行业头条

CRM

iOS App注入SDK调试

GrowingIO技术专栏

ios sdk 逆向 注入sdk

这份Github神仙笔记覆盖了90%以上的Java面试题,带你所向披靡

Java~~~

Java spring 架构 面试 微服务

百度世界大会2021: 与时代共振,AI让生活更好

百度大脑

人工智能

【Vue2.x 源码学习】第四十篇 - 组件部分 - 组件的生命周期

Brave

源码 vue2 8月日更

终于学完了阿里P8架构师7年心血整理总结的微服务实战文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Reality Capture 初探

空城机

3D渲染 3D模型 8月日更 Reality Capture

裸辞闭关62天,啃下这些分布式技术笔记,有幸通过阿里Java岗P6面试

Java~~~

Java 架构 面试 分布式 高可用

斯图飞腾发布《如何将客户反馈转化为有价值的商业洞察》白皮书

Web JS SDK 架构解析

神策技术社区

技术 源码分析 神策数据

上线直接霸占GitHub榜一!腾讯内部spring全家桶笔记细节拉满!

Java 编程 架构 腾讯 面试

技术白皮书:现代企业架构设计

信码由缰

企业架构

实时数据引擎系列(一): 新鲜的数据流

tapdata

数据库 hadoop Tapdata 实时数据引擎 OLTP

85W美团架构师分享深入解析Java虚拟机HotSpot文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

都2021年了,你还在用Jenkins?赶快看看这些替代方案吧

编程菌

Java 编程 程序员 计算机 技术宅

大二上半学期还挂科两门,大三上半学期就找到了外企实习工作,半年时间,我是怎么逆袭的?

编程菌

Java 编程 程序员 面试 计算机

专家观点:QCon专访朱念洋,谈腾讯开放平台关键技术_腾讯_朱念洋_InfoQ精选文章