领导力大挑战
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
该内容已经被标记书签!
标记书签错误,请重试!
作者 朱念洋 发布于 2011年11月16日
由于腾讯本身在多平台方面的特殊性,多平台OpenAPI统一在OpenAPI设计原则中占了很大的比重。可以想象一下,如果我们只是简单的将各个平台的数据开放给应用,而没有做任何整合,那么应用在接入腾讯朋友、QQ空间、微博、Q+、QQGame等平台都需要变更一次代码,这对应用开发者来说是非常大的成本。
所以针对这种情况,我们把多个平台的数据进行了整合,并达到了统一:
举个例子:
无论是在朋友还是在空间,当你需要获取个人资料的时候就只需要调用 /user/info,应用的程序不需要因为平台的不同而变更一行代码。
其实实现也是很简单,示意图如下:

当用户从平台进入应用的时候,平台会将一个参数 pf 传给应用,而应用之后在访问OpenAPI的时候只需要将pf原样传给OpenAPI就可以了。
所以整个做完了之后,我们真正实现了对应用开发者来说:
一点接入,多台全部上线,应用无需改动一行代码
大家知道应用在访问OpenAPI的时候是通过公网访问的,所以一旦OpenAPI的某个机房出现问题时,怎样保证应用能快速切换访问就是个很严峻的问题。
用常规方法我们有几个选择:
对于第一个方案来说,外网域名DNS生效的时间本身就是非常慢的,所以在DNS生效之前,应用将在很长时间内处于不可服务状态。
而对于第二个方案,本身就不符合腾讯开放平台尽量降低第三方应用运维成本的原则,而且推动几万款应用去切换IP也是件不现实的事情。
那么到底如何解决呢?
考虑到大部分的应用是部署在腾讯提供的服务器上,所以我们针对性的研发了内网DNS。
那么内网DNS有什么特点,能解决上面的问题呢?
可以看到内网DNS解决了传统DNS的一些瓶颈,并且提供了更多的功能。
我们在设计OpenAPI的时候,始终遵循着三个最基本的原则:
而这三个原则的重要程度又是从高到底排列。
所以当产品的需求与这三个原则发生冲突的时候,我们都会用这三个原则来进行取舍。
正如我之前提到的,好的OpenAPI设计应该有如下原则:
我来简单描述一下:
安全性:
OpenAPI是连接平台和应用之间的桥梁,这桥梁上流通的是什么呢?是用户的数据。所以OpenAPI直接维系着平台、应用、用户三方的数据,任何一方的数据对安全性要求都极其严格,并要求不能有一点疏漏,因此安全性必须作为首要考虑的前提。
可用性:
可用性是什么呢?就是OpenAPI能正常提供服务的能力,我们可以想象一下一旦OpenAPI出现问题将会带来什么样的后果:开放平台上的所有应用都获取不到好友关系,如果更坏一点,可能就是所有应用都支付不了,最差的情况可能就是所有应用都无法进入。所以OpenAPI的可用性要求是极高的,而我们在日常的OpenAPI运营中,考虑对OpenAPI优化最多的也就是他的可用性。
易用性:
OpenAPI作为一个对外开放的接口,其易用性的程度直接决定了开发者接入开放平台的门槛,所以我们也必须要尽量高的提高OpenAPI的易用性。
柔性服务是腾讯内部的一个名词,其实我稍作解释,相信大家都能在自己的工作中找到类似的影子。
比如一个人在沙漠里迷失了寻找水源,那么在他还能走的时候,就尽量走;实在走不动了,用爬的;最后爬也爬不了了,起码要保证自己活着。
所以我们针对互联网服务这里,总结出了一个原则:
在能容忍的最长时间内,将最重要的事做完
比如下图:

