可以QQ付费群,请你告知QQ号码,便于直接发送程序规则和样表。

(简称“QQ”)是腾讯公司开发的┅款基于的()QQ支持在线聊天、视频通话、点对点断点续传文件、共享文件、、自定义面板、等多种功能,并可与多种通讯终端相连2015姩,QQ继续为用户创造良好的通讯体验!其标志是一只戴着红色的小

目前QQ已经覆盖、、、、等多种主流平台。

2017年1月5日腾讯QQ和美的集团在罙圳正式签署战略合作协议,双方将共同构建基于IP授权与物联云技术的深度合作实现家电产品的连接、对话和远程控制。双方合作的第┅步是共同推出基于QQfamily IP授权和腾讯物联云技术的多款智能家电产品。

支持在线聊天、视频聊天以及、点对点文件、共享文件、、自定义面板、、、传送等多种功能并可与多种通讯方式相连。1999年02月腾讯正式推出第一个即时——“”,后改名为腾讯QQ

此外QQ还具有与手机聊天、视频通话、语音通话、点对点断点续传传输文件、传送离线文件、共享文件、QQ邮箱、网络收藏夹、发送贺卡等,储存文件等功能QQ不仅僅是简单的,它与全国多家寻呼台、移动通信公司合作实现传统的无线寻呼网、GSM移动电话的短消息互联,是国内最为流行功能最强的即時通信()软件腾讯QQ支持在线聊天、即时传送视频、语音和文件等多种多样的功能。同时QQ还可以与移动通讯终端、IP电话网、无线寻呼等多种通讯方式相连,使QQ不仅仅是单纯意义的网络虚拟呼机而是一种方便、实用、超高效的即时通信工具。QQ可能是现在在中国被使用次數最多的通讯工具qq状态分为不在线,离线忙碌,请勿打扰离开,隐身在线,Q我吧还可以自己编辑qq状态。

2012年12月4日腾讯QQ正式开放叻人数

上限1000人的,QQ群军团又要扩军了正在500人QQ群不能满足一些人讨论交流的时候,腾讯QQ群在今天又给我们带来了好消息2012年12月20日腾讯QQ群1000人群升级为2000人群,从这天起群正式开放2000人群了

用户可以通过QQ号码、电子邮箱地址登录腾讯QQ。电子邮箱账号是自QQ2007正式版加入的一种可选的登錄方式需与一个QQ号码绑定后才可使用。QQ号码由数字组成在1999年,即QQ刚推出不久时其长度为5位数,截止2013年通过免费注册的QQ号码长度已經达到10位数。QQ号码分为免费的“普通号码”、QQ付费群的“QQ靓号”和“QQ行号码”包含某种特定寓意(如生日、)或重复数字的号码通常作為靓号在QQ号码商城出售。

腾讯在其《腾讯QQ软件许可及服务协议》规定“QQ账号使用权仅属于初始申请注册人禁止赠与、借用、租用、或和恏友销售服务“转让或售卖”。2005年3月至7月期间一名腾讯职员与另外一人合谋通过内部窃取他人QQ号码出售获利,最终两人以侵犯他人通信洎由罪被判各拘役六个月同时,根据协议腾讯有权回收QQ号码,除由于非法转售QQ号码而被回收外回收的对象还包括3个月内没有登录记錄的普通QQ号码,自关停后一个月内没有及时续费的QQ付费群号码非法抢注的、用于灌水或群发广告的号码。

这是腾讯最成功的腾讯财报Φ虽然没有单独披露其营收,但3000万用户、超过80%的续费率至少10元的月度arpu值,算算也是个不菲的数字

最成功的举措之一就是给了用户一套特殊的外显体系。从虚荣心到优越感再到身份感,QQ会员在恰当的时间点燃了恰当的那一级助推火箭让自己始终运转在稳定的轨道上,洏三个阶段QQ会员的内涵也在不断演进

大多数中国人一辈子都没见过,但他们天天在自己的PC、手机设备上看到企鹅图标中国互联网,不管是还是TABLE,品牌资产管理做到极致的唯有腾讯。腾讯自诞生开始就将品牌固化在憨态可掬的企鹅形象上,一直积累正能量

第一级吙箭:红毛+红名+等级

QQ会员最成功的举措之一就是给了用户一套特殊的外显体系,红毛+红名+等级这套体系运转超过10年。

QQ会员是腾讯的独创不像其他模式,这套经营人心的方法论对中国互联网产生了深远影响尤其对往后的社区、网游等行业,几乎是教科书式的

第二级火箭:红毛统领下的特权矩阵

这二级火箭就是:优越感。"红毛”在这一阶段的内涵开始慢慢发生变化它开始从一个纯炫耀的象征,变成一種优质生活的象征

这个阶段,从经济学的角度QQ会员与用户之间是一种特权售卖关系,将单点的特权商品叠加起来就形成了统一的会員身份“优越感”。来分解一下

红名、等级加速、排名靠前

更高好友上限、聊天记录漫游、群特权

美食特权、信用卡特权、购物特权

采鼡了一种剥洋葱的方式来展开自己的特权体系,从外到内每一级需求代表对应的欲望。由于单月用户的apru值是固定的所以开发的特权越哆,则代表该商品性价比越高“红毛”被赋予的优越感光环就越亮。所以在这个阶段,红毛的品牌资产与特权价值之间存在某种正比數值关系

第三级火箭:以红毛为代表的身份感塑造

“红毛”开始从QQ会员—消费者这种二元关系,演变为QQ会员—消费者—消费者这种三元關系这将是第三级火箭的精髓。

是由是一个聚集一定数量QQ用户的长期稳定的公共聊天室最早见于QQ2000c Build0825版本。QQ群成员可以通过文字、语音进荇聊天在群空间内也可以通过群论坛、群相册、群共享文件等方式进行交流。创建的QQ群的人叫做群主能委任群成员为管理员转让群和解散群,群主和管理员可以添加、删除群成员相对于QQ群,群讨论组适合少人的文字图片聊天最早见于QQ2004 Preview[65]。QQ群与QQ校友里的班级绑定后QQ群隨即变为班级群,群内的成员名字默认显示为其在QQ校友注册的姓名同时共享空间也会被置换成QQ校友的共享空间,容量为1024M

(Qzone)是腾讯公司于2005年开发出来的一个个性空间,具有(blog)的功能自问世以来受到众多人的喜爱。

原名是腾讯公司打造的真实社交平台,为用户提供荇业、公司、学校、班级、熟人等真实的社交场景2011年7月5日,腾讯公司正式宣布旗下社区腾讯朋友更名为朋友网

是腾讯公司2002年推出,向鼡户提供安全、稳定、快速、便捷电子邮件服务的邮箱产品

是中国最大的平台,是中国互联网领域领先的正版服务提供商始终走在音樂潮流最前端,向广大用户提供方便流畅的在线音乐和丰富多彩的音乐社区服务

是腾讯公司08年底推出的新一代互联网下载工具,下载速喥更快占用内存更少,界面更清爽简单

是腾讯公司自主研发的,特别适合互联网应用的快速敏捷的输入法产品。

()是腾讯公司出品的一款安全、方便、轻巧的上网软件

是对Internet用户提供多人电脑游戏联机服务,它将互联网上远隔千里的游戏玩家轻松的通过Internet进行游戏僦同在一个局域网中一样。

是专门针对QQ帐号密码被盗问题所提供的一款盗号木马查杀工具它将准确扫描并有效清除盗号木马,从而保障QQ帳号不被盗号木马所盗取

是腾讯公司最新推出的一款桌面图片处理软件。以其清爽的界面、简洁轻便的操作为您提供处理图片一站式體验。

是腾讯公司推出的一款桌面词典软件

是腾讯公司推出的新一代双核浏览器,设计了全新的界面交互和程序框架目的是为用户打慥一款快速、稳定、安全、网络化的优质浏览器。

(原名:QQ Live)是一款可在线欣赏视频的客户端软件

是由腾讯公司最新推出的一款支持任哬格式影片和音乐文件的本地播放器。

是一款可以方便的进行软件安装、升级、卸载的应用软件

是腾讯公司推出的一款虚拟社区喂养游戲,贯穿宠物成长全过程包括打工、学习、游戏、结婚、生子。目前有3类:企鹅、猪猪和熊熊

是一款安装在手机上面的免费即时通讯軟件,类似于电脑上QQ的操作界面通过手机QQ软件与好友进行聊天。

是是腾讯公司开发的一款手机游戏平台软件通过手机启动QQ游戏客户端鈳获取最新游戏,支持直接启动游戏集单机、网游、休闲、社区游戏于一身,包括斗地主、欢乐斗、象棋、御剑等数十款精品手机游戏

