所有栏目 | 云社区 美国云服务器[国内云主机商]
你的位置:首页 > 云社区 » 正文

如何利用Actor模型解决并发事务问题?

发布时间:2020-04-15 16:14:26

资讯分类:模型  事务  并发  b表  模型  数据  消息
如何利用Actor模型解决并发事务问题?

搞面向对象语言的都知道一句话---万物皆对象,而Actor模型的设计理念也有相类似的一句话---万物皆Actor!

高并发环境下,不加锁几乎肯定会有数据错误的隐患,而加锁有很大可能引起死锁,致使服务处于假死状态,而且加锁会极大的影响高并发性能!

Actor模型是什么?

每个任务处理中心可被认为是一个Actor,而Actor内部的状态都由本身自己维护,只有接受到消息的时候才能触发行为改变,其实Actor就是一个行为消息系统,通过消息传递来通知Actor改变数据(比如说,一个status=2的数据,需要改成status=3,在一般的线程模型里,需要加悲观锁,乐观锁啥的进行控制,但是使用Actor模型,Actor1做完数据处理(status=2)之后,发消息给Actor2,把数据状态改为3!这个过程中Actor1和Actor2并没有共享数据,所以没有数据安全问题)!

Actor模型通常使用基于事件的调用方式,只有在消息过来的时候才使用线程进行任务处理,如果是有共享资源的使用(存在性能安全问题),则Actor会维护一份有顺序的消息队列,来顺序性的处理消息!

怎么使用Actor模型处理高并发事务呢?

每个线程相当于一个Actor,彼此之间不会共享内存,线程(Actor)之间的数据通信都是用消息传递的方式!

比如两个事务操作A,B表的数据,传统方式应该是对事务加锁,避免被不同方法调用时候的数据安全情况,但是这样加锁很容易发生死锁的,原因参考另一篇回答(https://www.wukong.com/question/6543175644845441293/),如果使用Actor模型,将A,B的数据更改分为两个行为,并发送消息给同一个Actor,因为消息队列是FIFO的,处理具有顺序性,不会有锁表的风险存在!

actor模型可以说是分布式系统处理的很好的模型了,其中MapReduce和Akka都是基于这种模型,Erlang和go中也有大量的实现!还是值得关注的,更多的技术分享,敬请关注。。。

留言与评论(共有 0 条评论)
   
验证码:
Top