当我们执行到3的时候,发现CGI的运行时间已经太长了(比如超过1秒),那么为了避免其他请求被堵死,我们就直接返回给调用方了。这个时候虽然数据不是完整的(丢了4的数据),但是我们在数据完整和快速响应之间做了一个平衡。从而保证在服务出现问题的时候,大部分的应用还是可以正常使用,只是体验上稍微差一点。
但是仅仅做到这里还是不够的,我们刚才提到了能容忍的最长响应时间,但是这个最长响应时间的值怎么指定呢?
如果指定的很长,比如1秒,那么一旦出现问题的时候,相当于每个进程每秒钟只能处理一个请求,根本没有达到我们预期的容灾的效果。
但如果指定的很短,比如20毫秒,那么一旦出现一次偶然的网络波动,即使很快会恢复也会导致我们的OpenAPI大面积失败。
这两种设置方法都不完美,那么还有什么办法呢?
那就是EMA算法,腾讯之前将预测股票走势的EMA算法引入来预测CGI运行时间的变化,而EMA的一个核心原则就是:
当CGI运行时间越短的时候,给CGI设置的最长超时时间越长;当CGI运行时间越长的时候,给CGI设置的最长超时时间越短。
如下图所示:

可以看出平均响应时间和动态超时时间基本是沿响应时间上限对称的关系,很直观的描述了这两者之间的关系。
所以到此位置,柔性服务才能真正的发挥作用。
对于OpenAPI这里,目前看到的几点是:
OpenAPI所面向的对象是应用开发者,这和传统互联网服务直面用户是有很大差别的。
所以一定要先站在这个前提下,很多问题才能想的明白。
而对于OpenAPI设计本身,还是回到之前提到的安全性、可用性、易用性。
对于安全性这里,一定要从整体考虑,因为OpenAPI是一整个体系,一旦某一个地方有漏洞,整个体系都会有被洞穿的危险。
可用性永远是OpenAPI的重要指标,所以在架构和开发中就要考虑OpenAPI的性能和容灾问题,并建立各种告警机制来保证对OpenAPI的服务运行情况了如指掌。
而易用性不用多说了,因为OpenAPI面对的是开发者,所以必须要考虑别人在使用时的易用程度。
注:InfoQ中文站欢迎优质的内容,提供原创稿件和写作意向的读者请发邮件至cuikang[at]infoq.com。
在实施Scrum项目的过程中,Scrum Master的角色是相当关键的,因为他是团队的推动者。本文围绕什么是仆人式领导、仆人式领导的起源、如何将领导力传达给团队、Scrum Master作为仆人式领导者的角色展开叙述,同时重点阐述仆人式领导者应有的基本内外特征。
论道WP第三篇专栏,以应用程序栏的使用为中心,包括了软键盘带来的问题、应用程序栏介绍、如何绑定应用程序栏的属性等几个方面的具体话题,为开发者顺利使用应用程序栏开发提供了具体指导。
在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中对于锁的性能优化,以及锁的存储结构及升级过程。
本次分享将首先介绍现代富文本编辑器的组成和实现,然后结合UEditor的开发过程,与参会者分享UEditor在设计和实现的过程中,所涉及到的核心功能的细节实现。
本次演讲视频录制于百度技术沙龙。
我们所开发的应用程序大多都需要提供一个图形用户界面(GUI)。关于GUI应用的架构设计,已经有了Form & Control、MVC,、MVP、 Passive View等多种模式。模式可以帮助我们建立优雅的架构,但前提是弄清楚模式的应用场景。弄清楚GUI应用面临的设计上的问题,有助于我们正确的挑选设计方案。
MongoDB是一种非常易用的NoSQL方案,Brian C. Dilley在这篇文章里介绍了MongoDB的优劣势,并介绍了MJORM项目。MJORM用于MongoDB,是一个没有注解的Java ORM库。
随着网络基础设施的逐步成熟,从RPC进化到Web Service,并在业界开始普遍推行SOA,再到后来的RESTful平台以及云计算中的PaaS与SaaS概念的推广,分布式架构在企业应用中开始呈现出不同的风貌,然而殊途同归,这些分布式架构的目标仍然是希望回到建造巴别塔的时代,系统之间的交流不再为不同语言与平台的隔阂而产生障碍。
3 条回复
关注此讨论 回复