本文提供了一些数据分片的一些原则和经验,遵循这些提示,有助于确保数据正确的分片,而不是阻碍你的应用程序的可扩展性。
新的 SaaS 初创公司很少考虑如何扩展他们的应用程序。当然,他们会设想有一天他们会需要扩张,并将纳入计划,但他们很少在早期就为可扩展性设计他们的应用程序。相反,他们更经常关注于完成他们可以销售的功能。
但是,考虑扩展的时间应该在最开始的时候–在你的第一个客户注册你的服务之前。随着公司推出一个又一个的功能,并且客户不断注册,业务就会增长。随着业务的增长,扩展最终成为一个关注点。
当一个新的SaaS服务遇到资源容量限制时,特别是数据访问资源容量,扩展的需要往往变得很明显。通常情况下,不管是什么技术,数据库都太小了,无法满足不断增长的需求,而且无法扩展到一定程度。
无论你使用什么数据库技术,也无论你投入多大的服务器或其他基础设施来给自己留出发展空间,这个问题都会发生。迟早有一天,你会遇到扩展问题。
一旦扩展资源需求变得非常紧迫,并且需要认真做出的扩展决定,进行数据分片:将你的数据划分到多个并行数据库中,每个数据库持有你的业务部分。这通常是被引入的早期解决方案之一,以扩大你的应用程序的扩展能力。把数据分成多个部分,似乎是解决数据资源问题的一个简单解决方案。如果一个数据库太小,无法处理你的流量,让我们试试两个,或三个,或四个!这就是分片。 一旦你将你的应用数据分片,继续使用同样的方法进行扩展似乎非常简单。随着你的流量增长,只需向你的应用添加更多的并行数据库。 让我们仔细看看分片,以及如何用它来解决早期的数据库扩展问题。
1. 分片例子
究竟什么是分片?一个典型的 SaaS 用例涉及到客户与一些应用程序对话,然后利用存储在数据库中的数据。
随着客户数量的增加,应用程序的负载也在增加。通常,通过添加更多的服务器来处理负载,增加应用程序的容量是相对容易的。
然而,一旦你达到一定数量的客户,你的扩展限制突然变成了你的数据库。你的数据库不能有效地处理更多的客户,而你的应用程序最终会出现可用性问题、性能问题和其他问题。这在图1中得到了说明。