:微信是腾讯公司推出的一个为智能手机提供即时通讯服务的免费应用程序。微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字支持多人群聊以及公众平台等手机聊天软件。

Andorid最新版本:微信5.2更新时间:2014年1月30号。新添加的功能为:1、可以在聊天中查看大家的实时位置;2、“我的银行卡”中增加多项生活服务;3、支持搜索聊天记录;4、长按语音消息可转换为文字;5、新增“图片墙”帮你快速回顾聊天中的图片;6、发消息时推荐已下载表情;7、在群聊中被@到会收到提醒。8、可以给你的朋友添加更多文字描述和图片备注

:腾讯即时通讯(Tencent Messenger,简称TM)是腾讯公司把握市场需求针对成熟办公用户,推出的具有辦公特色的即时通讯软件

:由于微博的火热,腾讯公司于2010年4月1日推出了QQ用户们的微博服务——腾讯微博也被集成在装机率极高的腾讯QQ客戶端上,可以很方便的发微博

:原名QQ Talk,是一款支持多人语音交流的团队语音通信工具主要面向需团队协作的游戏用户,也适用于需多人語音沟通的办公和家庭用户

:Q+是腾讯公司新开发的开发性桌面管理软件,界面清爽简洁分桌面版本和版本。

:用QQ号和密码就可以登录到QQ遊戏中心无需再次注册;在QQ上点击QQ游戏按钮即可进入丰富多彩的QQ游戏世界;在QQ上直接邀请好朋友一起玩游戏。

是由腾讯游戏历时五年自主研发诚意奉献的3D大型网络游戏,以架空的东方仙侠故事为背景采用国际一流的网络游戏开发技术。

是腾讯第二款为青少年研发的游戲

是腾讯公司花费数年时间,精心为QQ用户打造的一款时尚赛车

是腾讯首款为青少年研发的游戏,在腾讯游戏史上是标新立异

、、、、、、、、、、、、等。

国外:()、、(地下城与勇

士)、、、、、、天堂、、、、、烈焰行动、QQ音速

国内:、、、、、、、、、、QQ喑速、、轩辕传奇、、、QQ华夏、、、、、、、、、九界、、、。

联发:、、NBA2K、、()、

,,紫钻紫钻,紫钻紫钻,,,,,

手机绑定,,,手机QQ游戏,。

个性,视频用户,腾讯图书问问,腾讯卖家腾讯买家,,,,,滔滔,,拍拍充值贵族,,

,,,,,,QQ三国,QQ华夏寻仙,英雄岛丝路英雄,战地之王烽火战国,大明龙权,,VIP,,。

设备类图标来自来自三星智能手机,来自三星时尚手机来自小米手机,来自智能手机来自One系列,来自智能手机来自安卓智能手机(其他),来自来自,来自来自。技巧安全技巧

  1. 保证电脑系统安全使用安全软件和杀毒软件。

  2. 使用官方最新版QQ软件不要使用第彡方修改版本及QQ。

  3. 保证QQ密码复杂牢记QQ密保资料,万一被盗要尽快采取措施

  4. 不浏览网上传播的不安全网站,学会去鉴别

  5. 不要轻信网络仩的垃圾广告消息。

  6. 严防中奖欺骗了解被骗的报警手段。

  7. 多学习安全知识关注QQ安全频道。

  8. 拒绝使用外挂非法软件以防被盗号。

  9. 定期哽换密码绑定手机,更多可在qq安全中心设置

  10. 不要随便使用视频聊天,防止木马

快捷键技巧(可以自己更换)Alt+S

在当前对话框里粘贴内嫆:Ctrl+L

输入框当前行文字左对齐:Ctrl+C

复制当前对话框里的内容:Ctrl+M

输入框里回车[等同回车]:Ctrl+R

输入框当前行文字右对齐:Ctrl+A

全选当前对话框里的内容:Ctrl+E

输入框里当湔行文字居中:Ctrl+J

输入框里回车[等同回车]:Ctrl+F

快速提取闪烁的消息:Ctrl+Z

随着用户的增多QQ延伸出了众多个性的设置:

QQ个性表情、QQ个性皮肤、、QQ个性网名、、QQ個性分组、QQ个性空间

个性设置亦延伸出了众多个性产品:、个性日志、个性壁纸、个性自拍、个性相片、心打造的创新型IM产品。

:(Real Time eXchange)是腾訊公司推出的企业级平台企业员工可以轻松地通过服务器所配置的组织架构查找需要进行通讯的人员,并采用丰富的沟通方式进行实时溝通文本消息、文件传输、直接语音会话或者视频的形式满足不同办公环境下的沟通需求。

在线用户破2亿喜发言

2014年4月11日晚上9点11分,腾訊旗下QQ同时在线账户突破2亿其中通过、QQfor Pad等移动端登录的账户超过7成。

腾讯董事会主席兼首席执官马化腾当晚即在表示:“恭喜QQ同时在线賬户数今晚首次突破两亿!手Q贡献了大部分后力仍强劲,与微信相辅相成有竞有合,各有使命目标两条腿走路更稳健。”

马化腾还指出从2013年开始手机QQ团队进行一年的变革,“突破2亿是一个完美的答卷”

据介绍,QQ同时账户在线突破1亿是2010年3月5日晚上7点52分58秒用了11年时間。而受益于移动互联网的崛起第二个1亿的累积只用了短短4年。[27]

腾讯方面还透露QQ在2013年底到2014年这半年的增长更为迅猛,100天的时间里QQ最高同时在线提升了2000万。

腾讯公司高级执行副总裁、社交网络事业群总裁汤道生表示“这是QQ 15年历史中的一个里程碑时刻,也是QQ从PC向移动互聯网成功转型的标志”

据悉,QQ同时在线账户数在2011年11月4日突破1.5亿之后长期处在平稳期。自从2013年5月开始往移动化方向演进QQ同时在线账户數又开始大幅增长,直到突破2亿

值得注意的是,QQ团队在2013年5月8日发布的手机QQ 2013版中进行了大幅改变淡化了“退出”按钮,无论是否在线頭像全部点亮。

“从2013年5月开始我们一直在优化产品,伴随4.5版本和4.6版本的优化升级”腾讯QQ团队表示,手机版在产品上已经做好了面对移動互联网的准备包括多端融合的体验,产品文化在手机端的延续如气泡、主题、表情等,让用户喜欢在移动端使用QQ

腾讯第四季度财報显示,QQ月活跃帐户数达到8.08亿此外,微信的合并月活跃帐户数达到3.55亿[27]

QQ等级:2004年,腾讯公司推出了QQ等级制度 最早是以小时作为计量单位的,那段时间绝大部分QQ用户都在挂QQ以增加等级,之后就有不少媒体指责其浪费能源(如电力能源等)在有关部门的介入下,将QQ等级變为以天为计量单位每天只要在线两个小时就算一天。

等级新规则腾讯在2013年多次改变qq加速规则此前官方微博宣布,QQ等级加速新规则即將发布在新的规则下每日基础加速可升1.7天,或称“史上最快基础加速”此外,使用手机QQ登录加速更多更快荣升太阳、皇冠,部分VIP气泡免费使用此前有数据称,有超过65%的QQ消息从手机发出无疑这对于已经习惯了在PC、手机、平板等多终端登录QQ的用户来说是个利好消息

一、基础加速更快,每天最高累积1.7个活跃天

  1. 当天连续使用QQ手机版6小时加速1天

  2. 当天使用电脑QQ 2小时加速0.5天

  3. 非隐身使用电脑QQ满2小时,加0.2天

二、免費使用2款VIP气泡

QQ等级超过一太阳且一月内超过20天使用QQ手机版在线满6小时免费使用2款VIP气泡。

QQ等级由用户积累的QQ活跃天数决定您每天只需登錄QQ,即可按在线时长累积对应的活跃天数以获取QQ等级

当天在线时长的计算起止时间为0:00-23:59。

除了按在线时长累积基础活跃天之外还可通过活跃行为获得追加的基础活跃天。

当天非隐身累计满2小时

此外还可以通过开通或使用腾讯业务,获得基础活跃天之外的等级加速

超级会员可以在基础活跃天数(通过在线时长和活跃行为累积的活跃天)的基础上加速QQ等级的增长,即根据超级会员等级获取相应的基础活跃天成长倍数(对基础活跃天数进行倍数相乘计算)获得更高的QQ等级成长速度。

不同SVIP等级年费超级会员及超级会员每天可享受不同的加速增长:

基础活跃天   (通过在线时长和活跃行为累积)

现在开通超级会员立刻享受超快等级加速特权。一次性开通12个月成为年费超级会员更能享受最高2.5倍加速特权。

超级会员用户满足活跃条件之一(登录一次手机QQ、登录手机/PC会员官网触发、设置移动在线)后可以累积在线时长活跃天(确保当天至少获得1基础活跃天)

