[转]专访企业QQ SaaS团队,谈企业级LNMP架构设计

FROM : http://www.csdn.net/article/2014-08-20/2821302-interview-tencent-b-qq-shuai-wang

对比IaaS和PaaS,SaaS得到的关注显然要少一些。究其根本,不仅因为SaaS关注的是功能方面的探索,更偏向于某个领域或层面的实际应用,还归结于相较前两者,软件的云化已基本趋于成熟,些许突破并不能带来产业上的变革。然而,较少的关注并不意味着缺乏明星产品:放眼国外,企业级SaaS服务已成为许多公司的一项重要收益来源,比如Salesforce、Oracle;而聚焦国内,同样有很多值得我们关注的产品,就比如本次我们关注的焦点——腾讯企业QQ。这里,我们接触到了企业QQ的Web技术团队,与他们团队的王帅、甘德建、赵凯、陈胜强、唐朝等几位核心人员进行了深入沟通,了解了基于LNMP,超过4万付费企业办公平台的架构及优化经验。由王帅代表团队回答。

企业QQ平台状况

 腾讯企业QQ SaaS团队

CSDN:请首先介绍一下你个人、团队,及贵团队从事的工作和关注的重点。

王帅:在腾讯工作近5年,一直负责企业产品的Web架构。作为SNG乃至整个腾讯使用PHP最广泛的团队之一,我们为企业内部、企业之间提供了高效的通信。企业QQ依托QQ的账号、通信体系,具备内部组织架构管理、对内沟通、无缝与8.6亿活跃QQ用户沟通(文字/表情/音视频/远程协助等)、对外形象统一、开放API等能力。在平时办公中,企业QQ的Rich沟通形式更是座机电话、手机的很好补充。试想在电话中解释很久的问题,可能在企业QQ上一个截屏就可以解决。我们关注企业的信息沟通及管理,帮助企业掌握运营情况,我们坚信能帮助企业实现其目标与价值。我们的口号是随时随地,随心办公。

CSDN:能否谈一下腾讯企业QQ当下的用户规模?都包括了哪些重量级客户?以及这套平台在腾讯内部的使用情况?

王帅:经过几年的积累,企业QQ拥有4W家的付费企业,超过100W的用户数,在整个企业级SaaS市场属于领先的地位。我们设计定位是对座机电话、手机的补充,企业QQ提供的SaaS通信服务,适合所有开通宽带的企业和几乎所有行业。我们的客户行业分布十分广泛,除了快递物流领域的天天快递、圆通,餐饮领域的西贝,同时还包括政府机关、教育单位(比如,上海交通大学)、跨国企业(比如,IT巨头Intel)等。

腾讯SNG的即通综合部平时用企业QQ进行沟通办公,但是由于全公司范围代替RTX的实施成本比较高,所以在腾讯内部只推广到了企业产品部门,不过随着产品影响力的日益增强,我们相信企业QQ必然有机会在全公司范围推广。

CSDN:就腾讯企业QQ这个SaaS来说,客户的担心都在什么地方?有什么问题是大家共同关注的?贵团队使用什么方法攻克了这些难关?

王帅:在使用任何一家的SaaS时,企业CIO/IT经理最担心的就是这套系统的稳定性和安全性。我们从多个维度,保证系统稳定性:

  • 服务器方面,我们采用腾讯自建机房,在保证不间断供电的同时,还具备火灾/洪水预警、硬件/软件双重防火墙防护、百G级DDoS攻击防护等能力;除此之外,我们还配备了7*24小时响应的安全管理团队。系统安全方面,采取了分布式数据采样与集中告警机制,不间断的渗透性测试,提前发现系统潜在问题。
  • 数据安全方面,我们使用了异地备份机制以保证数据的完整。
  • 服务稳定方面,除了优秀的负载均衡技术,我们还使用了N+1的冗余机制以保证系统的平稳运行。
  • 软件安全方面,我们更采取了多个措施:客户端防注入、登录加密等方式自保护,消息传输过程采用私有加密协议,客户端与服务端相互不信任的通信设计保证传输安全,即使在网关上监听也无法破解。良好的代码review机制保证核心代码的稳定性,快速下发patch能力保证一旦问题发生能快速修复。

