如果只为计算资源付费,在Amazon云上部署业务可以实现高拓展性。但是要怎样利用Amazon的相关技术才能获得最好的可拓展性呢?
1.使用自动缩放(Auto-scaling)
Amazon EC2提供自动缩放这一云计算独有的特性。我们可以像往常一样为应用程序设置一个负载均衡器和一些Web服务器。基于AMI模板设计Web服务器,这个模板会多次复用。然后设置自动缩放,并根据我们预测的流量设置阈值。一旦流量超过了阈值,AWS将创建一个新的Web服务器实例,并自动将其加入到负载均衡器的资源池中。一旦流量低于阈值,Amazon将自动从资源池中移除一台服务器。
注意监控这个行为什么时候启动,并且跑一些负载和压力测试。需要确保它能够像我们预料的那样工作。不应该存在异常的情况使得创建无谓的服务器实例。
2.水平缩放数据库层(Horizontally Scale the Database Tier)
MySQL为此提供了许多解决方案。你可以将MySQL配置在主动-被动模式的Master-Maste集群(master-master active passive cluster)中,这种集群结构也被称为循环复制。在这种配置下,MySQL将把所有完成的事务发送到集群中的其他服务器。因此,你的被动服务器也可以处理应用程序的读流量。在实现高可用性的同时,通过将大部分SELECT流量发送到另一个服务器,也可以兼顾可扩展性。
随着负载的进一步增长,我们只需要再加入一个额外的只读slave服务器。这样一来服务器处理读请求的能力就增强了。在执行此操作时,所有写请求仍然可以持续发送到单个活动的主数据库。
或者,你可能会希望采用基于MySQL社区服务器的Amazon RDS解决方案,但是对服务器的设置作出一些限定。在这个配置中,人们将不能使用诸如Percona的高速服务器之类的备用MySQL发行版。这个配置提供的是多az配置( multi-az configuration)。请记住,任何你启动的MySQL服务器都将有一个Region(译者注:Region指服务器所在的地理区域,比如美洲区,日本区)和Availability Zone(译者注:比Region更小的概念,通常是指某一台AZ)作为其配置的一部分,所以我们可以使用Amazon网络的这些特性来提高可用性。
如果单个主数据库上的负载仍然是个问题,那么我们可以垂直扩展该节点。通过在EBS根卷上开辟一个更大的新EC2实例,我们可以完成此操作。然后解挂这个根卷,停止旧实例,解挂旧实例的根卷,并将其移到新的服务器。一旦你附加了这个活动的根卷,更大的EC2新实例就和你原来的服务器一样了,只是它的容量变得更大了!
3.使用分区的EBS卷
EBS可是个了不起的的技术,它使每个EC2实例的存储区域网络变得更加灵活。虽然这个技术本身也有难题需要解决。同时使用这个技术可能会使得在磁盘I / O吞吐量上有很大的波动,这对数据库层来说是一个很大的挑战。请注意,Amazon的基础架构虚拟化层将根据实例的大小调整实例磁盘的I / O吞吐量。
获得更好的EBS性能的另一个方法是使用Linux的软件RAID技术。由于EBS已有内置冗余,我们可以在多个EBS卷上使用striping(译者注:其实就是RAID 0) 或RAID 0 —— 推荐使用4个。
这样的配置需要格外小心,因为现在每个EBS卷不会自己运作了,但RAID 0却要求全部四个卷都是完整的。同时,这也会影响EBS快照备份。