部署在亚马逊的云服务器中被认为是实现高可扩展性的好方法,同时只需要为您所使用的计算能力支付费用。不过您要如何从技术中获得最佳的可扩展性呢?
自动缩放是云计算,特别是亚马逊 EC2 提供的独特功能。只需要像往常一样为您的应用程序设置一个负载均衡器和一些网页服务器。将您的网页服务器保存为模板 AMI。然后设置自动缩放并根据您预测的流量设置阈值。当流量超过阈值时,AWS 将启动一个或多个 Web 服务器的新实例,并自动将其添加到负载均衡器池中。一旦流量低于一定的阈值,亚马逊将会为您关闭一些不再需要的服务器。
记得对自动缩放进行监控,并运行一些负载和压力测试。你要确保它像你期望的一样工作,同时没有什么异常的情况会导致你启用不必要的服务器。
这里 MySQL 提供了许多解决方案。您可以将 MySQL 配置为多主被动集群(也称为循环复制)。在这种配置中,MySQL 将把所有完成的事务发送到集群中的其他数据库服务器。您的被动服务器也可以处理您的应用程序的读取操作。在实现高可用性的同时,通过将大部分选择(SELECT)操作发送到另一个服务器,您也可以获得可扩展性。
随着负载的进一步增长,你可以启用更多的只读的从数据库。在执行此操作时,您需要将所有写入请求发送到单个主数据库以保障数据一致性。
或者,您可能希望采用基于 MySQL 社区版服务的 Amazon Relational Database Service (Amazon RDS)解决方案,但会受到一些限制。在 RDS 中,你将不能使用诸如 Percona 之类的备用 MySQL 发行版。RDS 提供的是多可用区配置。请记住,任何你启动的 MySQL 服务器都将有一个区域和可用区作为其配置的一部分,所以你可以自由使用 Amazon 的这些功能来提高可用性。
如果主数据库上的负载继续存在问题,那么可以垂直扩展该节点。创建一个新的更大的 EC2 实例并将 EBS 卷挂载上去,然后停止您的旧实例。此时你的新 EC2 实例将替代你原来的服务器。
EBS(Elastic Block Store,弹性区块存储)是一项非常棒的技术,因为它为每个 EC2 实例提供了一个灵活的存储网络。但这并不是完美的,有时你会发现磁盘 I/O 吞吐量上发生很大的变化。这对数据库应用来说会是个很大的问题。亚马逊的虚拟化基础架构会根据实例的大小提高或降低实例的磁盘 I/O 性能。
另一个获得更好的 EBS 性能的方法是使用 Linux 的软 RAID(Redundant Array of Independent Disks,独立磁盘冗余阵列)技术。由于 EBS 内置数据冗余,因此您只需要简单地在多个 EBS 卷上建立 RAID 0 - 我们推荐使用 4 个 EBS 卷。
在进行这样的配置时要当心,因为现在每个 EBS 卷都不能自行工作,但要求全部四个 EBS 卷同时工作。这同时也会影响 EBS 快照备份。