1 关于分布式系统
1.1 介绍
我们常见的单体结构的集中式系统,一般整个项目就是一个独立的应用,所有的模块都聚合在一起。明显的弊端就是不易扩展、发布冗重、服务治理不好做。
所以我们把整个系统拆分成若干个具备独立运行能力的计算机服务的集合,而从用户的角度看,是一个完整的系统,但实际上,它是一个分布式服务的集合。
分布式系统主要从以下几个方面进行裂变:
- 应用可以从业务领域拆分成多个module,每个module还可以再按项目结构分成接口层、业务层、数据访问层;当然也可以按访问入口进行拆分,如移动、桌面、Web端访问的是不同的类型接口服务;
- 数据库可以按业务类型拆分成多个实例,还可以对单库或单表进行分库分表;参考我的这篇《分库分表》
- 增加一些中间件,来保证分布式系统的高可用,如分布式缓存、搜索服务、文件服务、消息队列、非关系型数据库等中间件;
1.2 优势和不足
分布式系统可以解决集中式不便扩展的弊端,提供了便捷的扩展性、独立的服务治理,并提高了安全可靠性。随着微服务技术(Spring Cloud、Dubbo) 以及容器技术(Kubernetes、Docker)的大热,分布式技术发展非常迅速。
不足的地方:分布式系统虽好,但也带来了系统的复杂性,如分布式事务、分布式锁、分布式session、数据一致性等都是现在分布式系统中需要解决的难题,虽然已经有很多成熟的方案,但都不完美。
分布式系统的便利,其实是牺牲了一些开发、测试、运维 成本低,让工作量增加了,所以分布式系统管理不好反而会变成一种负担。
2 分布式事务
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
分布式场景下一次完整的操作由不同的action组成,这些actions可能分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些action要么全部成功,要么全部失败。保证单个完整操作的原子性。
本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
2.1 CAP理论
CAP 定理(也称为 Brewer 定理),指的是在分布式计算环境下,有3个核心的需求:
1、一致性(Consistency):再分布,所有实例节点同一时间看到是相同的数据
2、可用性(Availability):不管是否成功,确保每一个请求都能接收到响应
3、分区容错性(Partition Tolerance):系统任意分区后,在网络故障时,仍能操作
C