在SaaS的安全方面,我们与Intel共同打造了一套基于SaaS服务,由厂商自己或第三方提供加密方式的解决方案,并已为之申请专利。保证了客户采用自己希望的加密方式,在企业QQ的安全通道中传输。

CSDN:可否谈下QQ企业平台系统的规模/状态,比如RPS,QPS,TPS等?峰值又会有多少?使用什么样的硬件资源支撑了这个平台?

王帅:作为一款企业级产品,用户量不能和个人产品相比,比如QQ空间。腾讯大部分业务是免费+增值方式,大部分服务器只有不到10%承载的是付费用户。企业QQ的服务器规模较小,但几乎100%承载的都是付费用户。目前的RPS在3000左右,峰值可以达到4000至5000,整个团队所维护的服务器大概是几十台。

几十台已经是算了全部支持系统,主逻辑服务器较少。我们会不断压榨现有服务器性能,从最开始开发企业QQ到现在,基本没有新增过服务器。我们会有阶段性的做架构优化,服务器负载一直保持较低水平。后面会介绍一些优化的方法。

走进腾讯企业QQ

CSDN:能不能详细介绍一下这个平台架构的构建过程?都使用了一些什么技术,分别做了什么?

王帅:目前的SaaS平台架构根据产品和量级的需求经历过多次演变,最终演化成了现在的结构。

由最初的快慢分离和简单容灾,增强容灾和提供灰度发布能力,逐渐抽取统一数据层/减少无用请求,强化多set模型和立体监控,到最后统一数据存储。最终演变为:DNS+GSLB+LVS/TGW+业务逻辑机(Nginx+php-fpm+APC)+中间层和异步系统(PHPServer)+cache层+UDS、Redis、CKV等存储层。

LNMP经验分享

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占用率。

性能调优经验分享

  • 所有数据Cache化,多级Cache
  • 使用Linux的运维命令查找高峰期耗时较高的CGI和进程,运用Xhprof定位业务性能问题
  • 同步网络请求异步化
  • 使用Epoll提到Select提高网络IO效率,为使用PHP做后台server提供基础架构能力
  • 快慢请求业务分离,互不影响。
  • 有效的利用Nginx反向代理能力,将部分(如灰度逻辑)做在nginx层以提高处理性能。

采用上述调优后,我们团队在流量增大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周),积极收集用户的反馈意见、建议,产品组同学、项目经理全程参与其中,决策是否要调整产品。当然灰度期间,我们整个产品中心也是灰度用户,大家可以就新产品畅所欲言自己的观点。最终,产品经过道道工序后终于推向全体企业,这个时候推出的版本由于已经经过部分用户持续试用、反馈、修正,无论从稳定性还是交互体验上都经过真实用户的验证,更加容易得到广大用户的认可。

[转]专访企业QQ SaaS团队,谈企业级LNMP架构设计,布布扣,bubuko.com

时间: 2024-12-28 01:41:03

[转]专访企业QQ SaaS团队,谈企业级LNMP架构设计的相关文章

阿里8年资深技术专家谈企业级互联网架构的演进之路

沈询,阿里巴巴中间件&稳定性平台资深技术专家,在淘宝工作八年间,主要负责的产品有淘宝分布式数据库(TDDL/DRDS).分布式消息系统(Notify/ONS)等,故对整个分布式的互联网架构比较了解.本文分享围绕阿里技术架构演进及过程中遇到的问题与企业级信息系统架构的演进展开. 阿里技术架构演进及过程中遇到的问题 2003 年,淘宝最初的架构建设是采用 PHP,实践发现系统抗压能力相对薄弱.因为淘宝是一个企业级系统,所以选择了当时非常重要的企业级技术 JavaBean.之后把整个 Web 的容器.

iOS开发>学无止境 - 浅谈MVVM的架构设计与团队协作

