如何搭建亿级社交信息分享社交平台架构.docx

如何搭建亿级社交信息分享社交平台架构.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如何搭建亿级社交信息分享社交平台架构

如何搭建亿级社交信息分享社交平台架构本文章来自于阿里云云栖社区如何搭建一个稳定、高并发的IM系统架构?怎样构建高并发即时通信系统?这个需求在构建社交IM和朋友圈应用时,经常会遇到。在这种场景下,一个基本的需求是将用户发送的消息和朋友圈更新及时准确的更新给该用户的好友。为了做到这一点,通常需要为用户发送的每一条消息或者朋友圈更新设置一个序号或者ID,并且保证递增...如何搭建一个稳定、高并发的IM系统架构?怎样构建高并发即时通信系统?这个需求在构建社交IM和朋友圈应用时,经常会遇到。在这种场景下,一个基本的需求是将用户发送的消息和朋友圈更新及时准确的更新给该用户的好友。为了做到这一点,通常需要为用户发送的每一条消息或者朋友圈更新设置一个序号或者ID,并且保证递增,通过这一机制来确保所有的消息能够按照完整并且以正确的顺序被接收端处理。?当消息总量或者消息发送的并发数很大的时候,我们通常选择NoSQL存储产品来存储消息,但常见的NoSQL产品都没有提供自增列的功能,因此通常要借助外部组件来实现消息序号和ID的递增,使得整体的架构更加复杂,也影响了整条链路的延时。?云产品解决方案阿里云表格存储新推出的?主键列递增?功能可以有效地处理上述场景的需求。具体做法为在创建表时,声明主键中的某一列为自增列,在写入一行新数据的时候,应用无需为自增列填入真实值,只需填入一个占位符,表格存储系统在接收到这一行数据后会自动为自增列生成一个值,并且保证在相同的分区键范围内,后生成的值比先生成的值大.主键列自增功能具有以下几个特性:·???????表格存储独有的系统架构和主键自增列实现方式,可以保证生成的自增列的值唯一,且?严格递增?。·???????目前支持多个主键,第一个主键为分区键,为了数据的均匀分布,不允许设置分区健为自增列。·???????因为分区健不允许设置为自增列,所以主键列自增是?分区键级别的自增?。·???????除了分区键外,其余主键中的任意一个都可以被设置为递增列。·???????对于每张表,目前?只允许设置一个主键列为自增列?。·???????属性列不允许设置为自增列。·???????自增列自动生成的值为?64位的有符号长整型?。·???????自增列功能是?表级别?的,同一个实例下面可以有自增列的表,也可以有非自增列的表。·???????仅支持在创建表的时候设置自增列,对于已存在的表不支持升级为自增列。介绍了表格存储的主键列自增功能后,下面通过具体的场景介绍下如何使用。场景我们继续文章开头的例子,通过构建一个IM聊天工具,演示主键列自增功能的作用和使用方法。功能我们要做的IM聊天软件需要支持下列功能:·???????支持用户一对一聊天·???????支持用户群组内聊天·???????支持同一个用户的多终端消息同步现有架构第一步,确定消息模型·???????上图展示这一消息模型·???????发送方发送了一条消息后,消息会被客户端推送给后台系统·???????后台系统会先存储消息·???????存储成功后,会推送消息给接收方的客户端第二步,确定后台架构·??????后台架构主要分为两部分:逻辑层和存储层。·???????逻辑层包括应用服务器,队列服务和自增ID生成器,是整个后台架构的核心,处理消息的接收、推送、通知,群消息写复制等核心业务逻辑。·???????存储层主要是用来持久化消息数据和其他一些需要持久化的数据。·???????对于一对一聊天,发送方发送消息给应用服务器后,应用服务器将消息存到接收方为主键的表中,同时通知应用服务器中的消息推送服务有新消息了,消息推送服务会将上次推送给接收方的最后一条消息的消息ID作为起始主键,从存储系统中读取之后的所有消息,然后将消息推送给接收方。·???????对于群组内的聊天,逻辑会更加复杂,需要通过异步队列来完成消息的扩散写,也就是说发到群组内的一条消息会给群组内的每个人都存一份。·???????上图展示了省略掉存储层后的群消息发送过程。·???????使用扩散写而非扩散读,主要是由于以下两点原因:o???群组内成员一般都不多,存储成本并不高,而且有压缩,成本更低。o???消息扩散写到每个人的存储中(收件箱)后,为每个接收方推送消息时,只需要检查自己的收件箱即可,这时候,群聊和单聊的处理逻辑一样,实现简单。·???????发送方发送了一条消息后,这条消息被客户端推送给应用服务器,应用服务器根据接收者的ID,将消息分发给其中一个队列,同一个接收者的消息位于同一个队列中,在队列中,顺序的处理每条消息,先从自增ID生成器中获取一个新的消息ID,然后将这条消息写入表格存储系统。写成功后再写入下一条消息。·???????同一个接收方的消息会尽量在一个队列中,一个队列中可能会有多个接收方的消息。·??

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档