为什么服务器在大量stream量后停止运行?

我正在开发一个广泛使用数据库的iOS应用程序,用户可以将他们的数据同步到服务器。 不过,如果有太多的用户开始使用这个应用程序,那么这个服务器将不再能够处理这个事件。 我根本不是一个服务器的人,而且我不太熟悉它是如何工作的,但是我的问题是,为什么服务器会超载,怎么能防止呢? 这是否与我的服务器主机是谁? 或者是关于我的代码的效率? 如果我的主机是可靠的服务器,例如Amazon AWS,那么我是否仍然面临服务器问题的风险? 底线是,这是否与我执行我的代码的方式有关,还是与我的主人是谁?

这是一个非常模糊的问题。 他们失败了,因为……你超负荷,他们没有能力处理你所投的东西。

想想这样。 如果发生火灾,是用花园软pipe,水枪还是油jar车把它们拿出来? 他们中的任何一个都能扑灭小火。 大火需要更多的能力。

你如何预防呢? 你testing。 你计划预计的负载。

如果您正在谈论数据库,那么如果您的负载预计超出您可以处理的范围,则可以与数据库人员交谈。 您需要计划如何拆分表格,以便可以将其分配到多个服务器上,计划分片,可以设置只读服务器以帮助读取,主/从设置…或者查看底层技术,看看一个“NoSQL”服务器替代scheme能否更好地处理您的需求。 你看看数据请求来自哪里,看看你是否可以分配你的服务器在地理上更有利于用户的请求。

没有一个答案,因为它完全取决于你的应用程序做什么,它处理的数据的types,以及你从数据库中提取什么。

编辑 – 你问具体关于亚马逊,如果有危险那里。 亚马逊就像乐高。 你可以使用他们的工具来构build健壮的实现,当然…你会付出额外的代价。 或者,您可以将其全部运行并将其绑定到其专有数据库系统。 你可以让你的应用程序“工作”,但它可能不完全健壮。 再加上亚马逊并不神奇。 实例降级,死亡而没有警告,等等…所以要回答你的问题的一部分,是的,使用亚马逊时,你的数据仍然处于危险之中,除非你围绕着可能的失败而devise。 您可以将跨多个区域的多个数据库服务器设置为故障转移,这会变得非常复杂。 这就是为什么有人支付六位数字才能与数据库合作。 他们围绕这些问题谋生,亚马逊没有独立自主的动力……他们确实有失败。

这很一般。 有可能:

  • 由于并发操作冲突导致的竞争条件(这可能是由于较差的服务器软件devise造成的)
  • 导致服务器在超时时间内无法响应
  • 比服务器可以处理更多的TCP连接
  • networking带宽饱和
  • 大量线程或进程或内存分配导致服务器内存不足

服务器可能由于加载而失败还有其他几个原因,但这些原因涉及很多情况。 它们还涵盖了服务器的性能,networking链接,一般可靠性以及正在运行的服务器软件。

why do servers get overloaded and how can that be prevented? 

因为没有足够的资源来提供需求。 在后端有一个服务器可以通过HTTP请求重载,例如,在eccense中,会导致拒绝服务。

您可以通过使用像Apache这样的工具来面向您的服务来防止这种情况,并使用负载均衡器以较less的负载将请求分发到空闲的服务器或服务器。 数据库也可以做同样的事情,水平或垂直缩放(分片)

 Does it have to do with who my server host is? Or is it about the efficiency of my code? 

更多与您的服务器主机,但代码也可以导致它。

 If my host is a reliable server, such as Amazon AWS, am I still at risk for server problems? 

取决于谁负责设置您的servlet容器以及如何configuration它来提供请求。 不过,我不熟悉AWS,因此无法在此给出足够的答案。

 Bottom line is, does it have to do with the way I implement my code, or does it have to do with who my host is? 

DOS通常是由于主机端缺乏资源。 但是,如果代码编写和devise的不好,也会造成这种情况。

例如,如果你在PSQL中编写了太多的控制器/业务逻辑,你可能会重载数据库,并阻止查询及时返回,从而导致DOS。

你也可以编写在数据库上使用过多连接的代码,并且有一个连接不再提供导致DOS的问题。

这两个例子不一定是资源缺乏的问题,更重要的是不能有效利用所使用的工具。 双方都很重要,有很多方法可以遇到DOS。

但是,一个初步devise好的模型可以让你走很长的路。 如果您不确定如何devise您的代码,我将首先检查MVC和SOA。 祝你好运!