Ale*_*sti 1 architecture asp.net entity-framework
我一直在使用由ASP.NET 5驱动的社交网络超过六个月.
当我想到我的架构时,我意识到它存在各种各样的问题.最大的问题之一是,如果服务器出现故障(无论出于何种原因),在中断时发生的任何操作都将丢失.例如,用户删除图片相册以及与其相关联的图片.系统删除专辑记录,然后服务器崩溃.重新启动后,删除操作将丢失,然后我的数据库将被多余的图片记录混乱,我的存储服务器将有冗余的图像文件.
什么样的架构可以让我解决这个问题?
如果您真的希望这会成为一个问题,您可能希望在服务器上花更多钱.
话虽如此,这种边缘情况总是存在的.在客户端和服务器之间始终存在HTTP请求,或者在服务器关闭时刚刚到达代码的第一行 - 您没有存储请求数据,因此您无法重复它.
关于这个原则,你真的无能为力.
您可以使用事务来让数据库操作保持原子状态(即所有这些操作都发生或者没有发生),但是当您需要在数据库和文件系统中进行工作以保持同步时,您会遇到不同的问题.
但是你可以介绍一些工作系统."删除相册作业"可能如下所示:
作业系统,例如通过Hangfire,一步一步地处理这些工作 - 记录它的位置.现在,例如,相册中的照片已从文件系统中删除,但相册仍存在于数据库中,服务器也会关闭.现在,下次重新启动时,服务将再次启动,并且将继续从剩下的位置处理作业.
在与在数据库中创建作业相同的事务中,您可以将相册标记为"DeletionPending",因此不再向用户显示.
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |