干货 | 融云首席架构师李淼畅谈平台服务架构设计

李淼 融云研究院院长兼首席架构师

李淼,TGO 鲲鹏会共创伙伴、融云联合创始人及首席架构师,兼任融云研究院院长。2014 年融云团队刚成立,第一行代码就是出自李淼之手。在后来的几年中,李淼一直负责融云即时通讯云平台的架构设计与研发工作,并带领团队进行融云当前下一代核心技术的研发探索和架构优化。在融云成立之前,李淼曾在中国移动飞信团队有过六七年的研发及管理经验。

在如今的移动互联网时代,不管是个人还是企业,对即时通讯都有着越来越强烈的需求。从互联网到移动互联网的变迁,IM 面临着巨大的挑战:首先,在移动互联网时代,所有的网络都被认为是不稳定的,在不稳定的网络环境中,如何保证消息的稳定成为亟待解决的问题;其次,移动设备的处理能力较弱,且对设备功耗的要求极为苛刻,如何在提升处理能力的同时降低设备功耗也不容忽视。

作为 IM 领域的头号玩家,融云如何应对上述挑战,又是如何抓住机遇迅速发展?此外,融云对 IM 未来的发展又有什么样的看法?有哪些经验可以为从业者分享?为此,TGO 鲲鹏会对融云首席架构师李淼进行了专访。

IM 已从产品形态转变到服务形态,有融合一切的可能

现在很多人理解 IM,仍然是停留在 QQ、微信阶段。IM 在刚呈现在用户眼前时,基本上可以理解为是一个产品。但随着时代的变迁,现阶段 IM 最大的特点是由产品形态转变为服务功能形态。IM 变成了一个必备的基础能力,它可以支持更多产品,让其具备沟通的能力,倍化产品价值。

就目前市场来看,任意一样产品都有跟 IM 进行融合的可能性,甚至是强需求,哪怕在游戏领域,也要进行人与人之间的交流和交互。很多产品没有明显的即时通讯特性,但实际上它内部应用的就是 IM 技术,比如说 APP 每天推送的最新通知和站内信,实际上大部分是通过 IM 技术实现的。

IM 的通信属性决定了它最大的痛点——稳定且可靠。稳定是指不管在多大的业务量面前,甚至在有故障的情况下,都能保证当前系统的稳定;而可靠的定义有很多,一方面要保证消息不能丢,另一方面还需要保证消息传递顺序正确。这些要求看起来很简单,但实际上 IM 厂商大部分的精力都是在处理稳定与可靠的问题。

目前,在消息的处理速度上,融云能做到毫秒级效率。李淼说,“能达到这个处理速度,和融云重新设计的架构和协议有最直接的联系”。虽然团队创始人在 2014 年之前,都有在飞信的相关经历和经验。但飞信是 PC 时代的产物,这对于创业初期的融云来说,第一时间需要考虑的就是产品的处理及响应速度。这也就意味着,融云要重新进行架构设计,并采用符合移动互联网时代的产品理念。

李淼和团队当时走了一条非常极端的路线,就是重新设计通信协议。在设计通信协议时,他们没有采用任何公开的协议资料,也没有采用飞信的 SIP-C 协议。而是在能满足所有需求的前提下,让通信协议足够的小,只有这样手机才可以快速地处理。

此外,李淼和团队还做了一个大胆的举动。在 2013 年左右,业内刚开始出现“微服务”理念,融云在第二年便采用了该理念进行架构设计,当然现在这个概念已经火了,被普遍采用。所谓的“微服务”,就是把特别庞大的平台服务,拆分成很小的单体或小的服务版块,每一个单体都有单一的职责,相互不影响。最后,只要对这些单体或服务进行管控治理,就可以灵活地部署、管理客户资源。在此之前业内都在讲大单体服务,就是所有东西放在一起。当时,创业初期阶段的融云就把“微服务”架构概念直接落地到产品设计中,融云整个后台的服务及相关业务,完全采用微服务架构模式。4 年时间,融云从最开始构建到现在一直在迭代需求,但架构从来就没有变化,一直稳定支持整体业务。

架构没有失败之说,优秀的架构应该具备这几个要素

