我很想知道像Ning,SocialGo这样的平台是如何设计的。不是特别关于社交网络平台,而是通常允许用户构建类似网站的平台。
我的理解是,当用户注册时,他们会获得一个子域,通过该子域,他们的成员可以注册并访问该特定用户生成的站点。我想有一个共同的数据库结构,可以为每个生成站点的用户克隆。
我想知道当各个网站增长时它们将如何扩展。此外,如果他们引入了新功能,他们将如何将其纳入所有可用网站?例如,一个需要更改数据库结构的新功能,如何对所有现有站点进行更改?
呀。我想创造类似的东西。但是我想到了所有这些复杂性。如果有人经验丰富,那么这个复杂的人可以分享他们的知识。
感谢。
答案 0 :(得分:3)
猜测foo和酒吧公司的体系结构有点困难,但是......我的愿景是将您所选择的操作系统的虚拟化基础安装与您预先配置的令人惊叹的社交应用程序捆绑在一起它是自己的数据库集,或链接到主/从集群。
所以每当用户来到并注册一个新的socialapp克隆时,事情就会发生;您的系统通过基于您的模板创建全新的虚拟机来完成工作。这可能需要几秒钟来自动配置...好吧,如果社交网络摇摆,需要扩展;只需克隆一些其他虚拟机并将它们绑定在一起。 vips,cache,front-ends和一对主从数据库。你可以拥有所有人的模板。
请特别注意,此虚拟机不需要是完全正常运行的系统;您可以设法仅使用OpenVZ和朋友(FreeBSD Jails)等技术构建用户区。
同时查看http://www.opennebula.org。
这是我的简单2美分。我也在学习这个。
答案 1 :(得分:0)
扩展到很多用户的网站通常不使用关系数据库。不可能足够快地从关系数据库中提取数据,也不可能只有一个数据副本。
我不确切地知道他们是如何编程他们的系统的,但是猜测他们是如何做到的。
如果以Facebook为例,当您打开页面时,您会看到您的朋友在他们的墙壁和其他人墙上写下的东西。
这里的重点是,当你在墙上写字时,每个人都有一面墙,系统也会在你所有朋友的墙上写下相同的信息。因此,当您的朋友请求他的页面时,所有信息都在一个地方,非常快速返回。
在数据库端,数据库是名称/值对数据库。值部分中的内容可以是不同的版本并批量更新。 (将列添加到具有1亿行的关系表中可能会暂停表一段时间)