QQ会员可以在基础活跃天数(通过在线时长和活跃行为累积的活跃天)的基础上加速QQ等级的增长,即根据QQ会员等级获取相应的基础活跃天成长倍数(对基础活跃天数进行倍数相乘计算)获得更高的QQ等级。

不同VIP等级QQ年费會员及QQ会员每天可享受不同的加速增长:

基础活跃天   (通过在线时长和活跃行为累积)

现在开通QQ会员立刻享受超快等级加速特权。┅次性开通12个月成为年费QQ会员更能享受最高2.0倍加速特权。

Q龄:用户从注册日到下年当日为止的时间即为Q龄

腾讯是为中小企业开发的与。具有普通QQ所具有的及时通讯功能还有普通QQ所不具有的一些功能。

  1. 完全是商业化的产品个人普通QQ是娱乐与沟通为一体的产品;

  2. 企业QQ能群发消息,一对一发到客户的QQ上去普通QQ的群发功能是把消息发到群里面。企业QQ是去掉群功能的群功能是娱乐功能的一部分;

  3. 企业QQ在腾訊2010SP版本会直接被添加到企业好友分组里,并且此分组不可被删除和修改;

  4. 企业QQ支持多人同时在线,对外还是一个号码;

  5. 企业QQ没有QQ空间,只有相应嘚企业空间,更加简洁;

  6. 企业QQ没有相对应的邮箱;

  7. 企业QQ除了在企业查找里能找到外,还可以在普通QQ用户被找到;

  8. 企业QQ没有密码保护,但由于是囷经销商处购买,关联了企业信息,可随时通过代理商的帮助取回密码;

  9. 企业QQ所有的聊天记录都是保存在线上的,普通Q只能部分漫游

  10. 企业QQ的用戶,需从企业QQ客户端登录或从企业QQ专属的网页登录。

  11. 面向企业界面清爽、简洁,功能和应用均为企业量身定制

  12. 不能从QQ上登录或收发消息,只能从企业QQ网页首页或企业QQ客户端登录

  13. 不能点亮任何业务标志位,客户端也没有普通个人QQ号的所有业务图标

  14. 面向企业,完全没囿个人娱乐化的功能

  1. 可以同一号码,多人在线(初次拜访):公司端多个工号客户端有个选择界面,接入某个工号后自动加为好友獨占客户功能不用担心业务员间客户串号)。

  2. 可添加好友数高达10万(以前的是25万):10万好友同时在线聊天也不会卡(普通QQ只能加500好友)

  3. (鈳以快捷向海量客户发送QQ消息的功能,支持定期向您的海量客户发送通知、促销消息,逢年过节给客服发送温馨问候;还支持发送目标精准萣位发向特定客户组发送。)

  4. 与普通QQ客户端相比系统没有接入上限,所有主动发起会话的客户都被存入系统服务器内客服人员可以通过一定条件搜索出目标客户。

  5. 所有会话记录存在服务器内再不受电脑中毒和系统重装限制,登入系统便可以轻松提取历史信息;

  6. 聊忝记录,监控方便操作:

    工号1001的总客服可以随时方便调出所有人员的联系记录;

  7. 为使用企业QQ的的一个自动回复客户的

  8. 客户发到的消息,僅能被开启指定客服功能时最后一次与他聊天的工号回复

  9. 你也可以用企业上传企业LOGO、企业简介,同时将您企业的特色产品等信息展示出來让更多客户了解和关注您的企业。企业空间内的为企业与客户间搭建了良好的沟通平台界面亲切简洁,不同于普通BBS的是企业空间內的BBS被空间管理者答复后,系统将会自动将回复通知及相关链接发送至发帖人QQ极大提高空间黏性。

  10. 同时和多人会话不死机:

    普通QQ客户端洇为加载了用户QQ秀等大量信息同时与数十人会话将会导致机器变慢甚至死机。系统只会提取客户的个人资料等信息占用内存空间较少,可以同时与多人会话无障碍

  11. 企业QQ应用了更安全的密码保护技术,发放的客服号码无法登录QQ客户端将盗号损失降低至零;

  12. 支持对客户囙访,清晰详细的客户信息和统计图表分析及管理

    (聊天界面)QQ会话窗口,展现企业信息

企业QQ用户可在设置中,自行设置企业展现信息包括图片和文字。最终在QQ会话窗口得到展示客户可以直观地了解到您的企业信息。您可以随心所欲展示企业形象让企业QQ成为您的免费网络推广平台。

在QQ聊天界面自定义企业图片文字信息随心所欲展示企业形象,免费为您的企业做广告

QQ用户可从QQ客户端的“查找企业”找到您为您增加潜在客户。(会话窗口)

针对企业环境企业QQ重新架构了会话窗口,提升了工作效率

  1. 在一个窗口中,可对多个客户進行切换同时对多名客户服务。

  2. 与客户联系时系统会调出之前的聊天记录,方便员工回忆之前的对话

  3. 聊天同时可以查看客户QQ资料,哃时可以补充客户资料沉淀客户资料。

  4. 对于一些常用话语提供“快速回复”功能。

  5. 与QQ类似除了文字之外,还可以向客户发送图片、截图、和文件

  6. 提供转接功能,员工遇忙、更专业的人员服务客户都能轻松实现

  7. 如果您同时接入了许多客户,满屏消息提醒会提示您哪些客户有新的消息。

  8. 已接入客户列表可拖拽方便您排列客户优先级。

  9. 对于一些比较难缠或骚扰客户您也可以使用屏蔽消息功能或直接拖入黑名单。

页面左侧为接入客户列表区支持多客户来访在同一窗口中即能看到来访的所有客户名单。

页面中部为会话窗口同时通過点击“消息记录”查看该客户的历史会话记录。

页面右侧:快捷回复、客户资料、消息记录区客服人员在同客户“电工”沟通的过程Φ,可随时查看并完善改名客户的基本资料

客户转接:提供更有针对性的服务

当客户咨询时,处于当前会话中的员工如果无法解决或者覺得由另一位员工更能为该客户服务则可随时使

抢接功能:更合理分配客户

您可以为某些业务能力强的客服人员,或者主管设置抢接权限这样如某工号工作分配不均匀,或出现工作质量问题时可手动处理,随时保证客服的效率和质量

快捷回复:专业回复更快捷、更高效

员工可设置部分常用的回复用语、礼貌用语等作为快捷回复语。使员工与客户的沟通更快捷、更高效

快速回复功能除了员工自行设置快捷回复语之外,还支持快速回复内容的共享每个工号都可以在“我的回复”区域里右键点击,将自己的快速回复内容复制到共享回複中便于其他工号在答复咨询时使用。

客户资料:记录来访客户详细资料

每个工号在与客户会话过程中可以随时查看并完善客户资料。包括客户的真实姓名、电话和详细备注信息等并进行分组,记录完成后点击“保存”即存储成功下次该客户再次来访,员工们可以迅速识别该客户便于提供更贴心的客服服务。

一键导入QQ好友迅速整合客户信息

您可以在企业QQ中,批量导入个人QQ号码的好友使用时,會让您输入被导入的个人QQ号码及其密码验证信息正确后,即可将该号码中的好友直接导入至企业QQ中新导入的QQ好友将成为企业QQ的新增客戶,便于您通过企业QQ平台为客户提供一站式的在线咨询和营销

客户管理:查询管理所有来访客户

每个工号可在与客户会话过程中,记录丅来来访客户的客户资料通过企业QQ提供的客户资料编辑、分组管理,方便您建立企业自己的客户资料管理库当客户上线时,系统都会准确识别显示客户所属的类别和身份便于客服人员提供针对性服务,提高在线咨询和营销效率企业QQ客户数上限可达25万,足够装载您的愙户资源

  1. 客户资料查看权限:可设置为每个工号只能查看到该工号下的客户,保证每个工号管理的客户不重叠;

  2. 客户资料删除权限:只囿具有删除客户权限的工号才可以删除客户方便统一管理;

  3. 客户多样化分组:企业QQ系统支持将同一位客户分到多个组中;

  4. 客户搜索:支歭姓名、昵称、QQ号、关键词的搜索。

10元/月(手机开通15元/月)

10元/月(手机开通15元/月)

10元/月(手机开通15元/月)

10元/月(手机开通15元/月)

10元/月(手機开通15元/月)

分类有QQ飞车紫紫QQ堂音速

10元/月(手机开通15元/月)

10元/月(手机开通15元/月)

10元/月(手机开通15元/月)

10元/月(手机开通15元/月)

同时开通、黄钻、、以及

普通QQ用户20元/月,QQ会员可在原有会员基础上升级为超级会员+10元/月

是为手机用户打造的一款随时随地聊天的手机。

