从一台服务器扩展到多台服务器

时间:2014-03-15 11:16:03

标签: database-design cloud scalability sharding

让我们假设我正在运行两台服务器:一台用于网站,另一台用于数据库 显然,两个服务器都会出现瓶颈。

  • 此时需要做什么?有没有最好的做法?
  • 使用AppEngine,Appfog等云端云服务有哪些优势?

我是这个区域的新手所以请耐心等待:)。

2 个答案:

答案 0 :(得分:5)

您的应用程序有2层,App服务器层(用于Web站点)和DB的数据库层。缩放这些中的每个都会产生很多不同的后果。通常,缩放app服务器层很容易,特别是如果你不存储状态(即每个请求是独立的)。您可以在应用服务器层前使用负载均衡器,并根据需要添加/删除应用服务器。

扩展数据库层是一个更大的讨论,需要您评估。这取决于您使用的数据库类型(例如,MySQL或像MongoDB这样的NoSQL / Document引擎)。较新的NoSQL / Document引擎提供了扩展,如果您只需要一次独立访问一件事,比如一个对象或一个文档,那么这对许多应用程序都很有效。如果您需要有保证交易的关系数据,那么请说因为您有购物车,那么使用这些工具会更具挑战性,而关系数据库与交易是更典型的选择。

要扩展关系数据库,第一步通常是使用只读从属进行负载平衡,这是主服务器的重复(通过复制),您可以将更重的读取指向从属。通常不保证从站始终是最新的,因此如果它们稍微落后(例如长时间运行的报表类型查询或对数据没有太大变化的查询),则需要将读取发送到从站。 )。

之后需要一个完整的扩展解决方案,并且有很多方法可以解决这个问题。有些人会自己推出自己的"解决方案和其他是商业的。通常,如果您有非常繁重的写入负载并且无法再使用更大的数据库服务器,或者您需要分发大量数据(通常将100个GB分配给多个TB),则需要这样做,并且您需要对该数据进行快速查询。这是一个很大的主题,但你可以看看各种解决方案。我会说我们是这样的供应商,所以我有偏见:),但是如果你需要在成长过程中采取这种方式,你真的应该学到更多。

最好的建议是先做更简单的事情,并为满足您需求的数据库层规划更长期的可扩展性策略。

答案 1 :(得分:2)

如果您正在考虑可以轻松扩展/缩小Web服务器/数据库的服务,我建议您查看一个PaaS,您可以轻松地使用此方法每次为您使用的服务付费。否则,您必须通过负载均衡器实现该机制,您可以在其中创建应用程序的多个实例,但是您必须管理诸如粘性会话等困难的事情。

对于数据库,ClearDB(MySQL),MongoHQ(Mongo)或ElephantSQL(PostgreSQL)可以轻松完成这项工作。它们允许您扩展/缩小数据库。随意寻找更多的提供商,因为这些是我所知道的。您可以在互联网上找到更多信息。

关于您的Web应用程序,PaaS可以为您提供纵向或横向扩展应用程序的好处,而无需考虑负载均衡器,粘性会话或升级过程。某些PaaS还允许您根据某些参数(例如您的请求数量)自动扩展您的应用程序。请参阅here以及here此示例。

请注意,您也可以在IaaS或您自己的基础架构上自行实现所有这些,但在这种情况下,我们需要有关您正在寻找的内容的更多信息。我只是给你一个方法,你可以使用你需要的服务而不实现它。