说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

《近匠》融云,自主研发真正“不丢消息”的IM云服务

HTML文档下载 WORD文档下载 PDF文档下载
《近匠》第90期,融云即时通讯云源自飞信团队,拥有8年IM技术积累,却推倒重来,从第零行开始写代码,自己做一套全新的通讯协议和服务端架构,不丢消息、快速迭代反馈,并将逐步落实SDK开源计划。

移动互联网时代的即时通讯技术已与互联网时代完全不同,弱网络、丢消息等问题天然存在。融云即时通讯云源自飞信团队,核心创始成员拥有8年IM技术积累,却推倒重来,从第零行开始写代码,自己做一套全新的通讯协议和服务端架构,并将逐步落实SDK开源计划。本期《近匠》专访融云即时通讯云 CTO 杨攀,听他讲述矢志做即时通讯行业老大,把即时通讯做穿做透的融云是如何做到不丢消息、快速迭代,专注为用户提供IM云服务的。


图:融云即时通讯云 CTO 杨攀

CSDN:请介绍一下您以及团队主要成员的从业经历?

杨攀:融云创始团队的所有核心成员几乎都来自于神州泰岳飞信团队,原本都是负责飞信业务的高级管理人员、核心产品和技术人员。CEO韩迎原本是飞信的VP,负责市场销售和运营,另一个联合创始人是我们的首席架构师李淼,原本在飞信负责即时通讯、社交产品,COO毛炜之前则是从事企业级应用软件服务业务。

我个人很早就开始写程序了,从94年开始到现在已有二十多年,一直都在和IM、社交打交道。曾参与微软MSN Messenger Mobile China业务的开发和管理工作,负责过时光网架构升级和改造工作。2008年加入神州泰岳飞信团队后,先后负责了飞信社交平台、飞信开放平台、飞信即时通讯平台业务的管理工作和研发管理工作。

CSDN:请具体讲讲融云是什么?

杨攀:融云很简单,我们做的是即时通讯云服务,这是一个2014年新生的行业。之前大家看到的即时通讯服务都是一些to C的产品,比如QQ、微信、飞信、旺旺、YY、陌陌等,而即时通讯核心技术也都掌握在这些大厂商手里,从事IM的小厂商寥寥无几,即使涉足也可能都是企业级,其支撑的并发用户量远远无法和to C的产品相比。

其次,移动互联网时代的即时通讯技术和互联网时代已完全不同,移动互联网时代的通讯面临着网络不稳定的问题,我们曾做过数据统计,一款手机一天内断网可能会高达三百多次,其难度相对而言也更高,IM技术需要大幅革新。而从2012年时基本没有人会去接入第三方SDK到2014年为大众所接受,开发者服务的理念也日趋成熟。

因此对我们而言,就是把自己的核心业务做好,普惠开发者,让开发者能够通过SDK+云服务的形式能够很简单地在自己的业务中集成即时通讯能力,将原本一个非常难、非常高大上的“阳春白雪”的技术一下子就变成零门槛。我们的方式是提供一个SDK,开发者只需将其嵌入到App中,融云会在云端提供服务器来负责消息传输等,便能实现端对端的聊天。除一对一的单聊之外,我们还提供群聊、音视频通话、公众服务等功能。

CSDN:融云的公众服务与微信公众账号有什么关联或不同吗?

杨攀:融云的公众服务是帮所有使用融云SDK的应用搭建一套公众账号平台,就相当于每个App都有自己的一个公众账号平台,可以自己给自己的App开发公众账号,也可以找别人开发并接入到自己的平台上给自己的App使用,让每一个App都可以变成一个“微信”。

微信本身的理念是中心化,成为一个操作系统,所有的业务都可以直接做一个公众号嵌入到微信里,开发者也无需再劳心劳力地开发App。而我们做的事儿则是“去中心化”,我们帮助微信之外的其他App厂商具备这种能力。

CSDN:融云为开发者提供了哪些核心服务?

杨攀:我们对于公司的定位非常单纯,就是一家纯技术的公司,核心产品就是做即时通讯。也有很多客户会问我们:你们做不做社交、朋友圈、论坛、地理位置定位、短信验证码等?我们觉得这些并非自身长处所在,我们要做的就是把核心领域做透做穿,也是可以成功的。所以我们做的通讯就是单聊、群聊、聊天室、音视频通话、客服平台、公众服务等,全都属于即时通讯的范畴。

CSDN:与其他IM云服务提供商相比,融云在即时通讯技术、功能、成本等方面各有着什么样的优势与不同?