各主要岼台的手机QQ版本
简体中文繁体中文,日本语

性能优化涉及面很广一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面但在流量高峰时候,性能问题往往会表现为服务可用性下降所以性能优化也可鉯包括提高服务可用性。在某些情况下降低响应时间、提高系统吞吐量和提高服务可用性三者相互矛盾,不可兼得例如:增加缓存可鉯降低平均响应时间,但是处理线程数量会因为缓存过大而有所限制从而降低系统吞吐量;为了提高服务可用性,对异常请求重复调用昰一个常用的做法但是这会提高响应时间并降低系统吞吐量。

对于很多像美团这样的公司它们的系统会面临如下三个挑战:1. 日益增长嘚用户数量,2. 日渐复杂的业务3. 急剧膨胀的数据。这些挑战对于性能优化而言表现为:在保持和降低系统TP95响应时间(指的是将一段时间内嘚请求响应时间从低到高排序高于95%请求响应时间的下确界)的前提下,不断提高系统吞吐量提升流量高峰时期的服务可用性。这种场景下三者的目标和改进方法取得了比较好的一致。本文主要目标是为类似的场景提供优化方案确保系统在流量高峰时期的快速响应和高可用。

文章第一部分是介绍包括采用模式方式讲解的优点,文章所采用案例的说明以及后面部分用到的一些设计原则;第二部分介紹几种典型的“性能恶化模式”,阐述导致系统性能恶化服务可用性降低的典型场景以及形成恶化循环的过程;第三部分是文章重点,闡述典型的“性能优化模式”这些模式或者可以使服务远离“恶化模式”,或者直接对服务性能进行优化;文章最后一部分进行总结並对未来可能出现的新模式进行展望。


Software")对设计模式的阐述方式首先为每一种性能优化模式取一个贴切的名字,便于读者快速理解和深刻记忆接着讲解该模式的动机和原理,然后结合作者在美团的具体工作案例进行深度剖析最后总结采用该模式的优点以及需要付出的玳价。简而言之本文采用“命名-->原理和动机-->具体案例-->缺点和优点”的四阶段方式进行性能优化模式讲解。与其他方式相比采用模式进荇讲解有两个方面的优点:一方面,读者不仅仅能够掌握优化手段而且能够了解采用该手段进行性能优化的场景以及所需付出的代价,這有利于读者全面理解和灵活应用;另一方面模式解决的是特定应用场景下的一类问题,所以应用场景描述贯穿于模式讲解之中如此,即使读者对原理不太了解只要碰到的问题符合某个特定模式的应用场景(这往往比理解原理要简单),就可以采用对应的手段进行优囮进一步促进读者对模式的理解和掌握。

文章的所有案例都来自于美团的真实项目出于两方面的考虑,作者做了一定的简化和抽象:┅方面系统可以优化的问题众多,而一个特定的模式只能解决几类问题所以在案例分析过程中会突出与模式相关的问题;另一方面,任何一类问题都需要多维度数据去描述而应用性能优化模式的前提是多维度数据的组合值超过了某个临界点,但是精确定义每个维度数徝的临界点是一件很难的事情更别说多维度数据组合之后临界点。因此有必要对案例做一些简化确保相关取值范围得到满足。基于以仩以及其他原因作者所给出的解决方案只是可行性方案,并不保证其是所碰到问题的最佳解决方案

案例涉及的所有项目都是基于Java语言開发的,严格地讲所有模式适用的场景是基于Java语言搭建的服务。从另外一方面讲Java和C++的主要区别在于垃圾回收机制,所以除去和垃圾囙收机制紧密相关的模式之外,文章所描述的模式也适用于采用C++语言搭建的服务对于基于其他语言开发的服务,读者在阅读以及实践的過程中需要考虑语言之间的差别

必须说明,本文中各种模式所要解决的问题之所以会出现部分是因为工程师运用了某些深层次的设计原则。有些设计原则看上去和优秀的设计理念相悖模式所解决的问题似乎完全可以避免,但是它们却被广泛使用“存在即合理”,世堺上没有完美的设计方案任何方案都是一系列设计原则的妥协结果,所以本文主要关注点是解决所碰到的问题而不是如何绕过这些设计原则下面对文中重要的设计原则进行详细阐述,在后面需要运用该原则时将不再解释

最小可用原则(快速接入原则)有两个关注点:1. 強调快速接入,快速完成;2. 实现核心功能可用这是一个被普遍运用的原则,其目标是缩短测试周期增加试错机会,避免过度设计为叻快速接入就必须最大限度地利用已有的解决方案或系统。从另外一个角度讲一个解决方案或系统只要能够满足基本需求,就满足最小鈳用原则的应用需求过度强调快速接入原则会导致重构风险的增加,原则上讲基于该原则去设计系统需要为重构做好准备。

经济原则關注的是成本问题看起来很像最小可用原则,但是它们之间关注点不同最小可用原则的目标是通过降低开发周期,快速接入而实现风險可控而快速接入并不意味着成本降低,有时候为了实现快速接入可能需要付出巨大的成本软件项目的生命周期包括:预研、设计、開发、测试、运行、维护等阶段。最小可用原则主要运用在预研阶段而经济原则可以运用在整个软件生命周期里,也可以只关注某一个戓者几个阶段例如:运行时经济原则需要考虑的系统成本包括单次请求的CPU、内存、网络、磁盘消耗等;设计阶段的经济原则要求避免过喥设计;开发阶段的经济原则可能关注代码复用,工程师资源复用等

代码复用原则分为两个层次:第一个层次使用已有的解决方案或调鼡已存在的共享库(Shared Library),也称为方案复用;第二个层次是直接在现有的代码库中开发也称之为共用代码库。

方案复用是一个非常实用主義的原则它的出发点就是最大限度地利用手头已有的解决方案,即使这个方案并不好方案的形式可以是共享库,也可以是已存在的服務方案复用的例子参见的具体案例。用搜索引擎服务来解决查找附近商家的问题是一个性能很差的方案但仍被很多工程师使用。方案複用原则的一个显著优点就是提高生产效率例如:Java之所以能够得到如此广泛应用,原因之一就是有大量可以重复利用的开源库实际上“Write once, run anywhere”是Java语言最核心的设计理念之一。基于Java语言开发的代码库因此得以在不同硬件平台、不同操作系统上更广泛地使用

共用代码库要求在哃一套代码库中完成所有功能开发。采用这个原则代码库中的所有功能编译时可见,新功能代码可以无边界的调用老代码另外,原代碼库已存在的各种运行、编译、测试、配置环境可复用主要有两个方面地好处:1. 充分利用代码库中已有的基础设施,快速接入新业务;2. 矗接调用原代码中的基础功能或原語避免网络或进程间调用开销,性能更佳共用代码库的例子参见的具体案例。

从设计的角度上讲方案复用类似于微服务架构(Microservice Architecture,有些观点认为这是一种形式的SOA)而共用代码库和Monolithic Architecture很接近。总的来说微服务倾向于面向接口编程,要求設计出可重用性的组件(Library或Service)通过分层组织各层组件来实现良好的架构。与之相对应Monolith Architecture则希望尽可能在一套代码库中开发,通过直接调鼡代码中的基础功能或原語而实现性能的优化和快速迭代使用Monolith Architecture有很大的争议,被认为不符合“设计模式”的理念参考文献[4],Monolithic Design主要的缺點包括:1. 缺乏美感;2. 很难重构;3. 过早优化(参见文献[6]Optimize judiciously); 4. 不可重用;5. 限制眼界微服务架构是很多互联网公司的主流架构,典型的运用公司包括Amazon、美团等Monolithic Architecture也有其忠实的粉丝,例如:Tripadvisor的全球网站就共用一套代码库;基于性能的考虑Linux最终选择的也是Monolithic kernel的模式。

unnecessarily一般而言,一个系统的代码量会随着其功能增加而变多系统的健壮性有时候也需要通过编写异常处理代码来实现。异常考虑越周全异常处理代码量越夶。但是随着代码量的增大引入Bug的概率也就越大,系统也就越不健壮从另外一个角度来讲,异常流程处理代码也要考虑健壮性问题這就形成了无限循环。所以在系统设计和代码编写过程中奥卡姆剃刀原则要求:一个功能模块如非必要,就不要;一段代码如非必写僦不写。

奥卡姆剃刀原则和最小可用原则有所区别最小可用原则主要运用于产品MVP阶段,本文所指的奥卡姆剃刀原则主要指系统设计和代碼编写两个方面这是完全不同的两个概念。MVP包含系统设计和代码编写但同时,系统设计和代码编写也可以发生在成熟系统的迭代阶段


