1. 概述
现代生活中已经离不开网盘,比如百度网盘。在使用网盘的过程中,有没有想过它是如何工作的?在本文中,我们将讨论如何设计像百度网盘这样的系统的基础架构。
2. 系统需求
2.1. 功能性需求
- 用户能够上传照片/文件。
- 用户能够创建/删除目录。
- 用户能够下载文件。
- 用户能够共享上传的文件。
- 能够在所有的用户设备之间同步数据。
- 即使网络不可用,用户也能上传文件/照片,只是存储在离线文件中,当网络可用时,离线文件将同步到在线存储。
2.2 非功能性需求
-
可用性: 指系统可用于处理用户请求的时间百分比。我们通常将可用性称为5个9、4个9。5个9意味着 99.999% 的可用性,4 个9意味着 99.99% 的可用性等。
-
持久性: 即使系统发生故障,用户上传的数据也应永久存储在数据库中。系统应确保用户上传的文件应永久存储在服务器上,而不会丢失任何数据。
-
可靠性: 指系统对于相同输入给出预期的输出。
-
可扩展性: 随着用户数量的不断增加,系统应该能处理不断增加的流量。
-
ACID: 原子性、一致性、隔离性和持久性。所有的文件操作都应该遵循这些属性。
- 原子性:对文件执行的任何操作都应该是完整的或不完整的,不应该是部