杨攀:融云的研发团队是业内唯一一家做IM出身的团队,这是其他厂商不具备的最大优势,即时通讯技术是一套非常复杂的体系,不是说一两个人挑大梁就能做好的,必须要靠一个团队去把它搞定。技术上的不同就在于,不少竞争对手采用的都是一些开源的解决方案,因为没有经验,直接在开源的基础上进行修改并提供服务。但开源的解决方案都存在一些问题,首当其冲的便是这些方案都是为PC互联网设计的,而非移动互联网,在移动互联网领域,弱网络、丢消息等问题天然存在。


图:融云即时通讯云架构图

其次,这些开源的解决方案都是企业级的解决方案,这也就意味着一旦用户过多,无论怎么改,系统都撑不下去。所以我们推倒重来,参考微信公开的设计理念,从第零行开始写代码,自己做一套全新的通讯协议和服务端架构。

CSDN:从开发者角度,选择一项IM云服务都包含哪些关键因素?

杨攀:现实地说,开发者往往很容易被市场宣传所左右,绝大多数开发者都不会非常细致地去研究到底谁家的技术方案好,更多的时候是凭广告、宣传营销这些感性的认识。但对于比较理智的开发者,通常会考虑服务的稳定性、消息的可靠性等因素,比如消息丢不丢、重不重复、乱不乱序等,服务宕不宕机?使用开源解决方案的服务商总是会碰到频繁宕机的问题,并且很难完全掌握整个解决方案,而融云自主开发服务架构,即使偶尔出现小故障也都是局部的,能快速解决,而且我们也不会存在一宕机整个系统就挂了的问题。

另外,支持和服务也很重要。客户有问题,反馈能够多长时间得到响应并解决?这是开发者非常看重的。其实现在整个互联网行业都比较快,大家一边出产品,一边迭代,没有说花一两年的时间写一个项目,然后突然拿出来,那个时候可能机会已经过去了。现在我们做到的就是快速迭代,每周一晚都会发布一个新版本,保证用户这周提出一个问题或需求,下周二便可以拿到。如果用户觉得版本更新太快,可以不更,这完全由用户自己来控制,融云不会促使用户必须升级。

为了更好地解决客户问题,我们将SDK分为不同版本,有既改Bug又加功能的开发版,不加功能只改Bug的稳定版,以及非常稳定的发布版,既满足快速迭代的需求,又能够让用户得到稳定的版本。

CSDN:在开发、更新、运营、维护过程中,是否遇到过一些比较头疼的问题?如何解决的?

杨攀:现在最大的问题就是客户每天反馈的大量信息,包括需要去跟踪客户提出的新需求、跟踪用户反馈的Bug等。这也就直接造成如何让客户的问题得到最好的追踪和解决,这成为我们很重要的问题。每天每个人脑子里过的信息量是一般的研发团队无法想象的,各种信息接踵而至,我们经常做一些并发性的工作,但既然我们选择了给开发者提供支持就一定会努力完成。从另一个侧面来看,这可能就是所谓幸福的烦恼。

CSDN:那顶着这么大的压力是否有行之有效的解决方案?

杨攀:我们几乎每天都会对流程、工具、支持方式进行一些细微的改进,并不断尝试新的方法,不断地去优化,思考怎么去更好地提供支持。比如最近我们发现,用户在提出问题时,很多问题描述并不清楚,然后我们会问他,这样一来二去就浪费了大量的时间。然后我们就会想些办法,在节省沟通成本的同时,也能让开发工程师在短短的十几分钟内就能修改完善,在提高效率的同时也能很好地提升质量。

CSDN:产品从最初的开发到现在有着怎样的开发思路?

杨攀:先讲移动端SDK,我们将SDK分为两层,底层的通讯库用于满足自己定制通讯UI交互界面的高级客户需求。另外我们也考虑到其实更多的开发者并不愿意在聊天界面上投入太多的精力,我们就做了一个UI组件,开发者几乎不用写代码,可以使用该组件直接调整设置。其实这对于我们而言也是非常有挑战的,既要满足功能,又要设计结构去实现调整和扩展,代码量几乎都耗在这些地方。

CSDN:如何计费?采用什么样的盈利模式?

杨攀:PaaS厂商通行的标准计费模型是按量付费,请求多少次API就付多少钱,然后阶梯定价,但我们在刚起步时便思考了商业模式究竟应该是什么。如果按照PaaS平台的通行模式来走的话,友商之间就会打起价格战,这个非常没意思。并且,我们对自己的定位就是一定要做这个行业的老大,拥有自主开发的核心技术,再加上这么多年来在IM领域的长期摸索和实践,我们自信在成本上可以比其他友商有几倍的竞争优势,用户可以直接免费使用我们的SDK和基础服务。