在讲解性能优化模式之前,有必要先探讨一下性能恶化模式因为:

  1. 很多性能优化模式的目标之一就是避免系统进入性能恶化模式;
  2. 不哃性能优化模式可能是避免同一种性能恶化模式;
  3. 同一种性能优化模式可能在不同阶段避免不同的性能恶化模式。 在此统一阐述性能恶化模式避免下文重复解释。为了便于读者清晰识别恶化模式和优化模式恶化模式采用“XXX反模式”的方式进行命名。

这是一种单次请求时延变长而导致系统性能恶化甚至崩溃的恶化模式对于多线程服务,大量请求时间变长会使线程堆积、内存使用增加最终可能会通过如丅三种方式之一恶化系统性能:

  1. 线程数目变多导致线程之间CPU资源使用冲突,反过来进一步延长了单次请求时间;
  2. 线程数量增多以及线程中緩存变大内存消耗随之剧增,对于基于Java语言的服务而言又会更频繁地full GC,反过来单次请求时间会变得更长;
  3. 内存使用增多会使操作系統内存不足,必须使用Swap可能导致服务彻底崩溃。 典型恶化流程图如下图:

长请求拥塞反模式所导致的性能恶化现象非常普遍所以识别該模式非常重要。典型的场景如下:某复杂业务系统依赖于多个服务其中某个服务的响应时间变长,随之系统整体响应时间变长进而絀现CPU、内存、Swap报警。系统进入长请求拥塞反模式的典型标识包括:被依赖服务可用性变低、响应时间变长、服务的某段计算逻辑时间变长等

客户端一次用户点击行为往往会触发多次服务端请求,这是一次请求杠杆;每个服务端请求进而触发多个更底层服务的请求这是第②次请求杠杆。每一层请求可能导致一次请求杠杆请求层级越多,杠杆效应就越大在多次请求杠杆反模式下运行的分布式系统,处于罙层次的服务需要处理大量请求容易会成为系统瓶颈。与此同时大量请求也会给网络带来巨大压力,特别是对于单次请求数据量很大嘚情况网络可能会成为系统彻底崩溃的导火索。典型恶化流程图如下图:

多次请求杠杆所导致的性能恶化现象非常常见例如:对于美團推荐系统,一个用户列表请求会有多个算法参与每个算法会召回多个列表单元(商家或者团购),每个列表单元有多种属性和特征洏这些属性和特征数据服务又分布在不同服务和机器上面,所以客户端的一次用户展现可能导致了成千上万的最底层服务调用对于存在哆次请求杠杆反模式的分布式系统,性能恶化与流量之间往往遵循指数曲线关系这意味着,在平常流量下正常运行服务系统在流量高峰时通过线性增加机器解决不了可用性问题。所以识别并避免系统进入多次请求杠杆反模式对于提高系统可用性而言非常关键。

为了降低响应时间系统往往在本地内存中缓存很多数据。缓存数据越多命中率就越高,平均响应时间就越快为了降低平均响应时间,有些開发者会不加限制地缓存各种数据在正常流量情况下,系统响应时间和吞吐量都有很大改进但是当流量高峰来临时,系统内存使用开始增多触发了JVM进行full GC,进而导致大量缓存被释放(因为主流Java内存缓存都采用SoftReference和WeakReference所导致的)而大量请求又使得缓存被迅速填满,这就是反複缓存反复缓存导致了频繁的full GC,而频繁full GC往往会导致系统性能急剧恶化典型恶化流程图如下图:

反复缓存所导致性能恶化的原因是无节淛地使用缓存。缓存使用的指导原则是:工程师们在使用缓存时必须全局考虑精细规划,确保数据完全缓存的情况下系统仍然不会频繁full GC。为了确保这一点对于存在多种类型缓存以及系统流量变化很大的系统,设计者必须严格控制缓存大小甚至废除缓存(这是典型为叻提高流量高峰时可用性,而降低平均响应时间的一个例子)反复缓存反模式往往发生在流量高峰时候,通过线性增加机器和提高机器內存可以大大减少系统崩溃的概率


典型的服务端运行流程包含四个环节:接收请求、获取数据、处理数据、返回结果。在一次请求中獲取数据和处理数据往往多次发生。在完全串行运行的系统里一次请求总响应时间满足如下公式:

一次请求总耗时=解析请求耗时 + ∑(获取數据耗时+处理数据耗时) + 组装返回结果耗时

大部分耗时长的服务主要时间都花在中间两个环节,即获取数据和处理数据环节对于非计算密集性的系统,主要耗时都用在获取数据上面获取数据主要有三个来源:本地缓存,远程缓存或者数据库远程服务。三者之中进行远程数据库访问或远程服务调用相对耗时较长,特别是对于需要进行多次远程调用的系统串行调用所带来的累加效应会极大地延长单次请求响应时间,这就增大了系统进入长请求拥塞反模式的概率如果能够对不同的业务请求并行处理,请求总耗时就会大大降低例如下图Φ,Client需要对三个服务进行调用如果采用顺序调用模式,系统的响应时间为18ms而采用并行调用只需要7ms。

水平分割模式首先将整个请求流程切分为必须相互依赖的多个Stage而每个Stage包含相互独立的多种业务处理(包括计算和数据获取)。完成切分之后水平分割模式串行处理多个Stage,但是在Stage内部并行处理如此,一次请求总耗时等于各个Stage耗时总和每个Stage所耗时间等于该Stage内部最长的业务处理时间。

水平分割模式有两个關键优化点:减少Stage数量和降低每个Stage耗时为了减少Stage数量,需要对一个请求中不同业务之间的依赖关系进行深入分析并进行解耦将能够并荇处理的业务尽可能地放在同一个Stage中,最终将流程分解成无法独立运行的多个Stage降低单个Stage耗时一般有两种思路:1. 在Stage内部再尝试水平分割(即递归水平分割),2. 对于一些可以放在任意Stage中进行并行处理的流程将其放在耗时最长的Stage内部进行并行处理,避免耗时较短的Stage被拉长

水平汾割模式不仅可以降低系统平均响应时间,而且可以降低TP95响应时间(这两者有时候相互矛盾不可兼得)。通过降低平均响应时间和TP95响应時间水平分割模式往往能够大幅度提高系统吞吐量以及高峰时期系统可用性,并大大降低系统进入长请求拥塞反模式的概率

我们的挑戰来自为用户提供高性能的优质个性化列表服务,每一次列表服务请求会有多个算法参与而每个算法基本上都采用“召回->特征获取->计算”的模式。 在进行性能优化之前算法之间采用顺序执行的方式。伴随着算法工程师的持续迭代算法数量越来越多,随之而来的结果就昰客户端响应时间越来越长系统很容易进入长请求拥塞反模式。曾经有一段时间一旦流量高峰来临,出现整条服务链路的机器CPU、内存報警在对系统进行分析之后,我们采取了如下三个优化措施最终使得系统TP95时间降低了一半:

  1. 每个算法内部,多次特征获取进行了并行處理;
  2. 在调度线程对工作线程进行调度的时候耗时最长的线程最先调度,最后处理

对成熟系统进行水平切割,意味着对原系统的重大偅构工程师必须对业务和系统非常熟悉,所以要谨慎使用水平切割主要有两方面的难点:

  1. 并行计算将原本单一线程的工作分配给多线程处理,提高了系统的复杂度而多线程所引入的安全问题让系统变得脆弱。与此同时多线程程序测试很难,因此重构后系统很难与原系统在业务上保持一致
  2. 对于一开始就基于单线程处理模式编写的系统,有些流程在逻辑上能够并行处理但是在代码层次上由于相互引鼡已经难以分解。所以并行重构意味着对共用代码进行重复撰写增大系统的整体代码量,违背奥卡姆剃刀原则 对于上面提到的第二点,举例如下:A和B是逻辑可以并行处理的两个流程基于单线程设计的代码,假定处理完A后再处理B在编写处理B逻辑代码时候,如果B需要的資源已经在处理A的过程中产生工程师往往会直接使用A所产生的数据,A和B之间因此出现了紧耦合并行化需要对它们之间的公共代码进行拆解,这往往需要引入新的抽象更改原数据结构的可见域。

在如下两种情况水平切割所带来的好处不明显:

  1. 一个请求中每个处理流程需要获取和缓存的数据量很大,而不同流程之间存在大量共享的数据但是请求之间数据共享却很少。在这种情况下流程处理完之后,數据和缓存都会清空采用顺序处理模式,数据可以被缓存在线程局部存储(ThreadLocal)中而减少重复获取数据的成本;如果采用水平切割的模式在一次请求中,不同流程会多次获取并缓存的同一类型数据对于内存原本就很紧张的系统,可能会导致频繁full GC进入反复缓存反模式。
  2. 某一个处理流程所需时间远远大于其他所有流程所需时间的总和这种情况下,水平切割不能实质性地降低请求响应时间

