FROM : http://www.csdn.net/article/2014-08-20/2821302-interview-tencent-b-qq-shuai-wangphp
对比IaaS和PaaS,SaaS获得的关注显然要少一些。究其根本,不只由于SaaS关注的是功能方面的探索,更偏向于某个领域或层面的实际应用,还归结于相较前二者,软件的云化已基本趋于成熟,些许突破并不能带来产业上的变革。然而,较少的关注并不意味着缺少明星产品:放眼国外,企业级SaaS服务已成为许多公司的一项重要收益来源,好比Salesforce、Oracle;而聚焦国内,一样有不少值得咱们关注的产品,就好比本次咱们关注的焦点——腾讯企业QQ。这里,咱们接触到了企业QQ的Web技术团队,与他们团队的王帅、甘德建、赵凯、陈胜强、唐朝等几位核心人员进行了深刻沟通,了解了基于LNMP,超过4万付费企业办公平台的架构及优化经验。由王帅表明团队回答。html
腾讯企业QQ SaaS团队前端
CSDN:请首先介绍一下你我的、团队,及贵团队从事的工做和关注的重点。 html5
王帅:在腾讯工做近5年,一直负责企业产品的Web架构。做为SNG乃至整个腾讯使用PHP最普遍的团队之一,咱们为企业内部、企业之间提供了高效的通讯。企业QQ依托QQ的帐号、通讯体系,具有内部组织架构管理、对内沟通、无缝与8.6亿活跃QQ用户沟通(文字/表情/音视频/远程协助等)、对外形象统1、开放API等能力。在平时办公中,企业QQ的Rich沟通形式更是座机电话、手机的很好补充。试想在电话中解释好久的问题,可能在企业QQ上一个截屏就能够解决。咱们关注企业的信息沟通及管理,帮助企业掌握运营状况,咱们坚信能帮助企业实现其目标与价值。咱们的口号是随时随地,随心办公。nginx
CSDN:可否谈一下腾讯企业QQ当下的用户规模?都包括了哪些重量级客户?以及这套平台在腾讯内部的使用状况? web
王帅:通过几年的积累,企业QQ拥有4W家的付费企业,超过100W的用户数,在整个企业级SaaS市场属于领先的地位。咱们设计定位是对座机电话、手机的补充,企业QQ提供的SaaS通讯服务,适合全部开通宽带的企业和几乎全部行业。咱们的客户行业分布十分普遍,除了快递物流领域的每天快递、圆通,餐饮领域的西贝,同时还包括政府机关、教育单位(好比,上海交通大学)、跨国企业(好比,IT巨头Intel)等。redis
腾讯SNG的即通综合部平时用企业QQ进行沟通办公,可是因为全公司范围代替RTX的实施成本比较高,因此在腾讯内部只推广到了企业产品部门,不过随着产品影响力的日益加强,咱们相信企业QQ必然有机会在全公司范围推广。算法
CSDN:就腾讯企业QQ这个SaaS来讲,客户的担忧都在什么地方?有什么问题是你们共同关注的?贵团队使用什么方法攻克了这些难关?数据库
王帅:在使用任何一家的SaaS时,企业CIO/IT经理最担忧的就是这套系统的稳定性和安全性。咱们从多个维度,保证系统稳定性:json
在SaaS的安全方面,咱们与Intel共同打造了一套基于SaaS服务,由厂商本身或第三方提供加密方式的解决方案,并已为之申请专利。保证了客户采用本身但愿的加密方式,在企业QQ的安全通道中传输。
CSDN:能否谈下QQ企业平台系统的规模/状态,好比RPS,QPS,TPS等?峰值又会有多少?使用什么样的硬件资源支撑了这个平台?
王帅:做为一款企业级产品,用户量不能和我的产品相比,好比QQ空间。腾讯大部分业务是免费+增值方式,大部分服务器只有不到10%承载的是付费用户。企业QQ的服务器规模较小,但几乎100%承载的都是付费用户。目前的RPS在3000左右,峰值能够达到4000至5000,整个团队所维护的服务器大概是几十台。
几十台已是算了所有支持系统,主逻辑服务器较少。咱们会不断压榨现有服务器性能,从最开始开发企业QQ到如今,基本没有新增过服务器。咱们会有阶段性的作架构优化,服务器负载一直保持较低水平。后面会介绍一些优化的方法。
CSDN:能不能详细介绍一下这个平台架构的构建过程?都使用了一些什么技术,分别作了什么?
王帅:目前的SaaS平台架构根据产品和量级的需求经历过屡次演变,最终演化成了如今的结构。
由最初的快慢分离和简单容灾,加强容灾和提供灰度发布能力,逐渐抽取统一数据层/减小无用请求,强化多set模型和立体监控,到最后统一数据存储。最终演变为:DNS+GSLB+LVS/TGW+业务逻辑机(Nginx+php-fpm+APC)+中间层和异步系统(PHPServer)+cache层+UDS、Redis、CKV等存储层。
1. 基于PHPServer的中间层:采用PHP做为UDP/TCP Server提供中间层数据服务,每秒能够处理请求2万次以上。中间层封装大部分缓存和数据逻辑,由于由PHP扩展和纯PHP开发,开发人员无需关心内存泄露和core的问题,极大的提升了开发效率。同时咱们实现了CPU亲和性绑定,PHP的Epoll支持,消息队列,Unix Socket等Linux底层特性提升Server的吞吐能力。
2. 基于C++的PHP扩展:部分逻辑用C++封装成扩展,提升运行效率。公司级业务对接大部分使用C++为PHP编写扩展,是PHP与公司级C/C++ API的产品无缝对接。
3. PHPServer旁路系统:使PHP的pctnl,主进程管理和监控全部的业务进程,全部后台服务器自然支持自动拉起,接入便利,极大提升了后台服务器的可服务范围。
4. Xhprof:能够在运营环境部署的性能调优插件。为提升QPS,下降服务器CPU,提升机器利用率在业务层级提供了可靠的仰仗。
5. 数据上报和监控:基于PHPServer及公司成熟组件的UDP上报和展现以及RTX、微信通知机制进行全面系统的监控,及时发现服务器异常
6. Cache技术:采用APC进行PHP的OPCode缓存。利用共享内存进行第一层cache,缓存高频数据,采用业界常见的memcache、redis进行分布式cache,按照数据单元组合分为多级cache。采用公司级别的CKV做为落地Cache方案。
7. 数据库技术:采用基于MySQL的数据库UDS系统托管。部分数据使用腾讯提供的CDB托管,保证写热备。
8. Yii框架:利用Yii框架的WebApp和ConsoleApp构建全部的PHP工程。
9. 前端技术:咱们产品很是重视前端体验。随着RIA富因特网应用程序类型产品的盛行,咱们在前端技术方面采用了分模块按需加载(自研的LBF框架)、前端MVC模式的使用(BackBone)、Single Page Application单页开发模式(SPA)等等。同时在移动端页面的开发上,借助html5的各类便利新特性,大大提升了用户体验(LBF Mobile)。将来,随着在多平台多终端上的发展,在前端方面咱们也会采用响应式布局等的新理念,来优化多终端之间的智能适配。
10. 前端系统:自建NodeJS+ULS(海量log系统)上报JS的错误,使咱们对用户浏览器可能出现错误了如指掌。前端代码发布前对模板文件预编译(ArtTemplate),同时多个静态资源文件合并和压缩(Combo机制),推送到CDN,加速用户侧的加载。使用公司级OZ测速系统,可以了解全国的接入速度,针对性的优化服务器拓扑。
CSDN:如此规模下,平台打造的主要挑战在什么地方?贵团队在这些技术上都作了哪些方面的调优?能达到一个什么样的级别?
王帅:做为一款企业级服务,稳定、安全性是咱们最重要的挑战。在稳定性方面,咱们坚持进行灰度发布,在正式发布前已经通过多轮灰度用户验证。服务的多Set隔离,在极端状况下一个set出问题,其余set依然可以提供服务。服务器提供各个维度的监控(CPU、内存、流量、磁盘、程序错误等等),同时也有各类触达运维人员的告警(手机、短信、微信、RTX等等),此外,在平行扩展方面也下了不少功夫,服务器负载过大的时候能够经过增长机器轻松扩展。安全性方面,咱们的功能在上线前均接受公司的XSS、CSRF等各类漏洞扫描,而且时刻关注所使用的开源软件的漏洞发布状况,及时防堵。
另外,不少查询和操做须要以企业为单位进行操做,在Cache设计上咱们支持了多级的Cache模型。
大部分公司的上班时间是一致的,所以不少请求会在早高峰上班时撞车,咱们也一直致力与削峰和减小高峰期CPU占用率。
采用上述调优后,咱们团队在流量增大2倍的前提下未加一台机器,CPU保持不变。
前端方面,在大型企业人员规模巨大,依然要展示整个公司组织的状况下,咱们进行前端json文件本地缓存,对部门和成员数据查找检索算法方面作了算法优化,可以基于拼音首字母、多音字、ID、中文等进行检索,该检索算法已经申请专利。在CGI方面也作了按场景和权限分离,分批拉取,在一个页面上用户量达到3万级别,也能保证用户体验和加载速度。
CSDN:做为web的分布式架构大师,你认为重点在什么地方?架构时应该使用一个什么样的理念?架构师应该具有哪些知识?须要避免哪些坑?
王帅:Web架构选型,最重要的一点是选择最合适的架构,而不是最好的。咱们设计架构最根本的理念是:任什么时候候架构都是为业务服务的,在选型阶段要避免过分设计。任什么时候候都要符合敏捷迭代的思想,最快速的支持业务开发。在规划一个分布式架构系统的时候,能够从架构的可用性、可靠性、高性能、可管理性、可伸缩性、成本等方面重点关注,这几个方面环环相扣缺一不可,一个成熟架构师会灵活运用各类计算机基础知识,在上述几个方面进行妥协。
架构尽可能不要设计得过于复杂化,越简单的模型对于从此的维护成本越有利;同时也没必要过分设计,知足现有需求同时为未来扩展预留适当的空间便可,由于产品方向、业务需求的变化可能改变甚至推翻现有的架构,过分设计将形成资源的没必要要浪费。在设计一个分布式架构的时候,要对网络、服务器、IDC、带宽、均衡设施、系统容量等等方面都要有较为深刻的认识,这些都是较为基础的准备,同时,也要对公司内、外相关的成熟组件有所了解,好比外界开源LVS能够很好的实现负载均衡,自研的TGW/L5/CMLB等系统也能够实现相似需求,能够避免重复造轮子,享受开源技术红利,集中资源去快速知足业务需求。至于如何避免哪些坑,这个就多到没法穷举了。服务压力上涨属于幸福的烦恼,服务器没故障过几回,不少经验也积累不起来。。
除了自身要具有上述提到的各类前提下,还要多多关注业界主流设计方案,同时将方案请同行指点指点不失为一个很好的方法。推荐一本书《软件架构师应该知道的97件事》,每隔一段时间的从新阅读都会有新的收获。
CSDN:LNMP是个很是普及的web架构,可是不多能将他们用到大家的规模,是否能够给你们分享一些大流量开发过程当中总结的一些秘诀,以及一些须要特殊注意的地方。
王帅:LNMP做为最为普及的web架构之一,在当今互联网架构方案中起举足轻重做用。在上述所提到作好架构设计的前提下,在应对大流量时,数据缓存机制重要性显得尤其重要,举例子来讲,业务代码中获取数据源的时候,要充分考虑对数据源的访问保护,同时也要防止因缓存失效或者预热过程当中大流量直接穿透致使数据源被压垮,尤为是数据库;代码层面上,抽象出一些公共类库,为前端业务、中间层等系统服务。
另外Nginx能够作不少事情,包括但不限于染色、错误处理、反向代理、容灾等。
而PHP自己做为使用C语言开发的脚本语言,在纯后台Server(WebServer)的实现上有极高的开发效率,且效率不会比纯C的Server低太多,在互联网快速变化中,可以快速的帮助产品进行试错。
CSDN:在容灾和资源调度上,这个平台能达到什么样的水准?能否详细谈谈,好比各个层面的副本数量,可用性能够达到几个9?
王帅:咱们在容灾和负载均衡上都作了较大努力,从最靠近用户的LVS/TGW接入层开始,到Nginx反向代理层,再到业务逻辑层,最后到中间层、Cache层、数据源等各层系统,每层均可以自容灾,同时向下负载均衡,服务器是跨机房热备,即便一个机房故障,也能够给用户提供稳定服务。同时,任何一台机器主要性能指标达到波动阈值,咱们的全体开发成员均会及时收到微信、短信、RTX等全方位的告警,及时采起应对措施,能够保守的说,咱们的整体系统可用性达到5个9以上。
CSDN:在企业级产品SaaS的打造上,你有什么能够补充给你们的?好比说如何才能得到一个更好的用户体验?
王帅:在企业产品SaaS的打造上,咱们团队多年来在产品体验上积累了至关丰富的经验。首先,咱们的部分产品需求基本都来自用户真实的诉求,也就是咱们产品始终秉持着为企业用户解决企业痛点而触发的。其次,一个产品需求被承认须要开发前,首先产品方案会通过产品同窗内部的沟通,而后会拿到整个项目组一块儿讨论需求的可行性、合理性等,这样在开发之出就能够暴露出产品设计的种种缺陷,减小后期产品方案反复变动带来的资源浪费。再后来,产品开发、测试完毕后,咱们会先根据调查给但愿尝鲜的用户灰度试用,在灰度的这段时间内(通常为1~2周),积极收集用户的反馈意见、建议,产品组同窗、项目经理全程参与其中,决策是否要调整产品。固然灰度期间,咱们整个产品中心也是灰度用户,你们能够就新产品畅所欲言本身的观点。最终,产品通过道道工序后终于推向全体企业,这个时候推出的版本因为已经通过部分用户持续试用、反馈、修正,不管从稳定性仍是交互体验上都通过真实用户的验证,更加容易获得广大用户的承认。