一. 分布式系统可解决的问题
1. 解决稳定性可用性问题。
2. 解决单机处理能力差问题。
二. 分布式系统的发展历程
1. 单体结构
所有代码在一个系统中,所有模块在一个应用中。 一个数据库,一个文件系统,一个应用系统。
优势:事务简单,不存在远程调用问题,不存在网络问题,适合微型系统。
问题: 一个模块有issue可能导致整个系统都不可用,可用性差,数据库压力大,性能差。
2. 垂直结构
将系统按照业务模块分进行垂直拆分成多个系统,每个垂直子系统为一个单体结构。
优势:数据库压力得到缓解,性能得到提升。
问题:数据库表的join受到限制,存储过程实现逻辑受到限制,会有很多重复代码。
3. 分布式结构
将可复用的业务水平拆分开当做公用服务,并下层作为低层服务。
优势:抽象部分逻辑减少代码量。
问题:系统更加复杂。
4. 微服务架构
将公共的服务集合成一个系统。
三. 分布式系统成本
分布式事务问题,在多个系统中如何实现事务一致性。
不允许服务有状态,服务有多个实例运行在不同的服务器中,这些多个实例的内部是不能有中间状态的。
服务的依赖关系变得复杂,调用关系非常复杂,定位问题变得复杂,维护成本变高。
分布式会话,需要一个session管理所有的会话,不能让用户在一台机器上登录了,其他机器上没有session信息。
分布式job,定时任务不能在每台机器上都出发,应该用主从架构,只让master机器run job,master挂了选举一个master出来。
四. 单体架构升级到分布式架构的可能遇到的问题
1. 新功能和旧系统维护的问题
新需求在新旧版本都开发成本高,旧bug fix在新系统中也需要fix成本高。
2. 业务完整性问题
migration 时候不知道某些功能是否有用,导致部分功能缺失。
3. 团队协作方式改变
不同的调用层,是按照功能