学习分布式系统架构3
分布式事务场景
将一个大的应用系统拆分为多个可以独立部署的应用服务,需要各个服务远程协作才能完成某些事务操作,这就涉及分布式事务的问题。总的来讲,分布式事务会在3种场景下产生,分别是跨JVM进程、跨数据库实例和多服务访问单数据库。
1、跨JVM进程
将单体项目拆分为分布式、微服务项目之后,各个服务之间通过远程REST或者RPC调用来协同完成业务操作。典型的场景是商城系统的订单微服务和库存微服务,用户在下单时会访问订单微服务。订单微服务在生成订单记录时,会调用库存微服务来扣减库存。各个微服务部署在不同的JVM进程中,此时会产生因跨JVM进程而导致的分布式事务问题。商城系统中跨JVM进程产生分布式事务的场景
2、跨数据库实例
单体系统访问多个数据库实例,也就是跨数据源访问时会产生分布式事务。例如,系统中的订单数据库和交易数据库放在不同的数据库实例中,当用户发起退款时,会同时操作用户的订单数据库和交易数据库(在交易数据库中执行退款操作,在订单数据库中将订单的状态变更为已退款)。由于数据分布在不同的数据库实例中,需要通过不同的数据库连接会话来操作数据库中的数据,因此产生了分布式事务。商城系统中跨数据库实例产生分布式事务场景
将一个大的应用系统拆分为多个可以独立部署的应用服务,需要各个服务远程协作才能完成某些事务操作,这就涉及分布式事务的问题。总的来讲,分布式事务会在3种场景下产生,分别是跨JVM进程、跨数据库实例和多服务访问单数据库。
1、跨JVM进程
将单体项目拆分为分布式、微服务项目之后,各个服务之间通过远程REST或者RPC调用来协同完成业务操作。典型的场景是商城系统的订单微服务和库存微服务,用户在下单时会访问订单微服务。订单微服务在生成订单记录时,会调用库存微服务来扣减库存。各个微服务部署在不同的JVM进程中,此时会产生因跨JVM进程而导致的分布式事务问题。商城系统中跨JVM进程产生分布式事务的场景
2、跨数据库实例
单体系统访问多个数据库实例,也就是跨数据源访问时会产生分布式事务。例如,系统中的订单数据库和交易数据库放在不同的数据库实例中,当用户发起退款时,会同时操作用户的订单数据库和交易数据库(在交易数据库中执行退款操作,在订单数据库中将订单的状态变更为已退款)。由于数据分布在不同的数据库实例中,需要通过不同的数据库连接会话来操作数据库中的数据,因此产生了分布式事务。商城系统中跨数据库实例产生分布式事务场景