架构设计摘要:本篇文章会向读者展示几个架构设计的关键点,使一个社交应用能够成为真正的下一代社交产品。但这只是设计阶段,需要更深入的分析和了解系统的当前状态。本篇文章会向读者展示几个架构设计的关键点,使一个社交应用能够成为真正的下一代社交产品。以下几个属性将会影响到架构的设计:a)可用性b)可扩展性c)性能和灵活性可扩展目标a)确保用户的内容数据能够很方便的被其他用户发现和获取.b)确保内容推送是相关的,不仅在语义上,也是从用户设备的角度。c)确保实时更新生成、推送和分析。d)尽可能地节省用户的资源。e)不论服务器负载变化如何,用户体验应保持不变。f)确保应用整体上是安全的总之,我们要处理一个相当大的挑战,我们必须处理不断扩大的海量用户生成的内容数据,不断增长的用户,和一个不断迭代的新项目,同时必须确保性能足够出色。为了应对上述的挑战,我们必须学习架构某些关键的元素,这将影响到系统的设计。以下是一些关键的决定和分析。数据存储数据和数据模型的存储是一个好架构的关键设计之一。一个社交产品应该能够处理多种类型的数据,因此首先得充分分析数据并透彻理解,之后再设计数据模型和数据存储。第一步,我们要确定哪些数据是经常查询的热点数据,哪些不是经常需要的那些数据(如归档数据用于分析)。对于高频访问的数据,它必须总是可用,能够快速读写和水平可扩展。目前我们所有业务场景使用的都是 MySQL,即使我们的用例不一定需要使用关系数据库系统。随着我们数据的增长,我们的读写将成为我们应用程序性能瓶颈。我们应该为每秒钟数十亿的查询做好准备。让我们对我们的数据进行分类:a)主要的数据或静态形式的数据,如用户资料b)语义数据c)用户产生的内容数据d)会话数据找到一个高效的数据存储方式,满足所有这些类型的数据,真的很难。因此,我们将为每个数据类型选择特定的数据存储方式。静态数据:对于静态数据,最好是选择基于文档的存储方式,其中键和值都是可查询的。我们可以选择如 MongoDB 这种文档型数据库,选择 MongoDB 最大的优势是它提供了在文档级别的 ACID。MongoDB 可以在多个分布式数据中心的范围内进行缩放。它将允许我们使用副本集来保持冗余,从而解决我们的可用性问题。数据分片是一个重要的考虑因素,数据分片可以确保数据的扩展与查询速度。幸运的是,MongoDB 透明的支持了数据分片。关联的或关系数据(核心数据):我们大部分数据本质上是关联的,例...