2012-03-04 92 views
0

约我目前的状况一点点:我应该使用哪些技术来创建高性能的可伸缩Web应用程序?

  • 我OOP PHP体面的知识

  • 我的MySQL,一个体面的理解,这是我的选择(主要是因为它是所有的数据库我知道)

  • 我的Symfony2 +学说

  • 我现在坐的一个很好的理解e使用Elastica(弹性搜索的PHP库)...虽然我注意到结果与facebook搜索相比很慢。

  • 我使用jQuery的前端开发

  • 我有HTML/CSS的一个坚实的理解

  • 我主持我的网站在Amazon EC2上

我有一个我想回答几个具体问题

随意添加其他任何东西你觉得会有所帮助。我的主要目标是学习创建高性能企业应用程序的最新技术。另外,我很好奇我会注意到多少性能提升,比如升级我的亚马逊盒子。 Andddd,对于以下问题:

  1. Facebook如何快速返回他们的搜索结果,并且几乎是在输入时立即输入?

  2. Facebook如何在聊天窗口之上实现其状态更新。我可以轻而易举地将一些东西拼凑在一起,每5秒钟调用一次后端脚本并更新UI,但我不确定我会遇到什么类型的性能问题,或者这是甚至Facebook如何做。

  3. facebook状态更新如何汇总并仅与朋友相关和/或订阅源偏好。

  4. MySQL不再是速度和可伸缩性选择的数据库吗?

  5. 我应该查看和阅读哪些资源和书籍?我花了每天阅读有关我已经使用的东西......但我想更好地把精力集中在潜在的更有用的东西上。

  6. 一般来说,什么技术,包括语言,服务器和数据库“栈”将被用于创建类似Facebook的(请注意,我不希望建立一个社交网站)

  7. 是使用像symfony2这样的框架,而不是编写定制的定制解决方案,性能会受到很大影响吗?(我知道代码的质量明显的问题,但总的来讲)

如果你没有回答所有这些,数三,四,五可能是最重要的。

在此先感谢。快乐的编码。

回答

2

可伸缩性是关于数据的位置,它是如何检索以及如何更新的。实现语言几乎无关紧要。

如果您有一个真相源,它会立即成为瓶颈。这可能不会那么糟糕。如果瓶颈是5万QPS,那么您可能不需要修复它一段时间。

你问很多关于Facebook,然后解释说你不想建立一个。缩放系统完全是关于选择适合您尝试提供的数据的设计。所以除非你给我们提供一些你想要构建的想法,否则帮助你设计缩放比较困难。

作为一个微不足道但具体的例子,Google的websearch和GMail系统的数据存储设计完全不同。两者都非常快,但他们的设计是不同的,因为数据,它的使用模式,更新和它的特点都非常不同。

要开始数据设计过程,首先需要了解您需要的数据。然后想想

  1. 全局一致性 - 是否所有用户都需要查看数据的一致视图?如果是这样,缩放将非常困难。 (想想Facebook,GMail和Stackoverflow--在这些情况下,我们不需要看到数据的即时一致视图)。

  2. 耐用性 - 是否可以接受丢失更新?如果不是,那么在告诉调用者请求已完成之前,您需要坚持所有数据(在硬件丢失不是问题的不同位置,记住您不愿意丢失更新)。

  3. 性能 - 用户的性能需求是什么?

在大多数系统中,你只能设计得到这三件事中的两件,而你必须牺牲第三件才能做到这一点。

绘制您的设计图。指向它上面的每个盒子(一个盒子可以是计算机,路由器,数据库实例,磁盘,内存数据结构等,但不是表格或数据库行)。问,“我们有多少,最多?”如果答案是“1”,那么你的设计是不可扩展的。如果答案是“尽可能多,但他们需要同步”,那将是您的缩放挑战;再看看上面编号的点。

+0

这真的让我思考。我的应用程序中有一些区域应该具有全局一致性。这通常是用某种类型的javascript计时器完成的,该计时器根据特定条件检查后端是否有新的更新。有一个领域我很想了解更多。也就是说,Facebook的搜索如何几乎瞬间恢复(并在输入时检索结果?) – ThinkingInBits 2012-03-04 15:59:14

+1

我认为您误解了全球一致性。这是系统的属性,在任何给定时刻的所有外部交互都会显示相同的数据视图。例如,您和我在同一天(例如)在10:00:00.000处查看(比如说)Twitter,并且必须看到相同的Tweets。相反,如果我在8秒之后才看到用户@foobar发布的最新推文,只要我确实能够看到它,会造成什么样的危害?用户通常更关心性能和数据持久性。 – 2012-03-05 23:10:36

相关问题