[关闭]
@citian3094 2016-08-24T14:11:14.000000Z 字数 2569 阅读 2563

钉速

未分类


海量请求,对互联网企业而言往往是悲喜交加的事情:既期待有海量的用户来支撑自己的雄心壮志,又害怕海量的请求将自己的服务击垮。如何去平衡这种矛盾,如何进入一个用户与技术互相促进增长的正循环,相信众多即使已经拥有丰富经验的互联网巨头仍会思考这个问题。

2016年7月15-16日,[ArchSummit全球架构师峰会][1]将在深圳举行。本届大会,我们邀请了腾讯高级工程师徐汉彬,前来分享[《如何应对节日高峰—QQ会员活动运营系统架构实践​》][2]的内容,讲述的是如何通过高并发和高可用方面的综合优化和实践,构建了一个满足活动业务、支撑海量请求的平台架构。

我们借此机会采访了徐汉彬老师,他分享了从各方面对抗海量请求的细节与故事。

受访嘉宾介绍
徐汉彬,腾讯高级工程师(SNG增值产品部),QQ会员体系合作线技术团队负责人。曾就职于阿里巴巴、小满科技。QQ会员活动运营平台(AMS)的初始开发,在四年多的时间里,将该平台从日请求百万级升级至亿级(日请求3-8亿),负责该平台的架构设计和研发建设,在Web系统架构方面拥有比较丰富的实践和积累。

InfoQ: 您曾负责手机猎豹浏览器架构设计,到如今负责钉钉客户端跨平台架构设计,能否谈谈浏览器架构和IM架构的异同点以及各自的架构特点是什么?相比浏览器架构,IM架构的设计是否更难,您是如何应对的?

钉速:相同点都要解决移动场景下的极致用户体验,都需要做全球加速,弱网优化;IM的架构在服务端会更复杂些,对并发量,数据一致性要求高;浏览器架构则在客户端相对复杂些,在各个系统版本机型都拥有流畅的网页浏览体验,对浏览器内核优化,用户上网预处理要求更高。IM架构对前后端数据通信交互,整体全链路设计要求高,我们在客户端接收大量消息场景下依然有流畅体验,服务端能快速准确的将消息送达到端上,并且多端一致,我们在同步协议上做了推拉结合,消息合并。##

InfoQ: 为什么钉钉要采用基于自行研发的通讯协议的RPC框架?相比其他框架具备了怎样的特点,满足了哪些需求?

钉速:通讯功能作为钉钉的核心功能,自行研发通讯协议的意义重大,这将有效的提升钉钉的核心竞争力。钉钉的通信协议采用精简的文本协议,对象序列化采用MessagePack协议,RPC代码框架自动工具生成支持Python,Java,C++和Objective-C。在研发效率,传输大小,新老版本兼容性,满足移动时代下产品快速迭代,团队协作效率。== ## 更精简&高效率的协议,支持cache-header、tls握手优化等,为移动端节省流量,提升弱网下体验;对IM更加友好的协议,参考SIP,支持重传、级联等特性,例如IM消息rpc操作失败,应用层不用重试,底层会尝试重试;双向RPC,支持消息的PUSH;协议上支持UserAgent、Client、Proxy、Server角色,传统RPC的Client-Server不能满足钉钉业务,钉钉的UserAgent有ServiceDiscovery、重传事务等特性,用于手机端、PC端,Client角色主要用在服务端内部RPC,Server角色提供业务服务,此外还可以在Server角色前面灵活定制Proxy,用于实现安全网关、机房容灾特性, 传统RPC协议只有Client-Server角色,功能太弱。钉钉LWS/LWP协议在Client、Server之外,还有灵活定义的UserAgent、Proxy(或者说是Gateway),更好的适应无线端、IM业务、多机房容灾等。传统RPC协议只有Client-Server角色,功能太弱。钉钉LWS/LWP协议在Client、Server之外,还有灵活定义的UserAgent、Proxy(或者说是Gateway),更好的适应无线端、IM业务、多机房容灾等##

InfoQ: 钉钉目前有移动、Web和PC等多个平台客户端,能概括钉钉目前的跨平台解决方案和跨平台架构吗?

钉速:我们在客户端安全加密数据库、客户端搜索引擎实现了跨Windows,Mac,Android,iOS平台. 核心基础多个平台共享一份代码,通过平台特点做不同的优化和适配,让基础模块能在各平台上发挥最大优势,基础模块升级我们可以选择一个合适的平台小范围灰度上线,再全量上线,再到多平台上线,实现核心基础模块软着陆。开放平台微应用的接口Ding UI可以使多端体验统一。==

InfoQ: 钉钉在各端保障消息必达、推送实时性背后做了哪些工作,这背后有哪些关键技术?

钉速:各端保障消息必达方面钉钉实现了多端同步协议,通过消息对账确保消息不丢失,通过长连保活,高性能推送服务器,XPN接入,重连快速握手,Session复用等技术提高实时性。==

InfoQ: 钉钉过去主要面向中小型企业到如今实现了企业万人群,期间服务端架构做了哪些调整,遇到了哪些困难以及如何应对的?

钉速:钉钉的群聊是写扩散的,发到群中的每条消息会给群里的每个人写一份副本(消息索引),在千人群场景下钉钉的后端系统能良好的运转,那在万群人场景下DB的压力,推送的压力尤为明显,我们对万人群进行分片,拆分成多个千人群,分散整个IM系统压力,另外我们在接入层也对万人群发消息的频度做了控制,减少集中式压力,让整个系统在有万人群活跃下也能稳定高性能的运转。

InfoQ: 钉钉仍处于急速发展的阶段,目前钉钉架构面临了哪些性能瓶颈,在未来如何优化?

钉速:钉钉目前架构上还需要解决的是第三方应用的数据安全性,实施第三方加密对ISV的应用改造还有一定的成本,我们会在未来降低这部分成本,改善应用安全接入的体验。另外一个是解决重度用户的体验问题,尤其消息量和会话(上千个)特别多,本地数据存储上G的用户场景,我们需要优化用户的整体体验,从启动App到首屏加载进入会话查看消息等核心场景都能保证极致的体验==

InfoQ: 随着C-Mail、C-Space、C-OA、C++等功能模块的引入,钉钉在实现轻量级的目标上做了哪些工作?

钉速:我们通过实现微应用离线包差量更新机制,通过CloudSettings按需加载更新,让客户端能更小流量更快的更新最新版本微应用,在微应用加速部分通过我们的长连接代理Http请求,提供微应用传输数据请求效率,提高微应用在弱网场景下加速访问.==

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注