Web 应用程序如何受并发影响?
How is a web app is affected by concurrency?
有人可以解释并发性如何影响 Web 应用程序吗?
任何帮助!
谢谢。
这是一个非常广泛的问题,但应用程序基础并发错误的常见来源是:
- 数据库级别(MVCC)
- 运行时级别(编程语言、并发模型、线程、锁、竞争、条件等)
- Web 服务器级别(多个客户端同时在同一端点上请求)
- 逻辑:CQRS(最终一致性,写入和读取是分开的,读取可以stale/lagged)
- 逻辑:分布式事务(想象一下有像 redis 这样的读取缓存和像 mysql 这样的存储,你如何保证它们同步?)
我怎么推荐Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems都不为过,它为您关注的所有重要概念提供了基础!
使用 CQRS 的具体示例:
- 有一个数据库存储
- 只有一个作家
- 有一个Reader
事务向写入器发出持久信息请求,然后立即从该 reader 中读回。根据您的 CQRS 实现,写入和读取之间可能只有最终一致的保证,这意味着读取可能看不到刚刚写入的数据!当然,这可能不是问题,具体取决于您的客户。
有人可以解释并发性如何影响 Web 应用程序吗?
任何帮助! 谢谢。
这是一个非常广泛的问题,但应用程序基础并发错误的常见来源是:
- 数据库级别(MVCC)
- 运行时级别(编程语言、并发模型、线程、锁、竞争、条件等)
- Web 服务器级别(多个客户端同时在同一端点上请求)
- 逻辑:CQRS(最终一致性,写入和读取是分开的,读取可以stale/lagged)
- 逻辑:分布式事务(想象一下有像 redis 这样的读取缓存和像 mysql 这样的存储,你如何保证它们同步?)
我怎么推荐Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems都不为过,它为您关注的所有重要概念提供了基础!
使用 CQRS 的具体示例:
- 有一个数据库存储
- 只有一个作家
- 有一个Reader
事务向写入器发出持久信息请求,然后立即从该 reader 中读回。根据您的 CQRS 实现,写入和读取之间可能只有最终一致的保证,这意味着读取可能看不到刚刚写入的数据!当然,这可能不是问题,具体取决于您的客户。