我正在构建一个Scala REST API来处理订单,并且我一直遵循https://github.com/alexandru/scala-best-practices以确保遵循最佳实践,因为我编写任何Scala代码已有一段时间了。
到目前为止,我所有的代码都是线程安全且无阻塞的,并在适当的地方使用Future并始终保持不变。现在,我已经集成了一个可以处理订单创建的数据存储,我的问题是我该如何处理交易(例如同时创建两个完全相同的订单)?
在维护线程安全并避免非阻塞代码的同时,我可以遵循任何模式或示例来处理事务吗?我来自Java背景,通常会使用同步块,但不会尊重:
4.8。 https://github.com/alexandru/scala-best-practices/blob/master/sections/4-concurrency-parallelism.md
满足阿姆达尔定律。与锁同步极大地限制了并行化的可能性,因此也限制了垂直可伸缩性。读取令人尴尬地可Paralellable,所以请始终避免这样做:
def fetch = synchronized { someValue }
使用更好的同步方案,这些方案不涉及同步读取,例如原子引用或STM。如果您无法执行此操作,请使用适当的抽象完全避免这种情况。
我希望您能提供指导和/或实现此目标的示例。