2021年新年伊始,钉钉于1月14日发布最新版本6.0,宣布战略定位全面升级,钉钉将从此前以IM为主的协同办公平台升级为企业协同办公及应用开发平台。
从产品和市场表现来看,钉钉已经走出了一条路。即时通讯一直是互联网的头号战场,钉钉以企业即时通讯切入市场,经过6年的耕耘和奋战,钉钉向市场交出了一份成绩单:用户规模突破4亿,使用钉钉的企业组织数突破1700万。
不过,本次发布会对于开发者社区更有意义的是,钉钉宣布全面开放底层能力和1300个API接口,以及钉钉群聊、智能人力资源、客户管理等基础产品的接口,以及涉及的底层“协作框架”技术。
让钉钉的企业应用开发能力“更开放”。
据钉钉介绍,基于协同框架,可以像开发本地程序一样开发多人、多终端、多场景的实时协同应用,还支持钉钉音视频、IM、文档等多个核心系统的通用底层框架。近日,CSDN 专访了钉钉基础技术负责人强奇和钉钉协同框架技术负责人李乔,揭秘这一创新技术的设计理念。
国内首个协作框架,揭秘钉钉底层架构
钉钉6.0发布会上,推出了多项新产品和新功能,如面向企业用户的低代码开发工具;面向HR、财务、IT、销售、经理等的角色工作台;覆盖HR、客服、群组、企业应用连接器等模块的开放开发接口;基于跨企业协作、行业协作、消费者服务场景的协作空间、服务窗口等模块;倡导“以物为中心”,集成钉钉协同办公套件,简化用户交互界面等。
如果说此次发布的低代码开发工具是面向所有企业普通用户的,那么协同框架技术则是面向专业开发者的。钉钉抓住企业应用场景中多人、多端、实时协同的特点,着力解决实时协同中的关键技术难点,构建了一套全新的技术框架,让原本复杂的多人实时协同应用变得像开发本地应用一样简单。钉钉把这项技术称为“协同框架”()。
据悉,钉钉协同框架为国内业界首创。强奇介绍,钉钉在实现移动端实时协同产品时,系统需要处理移动端弱网处理、离线可用性、长时间离线后恢复上线、重放、冲突检测与解决、回滚、公平性、并发提交、数据一致性、大规模实时推送等大量关键技术难点。
协作框架充分利用钉钉在以上方面的关键技术积累,应用于客户端和服务端的引擎层设计,抽象为通用的点对点有限状态机模型。
并不是所有的应用开发团队都有时间和精力去独立实现这些硬核的底层技术,未来钉钉也会把这些底层架构和技术能力全面开放,全面增强企业应用开发能力。
协同框架把复杂的处理透明化,让开发者在使用协同数据结构和组件时“感知不到”这些复杂性,这样开发者就无需关注“多人”、“实时”、“协同”相关的底层架构和算法问题,而只需专注于自己的业务逻辑。开发者可以像开发本地程序一样使用钉钉协同框架开发多人、实时协同、多端的程序,代码量可以大大减少。这套技术将与钉钉小程序结合,开放给开发者。
钉钉6.0的“一起批注”功能由协作框架实现
强奇向CSDN详细地介绍了钉钉协作框架开放的三层能力:
在协作框架的最上层,提供了一系列可复用的组件,是可以快速接入和使用的组件层。例如6.0版本发布的“一起批注”功能就使用了可复用的协作画布组件。未来钉钉还会在这一层增加更多的组件内容。
协同框架的第二层和第三层分别是协同小程序和协同数据结构,是帮助开发者提升开发效率的框架层。提供了协同数据结构,是开发者可以直接使用的类似于标准类库的数据结构,例如、、、等。这些数据结构可以在小程序、客户端、服务端应用中以平等、一致的方式直接使用。
最底层是最复杂但功能最强大的能力层,面向自动机的语义,可以扩展到更多类似这样的协作数据结构。当然还需要专业的开发团队实现相关的接口,才能完成初始化、冲突检测、回滚逻辑等更精细化的设计。
如何让开发多人实时协作应用变得像开发本地应用一样简单?
以开发一个基础应用为例,如果只是为了完成单人本地使用的功能,相信对于大部分开发者来说都不是什么难事。但如果要做出一个支持多人多设备实时编辑的 Todo,并且这个 Todo 可以嵌入到任务系统、工作台、CRM 中,那么问题就会复杂很多。开发者需要关注协作带来的很多工程架构和算法问题。上述提到的弱网离线可用性、乱序、重放、冲突检测与解决、数据一致性等问题,对于大部分开发者来说可能都是一个比较高的门槛。
回过头来看一个本地应用是如何实现的:可能需要一个 List 对象,一个用于存储任务列表的 List 数据结构,当用户新建任务时,程序会新建一个任务对象,并将这个任务对象作为新的元素放到 List 中。最后将这个 List 数据结构绑定到一个列表 UI 组件上,通过数据进行界面渲染。这或许就是一个本地应用的核心逻辑。
当需要支持多人在线编辑的时候事情就变得复杂了,当修改本地的 List 数据时需要发送到服务器并同步给其他所有一起协作的用户,另外还需要关注其他用户是否也修改了该 List,程序需要做出相应的动作才能更新界面。还有如果多个用户同时修改一个任务,如何合并他们的修改操作,如果修改发生冲突如何解决,弱网或者离线时如何处理数据存储,网络恢复时发送,如何保证每一次修改操作实时推送到在线的客户端,当有大量操作需要重放时如何提高恢复的效率。这些问题的复杂度给多人实时协作带来了比较高的门槛,特别是在移动场景下。
除了协作框架之外,要将本地版本进化为多人实时协作版本,只需要将原来的本地数据结构替换为协作数据结构,将 List 替换为框架提供的 List,即可获得多人协作能力。当用户 A 添加新任务时,相应的任务对象会自动添加到用户 B 的对象中。
我们先来看一下钉钉6.0发布的“一起批注”功能,这也是一个基于协同框架开发的产品功能,它的实现基于一个叫 的数据结构,用来表示被批注的笔画图形的数据。UI层被封装为协同画布组件,用户在协同画布上每画一次笔画,都会做相应的修改,然后自动协调到所有参与的用户端,其他用户端会回调UI层的画布组件,这样新的笔画就可以显示出来。当多个用户同时操作时,这些操作会被合并,并自动解决可能产生的冲突。
低代码渐趋流行,专业开发者的机会在哪儿?
企业级应用开发领域已经不再是开发OA系统、ERP系统等传统软件的时代,在移动化、云计算的趋势下,软件开发中各类软件之间的数据孤岛被打破,基础设施提高了效率,但企业对于应用开发的需求不减反增,企业应用蓬勃发展。
阿里云智能总裁张建锋预测,软件开发和企业服务将会发生重构,新的生态和模式将会出现。或许下一次软件革命就发生在企业的IT部门,IT部门人员不再只是专业软件的使用者,他们将成为最了解业务需求的一线软件开发人员,是企业软件开发的主力军。钉钉企业级应用开发平台的价值,就是为企业提供快速开发的平台和服务,从而帮助行业重塑整个软件开发体系。
为了满足快速增长的企业应用开发需求,在全新的6.0版本中,钉钉将联合易搭、传云、见道云等生态平台推出低代码开发工具,提供快速开发能力。
不过对于专业开发者来说,低代码一直是一个备受争议的话题,例如钉钉易达的低代码客户也将快速开发工作形容为“只要懂一点电脑的人都可以做”,这对于专业开发者来说实在是令人心痛。
钉钉也明确表示,低代码开发的核心价值是让普通人也拥有基础开发能力,低代码的重点是“基础开发能力”,目的是让企业在数字化上能够快速创新。
对于专业开发者,钉钉提供了大量的产品API和更高级的低代码能力,让开发者可以专注于业务开发本身的逻辑,减少在事务开发上所浪费的时间和精力。在协作框架的开放性上也是如此。
“一个有活力的平台,必须能够提高平台上开发者的生产力,帮助开发者更好地专注于应用的核心业务逻辑,而不必担心底层的基础能力。”李桥说。
从汇编到 C、Java,再到 SaaS、PaaS,编程技术的发展是一个不断拆分、模块化的过程。不同的平台会有不同的视角和侧重点来看待给开发者带来的生产力提升。iOS 作为移动应用的平台,为开发者提升了移动应用的开发效率。目前,各大小程序平台都在为开发者提升一次开发、跨平台运行、灵活发布的生产力。聪明的程序员们一直在减少低效、事务性的重复工作。钉钉打磨的协作框架,也是为了让最简单的开发进入到飞速发展的企业应用领域,为企业开发者带来极致的开发体验。
该协作框架将帮助开发者还原更多实时协作场景
钉钉在企业市场的成功,基于其对企业级软件开发场景的理解。强奇向CSDN分享了个人理解的toB(企业)业务与toC(个人)应用的区别。大多数情况下,一个用户一个人完成一个功能闭环,比如淘宝上的个性化购买、抖音上每个人不同的视频内容等。大多数情况下,同侪用户之间并不需要协作互动,可能只有多人在线的手机游戏,这可以算是C端需要重度协作的场景。
企业级应用是面向企业、组织、团队等工作场景的社交协作,本质是多人协同完成一项任务,无论是共同维护项目任务的进度,还是共同编辑工作文档、在线课堂白板,亦或是群内消息交互,多人协作是企业级应用的重要属性。
该协作框架正是基于这一toB业务的底层逻辑,希望通过降低toB业务中多人实时协作的技术门槛,帮助钉钉平台上的开发者更好地实现各自行业的协作功能。企业应用的开发者可以专注于最核心的业务逻辑,而不必关注底层多人实时协作的工程实现和算法问题。
俗话说“工欲善其事,必先利其器”,钉钉协同框架正是为企业应用开发者打造的“随身武器”。协同框架丰富的模块化组件和底层接口也符合钉钉在本次发布会上提出的“更简单、更开放”的理念,这也是业界一直在迭代和追求的目标,让开发更简单。
强奇在采访中进一步提到,不仅是协同框架的技术开放,更是将技术和产品能力开放给开发者社区,这也是钉钉自成立以来一直在做的事情。现在钉钉的开发者已经超过 27 万,开发了超过 70 万个应用。而其中不少开发者因为自己的应用获得了一定规模用户的认可,完成了从个人开发者到创业公司的转型,并实现了后续的获客、增长、融资等更长远的发展。