采用水平切割嘚模式可以降低系统的平均响应时间和TP95响应时间,以及流量高峰时系统崩溃的概率虽然进行代码重构比较复杂,但是水平切割模式非常嫆易理解只要熟悉系统的业务,识别出可以并行处理的流程就能够进行水平切割。有时候即使少量的并行化也可以显著提高整体性能。对于新系统而言如果存在可预见的性能问题,把水平分割模式作为一个重要的设计理念将会大大地提高系统的可用性、降低系统的偅构风险总的来说,虽然存在一些具体实施的难点水平分割模式是一个非常有效、容易识别和理解的模式。

对于移动互联网节奏的公司新需求往往是一波接一波。基于代码复用原则工程师们往往会在一个系统实现大量相似却完全不相干的功能。伴随着功能的增强系统实际上变得越来越脆弱。这种脆弱可能表现在系统响应时间变长、吞吐量降低或者可用性降低导致系统脆弱原因主要来自两方面的沖突:资源使用冲突和可用性不一致冲突。

资源使用冲突是导致系统脆弱的一个重要原因不同业务功能并存于同一个运行系统里面意味著资源共享,同时也意味着资源使用冲突可能产生冲突的资源包括:CPU、内存、网络、I/O等。例如:一种业务功能无论其调用量多么小,嘟有一些内存开销对于存在大量缓存的业务功能,业务功能数量的增加会极大地提高内存消耗从而增大系统进入反复缓存反模式的概率。对于CPU密集型业务当产生冲突的时候,响应时间会变慢从而增大了系统进入长请求拥塞反模式的可能性。

不加区别地将不同可用性偠求的业务功能放入一个系统里会导致系统整体可用性变低。当不同业务功能糅合在同一运行系统里面的时候在运维和机器层面对不哃业务的可用性、可靠性进行调配将会变得很困难。但是在高峰流量导致系统濒临崩溃的时候,最有效的解决手段往往是运维而最有效手段的失效也就意味着核心业务的可用性降低。

垂直分割思路就是将系统按照不同的业务功能进行分割主要有两种分割模式:部署垂矗分割和代码垂直分割。部署垂直分割主要是按照可用性要求将系统进行等价分类不同可用性业务部署在不同机器上,高可用业务单独蔀署;代码垂直分割就是让不同业务系统不共享代码彻底解决系统资源使用冲突问题。

我们的挑战来自于美团推荐系统美团客户端的哆个页面都有推荐列表。虽然不同的推荐产品需求来源不同但是为了实现快速的接入,基于共用代码库原则所有的推荐业务共享同一套推荐代码,同一套部署在一段时间内,我们发现push推荐和首页“猜你喜欢推荐”的资源消耗巨大特别是在push推荐的高峰时刻,CPU和内存频繁报警系统不停地full GC,造成美团用户进入客户端时首页出现大片空白。

在对系统进行分析之后得出两个结论:

  1. 首页“猜你喜欢”对用戶体验影响更大,应该给予最高可用性保障而push推荐给予较低可用性保障;
  2. 首页“猜你喜欢”和push推荐都需要很大的本地缓存,有较大的内存使用冲突并且响应时间都很长,有严重的CPU使用冲突

因此我们采取了如下措施,一方面解决了首页“猜你喜欢”的可用性低问题,減少了未来出现可用性问题的概率最终将其TP95响应时间降低了40%;另一方面也提高了其他推荐产品的服务可用性和高峰吞吐量。

  1. 将首页“猜伱喜欢”推荐进行单独部署而将push推荐和其他对系统资源要求不高的推荐部署在另一个集群上面;
  2. 对于新承接的推荐业务,新建一套代码避免影响首页推荐这种最高可用性的业务。

垂直分割主要的缺点主要有两个:

  1. 增加了维护成本一方面代码库数量增多提高了开发工程師的维护成本,另一方面部署集群的变多会增加运维工程师的工作量;
  2. 代码不共享所导致的重复编码工作。

解决重复编码工作问题的一個思路就是为不同的系统提供共享库(Shared Library)但是这种耦合反过来可能导致部署机器中引入未部署业务的开销。所以在共享库中要减少静态玳码的初始化开销并将类似缓存初始化等工作交给上层系统。总的来说通过共享库的方式引入的开销可以得到控制。但是对于业务密集型的系统由于业务往往是高度定制化的,共用一套代码库的好处是开发工程师可以采用Copy-on-write的模式进行开发需要修改的时候随时拷贝并修改。共享库中应该存放不容易变化的代码避免使用者频繁升级,所以并不适合这种场景因此,对于业务密集型的系统分代码所导致的重复编码量是需要权衡的一个因素。

垂直分割是一个非常简单而又有效的性能优化模式特别适用于系统已经出现问题而又需要快速解决的场景。部署层次的分割既安全又有效需要说明的是部署分割和简单意义上的加机器不是一回事,在大部分情况下即使不增加机器,仅通过部署分割系统整体吞吐量和可用性都有可能提升。所以就短期而言这几乎是一个零成本方案。对于代码层次的分割开发笁程师需要在业务承接效率和系统可用性上面做一些折衷考虑。

基于性能的设计要求变化的数据和不变的数据分开这一点和基于面向对潒的设计原则相悖。在面向对象的设计中为了便于对一个对象有整体的把握,紧密相关的数据集合往往被组装进一个类存储在一个数據库表,即使有部分数据冗余(关于面向对象与性能冲突的讨论网上有很多文章本文不细讲)。很多系统的主要工作是处理变化的数据如果变化的数据和不变的数据被紧密组装在一起,系统对变化数据的操作将引入额外的开销而如果易变数据占总数据比例非常小,这種额外开销将会通过杠杆效应恶化系统性能分离易变和恒定不变的数据在对象创建、内存管理、网络传输等方面都有助于性能提高。

恒變分离模式的原理非常类似与数据库设计中的第三范式(3NF):第三范式主要解决的是静态存储中重复存储的问题而恒变分离模式解决的昰系统动态运行时候恒定数据重复创建、传输、存储和处理的问题。按照3NF如果一个数据表的每一记录都依赖于一些非主属性集合,而这些非主属性集合大量重复出现那么应该考虑对被依赖的非主属性集合定义一个新的实体(构建一个新的数据表),原数据库的记录依赖於新实体的ID如此一来数据库重复存储数据量将大大降低。类似的按照恒变分离模式,对于一个实体如果系统处理的只是这个实体的尐量变化属性,应该将不变的属性定义为一个新实体(运行时的另一个类数据库中的另一个表),原来实体通过ID来引用新实体那么原囿实体在运行系统中的数据传输、创建、网络开销都会大大降低。

我们的挑战是提供一个高性能、高一致性要求的团购服务(DealService)系统存茬一些多次请求杠杆反模式问题,客户端一次请求会导致几十次DealService读取请求每次获取上百个团购详情信息,服务端单机需要支持每秒万次級别的吞吐量基于需求,系统大体框架设计如下:

每个DealService定期从持久层同步所有发生变化的deal信息所有的deal信息保存在内存里面。在最初的設计里面数据库只有一个数据表DealModelTable,程序里面也只有一个实体类DealModel由于销量、价格、用户评价等信息的频发变化,为了达到高一致性要求服务系统每分钟需要从数据库同步几万条记录。随着美团团购数量的增多和用户活跃度的增加系统出现了三个问题:

  1. 团购服务网卡频繁报警,由于这是高性能低延时服务又导致了大量的客户端超时异常;
  2. 频繁的full GC,这是由于每条数据库记录更新都会导致运行系统里面老嘚DealModel实体被销毁新的DealModels实体被创建;
  3. 数据库从库滞后主库,使得服务数据一致性降低原因是数据库系统写数据量巨大。

在对系统进行分析の后我们采用了如下措施,大大降低了网络传输的数据量缓解了主从数据库同步压力,使得客户端的超时异常从高峰时候的9%降低到了尛于0.01%(低于万分之一):

  1. 同时在代码中为销量、价格、用户评价等常变数据创建一个单独的类VariableDealModel;

采用恒变分离模式主要有三个缺点:

  1. 不苻合面向对象的设计原则。原本概念上统一的实体被切分成多个实体会给开发工程师带来一些理解上的困难,因此增加维护成本进一步而言,这会增加引入额外Bug的概率(实际上面向对象之所以如此受欢迎的一个重要原因就是容易理解)
  2. invariant又发生在不同实体之间,那么往往是把不变的属性从不变实体移到易变的实体中去
  3. 一张数据库表变成多张,也会增加维护成本

在如下两种场景下,恒变分离模式所带來的好处有限:

  1. 易变数据导致的操作和传输并不频繁不是系统主要操作;
  2. 易变数据占整体数据的比例很高,杠杆效应不显著通过恒变汾离模式不能根本性地解决系统性能问题。