李刚按:本文是青玉伏案写的一篇文章.相信大家对MVC耳熟能详,MVVM可能听说的相对少一些,这一篇文章将会想你阐述MVVM设计,还有团队协作的经验分享.如果你也觉得不错,就分享一下吧! demo:https://github.com/lizelu/MVVM 今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由 于本人项目经验有限,关于架构设

iOS开发之浅谈MVVM的架构设计与团队协作

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说道架构设计和团队

企业级系统架构设计技术与互联网应用技术结合主题一 大规模并发性能问题探讨

何谓大规模并发,不同层面有不同的理解 企业应用(Intranet):千级强并发,万级弱并发(在线用户),十万级用户 大型企业ERP.供应链,大型企业HR.办公OA 互联网应用(Internet):百万级强并发,千万级弱并发(在线用户),亿级用户/ 门户网站(新浪.腾讯) 平台级电子商务(阿里巴巴.淘宝网.拍拍网) 搜索引擎(百度) 电子商务企业应用(Intranet + Internet):十万级强并发,百万级弱并发(在线用户),千万级用户 B2C电子商务(京东.凡客.一号店) 垂直型电子商务(

团队项目需求分析和架构设计

初稿 之后还会有修改. 工大助手: 前提: 用户根据学号密码登录 功能: 1.  用户可选择获取入学以来所有已修课程的相关信息:课程代号.课程名.课程属性.学分.成绩等信息. 2.  用户可选择获取特定已修课程的相关信息:课程代号.课程名.课程属性.学分.成绩等信息. 3.  用户可以获得特定学期的课程表(教务已经提供的). 4.  用户可以获得考试安排信息. 5.  用户可获得特定时间段内的加权平均分(1学期.1学年.全部). 6.  用户可获得特定课程在所有用户中的成绩排名. 7.  用户可

企业级LNMP架构搭建实例(基于Centos6.x)

1.1 部署LNMP架构说明 1.1.1 LNMP架构内容 01.部署linux系统 02.部署nginx网站服务 03.部署mysql数据库服务 04.部署php动态解析服务 1.1.2 配置LNMP架构步骤 01.配置Nginx配置文件 02.配置mysql数据库信息(SQL语句) 03.配置wordpress博客网站 1.1.3 架构服务器串联 01.数据库数据信息迁移(web服务器上的mysql数据 迁移到10.0.0.51 数据库服务器上) 02.将本地储存数据挂载到NFS共享储存服务

企业级Android应用架构设计与开发 完整版

第1章 课程导学与准备工作本章主要介绍为何要学习企业级的架构设计开发,以及本门课能为我们带来哪些收获.之后会为大家介绍本课程内容具体安排,最后给出如何学好这门课程的一些学习建议.希望大家都能通过这门课程,学有所成,学有所归. 第2章 企业级工程架构分析本章将带领大家依次从传统.模块化.组件化架构模型分析开始,对比它们各自的优缺点,最终我们会采用企业中普遍应用的组件化架构模型开发我们的实战项目,在快速掌握企业级工程架构模型的同时为后面实战项目的开发学习做好准备.大家加油~... 第3章 实战项目需

销售易史彦泽:企业服务SaaS产业进入深水区

2016年7月28日,传来刚拿了E+轮融资的纷享销客在两天内裁员600人的突发消息,据称裁员人数最终将从2500人降到1100人,而之前纷享销客已经多次改变了产品方向. 2015年11月,同为SaaS CRM创业公司的"销售易"搬进了位于北京朝外东大桥的复兴国际中心,这是位于国贸CBD商圈寸土寸金的地段,四年前这家公司才刚成立.2016年4月,销售易发布了旗舰版及PC PaaS平台,形成了覆盖从大型企业到小微企业需求的全线产品.7月销售易再次推出了智能CRM以及移动PaaS平台. 销售

国内外开源与 SaaS ,团队协作平台、项目管理工具整理

整理一些开源与 SaaS ,团队协作平台.项目管理工具.还有哪些比较好的工具,可以推荐下? 名称 地址 备注 asana https://asana.com/ 国外 basecamp https://basecamp.com/ 国外 JIRA https://www.atlassian.com/software/jira 国外 confluence https://www.atlassian.com/software/confluence 国外 Open Atrium http://openat