您的位置:首页 > 其它

多个应用程序同时编辑一个文件不同部分后能否合成?

2013-09-20 17:28 176 查看
问题根源来自一个客户,客户的问题是,我有一个文件需要同时被多人访问,怎么实现?性能怎么样?有问题就有答案,只是目前这个答案对我还不太清晰,试着探讨以下。

手头正好有一本冬瓜头的《大话存储》,就抱着一丝希望,翻了翻,找到关于该问题的一些描述。以下是《大话存储》中的描述。

集群中的分布式锁机制

在单个节点的单一操作系统内,存在多个应用程序进程,如果某时刻,应用程序A试图访问一个记录文件F,F中包含有地址薄和地址信息,A将其打开之后,又有一个应用程序B将其打开,此时,F同时存在于A和B的Buffer内。之后,A将F中的对应的某人的电话号码做了更改,并且将更改写入了F。此时如果B也对F中的电话号码做更改并保存,那A做的更改将丢失。

这显然是一个很大的问题。所以,所有文件系统都会提供一种API,让一个程序在打开一个文件的时候,顺便给这个文件家个锁,让其他程序不可以打开或者只能以只读的方式打开这个文件,只有当加锁的程序退出后,或者将锁释放了之后,其他程序才可以修改这个文件。即,一旦遇到多个程序需要修改同一个文件,那么这些程序只能排队一个一个来,如果某个程序给文件加了锁,但是却迟迟不作为,比如操作员离开,而其他的操作员终端就只能等待,那么时间就白白的浪费了。

不锁不是,锁也不是,那么有没有两全其美的解决办法呢?当然有。

1、 字节锁(Byte Range Lock)

应用程序可以不要就加锁整个文件,而只是加锁文件中的某段或者某几段字节,这些字节是这个程序当前读入并且打算更改的。而其他程序如果访问这个文件的字节偏移不处于被加锁的范围内,则多个程序就可以进行并行的读写这个文件的不同部分,互补影响。这样,锁的粒度就被极大的降低了,对应地可以并行读写同一个文件的程序也就可以并行的执行了,提高系统的性能。

2、 并行冲突访问锁仲裁

在字节锁的基础上,如果有多个应用程序同时访问同一段字节,或者访问的字节段有交集,那么一次只能够由一个应用程序掌握对这段交集的更改权,其他应用程序可以处于只读状态。

应用程序一般不会被设计为多个进程进程同时写同一个文件的同一段字节,如果真的需要这种应用场景,那么必须加锁—更改—释放,之后由其他程序在加锁—更改—释放,这样才可以保持一致性。

以上是书中内容,给我的思考是:如果同一个文件,不同的应用程序在更改不同的部分,那么是可以同时的进行的,那么更改完成后可以将做的所有不同更改进行合成形成一个最终的版本吗?比如有一个视频原文件,需要进行配音,画面的处理,假如这两个过程同时进行,两个过程都完成后,可以合成得到一个画面和配音都更改好了的视频文件吗?希望大家多多提意见。

同一个文件的被不同的用户同时访问,性能问题怎么样?这个问题在NAS集群中应该不用担心,NAS集群毕竟是多节点,每个节点都可以提供一定的带宽。如果是单台的NAS Server,应该会出现一定的性能瓶颈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