从一台服务器扩展到多台服务器
Posted
技术标签:
【中文标题】从一台服务器扩展到多台服务器【英文标题】:Scaling from one server to multiple servers 【发布时间】:2014-04-20 19:26:13 【问题描述】:假设我正在运行两台服务器:一台用于网站,另一台用于数据库。 显然,两台服务器都会出现瓶颈。
此时需要做什么?有什么最佳做法吗? 使用AppEngine、Appfog等云服务有哪些优势?我是这个区域的新手,所以请耐心等待:)
【问题讨论】:
云将为您提供自动伸缩、负载均衡和高可用能力。所有其他详细信息取决于您选择的提供商。 【参考方案1】:如果您正在考虑一种可以轻松扩展/缩减 Web 服务器/数据库的服务,我建议您查看 PaaS,您可以轻松地通过这种方法为每次使用的服务付费。否则,您必须通过负载均衡器来实现该机制,您可以在其中创建应用的多个实例,但随后您必须管理棘手的事情,例如粘性会话。
对于数据库,ClearDB (mysql)、MongoHQ (Mongo) 或 ElephantSQL (PostgreSQL) 可以轻松完成这项工作。它们允许您扩大/缩小您的数据库。随意寻找更多的供应商,因为这些是我知道的。您肯定会在 Internet 上找到更多信息。
关于您的 Web 应用程序,PaaS 可以为您提供垂直或水平扩展应用程序的好处,而无需处理负载平衡器、粘性会话或升级过程。一些 PaaS 还允许您根据某些参数(例如您的请求数量)自动扩展您的应用程序。请参阅 here 和 here 的示例。
请注意,您也可以在 IaaS 上或通过您自己的基础架构自行实现所有这些,但在这种情况下,我们将需要有关您正在寻找的内容的更多信息。我只是在为您提供一种方法,您可以在不实施的情况下使用您需要的服务。
【讨论】:
【参考方案2】:您的应用程序有 2 层,即应用服务器层(用于网站)和数据库层用于数据库。缩放其中的每一个都会产生不同的后果。一般来说,扩展应用服务器层很容易,特别是如果您不存储状态(即每个请求都是独立的)。您可以在应用服务器层前使用负载均衡器,并根据需要添加/删除应用服务器。
扩展数据库层是一个更大的讨论,您需要评估。这取决于您使用的数据库类型(例如,MySQL 或像 MongoDB 这样的 NoSQL/文档引擎)。较新的 NoSQL/Document 引擎提供了可伸缩性,并且适用于许多应用程序,如果您一次只需要独立访问一件事,例如一个对象或一个文档。如果您需要具有保证事务的关系数据,比方说因为您有一个购物车,那么使用这些工具可能会更具挑战性,而具有事务的关系数据库是更典型的选择。
要扩展关系数据库,第一步通常是使用只读从属服务器进行负载平衡,这是主服务器的副本(通过复制),您可以将较重的读取定向到从属服务器。从站通常不能保证始终是最新的,因此您需要将读取发送到从站,如果它们稍微落后一点就可以了(例如长时间运行的报告类型查询,或对变化不大的数据的查询)。
之后需要一个完整的扩展解决方案,并且有很多方法可以解决这个问题。有些是“自己动手”的解决方案,有些是商业的。通常,当您有非常重的写入负载并且无法再使用更大的数据库服务器时,或者您需要分发大量数据(通常是 100 GB 到许多 TB),并且您需要对这些数据进行快速查询时,就需要这样做.这是一个很大的主题,但您可以查看各种解决方案。我会说我们是这样的供应商,所以我对此有偏见:),但如果你在成长过程中需要走这条路,你真的应该了解更多。
最好的建议是先做更简单的事情,然后为满足您需求的数据库层制定长期可扩展性策略。
【讨论】:
以上是关于从一台服务器扩展到多台服务器的主要内容,如果未能解决你的问题,请参考以下文章