我正在开发一个广泛使用数据库的iOS应用程序,用户可以将他们的数据同步到服务器。 不过,如果有太多的用户开始使用这个应用程序,那么这个服务器将不再能够处理这个事件。 我根本不是一个服务器的人,而且我不太熟悉它是如何工作的,但是我的问题是,为什么服务器会超载,怎么能防止呢? 这是否与我的服务器主机是谁? 或者是关于我的代码的效率? 如果我的主机是可靠的服务器,例如Amazon AWS,那么我是否仍然面临服务器问题的风险? 底线是,这是否与我执行我的代码的方式有关,还是与我的主人是谁?
这是一个非常模糊的问题。 他们失败了,因为……你超负荷,他们没有能力处理你所投的东西。
想想这样。 如果发生火灾,是用花园软pipe,水枪还是油jar车把它们拿出来? 他们中的任何一个都能扑灭小火。 大火需要更多的能力。
你如何预防呢? 你testing。 你计划预计的负载。
如果您正在谈论数据库,那么如果您的负载预计超出您可以处理的范围,则可以与数据库人员交谈。 您需要计划如何拆分表格,以便可以将其分配到多个服务器上,计划分片,可以设置只读服务器以帮助读取,主/从设置…或者查看底层技术,看看一个“NoSQL”服务器替代scheme能否更好地处理您的需求。 你看看数据请求来自哪里,看看你是否可以分配你的服务器在地理上更有利于用户的请求。
没有一个答案,因为它完全取决于你的应用程序做什么,它处理的数据的types,以及你从数据库中提取什么。
编辑 – 你问具体关于亚马逊,如果有危险那里。 亚马逊就像乐高。 你可以使用他们的工具来构build健壮的实现,当然…你会付出额外的代价。 或者,您可以将其全部运行并将其绑定到其专有数据库系统。 你可以让你的应用程序“工作”,但它可能不完全健壮。 再加上亚马逊并不神奇。 实例降级,死亡而没有警告,等等…所以要回答你的问题的一部分,是的,使用亚马逊时,你的数据仍然处于危险之中,除非你围绕着可能的失败而devise。 您可以将跨多个区域的多个数据库服务器设置为故障转移,这会变得非常复杂。 这就是为什么有人支付六位数字才能与数据库合作。 他们围绕这些问题谋生,亚马逊没有独立自主的动力……他们确实有失败。
这很一般。 有可能:
服务器可能由于加载而失败还有其他几个原因,但这些原因涉及很多情况。 它们还涵盖了服务器的性能,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。 祝你好运!