在和李淼聊到架构失败这个话题时,他很直接地指出,“没有什么架构是失败的,只要做得出来且能用,就没有所谓的失败”。在他看来,架构都是一步步在演进优化的,比如最开始做的系统只有一百个人用,这时候就不需要去考虑各种伸缩、容灾等问题。因为在当前的场景需求下,这种架构是没有问题的。如果之后发展成为 100 万人,业务场景更为复杂,且对稳定性要求更高,在此情况下,之前的架构可能就不适用了。所以架构只有合适跟不合适,没有失败的概念。

优秀的架构应该具备哪些特点?
第一、伸缩性

伸缩性就是保证在业务不中断的情况下,可以平滑地进行各种服务。优秀的架构应该具备良好的伸缩性,所谓的“伸”,是系统在运行中业务量上来了,这个时候需要添加服务器,在业务不中断的情况下,可以平滑地把整个集群扩大,承载相应的业务量;所谓的“缩”,是指在服务器处于空闲状态,保证业务不中断的前提下,可以把资源再降下来,避免浪费。

第二、高可用

当服务出现问题时,可提供容灾、自动切换、自动恢复等机制,减少停工时间,保证服务不间断地持续对外提供支持。

第三、扩展性

很多人容易混淆扩展性和伸缩性这两个概念。所谓扩展性,就是灵活地对业务进行变更。比如,在保证业务不中断的情况下,可以平滑的上线新功能,对用户来讲如果感知最小,那它的扩展一定很灵活。

第四、高性能

是指在固定的资源下可以承载更多的业务,这个也是开发人员一直追求的。

第五、安全性

安全是第一要素,是所有东西的基础。考虑其他因素的前提要先考虑安全性,比如说考虑一个项目的前提是确保能满足安全需求,而非在完成项目后再补足安全问题,安全应该是每个项目的基础。

优秀的技术人应该具备哪些素质?
第一、全局观

对自己领域所做的东西有足够的了解,要有一个全局观,从上至下把事物看透。除了关心技术以外,还要关心周边的事物发展,并通过高眼界去看待事情。

第二、知识面广

技术人员需要知识面特别广,所以要进行大量的阅读。至少在技术领域,需要知道什么时候用什么东西最为合适。

第三、细节的把控

细节决定成败,有时候一个技术细节会决定一个产品的成败。

第四、不停地自我否定

融云的第一行代码就是出自李淼之手,但是他并没有对此洋洋得意、停滞不前,而是在不停地进行自我否定。在接触或学习到新的知识后,开始反向应用到之前的项目上。这个过程,本质上也是一种持续优化。

Q&A
目前为止,最有成就感的事情是什么?

最有成就感的事,肯定是联合创立了融云,投入了很多心血、热情和精力。现在公司各种数据、技术、服务等在业内都是领先的。取得目前的成绩,也证明大家的努力没有白费,作为融云的联合创始人,还是很有成就感的。

在 IM 领域,国内和国外的技术有差距吗?

首先,很多人有个误区,就是国外的技术一定比国内领先。但实际上不是,国内很多企业对技术的要求可能更高,受用户体量大、市场竞争激烈等因素影响,要求产品功能快速迭代、要新颖、要突破。目前,无论是从技术方面还是体量方面,甚至从专利数量来看,国内 IM 技术和发展可能已经领先国外了。

对程序员、技术人,有什么好的建议吗?

首先,建议大家要保持对技术的热爱和追求,永远对技术心存敬畏之心。不管是技术的深度还是广度,我建议往两个方向走:

第一,知识面需要足够广。这个知识面不仅仅是专业知识,还有可能是其他领域的知识,这种方向可以让你向架构师或技术管理岗位发展。

第二,把某个领域的技术研究透彻,并在此基础上进行创新。这种方向可以向技术专家发展。

很多技术人员认为管理岗位比技术专家的未来发展更好,但这是误区,在某个领域变成最 top 的专家,也是很值得尊敬,同时也可获得很可观的收入。不管走哪个方向,我认为技术人员都应该保持终身学习的状态。

中年程序员危机这个事情,你怎么看?

中年程序员危机不是普遍现象,国内外有很多技术牛人,四五十岁还依然坚持 coding。如果技术工作是兴趣驱动,这反倒不是压力,而是热爱。再就是精力问题,我认为中年程序员完全可以用经验去弥补精力。另外,还要强调一下,一定要保持不断地吸取新的知识,勇于探索和试错,对自己进行不断否定和更新。

作者 | Bella Wu
责编 | Rainie Liu
(0)

相关推荐