总的来说恒变分离模式非常容易理解,其应用往往需要满足两个条件:易变数据占整体数据仳例很低(比例越低杠杆效应越大)和易变数据所导致的操作又是系统的主要操作。在该场景下如果系统性能已经出现问题,牺牲一些可维护性就显得物有所值

大部分系统都是由多种类型的数据构成,大多数数据类型的都包含易变、少变和不变的属性盲目地进行恒變分离会导致系统的复杂度指数级别的增加,系统变得很难维护所以系统设计者必须在高性能和高维护性之间找到一个平衡点。作者的建议是:对于复杂的业务系统尽量按照面向对象的原则进行设计,只有在性能出现问题的时候才开始考虑恒变分离模式;而对于高性能业务简单的基础数据服务,恒变分离模式应该是设计之初的一个重要原则

数据局部性模式是多次请求杠杆反模式的针对性解决方案。茬大数据和强调个性化服务的时代一个服务消费几十种不同类型数据的现象非常常见,同时每一种类型的数据服务都有可能需要一个大嘚集群(多台机器)提供服务这就意味着客户端的一次请求有可能会导致服务端成千上万次调用操作,很容易使系统进入多次请求杠杆反模式在具体开发过程中,导致数据服务数量暴增的主要原因有两个:1. 缓存滥用以及缺乏规划2. 数据量太大以至于无法在一台机器上提供全量数据服务。数据局部性模的核心思想是合理组织数据服务减少服务调用次数。具体而言可以从服务端和客户端两个方面进行优囮。

服务端优化方案的手段是对服务进行重新规划对于数据量太大以至于无法在一台机器上存储全量数据的场景,建议采用Bigtable或类似的解決方案提供数据服务典型的Bigtable的实现包括Hbase、Google Cloud Bigtable等。实际上数据局部性是Bigtable的一个重要设计原则其原理是通过Row key和Column key两个主键来对数据进行索引,並确保同一个Row key索引的所有数据都在一台服务器上面通过这种数据组织方式,一次网络请求可以获取同一个Row key对应的多个Column key索引的数据缺乏規划也是造成服务数量剧增的一个重要原因。很多通过统计和挖掘出来的特征数据往往是在漫长的时间里由不同team独立产生的而对于每种類型数据,在其产生之初由于不确定其实际效果以及生命周期,基于快速接入原则服务提供者往往会用手头最容易实施的方案,例如采用Redis Cache(不加选择地使用缓存会导致缓存滥用)数据服务之间缺乏联动以及缺乏标准接入规划流程就会导致数据服务数量膨胀。数据局部性原则对规划的要求具体而言是指:1. 数据由尽可能少的服务器来提供,2. 经常被一起使用的数据尽可能放在同一台服务器上

客户端优化囿如下几个手段:

  1. 本地缓存,对于一致性要求不高且缓存命中率较高的数据服务本地缓存可以减少服务端调用次数;
  2. 批处理,对于单机戓者由等价的机器集群提供的数据服务尽可能采用批处理方式,将多个请求合成在一个请求中;
  3. 客户端Hash对于需要通过Hash将请求分配到不哃数据服务机器的服务,尽量在客户端进行Hash对于落入同一等价集群的请求采用批处理方式进行调用。

我们的挑战来自于美团的推荐、个性化列表和个性化搜索服务这些个性化系统需要获取各种用户、商家和团购信息。信息类型包括基本属性和统计属性最初,不同属性數据由不同的服务提供有些是RPC服务,有些是Redis服务有些是HBase或者数据库,参见下图:

通常而言客户端每个用户请求都会触发多个算法。┅方面每个算法都会召回几十甚至几百个团购或者商家ID,团购和商家基础属性被均匀地分配到几十台Redis里面(如下图)产生了大量的Redis请求,极端情况下一次客户端请求所触发的团购基础数据请求就超过了上千次;另一方面,用户特征属性信息有十几种每种属性也由单獨的服务提供,服务端网络调用次数暴增在一段时间里,很多系统都进入了多次请求杠杆反模式Redis服务器的网卡经常被打死,多次进行擴容提高线程池线程数量,丝毫没有改善

在对系统进行分析之后,按照数据局部性模式的原则我们采用了如下手段,彻底解决了系統多次请求杠杆反模式的问题:

  1. 采用大内存服务器存储所有的团购和商家基础信息每个算法只要一次网络请求就可以获取所有的信息;
  2. 垺务端采用多线程方式提供服务,避免了Redis单一线程模式下单个请求慢所带来的连锁效应;
  3. 借鉴类似Bigtable的数据组织方式将用户的多种特征采鼡两个维度(用户维度和特征类型)进行索引,确保同一用户的信息只存放在一台机器上面减少网络调用数量。

数据局部性模式并不适鼡于系统初级阶段在初级阶段,最小可用原则往往是主要设计原则之一出于两方面的考虑:一方面,在初级阶段很难预测所要提供垺务的数据是否有效而且能够长期使用,以及未来的调用量;另一方面在初级阶段,工程师可能无法预测最终的调用模式而不同的调鼡模式会导致数据局部性方案的设计不同。对于已经大量使用的数据服务采用数据局部性模式进行重构必然要改变老的调用模式,这一方面会引入新的Bug另一方面也意味着巨大的工作量。需要特别强调的是数据处于系统的最底层,对于结构复杂而又重要的数据重构所帶来可靠性、一致性和工作量都是需要权衡的因素。对于请求量比较小的数据服务即使一次请求会触发严重的请求杠杆效应,但是如果原始触发请求数量在可预见的时间内没有明显变多的迹象进行数据服务重构可能得不偿失。

数据局部性模式能够解决多次请求杠杆反模式所导致的问题但它并非大数据的产物,CPU、编译器的设计理念里早就融入了该模式所以很容易被工程师理解。虽然过度设计在系统初級阶段是一个要尽量避免的事情但是理解和掌握数据局部性模式对于设计出一个可扩展、可重用的系统有很大帮助。很多成熟的系统因為多次请求杠杆反模式而导致系统频繁崩溃理解数据局部性模式的原则有助于提高工程师分析解决问题的能力,而在确认了系统存在请求杠杆问题后数据局部性原则是一件非常锐利的武器。

“用大炮打蚊子”本来是大材小用的意思但是细致想一想,用大炮打蚊子成功率不高。对于开发工程师而言一方面为了快速承接业务,按照方案复用原则总是尽可能地利用现有系统,这使得系统功能越来越强夶;另一方面提高系统的通用性或可重用性也是工程师们在设计系统的一个重要目标。随着这两个过程的相互独立演化采用通用方案解决特定问题的现象随处可见,形象地说这就像大炮打蚊子。大炮成本很高蚊子的数量众多,最终的结局往往是蚊子战胜了大炮

“避免蚊子大炮模式”是经济原则在运行时系统的运用,它要求采用最节省资源(CPU、内存等)的方法来解决所面临的问题资源浪费会带来未来潜在的风险。工程师接到一个需求的时候需要思考的不仅仅是如何复用现有的系统,减少开发时间还需要考虑现有系统为处理每個新需求访问所需运行时成本,以及新需求的预期访问量否则,不加辨别地利用现有系统不仅仅增大了重构风险,还有可能交叉影响对现有系统所支持的服务造成影响。从另外一个角度讲工程师在构建一个可重用系统的时候,要明确其所不能解决和不建议解决的问題而对于不建议解决的问题,在文档中标明潜在的风险

我们的挑战是为移动用户寻找其所在位置附近的商家信息。美团有非常完善的搜索系统也有资深的搜索工程师,所以一个系统需要查找附近的商家的时候往往第一方案就是调用搜索服务。但是在美团太多的服務有基于LBS的查询需求,导致搜索请求量直线上升这本来不属于搜索的主营业务,在一段时间里面反倒成了搜索的最多请求来源而搜索引擎在如何从几十万商家里面找最近的几百商家方面的性能非常差,因此一段时间里搜索服务频繁报警。不仅仅搜索服务可用性受到了影响所有依赖于LBS的服务的可用性都大大降低。

在对系统分析之后我们认为更适合解决最短直线距离的算法应该是k-d tree,在快速实现了基于k-d tree嘚LBS Search解决方案之后我们用4台服务器轻松解决了30多台搜索服务器无法解决的问题,平均响应时间从高峰时的100ms降低到300ns性能取得了几百倍的提高。

避免蚊子大炮模式的问题和数据局部性模式类似都与最小可用原则相冲突。在系统设计初级阶段寻求最优方案往往意味着过度设計,整个项目在时间和成本变得不可控而为每个问题去找最优秀的解决方案是不现实的奢求。最优化原则的要求是全面的不仅仅要考慮的运行时资源,还需要考虑工程师资源和时间成本等而这些点往往相互矛盾。在如下情况下避免蚊子大炮模式所带来的好处有限:茬可预见的未来,某个业务请求量非常小这时候花大量精力去找最优技术方案效果不明显。

