00:00
大家好,我是腾讯云音视频工程师。都相文。本次分享主要给大家。介绍腾讯云I'm助力社交新形态,满足多场景下实时沟通需求。本次分享分为四个部分。包括腾讯云即时通信I'm产品介绍、产品功能以及新的群类型、社群相关概述,最后是总结部分。首先进入我们第一个部分,即时通信I'm产品介绍。腾讯云I'm基于QQ10几年的技术通信技术积累,从TOC到To B。加上QQ,已经经过了20多年的发展。腾讯I'm产品2015年上线以来,注册应用数突破了20万。目前日活超过2亿。月活高达10亿,产品功能也在不断丰富。
01:01
2020年支持了私有化部署,2021年发力国际站,开通了新加坡、德国。韩国、印度等站点。今年上线了类的新群类型社群。未来会继续丰富I'm能力,上线更多玩法。随着移动互联网的快速发展。大部分客户开发的APP都对I'm有非常强的诉求。为什么要选择云厂商,而不是选择自研?字眼主要面临以下两个问题。第一个问题是技术难度高。M并发量大。主流I'm产品都是通过自研协议来应对高并发问题。M中最重要的就是消息。要保证消息不丢失,有序多端同步难度较大。同时,用户网络环境复杂,要在不同网络环境下保证I'm的可用性。第二个问题是I'm业务逻辑复杂,自研需要把单聊、群聊、弹幕、文本、图片和点赞等功能都需要实现一遍。
02:07
需要处理用户在线和不在线情况下的消息触达问题。同时,不同的群类型,消息重要性也不一样,需要自己区分。除了以上讲到的基本功能外。基础设施也很重要。如果有海外用户的话,为提升效率,就需要全球部署。成本较高。不同地域用户网络环境也不一样,在通信时需要选择最优的。路由,减少网络通信的开销。某些网络节点出问题时,也需要实时感知,将受影响的用户迁移到没有问题的节点。同时,M还经常涉及到用户的隐私。通信加密对于I'来说也是基本功能。以上这些问题对于自研来说都需要较高的成本。接入腾讯I'm,以上问题都将得到解决,我们提供了低门栏的接入方式,最快一分钟即可跑动DEMO。
03:06
一天即可搭建好您专属的I'm应用。无缝集成音视频功能,提供丰富的玩法。同时,我们在全球六大洲都有接入点。加速网络访问。为满足合规要求,我们也有海外独立的数据中心,可以将数据全部存储在海外。接下来是I'产品功能的介绍。腾讯I'm主要包括三大基本功能,第一个功能是账号和关系链。账号主要用于用户资料的托管,包括昵称、性别、头像等基础资料。如果不满足要求,我们还提供了自定义的资料字段,方便扩展。和关系链,用于记录用户之间的好友关系最大,这是高达3000个好友,同时提供了多种添加好友验证方式,方便您的使用。
04:02
第二个功能是消息和推送。我们提供完整的消息收发能力,支持文字、图片、视频、语音等富媒体信息,以及客户自定义的消息和表情。也支持消息漫游、撤回、转发和回调等扩展能力。用户在线时,我们会把消息通过和STK之间维护的长链接实时下发给用户。如果用户离线,我们会。通过手机厂商提供的离线推送下发给用户。我们目前支持苹果、华为、小米、魅族、OPPO VIVO和谷歌,推送覆盖了主流的手机厂商。第三个功能是单聊和群聊。单聊除了覆盖人与人之间的聊天外,还支持系统与人的聊天。可以用于通知类消息。群聊方面,我们提供了多种群类型可供选择,不同类型支持的功能不一样。
05:00
普通群覆盖类似于微信和QQ的群功能,直播群主打直播场景,无人数上限,社群是类似于一种新的形态,人数方面远多于普通群。体验接近于普通群。同时还支持在群中创建话题,使聊天内容更加聚焦。接下来重点分享一下我们新推出的社群相关特性。传统群聊,我们经常会遇到这样一个问题。一夜的消息属于多个主题,几个小团体在各聊各的。话题不聚焦,容易降低用户参与感。有新户可能为了不被其他话题打断,选择新建一个群。把参与的用户拉进去。这样一来,用户加入的群就越来越多,需要经常在不同的群之间来回切换,思容易被打断。同时,传统群一般对人数上限进行限制,最多也就几千人。导致一个大的聊天经常会创建多个群。
06:00
给管理员和用户都带来了很大的困扰。图片中是一款叫做discord的新。的APP。今年呢,非常火爆。他开创了一种新的群聊模式,我们称之为社群。通过社群、分组、话题三级划分,在开放的、大的社群中为用户提供分组、聚合的、小的话题。舒适的中间带让用户可以随意选择感兴趣的话题。提高用户的参与积极性。相比微博更加私密,相比微信更加开放,相比论坛更加聚焦。也凭借这一新颖的聊天模式吸引了大量客户。五年的时间,月活波增长了接近15倍,2021年日活已经突破了1.5亿。Or的成功,让大家开始探索社群这种新的群聊玩法。
07:00
QQ、斗鱼嘟嘟开黑了,都成了社群的新的玩家。以QQ为例,QQ在今年上线了频道功能,用户可以选择自己感兴趣的频道加入。比如,王者荣耀频道覆盖上分闲聊、交友、皮肤等多个话题。喜欢玩王者荣耀的玩家都能在频道中找到感兴趣的话题。通过我们I'm提供的社群功能,即可快速打造一款类群聊。社群中支持创建话题,话题支持分组。通过社群分组话题的层级划分,一个庞大的社群可以被细分为众多子话题。不同话题消息相互隔离,可以使聊天内容更加聚焦在一个小的话题,提高成员的参与。不同的成员可以设置不同的身份组。方便管理,也能让用户在看消息时了解对方的观点。用户一旦加入社群,自动加入社群内所有话题,减少维护成本。
08:04
同时可以与TRTC搭配搭配使用,将文字和声音结合。实现语音互动,丰富玩法。除此之外,社群还支持消息编辑。由于社群人数众多,在很多人对同一条消息发表观点的时候,就会出现刷屏的效果。非常影响用户体验。通过消息内容,编辑可以对消息贴上多个表情。将用户的观点聚焦在一条消息,可以极大的提升用户体验。消息回复也是一个常用功能。群人数少时消息不多,上下滑动几下就可以看到所有的消息。但是这在社群场景行不通。群人数太多,导致回复链太长。通过在回复中。增加原消息的引用,可以将整条消息列入单独展示。聚集兴趣用户,提高用户参与积极性。
09:04
搭配上述不同的功能,可以给不同的聊天带来不同的变化。比如兴趣、交友场景。传统模式下,用户想要找到志同道合的朋友非常难。通常需要很多前置条件进行筛选。社群汇聚百万用户。话题分组,让兴趣圈子保持细分垂直。在大的社群中为用户提供细分的小话题,舒适的中间带可以让用户根据自己感兴趣的话题。选择交流,通过回复能更加准确的了解对方和自己的匹配程度,提高参与感。也能更好的达到交友的目的。游戏社交场景下。传统模式下,用户通过游戏官网、论坛的方式了解游戏新的资讯。游戏过程中依赖游戏中的随机匹配组队。同一方队友难以形成配合。游戏结束后也就全部结束了。
10:02
通过一个社群内多个不同的话题,可以完美解决玩家获取游戏资讯、招募游戏队友、探讨游戏攻略以及游戏结束后交流总结等诸多需求。相对于之前需要多个途径或者多个群的方式,效率明显提升。搭配语音聊天室,可以把招募队友、游戏开黑玩法总结闭环在一个社群中。粉丝运营场景下,传统模式大为由于粉丝众多,群人数上限又不满足要求,因此经常需要靠人为的方式创建多个小区。比如深圳用户一群,上海用户一群。在人数达到上千后,又分裂为更多的小区。一个通知需要在多个群都发一遍。管理成本很高。社群的高人数上限,可以彻底解决群分裂的尴尬。群内既可以按照地域划分多个子话题,也可以按照不同的场景划分子话题。
11:05
同一条通知可以触达群内所有用户,让粉丝运营更加轻松准确。组织管理模式呀。传统模式下,不同部门分别建建群,经常需要建一个全员群。如果组织人数较多,还可能需要建多个全员群。管理和发通知都非常麻烦。有了社群的话,只需要建一个全员群,再通过社群的层级功能全员设置。这个实现部门群功能,例如部门A的成员只能看到部门A的话题。部门B的成员只能看到部门B的话题,全员话题就所有人都可以看得见。让组织管理更加轻松。以上是社群群特性以及优点介绍,下面介绍一下社群的一些功能、难点、技术实现方式。社群和普通群最大的一个区别就是群人数。
12:01
由此带来了很多新的问题。比如群成员人数众多,导致单机存储压力大。针对同一个群的请求,由于人数多,导致请求量大。人数多的群,一条消息需要发送给所有用户,推送压力也大增。我先来看看群成员存储问题怎么解决。普通群聊人数一般只有几百个,最多的也就支持几千个人。完全可以存在一同一台机器上。但是社群由于人数太多,全部存储在同一台机器上的话。需要扩容的时候,就会存在一个大的对象需要迁移。对于存储系统来说,压力就很大。因此,为了减少存储压力。我们需要将同一个群的群成员分散到不同的机器上。但是,这又会带来一个新的问题。不是每个社群群人数都非常多,很多群其实都是小群。人数和普通群没有什么差别。只有非常少的群才会超过1万个人。
13:02
如果我们对每个群的群成员都采用拆分的方式的话,对于小群来说反而增加了复杂度。所以我们需要有一个阈值。在群成员没有超过阈值的时候,仍然维持单击存储。群成员一旦超过阈值,就把群成员按照一定的方式进行拆分,存储到不同的机器上,以减少存储压力。通过多机器来分担请求压力,就可以解决大群的存储问题。再来看看第二个问题。请求分流问题。同一个群群成员过多,势必会造成同一个群的请求量大增。容易产生突发流量。对于I'm来说,大部分请求都需要请求群资料和群成员资料。群成员资料上面已经讲了,可以通过分片存入到不同的节点来分担压力。但是群资料属于所有成员共享。
14:02
爆发片。那么怎么解决群资料的热点问题?我们发现群资料有一个特性。对于大部分请求来说。查询的群资料并不是为了获取精准的群资料,群资料呢中大部分字段变更也并不频繁。如果获取的群资料是一两秒之前的,对于大部分请求来说并不会造成任何影响。因此,我们对群资料除了red缓存之外,还增加了本地缓存。如果本地存在,则判断是否过期,不过期直接使用。不存在或已经过期就读读取了的。就大大。可以减少对群资料的请求量。有了本地缓存,还有一个问题。怎么提高本地缓存的命中率?否则如果不命中的话,还是会把大量的请求打到数据库。为此,我们选择了一次性哈希来提高本地缓存的命中率。
15:02
把同一个群的请求锁定在某些机器上。这样就可以大大提高缓存的命中率。第三个问题就是推送。由于人数众多,每发一条消息,需要推送的用户相比之前成倍提升。原先普通群每次发消息都需要查出群中所有成员,按照群成员是否在线,决定走在线推送还是离线推送。群人数多了之后,如果也这么推送的话,势必会带来消息的延迟大增。服务端和存储服务的压力。都会很大。为了减少推送带来的压力,我们就需要一种新的推送方案。我们发现,社群人数众多,对于单个群来说,群成员的变法化却不频繁。用户一旦进群的话,很少会退群。
16:01
同时只看某个用户的话,他的状态变化也不频繁。因此。我们就对群成员进行缓存。这样的话,有消息需要推送的时候,就不需要再去查群成员了。那群成员和用户的状态变更了,怎么了?我们的方案是,群成员和状态变更的时候,都通过消息队列实时通知相应的群成员缓存机器做同步的变更,保证群成员数据是最新的。这样就会带来另一个问题。如果把所有群都缓存下来的话,那么就会让需要非常多的内存,成本会非常高。其实大群是非常少的,大部分群都是小群。群成员和消息量都不大。我们可以复用之前普通群的消息推送方案。只有群成员突破到一定阈值之后,才使用新的方案。这样就可以做到性能和成本的平衡。前面提到了多种缓存,比如群资料的缓存,群成员的缓存。
17:04
既有略的是缓存,也有本地的缓存。正常数据变更后。存到数据库后需要变更。由请求调用,再把缓存读到本地进行缓存。这样的多级缓存就会带来一个问题,怎么保证缓存的一致性?为了保证缓存的一致性,每次变更我们都会生成一个递增版本号。版本号大的数据可以覆盖版本号小的数据,版本号小的数据。就直接忽略。每次数据变更后,我们会发到MQ。MQ会做一些数据比对操作,来保证和数据库的一致。同时,在数据变更时。我们也会多冗于呃写一次,提高缓存的实时性。对于本地缓存。我们就采采用了定时淘汰的策略来保证一致性。
18:01
群资料缓存只在本地做秒级缓存。一旦过期,就采用单飞的模式去读取,保证一台机器对同一个群资料的拉取只会并发的触发一次。减少的压力。通过以上技术手段,我们解决了社群群成员众多带来的一系列问题,保证了社群的稳定性。最后做一下总结。腾讯云I'm经过这么多年的发展,功能已经比较完善了。新加入的社群对于I'm又做了一次补充。使用I'm已经可以实现很多业务场景。我们的SDK覆盖安卓、iOS Windows Mac和web等主流平台。为方便快速集成,我们还提供了包含UI的TUI的组件,方便您实现基础的绘画列表。通讯录、聊天界面等功能。有些M覆盖不了的场景,还可以和其他腾讯云产品结合在一起使用。
19:03
比如与实时音视TRTC集成可以实现。音视频通话、连麦语聊房等功能。与云直播CSS集成,可以实现直播间弹幕、评论和互动等功能。与云点播、vod集成,可以实现边看、边听边聊。与互动白板tiw集成,可以实现画笔涂鸦、举手发言。同时为了方便您。实时的了解I'的各种情况,我们也提供了丰富的乱的接口回调。图中这些APP都选择了接入腾讯云I'm来实现自己的业务功能。我们也会不断优化。提供更多更好的功能来满足不同业务场景的需求,敬请期待。以上就是我今天所讲的内容,谢谢大家的观看。
我来说两句