本文由序员先生分享,原题“技术解读企业微信之四维关系链”,本文有修订和改动。
1、引言
3年疫情后的中国社会,最大的永久性变化之一,就是大多数的企业、教育机构或者政务机构,都用上了综合性的SaaS在线办公系统。而这其中,企业微信的覆盖率非常高,而且其占比还在不断增长。
越来越多的人因此好奇,开始想要更深度的了解企业微信,自然也就有越来越多的人开始解读企业微信。而解读的角度,五花八门。
作为企业微信的研发人员,我从技术角度来看,企业微信的成长,确实有其内在的价值与优势。从技术角度去讲企业微信,不是一件容易的事,因为涉及面太广。企业微信是一套包含了IM、办公协作、OA流程、CRM管理、第三方开放 等等多个维度的复杂性的超级SaaS办公系统。底层拥有着数千万行的客户端代码 以及 遍布世界的服务器系统。
本文将摘取企业微信的其中一个技术分支——IM体系之下的“关系链”内核要素,为你揭秘企业微信是如何支持超大规模IM组织架构的。
2、相关文章
- 《企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等》
- 《企业微信针对百万级组织架构的客户端性能优化实践》
- 《企业微信客户端中组织架构数据的同步更新方案优化实战》
3、什么是四维关系链
本文内容相对简要,但是能够帮助想要了解企业微信的客户们读懂,企业微信有着怎样宏大的目标与深远的发展空间。
企业微信发展至今,其通讯录关系链结构经过了多轮演化,形成了一套非常复杂的结构,并在关系链领域拥有着绝佳的优势。
为了方便理解,我把企业微信的关系链结构定义为四维关系链系统。这里的四维不是空间的维度,而是关系链拓展连接能力抽象的层级。
4、一维关系链:链式结构
一维关系链的基础结构,是链式结构,由节点与节点的连接组成。
这种结构的典型代表有还手机通讯录、QQ、微信。这个很容易理解。每个人都是一个节点,人与人的单向或双向的关系,则为节点之间的连接。
每个人和自己的通讯录成员的关系链如下:
当进入到云端,因为每一个代表人的原点,都是独立存在而不重复的,每个人的关系链就是可以互相链接起来的,结合更多人的通讯录成员关系,就会形成一张巨大的网状结构。
美国某位心理学家StanleyMilgram 提出的六度人脉就是基于网状的拓扑关系,推算我们每个人和世界上的任何一个陌生人之间间隔的链接个数不会超过6层。
当然,这个推算只是一个理论上的关系抽象,截止目前,世界上还并没有出现真的链接了全世界人口的App系统。目前链接最多活跃人口的whatsapp的记录是20亿的量级。
5、二维关系链:组织结构
二维关系链,在一维关系链的基础之上,额外增加了组织的关系。
同一个节点可以归属于不同的多个组织。用以形成常规的树状组织架构关系。
企业级IM,就是将全部成员纳入同一个组织,是该结构最基础的抽象。
该结构下:相同组织的成员互相可见,互相可通信。
其实:用一维关系链也是可以模仿该结构,就是把全企业的人默认全部互为好友,也会拥有类似效果,但这样做无疑就太复杂了一些,不如用抽象的组织关系来替代者个关联关系。
实际上:真实的企业类组织的关系都是多层结构,就像我们电脑上的文件目录结构,层层包含。没有“组织”的抽象,是很难完成企业IM的基础搭建的。
6、三维关系链:属性抽象
一维和二维都非常简单直白,到了三维,会稍微复杂一点。
三维关系链,在二维的基础之上,我们在关系链系统中引入“属性” 与 “操作权限” 的概念。
我们也可以把二维关系中的“组织”也看做属性的一种,但是“属性”维度明显能涵盖得更多。能够进行按属性为单位的抽象管理,是一个新维度的拔升。
这个维度的提升,让复杂组织的管理变得容易管理与拓展。也是企业微信在大型企业的使用中足够灵活好用的关键之一。
这些灵活的运用:
- 1)体现在企业组织管理的精细化能力;
- 2)实现多个紧密合作企业之间的互联关系;
- 3)实现拥有多层上下级结构的集团关系网;
- 4)实现联合行业级大批量企业关联互通的上下游架构
- … …
7、三维关系链应用举例
7.1组织管理的精细化
首先,我们可以给关系链上每个节点赋予员工类型属性、管理等级属性、职位类别属性… …
然后设置不同属性节点之间不同的“操作权限”,例如:
- 1)管理员属性员工 才可以删除 员工;
- 2)临时员工属性 不可 查看正式员工的profile;
- 3)普通类别员工 不可向 保密型员工发送信息;
- 等等。
7.2互联企业
当多家具有紧密的关联关系的企业,希望在范围可控的前提下实现互联互通的时候,如果仅靠一维关系链的方式,让企业员工去互相加好友的方式就显得不太够用了。
因为好友关系是个人关系,而非属性关系。
例如:A企业希望和B企业,C企业 三家之间的销售类员工实现充分的互联互通,而又不希望其他类型的员工暴露给对方企业。那么让这么多家企业的员工去互加好友的方式就明显太过麻烦了,即便这样做了,由于员工的流动性,不断有入职和离职,这个工作量就更大了。更麻烦的是,当某员工从销售岗位变成了售后或者采购等其他不希望互联互通的岗位,又怎样去除这些关系?所以必须依赖属性的维度来完成这些工作。
企业微信创建了一个圈子的概念:在同一个圈子中的员工,拥有相同的属性,例如互相可见,互相可通信,用以实现互联企业。
就如下图:圈子创建后,各家企业可以把希望进入到互通范围的员工类型纳入到对应的圈子,而圈子又可以面对多家企业去选择性的开放,从而实现对多种互联企业的灵活诉求。
在互联企业的灵活使用下,我们可以把企业内不愿意对外暴露的员工保护在企业内部,但同时需要和外界密切接触的员工纳入各类不同类型的企业圈子中,去参与市场之间的各类交集,以获取更多商机,或者参与到某些企业间的管理协作中去。
7.3集团架构
上面的互联企业架构,适用于多家相对关系平等的企业之间。而一些具有从属关系的大型集团,或者类似于教育局与学校关系的局校关系,则不适用了。
其实这里我们只需要适当变更属性的用法,会发现该架构一样可以实现。
在上述圈子概念的基础之上:我们增加定义等级属性,然后再对操作权限进行单向控制,就实现了从属关系。
例如:高等级单位可以见下级单位,下级单位不可见高级单位。下图示例(箭头表示可见方向属性),那么市教育局和县教育局互相可见,教育局可见自己所属的学校,但学校之间互相不可见,也不可见上级单位。
在这套架构的运用下,可以汇聚最高可到上千家企业或者学校到同一个系统,可见范围可根据管理的上下级的管理需求进行一定程度的自定义。目前已经运用到大量的市县教育局系统 或者 某些大型集团公司的管理。
7.4上下游架构
这是使用范围更广的一种拓展,适用于行业级的产业链协同。协同的企业量级可以达到上万家。
例如汽车行业涉及数百项供应商企业,要如何实现线上的管理协同,通过数字化把线下凌乱的流程自动化的管理起来?因为这一切工作的前提都是人的操作,因此前提就是必须先实现整条产业链的通讯录打通。
技术基础决定业务上限!再美好的大楼外观设计,在没有足够支撑的框架结构的情况下,也无法完成,硬上的结果只能是崩塌。因为各类丰富架构的支撑,我们实现了大企业领域的 显著优势。
8、四维关系链:跨领域
上面3个维度都是基于同一套软件系统 也即“企业微信” 来实现。企业微信不仅仅运用在企业,也可以运用在一切具有组织关系的团体之上。
因此:我们有大量的政务、学校 或者 一些非企业非盈利的组织 在使用。 但,如果仅仅停留在上面3个维度,哪怕成长到whatsapp这样的20亿级别以上的关系链网,依然无法连接全部人口。这个世界上存在着多套关系链系统,而且不同的关系链系统具有的维度层级和抽象能力不大相同。我们能否真正的实现连接一起的能力? 这是第4个维度需要关心的事情。
因此,在第四维,我们抽象了一套id对应系统,用于实现连接一切。
微信是距离企业微信最近的全民 IM 系统,通过 IMUnion,能够实现企业微信(WWChat)与微信(WeChat)用户关系链 ID 系统的映射,通过生成通用的公共 openid 关联彼此。
上图是跨系统连接的示意图,当然实际上比这个要复杂得多。
仅仅连接不同系统下的 ID 还不足以产生实用效果,还需要通过打通的 ID 系统去构建会话系统,通知体系。企业微信作为复杂的 B 端系统,光是会话内的消息类型就多达上百种,微信也有数十种之多。
这些还需要依赖更多的通用 card 类型设计来实现。当然,这里起到连接的只是一些类似数学维度的 ID 关联,ID 的背后可以是人,自然也可以是其他同事。因此,除了连接微信之外,企业微信还能够连接硬件系统。
企业微信支持丰富的硬件体系,包括各类型的打卡考勤机、打印复印机、音视频设备...
一切设备都可以通过内置企业微信的 ID 映射逻辑 SDK 来实现与企业微信系统的连接。实现连接一切的能力。
《人类简史》这本书有提到过原始社会没有语言这种连接工具之前,只可能是小的部落群体,就和猴子猩猩的族群大小没有区别。当语言这个连接工具的诞生,族群的规模开始快速扩大,因为大家可以低损耗的传达信息了。而更高级的抽象能力诞生,又是更强的连接能力,可以形成共通的目标、意义、宗教崇拜,人类社会开始具备扩大到国家乃至世界的能力,才有了快速的人力发展历程。
今天的企业微信,也再做着类似的事情,我们通过创造新的连接方式,这样一套四维的,全方位的连接能力,连接全部的人,甚至跨越到智慧硬件领域。会逐渐衍生丰富的 B 端生态系统。企业微信的使命,是成为每一家企业自己的微信,当大部分的企业可以达成的时候,新的生产销售关系会发展到前所未有的高度。
在最近一次的企业微信的大范围连接一切的尝试,是在 2020年的全国人口第七次普查中,企业微信的第四维关系链,就起到了关键性的作用。通过全国的省、市、县、街道的颗粒度,配置线下网格员,700万网格员全部在企业微信上,通过集团架构的模式层层关联,统一调度。然后再通过着700万普查员 与 14亿微信用户信息的链接实现了中央统一调度的效果。
在之前的几次人口普查中,信息收集汇总工作是非常庞大且复杂的。获得了极大的效率提升。后续超大规模的经济普查 甚至 全社会级别的高级管理能力都会有更多的想象空间。
9、微信团队分享的其它技术文章
《微信朋友圈千亿访问量背后的技术挑战和实践总结》
《IM全文检索技术专题(二):微信移动端的全文检索多音字问题解决方案》
《微信团队分享:iOS版微信的高性能通用key-value组件技术实践》
《微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?》
《微信团队原创分享:iOS版微信的内存监控系统技术实践》
《iOS后台唤醒实战:微信收款到账语音提醒技术总结》
《微信团队分享:视频图像的超分辨率技术原理和应用场景》
《微信团队分享:微信每日亿次实时音视频聊天背后的技术解密》
《微信团队分享:微信Android版小视频编码填过的那些坑》
《IM全文检索技术专题(一):微信移动端的全文检索优化之路》
《企业微信客户端中组织架构数据的同步更新方案优化实战》
《微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉》
《月活8.89亿的超级IM微信是如何进行Android端兼容测试的》
《一篇文章get微信开源移动端数据库组件WCDB的一切!》
《微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化》
《微信后台基于时间序的海量数据冷热分级架构设计实践》
《微信团队原创分享:Android版微信的臃肿之困与模块化实践之路》
《微信后台团队:微信后台异步消息队列的优化升级实践分享》
《微信团队原创分享:微信客户端SQLite数据库损坏修复实践》
《微信Mars:微信内部正在使用的网络层封装库,即将开源》
《如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源》
《开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]》
《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》
《微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)》
《微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)》
《Android版微信从300KB到30MB的技术演进(PPT讲稿) [附件下载]》
《微信团队原创分享:Android版微信从300KB到30MB的技术演进》
《微信技术总监谈架构:微信之道——大道至简(演讲全文)》
《微信技术总监谈架构:微信之道——大道至简(PPT讲稿) [附件下载]》
《如何解读《微信技术总监谈架构:微信之道——大道至简》》
《微信海量用户背后的后台系统存储架构(视频 PPT) [附件下载]》
《微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案》
《微信朋友圈海量技术之道PPT [附件下载]》
《微信对网络影响的技术试验及分析(论文全文)》
《一份微信后台技术架构的总结性笔记》
《架构之道:3个程序员成就微信朋友圈日均10亿发布量[有视频]》
《快速裂变:见证微信强大后台架构从0到1的演进历程(一)》
《快速裂变:见证微信强大后台架构从0到1的演进历程(二)》
《微信团队原创分享:Android内存泄漏监控和优化技巧总结》
《全面总结iOS版微信升级iOS9遇到的各种“坑”》
《微信团队原创资源混淆工具:让你的APK立减1M》
《微信团队原创Android资源混淆工具:AndResGuard [有源码]》
《Android版微信安装包“减肥”实战记录》
《iOS版微信安装包“减肥”实战记录》
《移动端IM实践:iOS版微信界面卡顿监测方案》
《微信“红包照片”背后的技术难题》
《移动端IM实践:iOS版微信小视频功能技术方案实录》
《移动端IM实践:Android版微信如何大幅提升交互性能(一)》
《移动端IM实践:Android版微信如何大幅提升交互性能(二)》
《移动端IM实践:实现Android版微信的智能心跳机制》
《移动端IM实践:WhatsApp、Line、微信的心跳策略分析》
《移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)》
《移动端IM实践:iOS版微信的多设备字体适配方案探讨》
《IPv6技术详解:基本概念、应用现状、技术实践(上篇)》
《IPv6技术详解:基本概念、应用现状、技术实践(下篇)》
《微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等》
《腾讯技术分享:微信小程序音视频技术背后的故事》
《微信多媒体团队梁俊斌访谈:聊一聊我所了解的音视频技术》
《手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)》
《微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)》
《微信技术分享:微信的海量IM聊天消息序列号生成实践(容灾方案篇)》
《微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅》
《社交软件红包技术解密(二):解密微信摇一摇红包从0到1的技术演进》
《社交软件红包技术解密(三):微信摇一摇红包雨背后的技术细节》
《社交软件红包技术解密(四):微信红包系统是如何应对高并发的》
《社交软件红包技术解密(五):微信红包系统是如何实现高可用性的》
《社交软件红包技术解密(六):微信红包系统的存储层架构演进实践》
《社交软件红包技术解密(十一):解密微信红包随机算法(含代码实现)》
《微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结》
《IM“扫一扫”功能很好做?看看微信“扫一扫识物”的完整技术实现》
《微信团队分享:微信支付代码重构带来的移动端软件架构上的思考》
《IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总》
《微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路》
《企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等》
《IM全文检索技术专题(四):微信iOS端的最新全文检索技术优化实践》
《微信团队分享:微信后台在海量并发请求下是如何做到不崩溃的》
《微信Windows端IM消息数据库的优化实践:查询慢、体积大、文件损坏等》
《微信技术分享:揭秘微信后台安全特征数据仓库的架构设计》
《企业微信针对百万级组织架构的客户端性能优化实践》
《揭秘企业微信是如何支持超大规模IM组织架构的——技术解读四维关系链》
技术交流:
- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》
- 开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK(备用地址点此)
(本文已同步发布于:http://www.52im.net/thread-4471-1-1.html)