在设计阶段避免蚊子大炮模式是一个需要笁程师去权衡的选择,需要在开发成本和系统运行成本之间保持一个平衡点当很多功能融入到一个通用系统里而出现性能问题的时候,偠拆分出来每一个功能点所造成的影响也不是件轻易的事情所以采用分开部署而共用代码库的原则可以快速定位问题,然后有针对性地解决“蚊子大炮”问题总的来说,在设计阶段避免蚊子大炮模式是工程师们进行分析和设计的一个重要准则,工程师可以暂时不解决潛在的问题但是一定要清楚潜在的危害。构建可重用系统或方案一定要明确其所不能解决和不建议解决的问题,避免过度使用

本模式的极端要求是:离线服务永远不要调用实时服务。该模式比较简单也容易理解但是,严格地讲它不是一种系统设计模式而是一种管悝规范。离线服务和在线服务从可用性、可靠性、一致性的要求上完全不同原则上,工程师在编写离线服务代码的时候应该遵循的就昰离线服务编程规范,按照在线服务编程规范要求成本就会大大提高,不符合经济原则;从另外一方面讲按照离线服务的需求去写在線服务代码,可用性、可靠性、一致性等往往得不到满足

具体而言,实时离线分离模式建议如下几种规范:

  1. 如果离线程序需要访问在线垺务应该给离线程序单独部署一套服务;
  2. 类似于MapReduce的云端多进程离线程序禁止直接访问在线服务;
  3. 分布式系统永远不要直接写传统的DBMS。

因為违反实时离线分离模式而导致的事故非常常见有一次,因为一个离线程序频繁的向Tair集群写数据每一次写10M数据,使得整个Tair集群宕机叧一次,因为Storm系统直接写MySQL数据库导致数据库连接数耗尽从而使在线系统无法连接数据库。

为了实现实时在线分离可能需要为在线环境囷离线环境单独部署,维护多套环境所带来运维成本是工程师需要考虑的问题另一方面,在线环境的数据在离线环境中可能很难获取這也是很多离线系统直接访问在线系统的原因。但是遵从实时离线分离模式是一个非常重要的安全管理准则,任何违背这个准则的行为嘟意味着系统性安全漏洞都会增大线上故障概率。

降级模式是系统性能保障的最后一道防线理论上讲,不存在绝对没有漏洞的系统戓者说,最好的安全措施就是为处于崩溃状态的系统提供预案从系统性能优化的角度来讲,不管系统设计地多么完善总会有一些意料の外的情况会导致系统性能恶化,最终可能导致崩溃所以对于要求高可用性的服务,在系统设计之初就必须做好降级设计。根据作者嘚经验良好的降级方案应该包含如下措施:

  1. 在设计阶段,确定系统的开始恶化数值指标(例如:响应时间内存使用量);
  2. 当系统开始惡化时,需要第一时间报警;
  3. 在收到报警后或者人工手动控制系统进入降级状态,或者编写一个智能程序让系统自动降级;
  4. 区分系统所依赖服务的必要性一般分为:必要服务和可选服务。必要服务在降级状态下需要提供一个快速返回结果的权宜方案(缓存是常见的一种方案)而对于可选服务,在降级时系统果断不调用;
  5. 在系统远离恶化情况时需要人工恢复,或者智能程序自动升级

典型的降级策略囿三种:流量降级、效果降级和功能性降级。流量降级是指当通过主动拒绝处理部分流量的方式让系统正常服务未降级的流量这会造成蔀分用户服务不可用;效果降级表现为服务质量的降级,即在流量高峰时期用相对低质量、低延时的服务来替换高质量、高延时的服务保障所有用户的服务可用性;功能性降级也表现为服务质量的降级,指的是通过减少功能的方式来提高用户的服务可用性效果降级和功能性降级比较接近,效果降级强调的是主功能服务质量的下降功能性降级更多强调的是辅助性功能的缺失。做一个类比如下:计划将100个笁程师从北京送到夏威夷度假但是预算不够。采用流量降级策略只有50工程师做头等舱去了夏威夷度假,其余工程师继续编写程序(这鈳不好);效果降级策略下100个工程师都坐经济舱去夏威夷;采用功能性降级策略,100个工程师都坐头等舱去夏威夷但是飞机上不提供食品和饮料。

我们的系统大量使用了智能降级程序在系统恶化的时候,智能降级程序自动降级部分流量当系统恢复的时候,智能降级程序自动升级为正常状态在采用智能降级程序之前,因为系统降级问题整体系统不可用的情况偶尔发生。采用智能降级程序之后基本仩没有因为性能问题而导致的系统整体不可用。我们的智能降级程序的主要判定策略是服务响应时间如果出现大量长时间的响应异常或超时异常,系统就会走降级流程如果异常数量变少,系统就会自动恢复

为了使系统具备降级功能,需要撰写大量的代码而降级代码往往比正常业务代码更难写,更容易出错所以并不符合奥卡姆剃刀原则。在确定使用降级模式的前提下工程师需要权衡这三种降级策畧的利弊。大多数面向C端的系统倾向于采用效果降级和功能性降级策略但是有些功能性模块(比如下单功能)是不能进行效果和功能性降级的,只能采用流量降级策略对于不能接受降级后果的系统,必须要通过其他方式来提高系统的可用性

总的来说,降级模式是一种設计安全准则任何高可用性要求的服务,必须要按照降级模式的准则去设计对于违背这条设计原则的系统,或早或晚系统总会因为某些问题导致崩溃而降低可用性。不过降级模式并非不需要成本,也不符合最小可用原则所以对于处于MVP阶段的系统,或者对于可用性偠求不高的系统降级模式并非必须采纳的原则。

对于无法采用系统性的模式方式讲解的性能优化手段作者也给出一些总结性的建议:

  1. 刪除无用代码有时候可以解决性能问题,例如:有些代码已经不再被调用但是可能被初始化甚至占有大量内存;有些代码虽然在调用但昰对于业务而言已经无用,这种调用占用CPU资源
  2. 避免跨机房调用,跨机房调用经常成为系统的性能瓶颈特别是那些伪batch调用(在使用者看起来是一次性调用,但是内部实现采用的是顺序单个调用模式)对系统性能影响往往非常巨大

优化问题是程序员绕不开的核心问题,在這里也给大家推荐一个架构交流学习群:里面会分享一些资深架构师录制的视频录像:有Spring,MyBatisNetty源码分析,高并发、高性能、分布式、微垺务架构的原理JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源上面的性能优化知识体系图也是在群里获取。相信对于已经工作和遇到技术瓶颈的码友在这个群里一定有你需要的内容。这些资料或许可以帮助到以下几类程序员:

1.对现在的薪资不满想要跳槽,却对自己的技术没有信心不知道如何面对面试官。

2.想从传统行业转行到互联网行业但没有接触过互联网技术。

3.工作1 - 5年需偠提升自己的核心竞争力但学习没有系统化,不知道自己接下来要学什么才是正确的踩坑后又不知道找谁,百度后依然不知所以然

4.笁作5 - 10年无法突破技术瓶颈(运用过很多技术,在公司一直写着业务代码却依然不懂底层实现原理)

如果你现在正处于上述所说的几个阶段,那么或许可以加入进来一起交流学习而且我也能够提供一些面试指导,职业规划等建议

Alexander指的是建筑模式,软件设计模式适用基於同样的原因,性能优化模式也适用每个性能优化模式描述的都是工程师们日常工作中经常出现的问题,一个性能优化模式可以解决确萣场景下的某一类型的问题所以要理解一个性能优化模式不仅仅要了解性能模式的所能解决的问题以及解决手段,还需要清楚该问题所發生的场景和需要付出的代价

最后,本文所描述的性能优化模式只是作者的工作经验总结都是为了解决由以下三种情况所造成的性能問题:

1. 日益增长的用户数量

3. 急剧膨胀的数据,但是这些远非该领域里面的所有模式

对于文章中提到的其他性能优化建议,以及现在和将來可能碰到的性能问题作者还会不断抽象,在未来总结出更多的模式性能问题涉及领域非常广泛,而模式是一个非常好的讲解性能问題以及解决方案的方式作者有理由相信,无论是在作者所从事的工作领域里面还是在其他的领域里面新的性能优化模式会不断涌现。唏望通过本文的讲述对碰到同样问题的工程师们有所帮助,同时也抛砖引玉期待出现更多的基于模式方式讲解性能优化的文章。

我要回帖

更多关于 qq付费群 的文章

 

随机推荐