没有Akka的反应性服务和可扩展性

1 asynchronous scala future reactive-programming akka

我已经阅读了Reactive Manifesto几次,并试图绕过所有这些反应性,异步,无阻塞的东西.很清楚如何在Actors之上构建可扩展系统,但是如果我会Future在我的代码中主动使用scala,那么我将在可扩展性,异步执行执行方面获得相同的效果,每个方法都会接受或返回Future.这种服务是否具有可扩展性和响应性?让我们说在这个问题中,我对事件驱动和弹性部分服务并不感兴趣.

Ran*_*ulz 8

这样的回答反映了使用阿卡在斯卡拉和我的经验ActorFuture类型.我不认为自己是专家,但是我已经使用这些库做了一些系统,并且觉得我开始意识到如何使用它们.

使用Actor vs. Future的选择是关于所需并发性的本质.期货在Monagically和DAG结构图中构成,使某些计算结构非常优雅.但它们有严重的局限性.基本上,在Future中同时执行的计算必须是自包含的(或者至多只引用不可变的外部状态),或者你还没有解决线程间干扰所有伴随风险的问题,例如死锁,竞争条件,不可预测的行为或数据结构损坏.

当你的计算涉及长寿,可变的状态时,一个Actor会封装它,可以安全地防止腐败和竞争条件.另一方面,actor不是可组合的,但它们确实为构建交互计算网络提供了很大的灵活性.这是正确的,只要您不限制actor始终响应,并且仅将它们(对请求的响应)发送回接收请求的actor.如果您只向请求的actor发送响应,那么您只能使用树形结构的角色间交互模式.

在任何真实的,非平凡的系统中,你很可能同时使用形式主义,即未来和演员.