2022年社交网站的功能架构.docx
《2022年社交网站的功能架构.docx》由会员分享,可在线阅读,更多相关《2022年社交网站的功能架构.docx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 架构设计.摘要:本篇文章会向读者展现几个架构设计的关键点,使一个社交应用能够成为真正的下一代社交产品;但这只是设计阶段,需要更深化的分析和明白系统的当前状态;本篇文章会向读者展现几个架构设计的关键点,产品;以下几个属性将会影响到架构的设计:a可用性 b可扩展性 c性能和敏捷性可扩展 目标使一个社交应用能够成为真正的下一代社交a确保用户的内容数据能够很便利的被其他用户发觉和猎取 .b确保内容推送是相关的,不仅在语义上,也是从用户设备的角度;c确保实时更新生成、推送和分析;d尽可能地节约用户的资源;e不管服务器负载变化如何,用户体验应保持不变;f确
2、保应用整体上是安全的总之,我们要处理一个相当大的挑战,我们必需处理不断扩大的海量用户生成的内容数据,不断增长的用户, 和一个不断迭代的新项目,同时必需确保性能足够杰出;为了应对上述的挑战, 我们必需学习架构某些关键的元素,这将影响到系统的设计;以下是一些关键的打算和分析;数据储备数据和数据模型的储备是一个好架构的关键设计之一;一个社交产品应当能够处理多种类型的数据,因此第一得充分分析数据并透彻懂得,之后再设计数据模型和数据储备;第一步, 我们要确定哪些数据是常常查询的热点数据,哪些不是常常需要的那些数据如归档数据用于分析 ;对于高频拜访的数据,它必需总是可用,能够快速读写和水平可扩展;目前我们
3、全部业务场景使用的都是MySQL,即使我们的用例不肯定需要使用关系数据库系名师归纳总结 统;随着我们数据的增长,我们的读写将成为我们应用程序性能瓶颈;我们应当为每秒钟数第 1 页,共 8 页- - - - - - -精选学习资料 - - - - - - - - - 十亿的查询做好预备;让我们对我们的数据进行分类:a主要的数据或静态形式的数据,如用户资料b语义数据c用户产生的内容数据d会话数据找到一个高效的数据储备方式,满意全部这些类型的数据,真的很难;因此, 我们将为每个数据类型挑选特定的数据储备方式;静态数据: 对于静态数据,最好是挑选基于文档的储备方式,其中键和值都是可查询的;我们可以挑选
4、如 MongoDB 这种文档型数据库,挑选 MongoDB 最大的优势是它供应了在文档级别的 ACID;MongoDB 可以在多个分布式数据中心的范畴内进行缩放;它将答应我们使用副本集来保持冗余,从而解决我们的可用性问题;数据分片是一个重要的考虑因素,数据分片可以确保数据的扩展与查询速度;幸运的是,MongoDB 透亮的支持了数据分片;关联的或关系数据核心数据:我们大部分数据本质上是关联的,例如,A 是 B 的伴侣, C是 A 和 B 的伴侣,这样高度语义的数据最适合图处理模型;我们应将这样的数据储备在图数据库,如 Neo4j;这样做的优势很明显;我们可以储备全部关联数据的节点,从而节约了运算
5、数据之间连接关系的额外步骤;图形数据模型也将有助于我们捕获到属性之间的关系;当试图探究关联数据时,丰富的属性关系肯定是关键;图数据库支持 引;ACID 规章以及自动索再次声明, 我们的要求是到达可用性和可扩展性;我们可能会有成百上千的并发事务,同时写入数据库, 同时会有数百和数千查询恳求;它应当能够处理一个数据集上的很多字节,超过十亿每秒的读取速度;我们将会需要一个系统,帮忙我们自动伸缩写入和读取;其他需要考虑的因素是数据分片,这是系统可伸缩的关键;Neo4j 已经被设计为可水平扩展,并且有数据冗余功能来保证可用性;但到目前为止,它仍不支持数据分片;我们可能需要更多的分析,才能做出选择;其他可
6、供挑选的图数据库有FlockDB、AllegroGraph 和 InfiniteGraph ;二进制数据 UGC:我们仍必需处理大量的与用户相关的二进制数据;处理二进制数据不名师归纳总结 - - - - - - -第 2 页,共 8 页精选学习资料 - - - - - - - - - 太简洁,考虑到它们的规模;上面已经争论过,我们需要一个系统可以运行相当高的性能,秒级别尖峰 ,当打算在哪里储备时,可伸缩和可用性是最关键的素;我们不能依靠磁盘 文件系统来储备我们的二进制数据;我们必需考虑可用性和可扩展性,文件系统的缓存会消 耗大量的 CPU;相反的,我们应当依靠一个现有的可用的系统,例如亚马逊
7、S3,S3 是特别 流行的对象储备系统,具有可用性和弹性储备;我们也可以考虑谷歌云储备或Rackspace 的云文件等,但S3 好像是明显的赢家,它供应更优质的服务;S3 已经支持数据分区;S3能够水平伸缩,冷热数据拆分,并依据keys分区;但是只实现存储数据是不够的,与这些内容相关的元数据必需能够被搜寻,并且搜寻可伸缩,速度够快;我们也可以尝试一些新的东西,如图像的自动维度识别,基于内容自动打标签等;这是一个潜在的学问产权领域; 我们将在文章的索引部分争论索引需求;我们将用标识符储备内容,并且在某个地方做了索引;好像亚马逊的Session数据但现在,让我们只需要留意,S3 最适合这种情形;正
8、确的熟悉和懂得session 数据是特别重要的;Session 数据将帮忙我们保持用户的状态;Session 数据必需使用与服务器无关的方式,便利我们服务端可伸缩部署;这将有助于保持我们的设计敏捷,确保 session 不会绑定到特定的节点或服务器;我们得用一种新的方式来更新用户的实际 session,假如用户的 session 终止,我们仍旧可以帮忙用户从一个地方,他离开的地方重新复原信息;这是特殊重要的,在我们的场景中,连接是不行靠的,数据丢包是很正常的;数据必需能够被跨节点拜访,因此需要可用性和可扩展性;我们可以很好的使用 MongoDB 本身来储存数据;后来,我们想转移到纯粹的键值储备
9、,如 Redis;注:全部举荐和离线作业都应当只运行在非服务节点上;索引索引是我们系统的关键;用户可以搜寻任何内容,这是我们的主要用例之一;为了提升搜寻性能,我们必需特别仔细地对待索引;这里有两点需要考虑:第一是,创建索引本身,然后就是索引系统本身;为了做一个有意义的搜寻系统,我们必需设计一个实时索引,针对一段时间窗口的实时数据进行处理;第一,我们可以写一个特别简洁的系统,对产生的内容数据做倒排索引;后来,随着输入数据的增加,我们可以便利地用实时数据处理引擎取代它,如 Apache 的 Storm,这是一个分布式的,容错和高度可扩展的系统;它可以负责生成索引的规律;索引系统:由于Lucene
10、受欢送程度和其性能,因此,Lucene 是一个显而易见的好挑选;它的性能是无与伦比的;我们可以使用 的容错;SolrCloud;它已经透亮的支持分片,复制和读写方面名师归纳总结 - - - - - - -第 3 页,共 8 页精选学习资料 - - - - - - - - - 队列 &消息推送每次我们的应用程序被触发一个大事,我们将需要向他/她的追随者 /伴侣推送消息;重要的是,我们的系统不能错过任何这些信息,更重要的是,能够在发生故障时复原这些大事;为了到达这些要求,我们必需查找一个队列解决方案;我们可以使用 的队列软件;它支持集群的高可用性,支持分布式队列;ActiveMQ ,这是最牢靠消息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 社交 网站 功能 架构
限制150内