可伸缩架构(第2版):云环境下的高可用与风险管理
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

有状态服务—有数据的服务

如我们之前所述,当你希望存储数据的时候,显然应当将数据存储在尽可能少的几个服务和系统中,同时避免直接在服务之间暴露数据,减少服务之间对内部数据的了解。

但是,真相却往往并不是如此。

我们应当尽可能地将数据保存在本地。服务必须使用的数据应当存储在服务本地,而其他数据应当存储到其他服务器或者数据库中,离需要这些数据的服务越近越好。

将数据保存在本地能带来以下几点好处。

减小单个数据集合的体量

由于你的数据分散在多个数据集合中,每个数据集合的体量就会较小。越小的数据集合的体量意味着数据交互越少,这使得伸缩数据库变得更加容易。这种方式也被称为功能性分区,即将数据根据不同的功能进行拆分,而不是基于数据集合的体量。

本地访问

通常,当你访问数据库或者存储器中的数据时,都是在访问一条记录或者一段记录。很多时候,其实你并不一定需要其中的很多数据。通过将数据分散到多个数据集合中,减少了不必要的数据查询量。

优化访问方式

通过将数据分散到不同数据集合中,你可以对每个数据集合进行适当优化。例如,某个数据集合是否应当保存到关系数据库中,还是应当保存到键/值数据库中?

将你的数据与使用数据的服务相关联,可以创建一个更加具有可伸缩性的解决方案,以及一个更易于管理的架构,随着应用程序的扩展,你可以更轻松地扩展数据的需求。