构建分布式系统的目的是增加系统容量,提高系统的可用性。说白了就是干两件事。一是提高整体架构的吞吐量,服务更多的并发和流量,二是为了提高系统的稳定性,让系统的可用性更高。 1、如何提高整体架构的吞吐量,服务更多的并发和流量? 1) 提高系统性能的常用技术
- 缓存系统:在分布式系统中,添加缓存可以有效提高系统的访问能力;
- 负载均衡:负载均衡可以使用多台机器来共同分担一部分流量请求,从而增加系统的横向扩展能力;
- 异步调用:异步系统通过消息队列来对请求做排队处理,从而增加系统的吞吐量(但这回损失了一定的实时以及增加数据的风险);
- 数据镜像:把数据复制多份,通过不同的客户端处理请求(多个节点可能会出现数据一致性问题);
- 数据分区:把数据按一定的方式分成多个区,按不同的区域处理请求(这会增加系统的复杂度)。
- 服务拆分:主要为了隔离故障和重用服务模块(但会引入服务间调用依赖问题);
- 服务冗余:可以去除单点故障,支持弹性伸缩,故障迁移(对于“有状态”的服务实现起来会比较复杂);
- 限流降级:损失小部分,保全整体的措施(当系统压力扛不住时,通过限流或者功能降级的方式停掉部分服务,或拒绝部分用户,确保整体架构不会挂掉);
- 高可用架构:从冗余架构的角度保障可用性。如:灾备多活;
- 高可用运维: 具备足够流畅的软件发布能力、足够多的自动化测试、相应的业务灰度发布,以及线上系统的自动化控制,如:DevOps中的CI/CD(持续集成/持续发布)。
构建分布式系统有五个关键技术,它们分别是:
- 全栈系统监控;
- 服务 / 资源调度;
- 流量调度;
- 状态 / 数据调度;
- 开发和运维的自动化(把前四项都做到了,才有可能实现)。
- 整体架构监控:如果没有一个好的监控系统,那么自动化运维和资源调度管理只可能成为一个泡影,因为监控系统是你的眼睛。没有眼睛,没有数据,就无法进行高效的运维。所以说,监控是非常重要的部分。这里的监控需要对三层系统(应用层、中间件层、基础 层)进行监控;
- 资源调度管理:应用层的自动化运维需要基础层的调度支持,也就是云计算 IaaS 层的计算、存储、网络等资源调度、隔离和管理;
- 架构软件管理:服务之间有依赖,而且有兼容性问题,所以,整体服务所形成的架构需要有架构版本管理、整体架构的生命周期管理,以及对服务的编排、聚合、事务处理等服务调度功能;
- DevOps:分布式系统可以更快速地更新服务,但是对于服务的测试和部署都会是挑战。所以,还需要 DevOps 的全流程,其中包括环境构建、持续集成、持续部署等;
- 自动化运维:有了 DevOps 后,我们就可以对服务进行自动伸缩、故障迁移、配置管理、状态管理等一系列的自动化运维技术了;
- 服务治理:服务拆分、服务调用、服务发现、服务依赖、服务的关键度定义......服务治理的最大意义是需要把服务间的依赖关系、服务调用链,以及关键的服务给梳理出来,并对这些服务进行性能和可用性方面的管理;
- 流量控制:最后是我们的流量控制,负载均衡、服务路由、熔断、降级、限流等和流量相 关的调度都会在这里,包括灰度发布之类的功能也在这里。