技术开发 频道

从腾讯开放平台看架构设计的原则

  【IT168专稿】全球系统架构师大会于8月10-12日在深圳万科国际会议中心隆重举行。在今天下午的演讲中,汤道生围绕架构设计的主题来探讨到底怎么去管理资源、系统的设计跟开放平台的设计有什么共性的地方给大家带来了分享。从技术角度分析开放平台面临哪些方面的需求,如何解决解决这些需求以及面对的困难,从扩展性、安全性、高效性、稳定性这几个角度,分享腾讯开放平台架构与设计理念,同时会给大家介绍开放平台的资源瓶颈、运营效率,以及其架构未来的演进和变化。


全球系统架构师大会现场报道

  同时,他表示,技术发展经常受到许多经济因素的影响。另外,腾讯现在正在构建理想的生态链,支持多种商业模式,收入分成规则。通过社交传播提高接触用户的能力,让数据驱动自主优化。

从腾讯开放平台看架构设计的原则
▲汤道生是腾讯的高级执行副总裁

  在演讲中,汤道生认为,系统架构的设计很多时候是围绕资源的管理,不管CPU的资源、内存的资源、还是硬盘IO的资源或者在开放平台上推广的资源、用户的资源。这些往往在系统上,不同阶段有不同的稀缺性。系统架构的设计,在允许的时间内、有限的资源内怎么可以建立一个可持续的架构来实现一条可执行的系统,满足用户需求或者解决问题。

  以下是汤道生的核心演讲内容:

  我是2005年加入腾讯,一开始是作为一个架构师在腾讯参与了不少前期架构的项目、后台存储等方面,设计系统也有产品。后来从技术人员转向到产品业务方向发展。同时,在这个转型、转变中,把很多以往在技术上的设计理念、设计方法带到业务、带到产品上来,

  据我的理解,系统架构的设计其实很多时候是围绕资源的管理,不管CPU的资源、内存的资源、还是硬盘IO的资源或者在开放平台上推广的资源、用户的资源。这些往往在系统上,不同阶段有不同的稀缺性。系统架构的设计,在允许的时间内、有限的资源内怎么可以建立一个可持续的架构来实现一条可执行的系统,满足用户需求或者解决问题。后面的介绍也会围绕架构设计的主题来探讨到底怎么去管理资源、系统的设计跟开放平台的设计有什么共性的地方。同时,我们发现技术发展经常受到许多经济因素的影响。

  结合腾讯的平台谈开放架构设计

  05年来到腾讯,从美国一个企业软件的公司来到腾讯,有一个特别很深的感受,我记得在美国当年我们做很多的设计优先考虑的是开发人员的效率,怎么把语言不断抽象,提升开发人员的效率。后来我来到腾讯,很不一样的感受是,腾讯会花很多开发人员的力量、很多人优化每一个细节,到很底层的细节。每一台设备去挤出能服务用户服务的量。

  为什么有这种大的不同考虑?后来自己也深入思考。七八年前国内开发人员的薪酬和成本跟美国薪酬开发人员成本还是有一定的差距,而且腾讯海量的服务,如果在某一台设备效率提升一点点,放大到上千上万的设备上,是更大的节省。我们发现系统架构设计,很多时候离不开经济因素的考虑,不同环境瓶颈不一样,要特别提升的效率可以是不同的情况。

  当然,随着技术的进步、硬件设备的发展,不同硬件设备发展的速度也不一样。为什么我们说设计经常是一个动态的考虑,到今天我们也越来越注重开发人员的效率。因为国内开发人员的成本在过去这几年慢慢起来。我想这是一个非常有趣的话题跟角度去思考。在推动腾讯开放平台的过程中,有蛮多的感受。

  好比一个熟悉的操作系统一样,大家都需要很多资源的管理,不管CPU、内存、硬盘、IO还是开放资源、推广资源,资源有限、要服务的对象到底是系统上的进程,进程有大有小,有很多服务,同时在不同开放类型上有应用、满足不同的需求,也有不同的规模。套作系统上的API可以让我们管理不同的资源,也可以有一些机制做通知的体系,协助不同进程之间的沟通联系。同样我们在开放平台需要把一些资源在一些标准的接口下开放出来,怎么管理应用的沟通,怎么提供用户通知的体系,有很多类似的地方,硬件设备的标准更不用说了。

  提到腾讯的开放平台,应该从08、09年的农场说起,当时QQ空间还是一个腾讯服务为主的封闭系统,是一个社交网络。当时看到国外很多的平台,甚至国内也有很多社交网络的平台,都跟着开放API,介入了第三方的应用,我们自己也在不断思考,到底应该怎么做。我们也发现真正要做好一个开放平台,所需要的能力或者所遇到的挑战还蛮多的。一开始尝试介入了农场来到平台,在跟第三方合作的过程中,发现服务海量的用户所需要的能力,对于架构上的要求还蛮高的。所以在发放使用或者尝试体验产品过程中怎么去放量。发现放得太快系统顶不住,服务停了,我们有建立怎么防雪崩的机制。

  我们设计各种各样的模拟器、外挂,又把很多经验带给第三方使用。把很多的数据分析、使用分析,怎么判断模拟外挂的行为能够开放出来给第三方使用。当然,数据的可靠性非常重要,我们做所有的事情、目的都是希望为用户提供更好的服务,让大家玩的开心、使用的放心。所以,怎么保障数据的可靠性,腾讯原来很多基础服务,对于存储这方面特别有高的要求,多份备份,多异地IDC的部署。怎么把这种能力更好的开放出来,而不是说需要每个开发商投入很大的精力做到多点分布,信息同步等一定要求的设计。怎么梳理内部的网络?

  我记得当年我们做农场,要在两三个月内,从几十台的服务器,扩展到几千台的服务器,短时间内的扩容,就算我们想怎么去坎服务器,安装五千台服务器的规模,对于很多开发商是一个大的、高的要求。同时在增加设备的过程中,我们自己的网络是分布在不同的城市,有不同的机房。一开始设备在增长的过程中,不同的IDC里面找资源,先把压力顶住,再逐步优化,后来发现这种过于分散的设备资源,对于外网的压力也非常高。导致我们后来发现非常频繁访问、数据量不多、次数很多,高峰期每秒几十万次的请求,怎么样让内网架构支撑数据流量,也花了很多的工夫和工作。

  如何做一个成功的开放平台

  我们发现要真正做好一个开放平台,要了解开发商有什么需求?不仅仅把API开放出来就完事。我们发现真正要提供稳定的服务给到用户,帮助开发商在海量用户的情况下,怎么服务好大家,是一个非常巨大的系统工程,也是为什么我们在开放平台的项目中,经常会说开放需要能力,也是这个原因。

  怎么接触用户的场景,也是开发者的需要,提供安全稳定的环境,有一整套原来服务内部的云服务体系,也逐步开放出来,给到第三方的开发商使用。怎么建立很好的推广营销的渠道,逐步把精准的社交广告服务提供出来,让应用开发商接入平台,有一整套机制定向找合适他们服务的用户。当然,整个开放平台是一个商业的合作,也需要可持续的商业模式,腾讯这么多年所积累的支付体系,Q币支付体系,设计好分成规则让大家从中获得双赢。我们在整个开放平台的设计里面总结了五个非常重要的要点,我后面也会根据某个点展开,保证设计标准规范、确保规范的执行、保障数据的安全、设定资源分配规则、建立服务体系。

  开放意味着标准、规范,有标准才能降低开发的门槛

  规范保障了用户的利益,保持公平的竞争。原来这里有一句话叫“整个开放平台最重要的意义是在于怎么让业界的合作能够开展起来共赢”,这是非常重要的环节。在很多其他的领域,手机、安卓作为开放的操作系统,还有传统PC的产业链、API的标准,会看到很多行业内的开发商,就是基于这些标准能够各自去发展,找到创新的机会。

  怎么确保规范的执行?如果定了规范但不执行,等于没有规范,而且用户的利益、用户的需求是最重要的。在我们来看,开放只是一个手段,不是一个目的。目的还是回归到到底怎么提供用户最好的服务,多元化的应用。所以在整个规范的执行上,要充分考虑用户的利益,而且要保持整个生态上多个应用有一个公平竞争的环境,怎么提供运营数据的监控能够让我们极早发现应用运营商所出现的问题,以及告诉开发商及时去修正,这些都是怎么确保规范执行需要投入很多精力的地方。

  保障数据安全,保障用户的利益

  怎么确保用户的隐私得到保障?原来QQ的关系链是基于用户聊天的场景,有很强的保护,是不公开的信息,连好友都不能知道,我的QQ关系链里面有谁、什么人。如果我们随意的把用户这么重视、有这么高隐私性的信息公开出来给到第三方任意去用,这是会带来不可想象的后果。所以在整个过程中我们非常敏感、也非常有意识的怎么确保用户的隐私、确保用户的数据不要丢失。刚才提到的防外挂、防垃圾广告,都是最终在确保用户的体验。

  要设定资源分配的规则

  在开放平台内有大量的资源,这些资源往往都会给开发商带来巨大的利益,怎样去设计一套自动化的系统去分配,而不是依靠人工的干扰。腾讯建立的生态是完整的生态,必须能够调动开发商的积极性,而且给有能力开发商获得更好、更低的资源,才能把生态体系做得最好,有效率的发挥这些资源使用。所以,设计一套没有太多人工干扰、人工运营的资源分配体系,也是我们做系统设计经常要考虑的地方。

  怎么去避免资源被垄断?

  在开放平台,当你有好的应用或者成功的应用,获取了大量的用户,并不一定代表开发商做下一款的应用有同样的质量。我们不想因为一款应用的成功而变成为某一家开发商拿一些资源去导入其他的应用,甚至说把这些资源,少量的开发商垄断起来。这样对于创业者,对于中小开发商创新的机会有一定的影响。

  所以,在整个开放平台的设计理念,不管是分成的体系还是其他,绝对往中小企业倾斜。其实跟操作系统的资源分配理念有一定的类似,怎么避免本身相对比较轻的应用,需要资源的时候用上,而不是被一两个跑偏的把所有资源占用住,这里也有很多可以借鉴的地方。

  资源成本的透明,怎么避免滥用

  在早期做开放平台的时候,内部对于系统设备的使用成本计算还没有很好的体系,早期把这些成本都算到收入分成的体系里面。导致开发者对于资源的使用效率不太敏感。反正我能赚多少都是按分成比例计算的,用多少资源都是腾讯来承担的成本。所以导致系统资源的使用效率偏低,而且效率偏低不仅仅是浪费,甚至很多时候是影响性能、影响了用户体验。

  后来更清晰地意识到必须要把P跟L两部分成本,成本和收入的部分能够区分开,把这些资源的成本,不管是推广的资源也好、设备资源也好、带宽资源也好,透明到开发商,让他们清楚不仅仅要充分的挖掘收入的部分,同时也要考虑怎么在成本的部分有更好的一个平衡。这样就会让腾讯有限地系统资源更好、更有效率的提供到各个开发商以及创业者都一样得到公平的机会。

  一定要建立一套服务体系

  说白了就是怎么帮开发者成功。我们有各种各样的培训文档、系统,帮助开发者监控整套应用服务的运营体系,甚至还有推广。在PC年代我们做windows的应用都需要辅助开发商能够更有效率的开发这个应用。但是在开放平台,我们不仅仅是载帮助开发商去做软件,更重要的是提供服务,在互联网时代,服务是更直接能够接触到用户,是一个全方位体验的服务体系。

  需要一整套的服务体系,也是我们帮助开发商成功的工具。当然,开发商在这个开放平台上,不仅仅建立应用,接受稳定的服务,还需要推广营销的资源才能帮他们达到成功。

  建立完整的广告体系。怎么应用好友之间的传播,来帮助开发商的传播,把推广的价值继续放大。我们看到很多不同的应用,比如说QQ农场,它的成功并不是到处打广告,而是很多通过自己邀请好友来玩,通过原来的腾讯所拥有的通讯体系、通知体系来初达用户,这是零成本的。怎么建立应用,可以在服务体系协助开发商成功的一个非常重要的内容。

  腾讯的做法就是通过开放平台,建立一个健康的行业合作的生态链,而给到用户多元化的应用,能够给到广大的QQ用户有更多的选择。

  维持一种长期持续的服务,必须要有一个商业模式的支持。游戏有比较明确的商业模式,已经在开放平台上获得非常好的成绩。但同时下一步要想的是怎么帮非游戏类的应用找到它的商业模式。比如电商,如果通过这个开放平台带动电商的销售,相信很多的电商服务也很愿意给重点的应用分享收入,所以腾讯会针对不同的垂直领域思考,怎么为不同的垂直领域建立健康的商业模式。

  腾讯一个角色来承担这么多开发商的优化以及改善服务的工作,所以最有效的是给到大家最详细的数据,在不同环节不管是流程率还是营销的效率等各个方面来帮助开发商意识到在服务运营商的一些问题。在整个开放平台的设计上,我们考虑很多跟做系统设计有很多类似的地方。

  当前开发商遇到的挑战

  开发商遇到的挑战很大程度是在于怎么从非常成功的游戏垂直领域扩散到更多的应用,这是今天腾讯开放平台团队不断思考到底要怎样调整规则,不管是商业模式分成的规则,或者本身应用的能做什么、不能做什么,这些都有挺多的考虑和沟通。

  目前大概有六万个已经上线注册的应用,多家开发商的月分成超过一千万,甚至超过两千万的。在服务体系里面看到各种各样的尝试,有些让我们非常高兴地看到很多非常创新的应用,非常公益的应用,有学车考试的应用。这个体系给开发商新的机会创造了很多成功的创业者,后面我们也希望发展很多非游戏的应用。

  最后,用马化腾先生曾经在腾讯开放平台启动的时候说过一句话结束:“腾讯过去一直在思考提供在线一体化的服务给到用户做最好的体验,但今天我们发现仅仅腾讯的一个力量是不足的,所以我们希望能够建立一个完善的行业生态链,欢迎众多的开发商跟我们一起提供最好的用户体验,能够在原来关注怎么种一棵树到现在关注怎么寻找整个生态,培养出一片非常茂盛的树林”。

0
相关文章