我正在尝试创建一个分布式系统,其中包含移动应用程序、Web 用户面板和与数据库通信的 API。我希望用户能够从移动应用程序和网络用户面板上传个人资料图像,但是跨分布式系统存储图像的最佳和“正确”方法是什么?真的找不到任何描述该主题最佳实践的内容。
我知道文件路径应该在数据库中,图像应该在文件系统中。但该文件系统应该位于 API 服务器上还是在哪里?
执行图像托管等复杂操作的“正确”方法取决于预期流量和性能预期等因素。设计大型系统涉及很多权衡,因此最好确定系统的要求,以便做出满足这些要求的决策。
至于你的问题,这个图大致是正确的 - 你想要将上传图像的位置与图像本身分开存储。如果您希望您的解决方案更具可扩展性,一种方法是使用自己的 API 将文件系统转变为自己的服务。您可以将文件的哈希值存储在数据库中以引用它而不是其路径,然后通过向存储服务的 API 询问包含存储的哈希值的文件来从新存储服务请求该图像(或该图像的 URL) .
这样做更具可扩展性的原因是,当我们不要求每个文件在单个命名空间内都有关联的文件系统路径时,存储服务可以自由地成为自己的分布式系统。哈希是替换文件系统路径的良好候选者,但您可以根据需要提出自己的存储 ID 方案。
但是,这可能远远超出了您尝试设计的范围。如果您只期望拥有几千个用户,那么将图像和数据库存储在文件系统中的 API 服务器上不一定是错误的,但如果系统的需求增长,您可能会遇到成长的烦恼。
Google 的站点可靠性工程师课堂有一门关于构建分布式图像服务器的课程,这与您想要做的问题是相邻的问题:https://sre.google/classroom/imageserver/