查看原文
其他

钉钉 6.0 开放底层“协同框架” 开发多人实时协作程序像编本地程序一样简单

宋慧 CSDN 2021-04-25
2021 年新年伊始,钉钉在 1 月 14 日发布了最新 6.0 版本,同时宣布战略定位全面升级,钉钉将从过去基于IM的协同办公平台,升级为企业协同办公和应用开发平台。
从产品和市场表现,钉钉已经杀出了一条血路。IM 一直是互联网的顶级战场,钉钉以企业 IM 入场,经过 6 年的深耕和征战,钉钉向市场交出了一份成绩单:用户数突破 4 亿,使用钉钉的企业组织数超过 1700 万。
不过这一次的发布会上,对于开发者群体更具意义的,是钉钉宣布将全面开放底层能力和1300个API接口,还将开放钉钉群聊、智能人事、客户管理等基础产品的接口,以及涉及到的一项底层“协同框架”技术。
让钉钉的企业应用开发能力“更开放”。
据钉钉介绍,基于协同框架可以像开发本地程序一样,开发多人、多端、多场景的实时协同应用,也支撑了钉钉小程序、IM、终端等很多核心系统的通用的底层框架。近日,CSDN 专访了钉钉基础技术负责人强琦和钉钉协同框架技术负责人李乔,揭秘这项创新技术的设计理念。

国内首创协同框架,钉钉底层架构揭秘

此次钉钉 6.0 发布会上,推出了多个全新亮相的产品和功能,例如面向企业用户的低代码开发工具;面向人事、财务、IT、销售和管理者,推出角色工作台;开放的开发接口,涵盖人事、客服、群组、企业应用连接器等模块;基于跨企业合作、产业协同、消费者服务场景,推出合作空间、服务窗等模块;倡导“以事情为中心”,整合钉钉协同办公套件,简化用户交互界面等等。
如果说本次发布的低代码开发工具是面向企业的所有普通用户,协同框架技术则是面向专业的开发者。钉钉抓住企业应用场景中多人、多端、实时协同的特点,聚焦解决实时协同中的关键技术难点,构建了一套全新的技术框架,让原本复杂的多人实时协同应用像开发本地应用一样简单。钉钉将这项技术称为“协同框架”(tangleframework)。
据悉,钉钉协同框架是国内业界首创,强琦介绍,钉钉在实现移动实时协同产品时,系统需要处理大量诸如移动端弱网处理、离线可用、下线过久后重新上线、重放、冲突检测与解决、回滚、公平性、并发提交、数据一致性、大规模实时推送等关键技术难点。
协同框架正是借助IM、文档、小程序、端研发等技术积累,同时应用于客户端与服务端的引擎层设计,抽象为通用的对等有限状态机模型。
这些硬核的底层技术,并不是所有应用开发团队都有时间与精力去独立实现。未来钉钉也将把这项底层架构和技术能力全面开放,为企业应用开发全面加码。
协同框架将复杂的处理透明化,让开发者在使用协同数据结构与组件时对这些复杂性“无感知”,让开发者不用关注与“多人”“实时”“协同”相关的底层架构与算法问题,而是专注在自己的业务逻辑上。开发者可以像开发本地程序一样,借助钉钉的协同框架开发多人、实时协同、多端的程序,代码量可以大幅缩减。而这套技术将与钉钉小程序结合向开发者开放。

钉钉 6.0“一起标注”功能背后由协同框架实现
强琦向 CSDN 详细介绍了钉钉协同框架开放的三层能力:
  1. 在协同框架的最上层,提供了一系列可复用的组件,是可以快速接入使用的组件层。例如此次 6.0 版本发布的“一起标注”功能中,正是使用了可复用的协同画布组件,,未来钉钉也会在这一层增加更多组件内容。 
  2. 在协同框架第二、三层,是协同小程序与协同数据结构,是帮助开发者提升开发效率的框架层。提供了协同数据结构,是让开发者可以直接使用的类似标准类库的数据结构,比如 CoString、CoCounter、CoPixel、CoMap、CoList 等,在小程序、客户端 App、服务端应用中以以对等、相同的方式直接使用这些数据结构。
  3.  最底层是最复杂但又最强大的能力层,是面向自动机的语义,可以扩展出更多类似于 CoPixel 这样的协同数据结构。当然,专业开发团队就必须实现相关接口,来完成类似初始化、冲突检测、回滚的具体逻辑等等更为精细化设计。 

开发多人实时协同应用如何做到像本地应用一样简单?

以开发一个基本的TodoList应用为例,如果只是完成单人本地使用的功能,相信对于大部分开发者而言并不困难,但如果说要做一个支持多人多设备实时编辑的TodoList,而且这个Todo既可以被嵌入在任务系统,也可以被嵌入在工作台,也可被嵌入在CRM里,那么问题就会复杂很多,开发者需要关注许多协同带来的工程架构问题与算法问题,上面提到的诸如弱网离线可用、乱序、重放、冲突检测与解决、数据一致性等问题,对于大部分开发者可能是比较高的门槛。

回过头来看,一个本地TodoList应用是如何实现的:你可能需要一个List对象,一个用于存储任务列表的List型数据结构,而当用户创建了一个新的任务时,程序会创建一个新的任务对象,并将这个任务对象作为一个新的元素置入List中。最后,这个List数据结构绑定到一个列表UI组件上,通过数据渲染出界面,可能这就是一个本地TodoList的核心逻辑了。

