1.5 小结

我们在本章实现了一个单机版的对象存储服务,它提供了对象的PUT和GET方法。当客户端以PUT方法访问我们的服务时,客户端会提供对象的名字和内容,我们的服务就可以把对象的内容以文件的形式存储在服务器的本地磁盘上

我们在本章实现了一个单机版的对象存储服务,它提供了对象的PUT和GET方法。当客户端以PUT方法访问我们的服务时,客户端会提供对象的名字和内容,我们的服务就可以把对象的内容以文件的形式存储在服务器的本地磁盘上;当客户端以GET方法访问我们的服务时,我们就可以从服务器的本地磁盘上读取文件的内容并将其作为 Http的响应输出。

这样一个单机的对象存储服务离我们最终要实现的版本还很远,它只是一个热身,让我们熟悉一下使用的方式。我们最终的目标是要实现一个云版本的对象存储。那么,相比一个云版本的对象存储来说,目前的单机版最大的问题是什么呢?

答案是可扩展性!

分布式对象存储服务必须是可扩展的,当现有的服务器集群无法满足容量、吞吐量、时延等性能指标时,我们必须能够轻易扩展现有的服务器集群。在单机版的架构中,接口和数据存储被紧紧耦合在一起,服务器只能访问本地磁盘。当一台服务器无法满足日益增长的HTTP客户端请求数量时,我们将无法通过加入一个新的服务器来扩展集群,因为新的服务器无法访问旧服务器的磁盘。

在下一章,我们会把接口和数据存储解耦合,分离成专门的接口服务和数据服务。接口服务器可以自由访问任何一台数据服务器。当HTTP请求增长时,我们可以加入新的接口服务器,保持数据服务器不变。而当数据存储渐满或磁盘IO负载过高时,我们可以加入新的数据服务器,保持接口服务器不变。