此外,融云还提供付费增值服务,以满足用户的个性化运营需求,因为这其中包含的许多功能特别费磁盘存储、服务器的计算资源、带宽流量,我们需要为此付出巨大的成本。未来,我们不仅仅只是简单地提供能力,更希望能够帮助使用融云的开发者,靠我们的平台实力来帮助他们解决实际面临的问题。

CSDN:对于大规模的故障,融云是否有应急预案?

杨攀:云服务厂商出问题很是常见,即使如微软亚马逊等也不能例外,但值得细细思量的是能有多快的时间去响应和修复,与开发者沟通是否到位?目前,融云正在着手建设双活的双数据中心,已进入部署阶段。这也就意味着即使任一数据中心发生意外,另外一个还可以正常使用,两个数据中心同时出现问题的概率非常小。同时,双数据中心也需要付出双倍的成本,但能为客户提供更高质量的服务还是物有所值,我们对于稳定性的追求是非常苛刻的。

CSDN:融云在GitHub、GitCafe上托管了许多Demo源码,请问在开源方面是否还有其他考量?

杨攀:在高速发展阶段,我们对公司的定位是商业公司,许多内部的东西在自身觉得不够好并本着对用户负责的前提下,还是一个相对保守的态度。截止发稿前,我们已经将JavaScript SDK开源,在核心部分已非常稳定的情况下,动用社区的力量来帮助我们继续完善问题,大家一起来找Bug并进行维护,除此之外,我们针对其他第三方平台(如Cordova、React等)提供的SDK插件也会全部开源。


【 《近匠》GYENNO CEO任康:用“勺子”敲开一片新市场】《近匠》第89期:从去年的手环,今年的智能手表、智能水杯,再到针对有手部震颤症状人群开发的智能勺“睿餐”,GYENNO开始从健康领域向医疗领域贴近。虽然睿餐算不上医疗设备,但却开始在这片新市场进行深耕。

【 《近匠》小鱼天气,中国风与细粒度空气质量检测】《近匠》第88期,小鱼天气诞生于微软车库中,与一般天气类应用不同,小鱼天气主打细粒度空气质量监测,其完全中国风的设计颇合国内用户的胃口,微软大数据方面的积累也给予了他们很多的技术支撑。

【 《近匠》谛听科技,探索智慧家庭的智能网关】《近匠》第87期,谛听科技以X+N为业务模块,将云操作系统与智能路由器相结合,为智能家居产品提供数据交互和命令控制。未来,路由器不仅是家庭的数据中心,更可在一个平台上远程控制所有的家电、门窗甚至插座。

回顾更多内容及线下开发者活动信息,请关注mobilehub公众微信号(ID: mobilehub)


寻求《近匠》免费报道,请私信:@CSDN移动,或发送邮件至tangxy#csdn.net(请把#改为@)。

