关于我目前的情况:
我对OOP PHP有很好的了解
我对MySQL有一个很好的理解,这是我选择的数据库(主要是因为我知道这一点)
我对Symfony2 + Doctrine
我当前的网站使用Elastica(Elastic Search的PHP库)...虽然我注意到与facebook搜索相比,返回的结果相当慢。
我使用jQuery作为前端开发
我对html / css
我在亚马逊EC2上主持我的网站
我想回答一些具体问题
随意添加您认为有帮助的任何其他内容。我的主要目标是学习最新技术,以创建高性能的企业应用程序。另外,我很好奇我会注意到升级我的亚马逊盒子有多少性能提升。 Andddd,问题:
Facebook如何快速返回搜索结果,并且在打字时几乎立即返回?
Facebook如何在聊天窗口上方实现状态更新。我可以很容易地破解一起每隔5秒钟调用一个后端脚本的东西并更新UI,但我不确定我会遇到什么类型的性能问题,或者甚至知道facebook是怎么做的。
如何聚合Facebook状态更新并仅与朋友和/或Feed偏好相关。
MySQL不再是速度和可扩展性的首选数据库吗?
我应该查看和阅读哪些资源和书籍?我每天都在阅读我已经使用过的东西...但我希望更好地将精力集中在可能更有用的东西上。
一般来说,包括语言,服务器和数据库在内的“堆叠”技术将用于创建像facebook这样的东西(请注意,我不想创建社交网站)
< / LI>使用像symfony2这样的框架,而不是编写自定义的定制解决方案,是否有很大的性能损失? (我知道代码的质量显然很重要,但一般来说)
如果你对所有这些都没有答案,那么第三,第四和第五可能是最重要的。
提前致谢。快乐的编码。
答案 0 :(得分:2)
可伸缩性完全取决于数据的位置,数据的检索方式以及数据的更新方式。实现语言几乎无关紧要。
如果你有一个单一的事实来源,它会立即成为瓶颈。那可能不是那么糟糕。如果瓶颈是50,000 QPS,您可能暂时不需要修复它。
你问了很多关于Facebook的事情然后解释说你不想建立一个。扩展系统就是选择适合您尝试提供的数据的设计。因此,除非你给我们一些你想要构建的想法,否则帮助你设计scalling是相当困难的。
作为一个微不足道但具体的例子,Google的网络搜索和GMail系统的数据存储设计完全不同。两者都非常快,但他们的设计不同,因为数据,使用模式,更新和特征都非常不同。
要开始数据设计过程,请先了解您需要哪些数据。然后想想
全局一致性 - 所有用户是否需要查看数据的一致视图?如果是这样,缩放将非常困难。 (想想Facebook,GMail和Stackoverflow--在这些情况下,您和我不需要看到即时一致的数据视图)。
耐用性 - 丢失更新是否可以接受?如果不是,则在告知调用者请求已完成之前,您需要保留所有数据(在足够的不同位置,硬件丢失不是问题,记住您不愿意丢失更新)。
性能 - 用户的性能需求是什么?
在大多数系统中,你只能设计得到这三件事中的两件,你必须牺牲第三件才能这样做。
绘制您的设计图。指向它上面的每个框(一个框将是计算机,路由器,数据库实例,磁盘,内存数据结构等,但不是表或数据库行)。问,“我们有多少这样,最多?”如果答案是“1”,那么您的设计不可扩展。如果答案是“尽可能多的,但他们需要同步”,这将是您的扩展挑战;再看看上面的编号点。