而当需要支持多人在线编辑时,事情变得复杂起来。当修改本地的List数据时,需要发送到服务端并同步给所有一起协同的其他用户,另外,还需要关注其他用户是否也修改了List,程序需要作出对应的动作更新界面,而且,如果多位用户同时修改一个任务时,他们的修改操作如何合并,如果修改发生了冲突如何解决,如果确认冲突解决后符合每个人的意图预期,弱网、离线时如何处理数据的存储并在网络恢复时发送,每个修改操作如何确保实时推送到在线的用户端,当需要大量操作重放时如何提升恢复的效率
,这些问题复杂度对多人实时协同带来比较高的门槛,尤其是在移动端场景下。

而有了协同框架以外,将一个本地版的TodoList进化为多人实时协同版TodoList,只需要用上协同数据结构替换原来的本地数据结构。将List替换为框架提供的CoList,如此便得到了多人协同能力。当用户A往CoList中新增一个任务时,用户B的CoList对象中就会自动增加对应的任务对象。

再看本次钉钉6.0发布的“一起标注”功能,也是基于协同框架开发的一个产品功能,其实现是基于一个名为CoPixel的数据结构,用于表示标注笔画图形的数据,UI层封装为一个协同画布组件。用户在协同画布上每画一笔,都会对CoPixel产生对应修改,进而自动协同到所有参与协作的用户端,其他用户端的CoPixel会回调UI层的画布组件,从而新笔画得到展现。当多名用户同时操作,这些动作会合并并自动解决其中可能产生的冲突。


低代码正流行,专业开发者的机会在哪里

企业级应用开发领域早已不是研发 OA 系统、ERP 系统这些传统软件的时代。在移动化和云化趋势下,软件开发中各类软件之间的数据孤岛已被打破。基础设施提升了效率,企业对应用开发需求却不降反增,企业应用百花齐放。
阿里云智能总裁张建锋预测,软件开发和企业服务将重构,并出现新的生态和模式。或许下一场软件变革就将发生在企业的 IT 部门。IT 部门人员也不再仅仅是专业软件的使用者,他们将成为最理解业务需求的一线软件开发者,也将是企业软件开发的主力军。而钉钉企业级应用开发平台的价值,就是为企业提供快速开发的平台和服务,进而帮助行业重塑整个软件开发体系。
为了满足快速增长的企业应用开发需求,在 6.0 新版本中,钉钉将结合宜搭、氚云、简道云等生态内平台推出低代码开发工具,提供快速开发能力。
但是对于专业开发者来说,低代码一直是被争议的话题。比如钉钉宜搭的低代码客户也在形容快速开发工作是“会用一点点电脑的都会”,对专业开发者简直太扎心了啊。
对此钉钉也明确,实质上低代码开发的核心价值,是让普通人可以具备基础的开发能力。低代码的重点是“基础的开发能力”,目的是让企业数字化可以快速创新。
针对专业的开发者群体,钉钉则是提供大量的产品 API,和更高级的低代码能力,可以让开发者能够专注在业务开发的逻辑本身,减少在事务性开发的时间和精力浪费,协同框架的开放同样如此。
“一直以来,一个具有生命力的平台,必定是能为平台之上的开发者提升其生产力,帮助开发者更好地专注在其应用的核心业务逻辑,而无需为底层基础能力操心。”李乔说。
从汇编到 C、Java,再到 SaaS、PaaS,编程技术的发展是不断拆分和模块化的过程。而不同的平台,为开发者带来的生产力提升,会有不同的视角与重心。Android 与 iOS 作为移动应用的平台,为开发者提升的是移动 App 的开发效率,当前各种小程序平台,为其开发者提升的是一次开发、跨平台运行、灵活发布的生产力。聪明的程序员们一直在减少低效、事务性的重复劳动。钉钉打磨的协同框架,也是要让最简洁的开发,进入正在快速发展的企业应用领域,为企业开发者带去极致的开发体验。

协同框架将助力开发者,还原更多实时协同场景

钉钉在企业级市场取得成绩,背后是对企业级软件开发场景的理解。强琦向 CSDN 分享了个人对于 toB(企业级)业务与 toC(个人)应用两者差异的理解。C端场景在多数情况下,都是某个用户独自完成一个功能闭环,例如淘宝个人化的购买行为,每个人刷抖音的不同视频内容等,多数情况下对等用户之间不需要产生协作与互动,可能只有多人在线手游,算是 C 端一个需要重度协同的场景。
而企业级应用是面向企业、组织、团队等工作场景的社会化协作,本质上是由多人共同去完成某件事务,不论是共同维护项目任务的进展,共同编辑一篇工作文档,在线课堂白板,还是在群里消息互动等,多人协同是企业级应用的重要属性。
而协同框架正是基于这个 toB 业务的底层逻辑,希望通过降低 toB 业务多人实时协同的技术门槛,帮助钉钉平台上的开发者,可以更好地实现各自行业领域的协同功能。企业应用的开发者可以聚焦在最有核心价值的业务逻辑上,而无需关注底层多人实时协作的工程实现与算法问题。
所谓“工欲善其事,必先利其器”,钉钉的协同框架,是要为企业应用开发者打造的“趁手兵器”。协同框架丰富的模块化组件、底层接口,也符合钉钉本次发布会提出的“更简单、更开放”的理念,而这也是业界一直迭代和追求的目标,让开发更简单。
强琦在采访中更进一步地提到,实质上不仅是协同框架的技术开放,向开发者群体开放技术、产品能力,是钉钉从诞生以来一直在做的事情,钉钉内现在入驻的开发者已经超过 27 万,开发的应用超过 70 万。并且其中有不少开发者,因开发的应用获得一定规模用户的认可,完成从个人开发者到创业公司的转变,及后续的获客、增长、融资等更长远的发展。
“分享、点赞、在看”

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存