如何动态的读取Delphi中的PopupMenu的Caption ? 如何动态设置DBGRID。比如,动态设置DBGRID的COLUMNS。及如何在数值数据格式成千分位 如何返回BDE的状态信息?-Delphi资料 如何控制关键字段的重复输入及报错-Delphi资料 如何设置Microsoft SQL Server 全文索引服务 ?-Delphi资料 如何设置多用户环境的PARADOX数据库-Delphi资料 如何实现在一个Dbgrid中显示多数据库-Delphi资料 如何用SQL查询日期型字段?-Delphi资料 如何在数据库中存放avi文件-Delphi资料 如何在注册表中注册BDE-Delphi资料 筛选数据-Delphi资料 实现不同数据库系统之间的数据转移-Delphi资料 使 用WISQL32 同 时 访 问SQL SERVER 和SYBASE 数 据 库Delphi资 使用Session构件可以在打开有密码的库时不用输入密码-Delphi资料 使用SQL实现字段数据的模糊查询-Delphi资料 数据表的索引被损坏了怎么办-Delphi资料 数据库的密码、日期显示-Delphi资料 数据库应用程序开发中图像数据的存取技术-Delphi资料 数据库中图像数据的存取技术-Delphi资料 数据库转换-Delphi资料 数据浏览部件的应用及编程-Delphi资料 数据文件路径的管理-Delphi资料 随意控制DBGrid每一行的颜色-Delphi资料 通过DELPHI实现JAVA调用ORACLE数据库数据 通过编写代码来设置数据库的别名-Delphi资料 为Delphi数据表格增加彩色 为Delphi提供Pack和Undelete功能 为Delphi中数据库报表加网格 为数据库报表加网格-Delphi资料 为数据库建立索引-Delphi资料 掀开SQL Server 7.0的面纱-Delphi资料 谁有 file cutter v1.4的注册码? 有急用! 搞一个专业的VC程序员基地~~~~~~谁愿意加入????? 最新发现:原来C++Bilder的项目文件(.bpr)是XML格式的! 关于FAT32和NTSF的问题 如何用VC实现Email的发送? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了! 搞一个专业的VC程序员基地~~~~~~需要网页制作高手!! ADO 的用法 m_pRecordset->Fields->GetItem(index)->GetName() 关于CRichEditCtrl的问题之二,取的当前可见行数? 请问在哪里下载IMAIL SERVER???各位帮帮忙!!! 高手请回答,ADO和BDE到底有什么区别,你选择谁?为什么? 高分求教!!!!!!!!!!!!!!!!怎样得到局域网上所有的机器名?(普通WINDOWS网络,用VB?,好象用WNET API可以的) 如何安装com.ibm.bridge2java.*这个包阿? 有人吗???求救! 你也许也会遇到这样的问题? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题!!! 大虾看过来. 一个access表一万条记录,想转到Mysql下(Mysql在Linux下)用什么方法和什么语言来做好? rs.CursorLocation=aduseclient是什么东西? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题! 简单SQL,免费送分! 用ASP如何上传文件,可以用组件。 谁知道怎么改运行中的程序的托盘图标???我用SysTray.ocx不能改? 新手提问,简单题目,大量给分~~~~~~~~~~ 如何使用getdispatch(), 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题!! 关于在一个窗口中的多个数据窗口的问题 扔块砖头, 开个场子 。 ( yeti_lee ) 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了? To: baicolt(五岁的小新是我师傅) 有没有人用过Jcreator 如何在sql server 的查询分析器中用sql语句转到另一台机器上的数据库,同样了sql server的 是不是MSHFlexGrid的bug? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了?? 这个错误类型是什么意思? 如何能够简单的得到昨天的日期? NetBios-SSN是什么? 怎样得到局屿网上所有的计算机名,我想给班里写个局屿网聊天程序,原想用DX8,但DX8好想建立的连接都是C/S模式的。如果能得到机器名就可以用WINSOCK写了(用VB写) 请问诸位有没有什么自动生成源码注释的工具,可以产生函数说明注释和类说明注释 数据库连接这种是什么错误? TStringList *p 定义为一个两维数组怎么做? 在VC++6.0下编程,有什么办法可以获得所有的窗口的句柄??? 如何纪录当前的ID 凡是繁体字的帖子是不是港台同胞发的? 在ASP中,怎样可以删除一个在硬盘上的的文件????? 有人知道下面情况怎么实现吗? JDBC插入2000个字符到Oracle字段中的问题 凡是繁体字的帖子是不是港台同胞发的?。 pb中的pfc类库如何调用? 如何得到当前WINDOWS的进程??以及线程??? DELPHI除了开发数据库以外,开发其他哪种类型的软件更好? 不锈钢管的计算公式按每米报价 一卷100克的无纺布大概多重 我知道一卷是200米,重量不知道有多重 在为灾区捐款捐物活动中,小明也捐了5元零花钱,虽说不多,但____.歇后语, 矩形钢管每米价怎么算已知一种矩形管价格是5300每吨 问每米价格是多少 100斤铁重还是100公斤(200斤)棉花重……纠结 小明和小刚都积攒了一些零用钱,他们所积攒钱数的比是7:4.在支援灾区的活动中,小明向灾区人民捐款了22元钱,小刚捐赠了10元钱,这时他们剩下的钱数相等.小明原有多少钱. 304不锈钢管价格去哪里查询价格啊? 怎样适当给小孩零花钱? 在向灾区捐款的活动中,小亮捐款了零花钱的25%,小东捐了零花钱的20%.小亮捐的零花钱一定比小东多吗?请通过计算来说明.谢谢各位大哥、大嫂、叔叔、阿姨、大哥、大姐……!设:小亮捐款 在比例尺是1:40000的地图上,两地相距5厘米,如果在比例尺是1:25000的地图上,两地间的距离是多少厘米 家长如何给孩子零花钱对这个的评价 一公斤铁和一公斤棉花哪个重 在比例尺1:40000的地图上量得两地的距离是6厘米,这两地中间的实际距离是多少米? 知道纸的吨价克数和重量怎么计算出令数列如:一吨50克正度防近视纸 4000元一吨 计算出有多少令 每令纸多少钱 要求有公式 我想通过密度算出有机玻璃的价位是多少 100000块日元等于多少人民币 克重 门幅 怎么算重量克重150克 门幅155cm 3000米布 怎么算出有几公斤重 一斤棉花和一公斤铁哪个重 100公斤铁和100斤棉花哪个重这是见证你们智商的时刻了 每卷收银纸的重量怎么算,知道克重,米数,和宽度 甲乙两数的差是90,甲数的6分之1与乙数的4分之1相等.甲数是? 不锈钢六角管重量计算公式? 1/2'' 和5/16'' 等于多少毫米?怎样换算的?请问怎么划算成毫米? 甲乙两数差是90,甲数的6分之1与乙数的4分之一相等,甲数是 ( ) 管子的换算公式从吨换算成每米的重量价钱? 在比例尺是1比8000000的地图上,量得A、B两地相距20cm.两列火车同时从A、B两地相对开出,甲车每小时行110km,乙车每小时行90km,几小时后相遇? 亚克力的成份用英文怎么写 甲、乙、丙三个小朋友积攒了一些零花钱,甲的存钱是乙的2倍,乙的存钱是丙的2倍,已知甲比丙多存60元.甲乙丙各积攒了多少元? 算布料时,如何把平方英寸算为平方码? 比例尺是1:600000地图上,量得俩地之间距离是10cm,甲乙两列火车同时从两地相对开出,3时相遇已知甲车的速度比乙车快九分之二.乙的速度是每小时多少千米 克重110克每平方米,门幅1.5米,数量900米,请问怎么换算多少公斤? 一个两位数,个位和十位辶和等于十,如果把两个数的个位和十位数字对调,得到的新两位数比原来的数大一十八,请问原来的两位数是多少,请问怎么算. 在比例尺1/6000000的地图上量的AB两地间的距离是10cm甲乙两列火车同时从AB两地相对开出,6时相遇,已知甲乙火车的速度比为11:9,两车相遇时,甲车行了多少千米 甲、乙、丙三人共有零花钱123元,已知甲和乙的钱数比是5:4,乙和丙的钱数比是6:7.甲乙丙各有多少零花钱 1亿等于1乘10的几次方 在比例尺是1:6000000的中国地图上,量得两地间为10厘米,甲乙两列火车同时从两地相对开出,6小时后相遇,已知甲乙两车速度比为11:9,两车相遇时各行多少千米? 甲乙丙三个小朋友,甲的钱数比乙多408元,甲的钱数是乙的4倍,乙的钱数是丙的2倍,丙有多少元钱? 多少尺等于一码 在比例尺是1:6000000的中国地图上,量的两地的距离是10厘米.甲、乙两列火车同时从两地相对开出,6小时后相遇.已知甲乙辆车速度之比是11:9,两车相遇时,甲车行了多少千米? 1+1为什么等于100000 2510亿等于2.51乘10的几次方? 一公斤棉花 和一公斤铁 哪个重? 1加到100000等于几? 一码等于多少毫米 一公斤棉花和一公斤铁哪个重 在比例尺是300000/1的地图上量得甲、乙两地相距12cm,如果画在比例尺是1:4000000的地图上,两地相距多少cm 无纺布克重怎么算出米数? 1兆等于10的几次方?是数学数字上的一兆,等于10的几次方?就是多少个零.那是一兆等于一千? 在一幅比例尺是1:300000的地图上量得甲,乙两地的距离是5.5厘米如果改成1:500000的地图上.甲乙两地距离是快 99999-100000在什么情况下等于1我怎么认为是在算错的情况下才等于1呢 一个十位数各数位的十次方之和等于它本身,这个十位数是?···ABCDEFGHIJ是一个十位数,且等于A的十次方+B的十次方+C的十次方+……+J的十次方,求这个十位数···如果感觉太烦不想算给留下方法 小红和小明都攒积了一些零用钱.他们所积攒的钱数比是5:3,在献爱心活动中,小红捐了26圆,小明捐了10圆,这时他们钱数相等,小红原有多少钱? 宽1.6米80克无纺布1公斤有多少平方米 标题:一斤铁和一公斤棉花 哪个重?别以为很容易.很多人会错. 知道镀锌钢管一吨的价钱,怎样转换成一米的价格,要具体的公式和解释 无纺布35克一米五宽 一公斤等于多少米1.55宽的无纺布。刚刚打错了 一公斤煤等于多少卡谢谢了, 不锈钢管 不锈钢管价格今日不锈钢管信息 不锈钢管价格.任何地方都可以的,给我看看 ,真的很全,全是最新的不锈钢信息 克重40 幅宽2.4米的无纺布1公斤等于多少码 在为灾区人民捐款物中,小明也捐出了自己的五元零花钱,虽说不多,但(歇后语)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn